Ir al contenido

Herramientas, automatización y NSE para DNS

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

El workflow de DNS comienza con consultas dirigidas. La automatización entra cuando ya se conoce el servidor que debe responder, la vista desde la que se consulta y el tipo de dato buscado. Sin esas tres variables, dos herramientas pueden producir inventarios distintos y seguir siendo correctas.

Pregunta Herramienta inicial Motivo
¿Qué contiene una respuesta concreta? dig o kdig Muestran flags, secciones, servidor y tiempos
¿Valida DNSSEC esta cadena? delv Sigue la validación, no solo el bit AD recibido
¿Qué registros y nombres básicos existen? dnsrecon -t std Estructura el resultado y admite JSON
¿Qué candidatos produce una wordlist? dnsrecon -t brt o dnsenum Permiten fijar servidor y diccionario
¿Necesito resolver millones de candidatos? massdns o puredns Priorizan volumen, pero exigen normalización posterior
¿Qué expone un servidor DNS accesible? NSE explícito Añade consultas concretas al inventario de Nmap

host y nslookup siguen disponibles en muchos sistemas. Sirven para una consulta rápida o para reproducir el comportamiento de un operador, pero ofrecen menos control y menos contexto que dig. No deben sustituir el registro del servidor consultado y los flags de la respuesta.

@DNS_SERVER fija el servidor. El nombre siguiente es el propietario consultado y el último argumento es el tipo. +norecurse elimina el bit RD, por lo que la respuesta muestra lo que el servidor entrega sin pedirle resolución recursiva:

Autoridad sin recursión
dig @DNS_SERVER DOMAIN SOA +norecurse
dig @DNS_SERVER DOMAIN NS +norecurse

Para comparar UDP y TCP, conserva el mismo nombre y tipo. +tcp cambia únicamente el transporte:

Comparar transportes
dig @DNS_SERVER NAME A
dig @DNS_SERVER NAME A +tcp

+short elimina casi todo el contexto. Úsalo para alimentar una etapa posterior, no como evidencia única. +comments conserva los comentarios de cabecera y +stats añade el servidor consultado, el tiempo empleado y el tamaño del mensaje. Ambos ayudan a reconstruir cómo se obtuvo la respuesta:

Ventana de terminal
dig @DNS_SERVER NAME TYPE +comments +stats > evidence/dns-NAME-TYPE.txt

+timeout=SECONDS limita la espera de cada intento y +tries=COUNT fija cuántos intentos realiza dig. En UDP, una segunda consulta puede recuperar una respuesta perdida. También duplica tráfico y tiempo antes de declarar timeout:

Consulta dirigida con reintentos explícitos
dig @DNS_SERVER NAME TYPE \
+timeout=2 \
+tries=2 \
+comments \
+stats

El resultado distingue NXDOMAIN, SERVFAIL, respuesta vacía y ausencia de respuesta. Si agota los intentos, repite por TCP y desde el mismo origen antes de atribuir la causa al servicio.

+trace realiza resolución iterativa desde la raíz y muestra cada delegación. No consulta únicamente DNS_SERVER. Contacta con servidores raíz, TLD y autoritativos que correspondan al nombre:

Seguir la delegación pública
dig DOMAIN NS +trace +timeout=2 +tries=1

Este perfil sirve para localizar una delegación rota o una respuesta distinta entre niveles. No representa una vista interna ni respeta necesariamente el resolver que utiliza el objetivo.

-x TARGET_IP construye el nombre de la zona inversa y consulta PTR. Sigue siendo necesario fijar el servidor con @DNS_SERVER si la pregunta depende de una vista concreta:

Consultar el nombre inverso
dig @DNS_SERVER -x TARGET_IP

kdig pertenece a Knot DNS y permite controlar TLS, cookies DNS y formato de salida con una sintaxis próxima a dig. Aporta una segunda implementación cuando una respuesta EDNS, truncada o firmada resulta ambigua.

delv usa la lógica de validación de BIND. Una respuesta con RRSIG no demuestra por sí sola una cadena válida:

Validar DNSSEC
delv @DNS_SERVER NAME TYPE

Registra el trust anchor utilizado y distingue insecure de bogus. El primer estado indica que no existe una cadena de confianza aplicable. El segundo indica que la validación ha fallado.

dnsrecon -t std consulta un conjunto acotado de registros. -n fija el nameserver y -j guarda JSON:

Enumeración estándar
dnsrecon -d DOMAIN -n DNS_SERVER -t std \
-j evidence/dnsrecon-standard.json

La enumeración por wordlist usa -t brt. -D selecciona el archivo y -f filtra respuestas que coinciden con el comportamiento wildcard detectado:

Candidatos por diccionario
dnsrecon -d DOMAIN -n DNS_SERVER -t brt \
-D SUBDOMAIN_LIST -f \
-j evidence/dnsrecon-bruteforce.json

dnsenum aporta otra resolución y puede probar transferencia de zona, consultas inversas y nombres de una lista. --dnsserver evita que la herramienta consulte un resolver distinto:

Ventana de terminal
dnsenum --dnsserver DNS_SERVER \
--file SUBDOMAIN_LIST DOMAIN

Antes de interpretar el resultado, consulta un nombre aleatorio. Si el wildcard devuelve la misma dirección o cadena CNAME, deduplica por respuesta y valida los candidatos con HTTP, TLS u otro protocolo.

massdns y puredns resuelven candidatos con alta concurrencia. Son útiles cuando el conjunto ya no cabe en un flujo interactivo. También pueden ocultar diferencias entre resolvers, reintentos y respuestas temporales.

La salida masiva debe conservar:

  • lista de resolvers y fecha de validación
  • nombre original y tipo consultado
  • código de respuesta
  • respuesta completa antes de extraer direcciones
  • reintentos y tasa configurada
  • control wildcard

Una dirección sin el nombre que la produjo rompe la procedencia. Un nombre histórico resuelto hoy debe conservar ambos timestamps.

Empieza por la ayuda de la versión instalada:

Ventana de terminal
nmap --script-help 'dns-*'

Los scripts no comparten impacto. dns-nsid consulta identificadores anunciados. dns-recursion comprueba una consulta recursiva. dns-zone-transfer intenta AXFR. dns-brute genera nombres y dns-service-discovery consulta registros DNS-SD.

Identidad, recursión y transferencia
sudo nmap -sU -sV -n -Pn -p 53 \
--script dns-nsid,dns-recursion,dns-zone-transfer \
--script-args dns-zone-transfer.domain=DOMAIN \
DNS_SERVER

Reproduce cada resultado con dig. Para AXFR, compara TCP 53 y conserva el servidor autoritativo exacto:

Ventana de terminal
dig @DNS_SERVER DOMAIN AXFR +tcp

No ejecutes dns-* como un bloque. El catálogo incluye fuerza bruta, consultas a terceros y scripts que no responden a la misma pregunta.

Si dos herramientas discrepan, repite una consulta con estos datos fijos:

  1. nombre y tipo
  2. servidor
  3. transporte
  4. recursión
  5. EDNS y DNSSEC
  6. origen de red

Una captura limitada a UDP/TCP 53 permite comprobar si la diferencia está en la petición, la respuesta o el analizador. Un timeout conserva ese estado. No se convierte en NXDOMAIN.