Desde el día de ayer mucha gente ha estado reportando extrañas consultas en sus servidores DNS con un rate de 2 conexiones por segundo. Estas consultas preguntan al servidor por el dominio “.”. Las consultas para “.” son consultas a los servidores de nombres raíz, estas son consultas muy pequeñas pero con respuestas bastante grandes. Este ataque utiliza la técnica DNS snooping, donde se utilizan direcciones IP falsificadas para generar consultas a un servidor DNS, despues el servidor DNS (que funciona como un amplificador) devuelve las consultas a las direcciones falsificadas causando una cadena.

En los logs de su sustema pueden ver logs parecidos a este:

Jan 19 23:58:57 ns1 named[3593]: client 76.9.31.42#10070: query (cache) './NS/IN' denied
Jan 19 23:58:58 ns1 named[3593]: client 69.50.142.110#60820: query (cache) './NS/IN' denied

Por ejemplo  del día de ayer este es el número de ataques en uno de mis servidores:

# zcat /var/log/syslog.1.gz | grep "Jan 19" | grep -c "'./NS/IN' denied"
76058

Y en lo que va del día (20/01/2009 18:02):

# grep "Jan 20" syslog | grep -c "'./NS/IN' denied"
42883

Hasta ahora la mayoría de los ataques provienen de las direcciones IP:

76.9.31.42
76.9.16.171
69.50.142.11
69.50.142.110
66.230.160.1
66.230.128.15

Por lo que sería conveniente bloquear dichas direcciones en el firewall o router, así bloqueamos el trafico antes de que llegue a nuestros servidores, y además no se llenan los logs.

Se ha publicado una herramienta en línea para verificar si su servidor DNS es objetivo para este tipo de ataques, la liga es: http://isc1.sans.org/dnstest.html.

En mi caso me devolvio algo así:

Si te encuentras con que no te da resultado satisfactorio, probablemente tu servidor DNS esta mal configurado.

Aquí les dejo como debería de ir una configuración para bind9 que previene este tipo de ataques:

// Opciones globales
options {
        directory "/var/cache/bind";

        allow-query {
                127.0.0.1;
        };

};

//Definición de zonas
zone "tuxjm.net" {
        type master;
        file "/etc/bind/pri/db.tuxjm.net.zone";
        allow-query { any; };
};

Practicamente lo que se hace se configurar en las opciones globales que solo los hosts de confianza (solo localhost) puedan utilizar este servidor como DNS cache, es decir, estamos bloqueando todas las consultas que no sean originaldas localmente, y para no bloquear consultas a nuestros dominios autoritativos o aquellos que sean de tipo master, agregaremos la sentencia allow-query {any}dentro de la definición de zona, para permitir consultas de cualquier lado para este dominio.

NOTA: Si este mismo servidor se utiliza como un dns cache para una red local, entonces es conveniente agregar la subred local a allow-query en la sección global.

Espero que este documento les sea de utilidad para verificar que su servidor DNS este seguro.