DNS vulnerable

Hoy en día no hay aplicación que no utilice el DNS. Este servicio, casi tan antiguo como la propia Internet, es la base por la que podemos navegar, enviar correos o tener la web 2.0: es uno de los cimientos de las redes de ordenadores. No hay ordenador con red que no necesite configurar su DNS. A pesar de su importancia, su visibilidad es reducida y apenas se sabe de él.

¿Qué es el DNS?

El origen del DNS es nuestra escasa capacidad para recordar cosas. En los orígenes de las redes de ordenadores, para acceder al ordenador de un compañero era necesario saber la dirección IP, el equivalente a saberte el teléfono de alguien para llamarlo. Evidentemente, no se tardó mucho en escribir esa información para no olvidarlo en un fichero que se denominó “hosts”: la guía telefónica.

Con el crecimiento de la red, este fichero creció considerablemente y había que actualizarlo para disponer de la última información, llegando un momento en que no era útil ni sencillo realizar el trabajo. Buscando una solución, se plantea un sistema jerárquico en el que se delegan resoluciones (las guías de teléfonos locales): Nace el DNS.

La funcionalidad más usada del DNS permite transformar un nombre lógico (ocubom.wordpress.com) en su dirección IP alias teléfono. Por ejemplo, cuando se le pide al navegador llegar a esta página (de forma muy simplificada):

  1. El navegador pide al servidor DNS configurado la IP de ocubom.wordpress.com.
  2. Como el servidor lo ignora remite la consulta a uno de los servidores raiz. Éste servidor raíz tampoco conoce a dirección completa, únicamente su última parte (el dominio .com). Es decir, este servidor sabe qué servidor conoce las cosas que están dentro de .com
  3. El servidor de DNS vuelve a enviar la consulta al servidor de .com. Éste sigue sin saber resolverlo pero sí es capaz de contestar quién es el que se encarga del dominio “wordpress.com”
  4. El servidor de DNS remite la consulta al servidor de wordpress.com quién es capaz de traducir completamente la dirección.
  5. El servidor de DNS envia al navegador cliente la IP traducida y la almacena durante un tiempo por si se vuelve a pedir.

Este trabajo se realiza de forma reiterativa cada vez que es necesario realizar cualquier acceso.

Además de esa función básica, también es capaz de indicar qué máquina gestiona la página web, el correo del dominio, quién resuelve los nombres DNS😉

Una grieta en los cimientos

El DNS está funcionando perfectamente y siempre oculto en las sombras para la mayor parte de los usuarios. Sin embargo, hace poco se ha detectado un fallo en su diseño e implementación que permite falsificar las direcciones.

El fallo de diseño está en la naturaleza distribuida del servicio. Al preguntar por uno de los niveles de dominio se envía una identificación de consulta y un puerto. El servidor preguntado responde indicando esa misma información que se acepta como válida y queda almacenada en la caché por un tiempo. Si llega un identificador/puerto no pendiente se ignora.

Pero ¿y si alguien envía una respuesta falsa con el mismo identificador y puerto? La primera objeción es que es muy difícil que se acierte… pero se ha demostrado que los servidores no utilizan identificadores y puertos aleatorios sino predecibles. En ese caso, se podría hacer que las IPs del banco sean las de un servidor falso. Como esa resolución queda almacenada durante un tiempo, todas las peticiones a ese servidor de DNS serían redirigidas al falso servidor: se ha producido el envenenamiento de cache.

Pero lo peor no es eso. Se podría falsificar quién gestiona el correo o incluso quién resuelve los nombres. En ese caso, cada vez que se pida quién resuelve los nombres de “mibanco.es” se utilizará un servidor de nombres falso que redirige a servidores falsos.

La solución inmediata consiste en asegurar la aleatoriedad de los identificadores de petición y puertos. Además, es necesario que el generador de identificadores y puertos sea realmente aleatorio. Existen algunos test que verifican la seguridad del DNS que comprueban la aleatoriedad del servidor utilizado.

Fuentes:
  • Kriptópolis ha realizado un seguimiento a la vulnerabilidad del DNS.
  • Tooltorials es el autor del vídeo-tutorial sobre DNS
  • Wikipedia contiene información general acerca del DNS