Herramientas, automatización y NSE para DNS
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.
Elegir la herramienta por pregunta
Sección titulada «Elegir la herramienta por pregunta»| 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.
Consultas reproducibles con dig
Sección titulada «Consultas reproducibles con dig»@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:
dig @DNS_SERVER DOMAIN SOA +norecursedig @DNS_SERVER DOMAIN NS +norecursePara comparar UDP y TCP, conserva el mismo nombre y tipo. +tcp cambia únicamente el transporte:
dig @DNS_SERVER NAME Adig @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:
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:
dig @DNS_SERVER NAME TYPE \ +timeout=2 \ +tries=2 \ +comments \ +statsEl 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:
dig DOMAIN NS +trace +timeout=2 +tries=1Este 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:
dig @DNS_SERVER -x TARGET_IPValidación con kdig y delv
Sección titulada «Validación con kdig y delv»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:
delv @DNS_SERVER NAME TYPERegistra 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 y dnsenum
Sección titulada «DNSRecon y dnsenum»dnsrecon -t std consulta un conjunto acotado de registros. -n fija el nameserver y -j guarda JSON:
dnsrecon -d DOMAIN -n DNS_SERVER -t std \ -j evidence/dnsrecon-standard.jsonLa enumeración por wordlist usa -t brt. -D selecciona el archivo y -f filtra respuestas que coinciden con el comportamiento wildcard detectado:
dnsrecon -d DOMAIN -n DNS_SERVER -t brt \ -D SUBDOMAIN_LIST -f \ -j evidence/dnsrecon-bruteforce.jsondnsenum 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:
dnsenum --dnsserver DNS_SERVER \ --file SUBDOMAIN_LIST DOMAINAntes 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.
Resolución a escala
Sección titulada «Resolución a escala»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.
NSE aplicado a DNS
Sección titulada «NSE aplicado a DNS»Empieza por la ayuda de la versión instalada:
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.
sudo nmap -sU -sV -n -Pn -p 53 \ --script dns-nsid,dns-recursion,dns-zone-transfer \ --script-args dns-zone-transfer.domain=DOMAIN \ DNS_SERVERReproduce cada resultado con dig. Para AXFR, compara TCP 53 y conserva el servidor autoritativo exacto:
dig @DNS_SERVER DOMAIN AXFR +tcpNo ejecutes dns-* como un bloque. El catálogo incluye fuerza bruta, consultas a terceros y scripts que no responden a la misma pregunta.
Resolver discrepancias
Sección titulada «Resolver discrepancias»Si dos herramientas discrepan, repite una consulta con estos datos fijos:
- nombre y tipo
- servidor
- transporte
- recursión
- EDNS y DNSSEC
- 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.