Es posible que el tráfico DNS se filtre fuera del túnel VPN en Android
Confirmación de fugas múltiples de DNS
- Recientemente se descubrió una posible fuga de DNS múltiple en Android
- Proviene de un error nativo de Android y solo afecta a ciertas apps
- El 22 de abril, lunes, se confirmó la fuga de DNS a partir de un reporte de un usuario de Reddit
- El usuario encontró que, con la configuración "Bloquear conexiones sin VPN" habilitada, al desactivar y activar el VPN se escapaban consultas DNS
- Se inició de inmediato una investigación interna y se pudo verificar el problema
- La investigación reveló más escenarios en los que Android puede provocar fugas de DNS
Hallazgos
Se identificaron los escenarios en los que el tráfico DNS puede filtrarse en Android:
- Cuando el VPN está activo sin que haya un servidor DNS configurado
- Durante un corto intervalo cuando la app VPN está reconfigurando el túnel o se fuerza su cierre/fallo
La fuga parece limitarse a llamadas directas a la función C getaddrinfo:
- En los escenarios listados, las apps que usan este método para resolver nombres de dominio provocan fugas
- En apps que solo usan APIs de Android como
DnsResolverno se detectaron fugas - Un ejemplo de app que puede usar
getaddrinfodirectamente es el navegador Chrome
Esto aplica independientemente de que estén habilitados Always-on VPN y Block connections without VPN:
- No es un comportamiento esperado del sistema operativo, por lo que debe corregirse en el upstream del OS
Se pudo confirmar esta fuga en varias versiones de Android (incluyendo la más reciente, Android 14)
Mejoras
Actualmente la app no configura el servidor DNS cuando está en estado bloqueado:
- Si la app no logra configurar el túnel de forma recuperable, pasa a estado bloqueado
- En ese estado, el tráfico deja de salir del dispositivo
- Sin embargo, como no se configura un servidor DNS en ese estado, puede ocurrir la fuga DNS descrita
- Temporalmente se planea establecer un servidor DNS falso para eludir el bug del OS
- Se espera un release pronto que incluya esta corrección
Mitigar la fuga durante la reconexión del túnel desde la app es más difícil:
- Aún se sigue buscando una solución
- Es posible minimizar la cantidad de reconfiguraciones del túnel, pero de momento no creemos posible prevenir completamente esta fuga
Debe dejarse claro que ningún app VPN debería requerir estas mitigaciones:
- No está mal que una app use
getaddrinfopara resolver nombres de dominio - En cambio, para proteger a todos los usuarios de Android independientemente de la app usada, este problema debe resolverse en el OS
Se reportó el problema a Google y se propusieron mejoras, esperando que se resuelva lo antes posible
Pasos para reproducir
Estos pasos reproducen el segundo escenario anterior, donde el usuario VPN cambia la configuración del túnel (por ejemplo, cambiar a otro servidor o modificar el DNS):
- Se usa la app WireGuard, porque es la implementación de referencia de VPN en Android
- Hay que considerar que la fuga probablemente también pueda reproducirse con otras apps VPN de Android
- Se usa Chrome para disparar la fuga, ya que es una de las apps confirmadas como usuaria de
getaddrinfo
-
Descargar
spam_get_requests.html -
Instalar las apps WireGuard y Chrome
-
Importar
wg1.confywg2.confen WireGuard -
Activar el túnel wg1 en la app WireGuard y conceder permisos VPN
-
En la configuración VPN de Android, habilitar "Always-on VPN" y "Block connections without VPN" para WireGuard
-
Iniciar captura de datos en el router usando
tcpdump$ tcpdump -i <INTERFACE> host <IP of android device> -
Dividir la pantalla para mostrar WireGuard y Chrome en paralelo
-
Abrir
spam_get_requests.htmlen Chrome y pulsar "Start" -
En la app WireGuard, alternar entre wg1 y wg2 repetidamente hasta que la fuga se muestre en el siguiente paso
-
Observar en el router tráfico DNS como el siguiente:
11:50:27.816359 IP Pixel-Tablet.lan.53353 > OpenWrt.lan.53: 11200+ A? 307lf5rgn6-19282-11-50-27-519z.mullvad.test.lan. (65) 11:50:27.816359 IP Pixel-Tablet.lan.48267 > OpenWrt.lan.53: 44347+ A? 307lf5rgn6-19284-11-50-27-579z.mullvad.test.lan. (65) 11:50:27.816396 IP Pixel-Tablet.lan.16747 > OpenWrt.lan.53: 44584+ A? 307lf5rgn6-19289-11-50-27-729z.mullvad.test. (61) 11:50:27.816458 IP OpenWrt.lan.53 > Pixel-Tablet.lan.53353: 11200 NXDomain 0/0/0 (65) 11:50:27.816476 IP Pixel-Tablet.lan.45727 > OpenWrt.lan.53: 40503+ A? 307lf5rgn6-19290-11-50-27-759z.mullvad.test. (61) 11:50:27.816542 IP OpenWrt.lan.53 > Pixel-Tablet.lan.48267: 44347 NXDomain 0/0/0 (65) 11:50:27.816588 IP Pixel-Tablet.lan.43821 > OpenWrt.lan.53: 36295+ A? 307lf5rgn6-19291-11-50-27-789z.mullvad.test. (61) 11:50:27.816625 IP OpenWrt.lan.53 > Pixel-Tablet.lan.16747: 44584 NXDomain 0/0/0 (61)
Aunque "Block connections without VPN" estaba habilitado, y nada debería salir del dispositivo salvo el tráfico cifrado de WireGuard, aquí puede verse cómo sale DNS en texto plano desde el dispositivo
Conclusión y recomendaciones
La fuga de DNS puede tener un impacto grave en la privacidad del usuario, y puede usarse para determinar su ubicación aproximada o averiguar qué sitios y servicios utiliza
Estos hallazgos muestran nuevamente que "Block connections without VPN" no concuerda con su nombre (o documentación) y que presenta varias fallas:
- Bajo las condiciones mencionadas arriba, una app aún puede filtrar tráfico DNS
- Al igual que se había reportado antes, aún se está filtrando tráfico de verificación de conexión
Según el modelo de amenaza, puede ser necesario dejar de usar Android para tareas sensibles o aplicar otras medidas de mitigación para prevenir fugas:
- Como el objetivo es mitigar este problema parcialmente desde la app, conviene mantener la app actualizada
Opinión de GN⁺
- Este problema es, en esencia, un bug del OS Android y debería corregirse pronto por Google; no es deseable que todos los desarrolladores de apps con capacidad VPN tengan que trabajar para resolverlo por su cuenta
- Que la opción "Block connections without VPN" no se comporte como indica la documentación y que exista fuga de DNS es un problema importante para los usuarios. Uno de los motivos principales para usar VPN es la protección de la privacidad, y esto puede exponer detalles como el historial de navegación del usuario
- La seguridad de la tecnología de túnel VPN en sí sigue siendo alta, pero quizá convenga considerar usar también soluciones de seguridad/privacidad adicionales además de VPN para prevenir fugas no intencionales del OS
- Desde el punto de vista del desarrollo de apps, aunque éstas estén implementando parches para saltarse el bug del OS, a largo plazo parece necesaria una mejora del sistema operativo para resolver el problema de fondo
- A medida que la tecnología VPN se vuelve más avanzada y masiva, este tipo de problemas de seguridad vuelve a cobrar protagonismo. En adelante, seguramente hará falta una mayor auditoría de seguridad y mejora continua de la red y las funciones VPN del OS móvil
1 comentarios
Opinión en Hacker News