
Exfiltrar sigilosamente datos del navegador mediante DNS
Browsertunnel es una herramienta para exfiltrar datos del navegador utilizando el protocolo DNS. Lo logra abusando de dns-prefetch, una función diseñada para reducir la latencia percibida de los sitios web realizando consultas DNS en segundo plano para dominios específicos. El tráfico DNS no aparece en las herramientas de depuración del navegador, no está bloqueado por la Política de Seguridad del Contenido (CSP) de una página y, a menudo, no es inspeccionado por firewalls corporativos o proxies, lo que lo convierte en un medio ideal para el contrabando de datos en escenarios restringidos.
Es una técnica antigua: el túnel DNS en sí se remonta a los años 90, y Patrick Vananti escribió sobre su uso con dns-prefetch en 2016, pero hasta donde sé, browsertunnel es el primer cliente/servidor de código abierto y listo para producción que demuestra su uso. Dado que dns-prefetch no devuelve ningún dato al JavaScript del cliente, la comunicación a través de browsertunnel es solo unidireccional. Además, algunos navegadores deshabilitan dns-prefetch de forma predeterminada y, en esos casos, browsertunnel fallará silenciosamente.
El proyecto consta de dos partes:
html/, que codifica y envía mensajes desde el lado del cliente.Browsertunnel puede enviar cadenas de texto arbitrarias a través de DNS codificando la cadena en un subdominio, que se reenvía al servidor de browsertunnel cuando el navegador intenta resolver recursivamente el dominio.
Los mensajes más largos que no caben en un dominio (253 bytes) se dividen automáticamente en múltiples consultas, que son reensambladas y decodificadas por el servidor.
Primero, configure los registros DNS para delegar un subdominio a su servidor. Por ejemplo, si la IP de su servidor es 192.0.2.123 y desea tunelizar a través del subdominio t1.example.com, entonces su configuración DNS se verá así:
t1 IN NS t1ns.example.com.
t1ns IN A 192.0.2.123
En su servidor, instale browsertunnel usando go get. Alternativamente, compile browsertunnel en su propia máquina y copie el binario a su servidor.
go get github.com/veggiedefender/browsertunnel
A continuación, ejecute browsertunnel, especificando el subdominio a través del cual desea tunelizar.
browsertunnel t1.example.com
Para ver el uso completo, ejecute browsertunnel -help:
$ browsertunnel -help
Usage of browsertunnel:
-deletionInterval int
seconds in between checks for expired messages (default 5)
-expiration int
seconds an incomplete message is retained before it is deleted (default 60)
-maxMessageSize int
maximum encoded size (in bytes) of a message (default 5000)
-port int
port to run on (default 53)
Para descripciones más detalladas y la justificación de estos parámetros, también puede consultar el godoc.
Finalmente, ¡pruebe su túnel! Puede usar mi página de demostración aquí o clonar este repositorio y cargar html/index.html localmente. Si todo funciona, debería poder ver mensajes registrados en la salida estándar.
Para aplicaciones reales de este proyecto, es posible que desee bifurcar y modificar el código según sea necesario. Algunas ideas: