lunes, 4 de agosto de 2008

¿Cómo prevenir el problema de la vulnerabilidad de los servidores DNS?

Hace algunos años publiqué un artículo referente a como evitar ataques DDoS (Distributed Denial of Service) en los servidores DNS. La mejor forma de prevenir problemas en un servidor DNS para impedir contaminación de caché sigue siendo la misma: configurar allow-recursion en el fichero named.conf para permitir solamente a la red local y al propio servidor realizar consultas recursivas.

Primero es importante entender que los Servidores DNS responden dos tipos de consultas:

Consultas Iterativas (no recursivas): El cliente hace una consulta al Servidor DNS y este le responde con la mejor respuesta que pueda darse basada sobre su caché o en las zonas locales. Si no es posible dar una respuesta, la consulta se reenvía hacia otro Servidor DNS repitiéndose este proceso hasta encontrar al Servidor DNS que tiene la Zona de Autoridad capaz de resolver la consulta.
Consultas Recursivas: El Servidor DNS asume toda la carga de proporcionar una respuesta completa para la consulta realizada por el Cliente DNS. El Servidor DNS desarrolla entonces Consultas Iterativas separadas hacia otros Servidores DNS (en lugar de hacerlo el Cliente DNS) para obtener la respuesta solicitada.

En la práctica, solo debe permitirse hacer consultas recursivas a los anfitriones en las redes locales

Si se utiliza la herramienta de diagnóstico de DNS Report y éste devuelve una salida similar a la siguiente:

«ERROR: One or more of your nameservers reports that it is an open DNS server. This usually means that anyone in the world can query it for domains it is not authoritative for (it is possible that the DNS server advertises that it does recursive lookups when it does not, but that shouldn't happen). This can cause an excessive load on your DNS server. Alos, it is strongly discouraged to have a DNS server be both authoritative for your domain and be recursive (even if it is not open), due to the potential for cache poisoning (with no recursion, there is no cache, and it is impossible to poison it). Alos, the bad guys could use your DNS server as part of an attack, by forging their IP address»

Significa que el servidor DNS puede permitir a cualquiera realizar consultas recursivas. Si se trata de un DNS que se desea pueda ser consultado por cualquiera, como puede ser el caso del DNS de un ISP, esto es normal y esperado. Si se trata de un servidor que solo deben consultar los anfitriones de la red local, o bien que se utiliza para propagar dominios hospedados localmente, es conveniente tomar medidas al respecto.

La forma de prevenir contaminación de caché, limitando que las consutas recursivas solo se hagan desde ciertos anfitriones, solo requiere editar el fichero /etc/named.conf, donde se añade en la sección de opciones (options) una línea que defina la red, las redes o bien los ACL que tendrán permitido realizar todo tipo de consultas.

options {        directory "/var/named";        dump-file "/var/named/data/cache_dump.db";        statistics-file "/var/named/data/named_stats.txt";        forwarders { 192.168.0.1; };        forward first;        allow-recursion { 127.0.0.1; 192.168.0.0/24; };};

Lo anterior hace que solo 192.168.0.0/24 pueda realizar todo tipo de consultas en el servidor DNS, ya sea para un nombre de anfitrión, en un dominio hospedado localmente, y otros dominios resueltos en otros servidores (ejemplo: www.yahoo.com, www.google.com, www.alcancelibre.org, etc). El resto del mundo solo podrá realizar consultas sobre los dominios hospedados localmente y que estén configurados para permitirlo.

options {        directory "/var/named";        dump-file "/var/named/data/cache_dump.db";        statistics-file "/var/named/data/named_stats.txt";        forwarders { 192.168.0.1; };        forward first;        allow-recursion { 127.0.0.1; 192.168.0.0/24; };};zone "." IN {        type hint;        file "named.ca";};zone "miredlocal" {        type master;        file "miredlocal.zone";        allow-update { none; };        allow-query { 192.168.0.0/24; };        allow-transfer { 192.168.0.2; };};zone "midominio.com" {        type master;        file "midominio.com.zone";        allow-update { none; };        allow-transfer { 200.76.185.252; 200.76.185.251; };};

Una configuración como la anterior hace lo siguiente:

  • Red Local: cualquier tipo de consulta hacia dominios externos y locales (es decir, www.yahoo.com, www.google.com, www.alcancelibre.org, además de midominio.com).

  • Resto del mundo: solo puede hacer consultas para la zona de midominio.com

De este modo se impide que haya consultas recursivas y con esto impedir la posibilidad de sufrir/participar de un ataque DDoS.

Si en la configuración de named.conf está presente lo siguiente:

query-source   address * port 53;

Debe eliminarse para permitir utilizar números aleatorios para definir los puertos que se utilizarán para realizar las consultas.

Fuente: Joel Barrios Dueñas.

Ver artículo original

Publicado con El navegador Flock