Skip to main content
DNS enumeration - técnicas y herramientas

DNS enumeration – técnicas y herramientas

Los servidores DNS podrían considerarse como el corazón y el alma de internet, ya que son los encargados de la conversión de nombres de host y nombres de dominio en direcciones IP.

Bienvenidos a un nuevo post en ByteMind, en este caso vamos a tratar varias técnicas y herramientas para realizar una enumeración del protocolo DNS (Domain Name Servers). Los servidores DNS podrían considerarse como el corazón y el alma de internet, ya que son los encargados de la conversión de nombres de host y nombres de dominio en direcciones IP.

Sin ebmargo, el protocolo DNS es también uno de los más atacados con frecuencia, donde los diferentes ataques se propagan desde un usuario doméstico hasta las grandes empresas. Por ello, en el proceso de recopilación de información, una de las prácticas mśa comunes es crear un inventario completo de todos los dispositivos conectados a Internet y los nombres de los dominios utilizados por la empresa que se está investiando.

Conocemos que los servidores DNS son básicamente ordenadores conectados a Internet que nos ayudan a resolver nombres de host en direcciones IP y que están a cargo de la administración y procesamiento de solicitudes de los clientes que necesitna obtener información nueva del nombre del dominio, junto con los registros DNS correspondientes. Aquí es donde aparece el enlace débil ya que este protocolo es un poco vulnerable, permitiendo realizar una enumeración fácilmente, también conocido como reconocimiento de DNS.

Para todos aquellos que empiecen con el mundo OSINT vamos a explicar en primer lugar que es la enumeración DNS, así como diferentes técnicas y herramientas para realizar esta tarea.

 

¿Qué es la enumeración de DNS?

La enumeración de DNS es una de las tareas de reconocimiento más empleadas para crear un perfil del objetivo.

Por decirlo de una forma más simple, es el acto de detectar y enumerar todos los registros DNS posibles de un nombre de dominio, lo que incluye nombres de host, nombres de registros, tipos de registros, TTL, direcciones IP y algo más según la cantidad de información que se esté buscando.

Con una enumeración de DNS efectiva, es posible clonar zonas de DNS manualmente, mediante el uso de scripts o la explotación de vulnerabilidades de transferencia de zona, conocidas como transferencias AXFR (Asynchronous Transfer Full Range). Este último tipo de transferencia de zona tiene lugar cuando un atacante detecta un servidor mal configurado que responde a este tipo de solicitudes.

 

¿Qué impacto tiene?

Una vez completada la enumeración de DNS, un usuario no autenticado puede utilizar esta información para observar los registros internos de la red, obteniendo información útil de DNS que proporcionará al atacante acceso a un mapa completo de DNS, permitiendo explorar el área de superficie de ataque de cualquier empresa, de tal forma, que posteriormente pueda escanearla, recopilar datos y explotarla si existe la posibilidad.

 

Tipos de registros DNS

Para la gestión de un dominio existen una serie de parámetros que permiten configurar el mismo para diferentes tareas llamos registros DNS. Cabe destacar que es importante conocer estos registros con el fin de poder obtener aquella información que sea relevante para nuestra investigación.

Entre los tipos más utilizados encontramos los siguientes:

  • A = Dirección (address). Este registro se usa para traducir nombres de servidores de alojamiento a direcciones IPv4.
  • AAAA = Dirección (address). Este registro se usa en IPv6 para traducir nombres de hosts a direcciones IPv6.
  • CNAME = Nombre canónico (canonical Name). Se usa para crear nombres de servidores de alojamiento adicionales, o alias, para los servidores de alojamiento de un dominio. 
  • NS = Servidor de nombres (name server). Define la asociación que existe entre un nombre de dominio y los servidores de nombres que almacenan la información de dicho dominio. Cada dominio se puede asociar a una cantidad cualquiera de servidores de nombres.
  • MX = Intercambio de correo (mail exchange). Asocia un nombre de dominio a una lista de servidores de intercambio de correo para ese dominio. Tiene un balanceo de carga y prioridad para el uso de uno o más servicios de correo.
  • PTR = Indicador (pointer). También conocido como ‘registro inverso’, funciona a la inversa del registro A, traduciendo IPs en nombres de dominio. Se usa en el archivo de configuración de la zona DNS inversa.
  • SOA = Autoridad de la zona (start of authority). Proporciona información sobre el servidor DNS primario de la zona.
  • SRV = Service record (SRV record).
  • ANY = Toda la información de todos los tipos que exista. (No es un tipo de registro, sino un tipo de consulta)

Además de los registros mencionados, podemos obtener un listado de todos los registros existentes en la wikipedia.

 

Principales herramientas de enumeración DNS

Existen múltiples herraientas para la enumeración y el reconocimiento de DNS, además de scripts en bash o python para relaizar esta tarea, sin embargo, la enumeración DNS más sencilla se puede realizar con un simple comando del sistema.

Vamos a tratar ahora diferentes formas de realizar esta búsqueda de información.

Dig

De nuevo la herramienta dig viene al rescate, ayudándonos a realizar la enumeración de DNS consultando tipos de registros populares.

Veamoslo con un ejemplo con una búsqueda simple para obtener registros A:

Obtengamos ahora más información acerca de los registros de los servidores de correo:

Podemos hacer otra prueba para obtener registros ns:

Perfecto, ahora que tenemos los servidores de nombres autorizados, podemos hacer una prueba de transferencia de zona, utilizando el argumento AXFR contra el NS ns3.google.com como vemos a continuación:

Aunque obviamente, la transferencia ha fallado, porque los servidores DNS de google están bien protegidos.

Como consejo cabe indicar que a veces se puede configurar un servidor de nombres en particular para rechazar este tipo de solicitudes, aunque es posible que no estén todos protegidos, por lo que sugerimos iniciar consultas AXFR contra todos los NS autorizados.

 

Host

Host es un comando utilizado para resolver la dirección IP de cualquier DNS dado.

Por ejemplo, vamos a utilizarlo para obtener todos los registros DNS públicos de google.com como vemos a continuación:

Por defecto, nos mostrará los registros A, AAAA y MX, aunque si desea encontrar cualquier tipo de registro específico puede utilizar la opción -t, al igual que hacíamos con el comando dig:

Visto esto, vamos a realizar una prueba de transferencia de zona con este comando:

Y, al igual que pasaba en el anterior ejemplo con dig, el servidor de google está protegido por lo que nos rechaza realizar la transferencia.

En el caso de una transferencia de zona exitosa, debería de poder obtener la zona DNS completa para el nombre de dominio proporcionado. A continuación puede verse un ejemplo, en este caso hemos utilizado la opción -l, que es otra forma de enumerar todos los registros DNS de un nombre de dominio, a la vez que se prueba el sitio vulnerable zonetransfer.me:

 

DNSenum

DNSenum es un script diseñado específicamente para actividades de reconocimiento de DNS. Está escrito en perl y puede ayudar a crear un mapa DNS completo de cualquier nombre de dominio existente en Internet.

Está disponible en la mayoría de distribuciones y ofrece una sintaxis muy sencilla para realizar este tipo de tareas.

Mediante este script es posible obtener registros NS, MX, AXFR y A, ver la versión BIND remota del servidor DNS, y además, permite realizar un raspado de Google utilizando dorks como allinurl o site, entre otros, realizar ataques de reconocimiento de subdominios por fuerza bruta y obtener una lista ocmpleta de rangos de red de dominios de clase C. También permite realizar consultas de WHOIS y búsquedas de DNS inversas, por lo que es una herramienta bastante completa.

Vamos a ver un ejemplo del uso de esta herramienta utilizando el siguiente comando:

En el anterior comando le indicamos que no realizar una búsqueda inversa del DNS con la opción –noreverse y que guarde los resultados en un fichero file.xml con la opción -o. Además, en el caso de Kali Linux, realizará una búsqueda de subdominios de forma predeterminada gracias a los diccionarios incluidos con esta distribución. Veamos un ejemplo de su ejecución:

 

Como se muestra en el resultado anterior, DNSenum pudo obtener registros A para el nombre del host principal, además de intentar realizar una transferencia de zona y búsqueda de subdominios.

Esta herramienta también permite utilizar un motor de búsqueda de google para obtener una lista de subdominios en los resultados obtenidos del buscador, entre otras opciones existentes que podemos ver al completo en la ayuda de esta tool.

 

Nmap

Nmap es uno de los mejores escáneres de puertos, pero además de eso, no sayudará a relevar información de DNS de un nombre de dominio remoto.

Mediante el uso del script dns-brute, intentará enumerar los nombres de host DNS mediante fuerza bruta de los nombres de subdominios más populares, en este caso hemos hecho la prueba contra microsoft.com

Cabe decir, que aunque esta no sea la opción más completa, si que ayudará como fuente alternativa de información durante el proceso de recopilación de datos.

 

DNSRecon

DNSRecon es otro gran script que puede ayudar a descubrir información de DNS de cualquier nombre de dominio dado.

Este permite enumerar todos los tipos de registros DNS, y además incluye técnica de fuerza bruta para obtener registros de subdomino y host A y AAAA basados en un listado de palabras. Otro punto interesante es que admite la verificaciión de registros DNS y AAAA en caché en los servidores DNS, así como la capacidad de enumeración de DNS locales.

La forma más sencilla de ejecutar el mismo sería con la opción -d:

A continuación vamos a ver un ejemplo de su ejecución contra el site twitter.com:

 

Fierce

Fierce es otra gran herramienta de reconocimiento de DNS. Está escrita en Perl y ofrece numerosas opciones para realizar este tipo de enumeraciones escaneando dominios en cuestión de minutos.

Su sintaxis es bastante sencilla como vemos en el siguiente ejemplo:

Y vamos a ver un ejemplo de su funcionamiento contra el site de linkedin.com:

 

 

Y esto ha sido todo por el momento, en un futuro post trataremos el tema más centrado en la enumeración de subdominios para que no se nos escape nada. Espero les sea de utilidad en su día a día como pentesters y cualquier comentario, duda o sugerencia pueden exponerla un poco más abajo en la sección de comentarios.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *