Qué es DNS Rebinding

Mucha gente tiene preguntas sobre el concepto de ataques Rebinding de DNS, y muchass de las explicaciones profundizan demasiado en los detalles. Aquí hay una explicación sencilla que debería ayudar a aquellos que tienen problemas para entenderlo.

DNS Rebinding te permite enviar comandos a sistemas detrás del firewall de la víctima, siempre y cuando hayan llegado de alguna manera a un dominio de tu propiedad pidiendo un recurso, y seas capaz de ejecutar JavaScript en su navegador.

Funciona así.

  1. Si consigues que alguien haga una petición a un dominio de tu propiedad, puedes darle una respuesta DNS que asigne host.domain a una dirección IP, por ejemplo, 1.2.3.4.
  2. Si estableces el TTL de esa respuesta muy bajo -como 10 segundos- obligas al sistema a comprobar constantemente cuál es la IP de host.domain.
  3. Si sabes (o crees) que la víctima tiene un determinado tipo de sistema en su red interna -como un router o un dispositivo IoT- que podrías controlar si estuvieras en la misma red, puedes utilizar un fragmento de JavaScript malicioso que se ejecute en su navegador (porque ha llegado a tu sitio) para hacer peticiones a ese sistema, por ejemplo, https://host.domain/set-dns-server?server=6.7.8.9.
  4. Cuando este comando se envía por primera vez, se enviará a la IP 1.2.3.4, porque esa fue la dirección IP inicial que enviaste a la víctima para host.domain.
  5. Cuando el cliente actualiza el registro DNS (en 10 segundos, porque eso es lo que has establecido en el TTL), respondes con 192.168.1.1, ¡así que el navegador de la víctima envía https://host.domain/set-dns-server?server=6.7.8.9 a 192.168.1.1!
  6. Si el router es vulnerable a lo que envías (quizás usando credenciales por defecto o sin credenciales), actualizará el servidor DNS de ese router para que apunte al tipo malo, que probablemente seas tú de nuevo.
  7. Repite como quieras para encontrar la IP correcta internamente, y/o para enviar diferentes tipos de comandos a diferentes dispositivos internamente.

Básicamente, haces que te pidan algo, les das un mapeo de nombre-TTL corto a IP, inyectas algo de JavaScript en su navegador que hace peticiones maliciosas, y luego cambias la IP a través de la actualización de DNS de tu lado para que apunte a todas las IPs de destino detrás de su firewall.

Me recuerda a lo que especulé en 2016, donde uno podría usar SSRF para hacer lo mismo a los servicios de dispositivos IoT expuestos.

Lo que hace que el reencuentro de DNS sea tan interesante es que aprovecha dos características importantes de la estructura fundamental de Internet, que no van a cambiar pronto:

  • El hecho de que los navegadores visitantes ejecutan su JavaScript por defecto (incluyendo cosas como los ganchos BeEF), y…
  • La capacidad de establecer TTLs bajos en las respuestas DNS para que pueda rotar constantemente las IPs mapeadas

Cómo defenderse

Dado que el ataque se aprovecha de estos componentes fundamentales de Internet, las defensas no son triviales. Por lo general, incluyen:

  • Restringir la ejecución de JavaScript (para que el atacante no pueda forzar las peticiones).
  • Fijar IPs a nombres (para que no puedan rotar).
  • No aceptar TTLs por debajo de un determinado tamaño (para que no puedan rotar).
  • No aceptar respuestas DNS (para dominios externos) con direcciones privadas (para que no puedan rotar a recursos internos).
  • Probablemente otros también…

Manténgase seguro ahí fuera con los ataques DNS Rebinding