Las solicitudes y respuestas de DNS son no HTTP; son ... DNS. Consulte el estándar . La mayoría de las veces, las solicitudes y respuestas de DNS utilizan UDP : la solicitud es un paquete de IP único , y así es la respuesta.
Con UDP, cada paquete se identifica mediante:
- la dirección IP de origen
- la dirección IP de destino
- el puerto de origen
- el puerto de destino
Una solicitud de DNS del cliente C al servidor DNS S usará la dirección IP de C como fuente, S como destino, un valor de puerto aleatorio p como puerto de origen y 53 como puerto de destino (el valor de puerto estándar para el servidor DNS). La respuesta DNS usará la dirección IP de C como destino, la dirección IP de S como fuente, 53 como puerto de origen y p como puerto de destino. El cliente aceptará la respuesta como "correcta" porque utiliza p como puerto de destino, el mismo p que el utilizado por el cliente como fuente para su solicitud.
Un atacante que desee enviar información falsa de DNS al cliente C puede conocer la dirección IP de C y la dirección IP de S , y puede hacer una buena suposición sobre el momento en que el cliente enviará su solicitud. El objetivo del atacante es enviar una respuesta de DNS falsa, afirmando que proviene del servidor DNS S , pero que contiene. Sin acceso completo a las escuchas, el atacante no puede saber el valor de p , porque no puede ver paquetes. Sin embargo, los números de puerto están en un rango limitado (los números de puerto van de 0 a 65535, pero el rango real para los números asignados al azar es más pequeño y depende del sistema operativo involucrado). Por lo tanto, el atacante solo puede enviar algunos miles de paquetes IP falsificados, cada uno de los cuales contiene la información falsa, para todos los posibles valores de puerto p . El cliente los eliminará todos, excepto el que usa el valor correcto p .
El mismo concepto puede extenderse a las comunicaciones entre servidores DNS, porque se comunican entre sí y las respuestas de la caché. A menudo, es más fácil lograrlo para el atacante, ya que puede activarse el intercambio de DNS a DNS, lo que permite una sincronización precisa para el lanzamiento de sus miles de respuestas falsificadas. Cuando logra suministrar información falsa a un servidor DNS, se dice que ese servidor DNS está envenenado .
Este tipo de cosas es relativamente fácil, incluso para los atacantes de baja tecnología que no tienen habilidades de espionaje, por no hablar del poder de intercepción que se requeriría para un verdadero MitM entre el cliente y su servidor DNS, o entre servidores DNS. La razón que lo hace fácil es el uso de UDP, lo que implica que el atacante sabe todo, excepto el puerto de origen aleatorio, que vive en un rango pequeño. Si los dos servidores DNS se comunican entre sí a través de TCP , entonces el ataque es más difícil, porque inyectar datos falsos en un TCP el flujo implica adivinar los números de secuencia de conexión , que se eligen aleatoriamente en un rango de 32 bits: los "miles de paquetes" se han convertido en "miles de millones de paquetes".