27 de marzo de 2012

Bash Script: Transferencias de zonas públicas

Hoy traigo un post sobre DNS y transferencias de zonas, tanto de forma teórica como práctica, pero también he de decir que en esta entrada no voy a descubrir nada nuevo sobre el protocolo o las maneras de explotarlo. Entremos en materia...

Introducción

El protocolo DNS es utilizado para la resolución de direcciones IP a nombres de hosts y dominios, de forma directa (nombre -> IP) e inversa (IP -> nombre). Tradicionalmente, utiliza el puerto 53 del protocolo de transporte UDP para el envio y recepción de consultas, aunque últimamente han surgido proyectos para la utilización de TCP para proteger dichas conexiones.

Cada dominio es considerado dentro del servidor como un ente independiente que recibe el nombre de zona y entre los registros que se pueden definir dentro de las zonas podemos encontrar:
* A. Resolución de nombre a IP.
* CNAME. Alias para un mismo host.
* PTR. Punteros para resolución inversa.
* MX. Servidores de correo electrónico.
* SRV. Localizador de servicios.
* TXT. Información en texto plano.
Dentro de la configuración de cada dominio, se define el campo SOA (Start of Authority) que se utiliza para realizar un control de cambios sobre dicha información. Puede ser configurado de manera manual o automática pero hay que tener en cuenta que a través de este valor, los servidores determinarán si la información es más reciente que la que tienen almacenada.

Debido a la estructura distribuida del protocolo, se utilizan las denominadas transferencias de zonas para retransmitir la información de servidores maestros hasta otros secundarios. Con ello se asegura la disponibilidad de los nombre de dominio consiguiendo una estructura jerarquizada de tipo árbol.


En caso que las zonas no estén correctamente configuradas, una tercera persona es capaz de obtener dicha información a través de los servidores maestros.

Consultas AXFR

Como comentaba anteriormente, las transferencias de zonas se utilizan para retransmitir los registros DNS entre servidores maestros y esclavos. Existen varias consultas que pueden ser realizadas a dichos servidores: completas (AXFR) e incrementales (IXFR).

Generalmente las transferencias de zonas se realizan utilizando el puerto 53 del protocolo TCP, aunque depende de la configuración del servidor así como de las herramientas que utilicemos.

Primero obtenemos la dirección IP del dominio


Se realiza una consulta SOA y queda a la espera de la respuesta, así se asegura que dispone de la última información sobre el dominio.


Posteriormente se realiza la propia consulta AXFR para obtener la información. En caso de visualizar la captura de red con Wireshark, nos muestra una petición y una respuesta para dicha consulta.


Podemos comprobar con más detalle que se establece la conexión


Se realiza la propia transferencia de zona, en la que se van añadiendo paquetes para formar la consulta.


Y se cierra la conexión


Herramientas

nsloouk

Nslookup es una de las herramientas que tradicionalmente se ha utilizado para la resolución de nombres DNS. Aunque se pueden añadir opciones al comando, su mayor potencial la obtenemos de forma interactiva:

Comandos: # nslookup
                    > set all
                    > dominio


Podemos realizar una consulta para obtener los DNS asociados al dominio

Comandos: > set q=NS
                    > dominio


O consultar cúal es el servidor maestro

Comandos: > set q=HINFO
                    > dominio


En este caso las transferencias de zonas no parecen funcionar, si lanzamos el comando ls o si visitamos el manual de la herramienta, vemos que no esta implementado.


Como comentaba anteriormente, también es posible realizar algunas consultas desde la línea de comandos


host 

La herramienta host también nos permite realizar consultas específicas sobre determinados registros, así como realizar transferencias de zonas.

Comando: host -t NS domain


Comando: host -l domain



En este caso, obtenemos un time out porque no ha conseguido conectar con el servidor, pero no significia que no puedan realizarse.

dig

Dig es un cliente en línea de comandos e interactivo para la resolución de nombres de dominios, viene incluida en la suite BIND y reemplaza a las herramientas anteriormente descritas. Debido al potencial y flexibilidad de la herramienta, es muy utilizado para la resolución de problemas relacionados con servidores DNS.

Para obtener los servidores de nombres asociados con el dominio objetivo, utilizaremos el comando:

Comando: dig NS domain


Para realizar la transferencia de zonas propiamente dicha utilizaremos:

Comando: dig axfr @NS domain


Automatización

Podemos utilizar las herramientas aqui descritas para crear scripts con los que automatizar y filtrar las consultas. En mi caso he creado un script en bash, ZoneTransfers.sh, que utiliza dig para obtener los servidores de nombres e intentar recopilar la información del dominio que pasemos como argumento del mismo.


Me he inspirado en el siguiente script del amigo Zerial, para obtener un listado único de nombres de hosts así como de direcciones  relacionadas con el dominio objetivo.




Recientemente he estrenado un repositorio público en Github donde almacenar los distintos scripts que vaya desarrollando, en él podeis encontrar este último así como un pequeño archivo README con la descripción del mismo.

Tened en cuenta que la transferencia de zonas es un ataque activo dado que consultamos directamente los servidores DNS objetivos. Esta entrada se publica de modo informativo y para un uso educativo del protocolo y las herramientas disponibles. En ningún caso se incita a los lectores a realizar dichas consultas y no me responsabilizo del uso que terceras personas puedan dar de esta información, así como los daños que puedan provocar.

Un saludo, Brixton Cat.

No hay comentarios:

Publicar un comentario

Bienvenid= si quieres dejar un comentario