Detalles

DNS es un sistema para, entre otras cosas, averiguar qué número usar para «llamar» a alguien a través de Internet. Dado que hay muchísima gente, en muchísimos lugares, no puede haber sólo un directorio. A menudo, cuando le pides un número a un servidor, éste te remite a algún otro sitio. Y cuando acudes a allí, podrías ser enviado a un tercer destino. Este proceso –“recursividad»– se repite una y otra vez, hasta que finalmente obtienes el número del nombre que te interesa.

Por supuesto, en Internet, no estás «yendo» realmente a ninguna parte. Lo que sucede en realidad, es que estás enviando mensajes y recibiendo respuestas. ¿Qué impide entonces que un CHICO MALO te envíe sus propias respuestas, con sus propios números falsos como respuesta a lo que fuera que estabas buscando?

No mucho –pero tampoco nada–.

El sistema DNS puede ser concebido como una carrera: la solicitud es enviada. Un CHICO BUENO y un CHICO MALO quieren conseguir que se confíe en sus respectivas respuestas. El CHICO BUENO parte con una ventaja: él ve la solicitud, y dentro de ella aparece un número secreto, un número entre cero y sesenta y cinco mil. La carrera no está ganada hasta que alguien cruza la línea de meta con el número secreto, y aunque el CHICO MALO podría adivinarlo, sólo tiene 1 entre 65536 posibilidades de acertar. Peor aún, ¡el ganador de la carrera tiene la potestad de decidir cuánto tiempo pasará hasta la próxima carrera! Haciendo números es fácil ver que se necesitarían meses, incluso años para que el CHICO MALO finalmente ganara una carrera.

Sin embargo, existen tres problemas. Los dos primeros eran ya bastante conocidos. El tercero es muy nuevo.

En primer lugar, el CHICO MALO es quien da el pistoletazo de salida. Él decide cuándo sale la solicitud –es decir, no puede saber el número secreto, pero en realidad sabe que la carrera ha comenzado antes que el CHICO BUENO–.

En segundo lugar, el CHICO MALO no está solo. Puede tener en la carrera a tantos «corredores» como quiera –ésta sólo termina cuando alguien llega con el número secreto correcto–. El CHICO MALO puede probar suerte con un número equivocado tras otro y, hasta que el CHICO BUENO no aparezca con el correcto, puede seguir así indefinidamente. Si le da tiempo a probar con un centenar de números, las probabilidades pasan de una entre sesenta y cinco mil a una entre seiscientas cincuenta y cinco.

Pero esas son probabilidades bajas todavía, y si pierde, podría tener que esperar un día para volver a intentarlo.

O tal vez no.

Lo nuevo es que, de hecho, el CHICO MALO no tiene que esperar para empezar otra carrera. El DNS, de hecho, se parece más a una carrera de relevos que a un sprint. Recuerda, tú envías una petición a un servidor, y deberías obtener una respuesta como: «¿www.foobar.com? Claro, aquí está la dirección IP que debes usar». O bien podrías obtener un mensaje que dice: «¿www.foobar.com? No sé, pregúntale a ns1.foobar.com, aquí tienes su dirección». Esto es la recursividad. No es un error, o una característica poco utilizada. El DNS te envía siempre a diferentes servidores para encontrar un registro –así es como trabajan los servidores de las «.com»–.

Eso sí, existe un límite: no funcionará cualquier otro nombre como respuesta –de lo contrario, yo podría responderte «¿www.foobar.com? Oh, eso está alojado en www.google.com. Aquí tienes su dirección», y tendrías que creerme (hace once años, esto funcionaba)–. Sin embargo, los nombres cercanos a www.foobar.com1.foobar.com, 2.foobar.com, 3.foobar.com— están, por decirlo de alguna manera, «en la misma jurisdicción»1. La referencia a un nombre «de la misma jurisdicción» será siempre acatada.

Y así, el ataque. Si alguien intenta atacar a www.foobar.com, no da el pistoletazo de salida para ese nombre. Después de todo, el servidor puede estar dispuesto a no salir en busca de www.foobar.com durante horas. No, él inicia carreras para 1.foobar.com, 2.foobar.com, 3.foobar.com, y así sucesivamente.

El CHICO MALO probablemente perderá estas carreras. Las probabilidades, incluso con una ventaja de cien «corredores» contra uno en cada carrera, están contra él.

Pero él puede correr tantas carreras como quiera. Y en algún momento, ganará una de ellas. Y cuando gane –cuando el CHICO MALO adivine el número secreto entre 0 y 65536–, no se limitará a dar una respuesta para el nombre aleatorio que ganó. Simplemente fingirá ignorancia: «¿83.foobar.com? No sé, pregúntale a www.foobar.com, aquí tienes su dirección. Ah, y recuerda esto hasta la próxima semana».

Él ha ganado la carrera. Él es quien tiene la palabra.

Ahora bien, se han producido algunos ataques de DNS problemáticos en el pasado. Amit Klein fue capaz de adivinar el número secreto que el CHICO BUENO debía entregar. Joe Stewart fue capaz de hacer que muchos números secretos fueran aceptados. Pero ninguno de estos ataques podía anular una carrera que ya había sido ganada. Una vez que un servidor de nombres ha almacenado –“cacheado»– el número para un determinado nombre, sencillamente no correrá otra carrera por ese mismo nombre. ¿Para qué hacerlo? ¡Ya conoce su número!

El ataque de Joe necesitará otra carrera para www.foobar.com. El ataque de Amit necesitará otra carrera para www.foobar.com.

En mi ataque, nunca participamos en una carrera por www.foobar.com. Corremos por otros nombres. Esto da muchos problemas. Dirigir el ataque resulta muy trabajoso.

Autor: Dan Kaminsky
Fecha original: 24 de Julio de 2008
Enlace original

1 En el original en inglés, «in-bailiwick» (N. del T.)