DNS
DNS (Domain Name System) es el sistema que traduce nombres de dominio legibles (
google.com) a direcciones IP que los equipos pueden usar (142.250.184.46). Es una base de datos distribuida y jerárquica: ningún servidor DNS conoce todos los dominios del mundo, pero cualquier servidor puede llegar a la respuesta correcta siguiendo la jerarquía.
1. Funcionamiento del protocolo
Sin DNS, acceder a cualquier servicio en internet requeriría recordar direcciones IP. Con DNS, el nombre es estable aunque la IP cambie.
DNS usa UDP puerto 53 por defecto, con TCP puerto 53 para respuestas grandes (>512 bytes) o transferencias de zona.
1.1. La jerarquía DNS
DNS organiza todos los dominios del mundo en un árbol invertido con la raíz en la cima:
. (raíz)
│
┌─────────────┼─────────────┐
com org es // TLDs
│ │
┌─────┴─────┐ │
google github wikipedia // dominios
│
mail www api ... // subdominios)
Zona DNS
Cada nodo del árbol es una zona DNS gestionada de forma independiente. Google gestiona google.com y todos sus subdominios. ICANN gestiona .com, .org, etc. Nadie gestiona todo el árbol de forma centralizada.
Un nombre de dominio completo se lee de derecha a izquierda siguiendo el árbol:
mail.google.com.
│ │ │ └── raíz // el punto final, normalmente implícito
│ │ └── zona com // gestionada por Verisign
│ └── zona google.com // gestionada por Google
└── subdominio // registro dentro de la zona google.com
Subdominio vs Vhost
Un subdominio permite organizar diferentes secciones de un sitio web, cada subdominio tiene un registro DNS y puede estar en la misma IP que el dominio principal o no. Un Vhost es una configuración dentro del servidor que permite alojar múltiples sitios web o aplicaciones en un único servidor, pudiendo tener o no registro DNS.
La cabecera Host
En esencia, la cabecera Host funciona como un interruptor, permitiendo al servidor web determinar dinámicamente qué sitio web servir basándose en el nombre de dominio solicitado por el navegador.
1.2. Tipos de servidores DNS
La cadena de peticiones DNS se conforma por este orden
1️⃣ El navegador o aplicación hace la consulta: ¿Cuál es la IP de www.ejemplo.com? El sistema busca en la caché local o en el archivo hosts.
2️⃣ Si no lo encuentra ahí, consulta al resolver un componente que se encarga de reenviar las peticiones DNS, este consulta su caché o inicia la jerarquía DNS.
3️⃣ El resolver pregunta a un Root Server que le dará una lista de TLD servers y sus IPs a.gtld-servers.net. A 192.5.6.30
4️⃣ Los TLD servers le darán la lista de Authoritative Servers y sus IPs, ejemplo.com. NS ns1.proveedor.com. según su dominio, Ej .es para España
5️⃣ El Authoritative Server es el propietario del dominio y resolverá la IP, que se cacheará en el cliente durante un tiempo limitado (segundos indicados en el "TTL") www.ejemplo.com. 300 IN A 93.184.216.34
Root server — la raíz del sistema
Existen 13 grupos de Root Servers, identificados con letras de la A a la M (a.root-servers.net a m.root-servers.net). Son el punto de partida de cualquier resolución. No conocen las IPs, pero saben que servidores gestionan cada TLD del mundo. Por ejemplo, para el TLD es se pregunta al TLD nameserver a.nic.es. Fisicamente hay miles de instancias de estos servidores distribuidas por todo el mundo, mediante anycast: la misma IP enruta a la instancia más cercana geográficamente.
TLD Nameserver — los servidores de dominio de nivel superior
Gestionan un TLD concreto (.com, .org, .net, .es... Tenemos verisign para .com) . No conocen las IPs de los dominios, pero conocen a que Authoritative Nameserver hacerle la petición para cada dominio registrado bajo ese TLD. Por ejemplo paragoogle serían serían ns1.google.com, ns2.google.com.... Cuando se registra un dominio con por ejemplo GoDaddy, se notifica al operador del TLD los nameservers del dominio.
Authoritative Nameservers — los servidores del dominio
Son los servidores que tienen la respuesta definitiva para un dominio concreto. Gestionan la zona DNS del dominio con todos sus registros (A, MX, TXT, CNAME...). Cuando un authoritative nameserver responde, incluye el flag aa (Authoritative Answer) en la cabecera DNS. Esa respuesta es la fuente de verdad, no viene de caché.
Recursive Resolver — el intermediario
También llamado full-service resolver o recursive nameserver. Es el servidor DNS que usan los clientes (el de tu router, 8.8.8.8 de Google, 1.1.1.1 de Cloudflare). Su trabajo es recibir la consulta del cliente, preguntar a los root servers, TLD servers y authoritative servers hasta obtener la respuesta, cachearla durante el TTL y devolver el resultado al cliente. El cliente hace una sola consulta al resolver y recibe la respuesta. El resolver hace todo el trabajo de navegar la jerarquía.
Por último tenemos el Caching-Only Nameserver, un resolver que no tiene zonas propias ni hace resolución completa, solo reenvía las consultas a otro resolver y cachea las respuestas. Muchos routers domésticos y servidores DNS corporativos funcionan así.
cliente → resolver → root → TLD → authoritative → resolver → cliente // ~100-300ms
cliente → resolver con la respuesta cacheada → cliente // <5ms
1.3. Otros componentes
Protección DNS
Por defecto el tráfico DNS no viaja cifrado (es visible para el ISP y el resto de equipos de la red), así que tenemos varias tecnologías que permiten protegerlo
DNSSEC añade firmas criptográficas con claves de verificación
DNSKEYpara garantizar la autenticidad e integridad de los registros DNS. Protege contra DNS spoofing y cache poisoning.
Luego tenemos
| Protocolo | Puerto | Descripción |
|---|---|---|
| DoT (DNS over TLS) | 853/TCP | DNS sobre TLS. El proveedor puede ver que se hace una consulta DNS pero no el contenido |
| DoH (DNS over HTTPS) | 443/TCP | DNS encapsulado en HTTPS. Idéntico al tráfico web, más difícil de bloquear |
| DoQ (DNS over QUIC) | 853/UDP | DNS sobre QUIC. Más rápido que DoT con menos latencia |
Archivo hosts
El archivo hosts es un simple archivo de texto que se utiliza para mapear nombres de host a direcciones IP, proporcionando un método manual y local de resolución de nombres de dominio que omite el proceso DNS. Se encuentra en C:\Windows\System32\drivers\etc\hosts en Windows y en /etc/hosts en Linux y MacOS. Cada línea del archivo sigue el formato:
# IP dominio/s
127.0.0.1 localhost
192.168.1.10 devserver.local ftp_server.local
1.4. Registros DNS
| Registro DNS | Descripción | Ejemplo |
|---|---|---|
A |
Devuelve una dirección IPv4 del dominio/subdominio solicitado como resultado. | mail IN A 93.184.216.35 para mail.web.com |
AAAA |
Devuelve una dirección IPv6 del dominio/subdominio solicitado. | @ IN AAAA 2001:db8::1 para ejemplo.com |
MX |
Devuelve los servidores de correo responsables como resultado y se consultan según la prioridad (menor = preferido) | @ IN MX 10 mail.web.com. servidor mail y prioridad |
NS |
Devuelve los servidores DNS (Authritative namerservers) del dominio. Ej ns1.google.comEn los Glue records se devuelve la IP del servidor DNS mediante un registro A |
|
TXT |
Este registro puede contener diversa información: Ej certificados SSL, entradas SPF y DMARC para validar el tráfico de correo y protegerlo del spam. | |
CNAME |
Este registro sirve como un alias para otro nombre de dominio. | ftp IN CNAME web.com. el servidor ftp está en web.com |
PTR |
El registro PTR funciona al revés (búsqueda inversa o reverse lookup). Convierte direcciones IP en nombres de dominio válidos. |
|
SOA |
Proporciona el servidor DNS autoritativo que opera sobre la zona (MNAME) y la dirección de correo electrónico del contacto administrativo (RNAME). Está en formato admin.ejemplo.com. que se traduce como admin@ejemplo.com |
|
CAA |
Servidores CA que pueden emitir certificados válidos TLS | @ IN CAA 0 issue "letsencrypt.org" |
- El
INindica que es un registro para internet, es una convención,
1.5. Configuración de zona DNS
En el Sistema de Nombres de Dominio (DNS), una zona es un conjunto de nombres de dominios gestionados por una misma entidad o administrador. Por ejemplo, web.com y todos sus subdominios (como mail.web.com o blog.web.com) pertenecerían típicamente a la misma zona DNS.
El archivo de zona, un fichero de texto que reside en un servidor DNS y define todos los registros de ese dominio en un formato estandarizado (Bind). Por ejemplo /etc/bind/db.domain.com
$ORIGIN web.com. // dominio base de esta zona (el punto final es obligatorio)
$TTL 3600 // TTL por defecto para todos los registros de la zona
// SOA — Start of Authority (obligatorio uno por zona)
// Internet - SOA - MNAME (AuthNameserver) - RNAME (correo "." 🡆 "@") - (opciones)
// Las opciones para comprobar cambios, refrescar y sincronizar datos
@ IN SOA ns1.web.com. admin.web.com. ( ... )
// Registros individuales: A, NS, TXT (DKIM, DMARC, servidores SSL...)
@ IN NS ns1.web.com.
www IN A 10.129.14.5
ns1 IN A 10.129.14.2
ftp IN CNAME server1
Ademñas, para que el FQDN (dominio completo) se esuelva a partir de la IP, el servidor DNS debe tener un archivo de búsqueda inversa (registro PTR), como /etc/bind/db.10.129.14
$ORIGIN 14.129.10.in-addr.arpa
$TTL 86400
// el resto es una copia del archivo de zona con sus mismos registros; SOA y demás
1.6. DNS enum y Transferencia de zona (AXFR)
Una transferencia de zona DNS es esencialmente una copia completa de todos los registros DNS dentro de una zona (un dominio y sus subdominios) de un servidor DNS a otro. Este proceso es fundamental para mantener la consistencia y la redundancia entre los servidores DNS.
Siempre hay un servidor primario con los datos originales y servidores secundarios que distribuyen la carga y protegen al primario de ataques. El primario siempre es el maestro. Usando una clave secreta rndc-key, los servidores se aseguran de que se comunican con su propio maestro o esclavo.
El proceso es el siguiente:
[Servidor DNS primario] [Servidor DNS secundario]
│ │
│◀───── Petición AXFR ("Full Zone Transfer") ────────────│
│── Registro SOA (para saber si está actualizado) ──────▶│
│◀───── Registros DNS ───────────────────────────────────│
│── ACK (señal de finalizado) ──────────────────────────▶│
Sin embargo, si no se asegura adecuadamente, terceros no autorizados pueden descargar el archivo de zona completo, revelando una lista completa de subdominios, sus direcciones IP asociadas y otros datos DNS sensibles.
Si se permite una transferencia de zona desde cualquier IP, se pueden obtener todos los registros del dominio y exponer sistemas internos. Por tanto esta transferencia debe permitirse desde las IPs de los servidores secundarios, nunca desde cualquier dirección.
dig axfr @nsztm1.digi.ninja zonetransfer.me
# Ejemplo practico, pedir axfr al servidor responsable de zonetransfer.me
2. Herramientas DNS
2.1. Dig
dig (Domain Information Groper) es la herramienta de línea de comandos estándar para hacer consultas DNS. Esta herramienta muestra la respuesta completa del servidor DNS
dig <@servidor_dns> <dominio> <tipo_de_consulta> <opciones>
Ejecutar dig google.com produce una salida estructurada en secciones bien definidas. Vamos sección a sección:
<<>> DiG 9.18.12 <<>> google.com // versión del protocolo
// opcode: tipo de consulta y status: resultado, id: identificador
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
// flags (opciones), QUERY y ANSWER número de consultas respuestas
// AUTHORITY: 0, ADDITIONAL: 1 🡆 no es el servidor autoritativo 🡆 hay que consultar a otro
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
// pregunta 🡆 dominio consultado, clase internet (IN) y tipo de registro solicitado (A)
;; QUESTION SECTION:
;google.com. IN A
// respuesta 🡆 dominio TTL clase registro valor
;; ANSWER SECTION:
google.com. 300 IN A 142.250.184.46
// metadatos 🡆 tiempo, ip y puerto del servidor DNS, fechas y tamaño de respuesta
;; Query time: 23 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Mon Jan 01 12:00:00 UTC 2024
;; MSG SIZE rcvd: 55
Las consultas TXT dan información adicional: SPF (anti-spam), DKIM, verificaciones de dominio y muchas otras cosas.
dig google.com TXT
# ;; ANSWER SECTION:
# google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
# google.com. 3600 IN TXT "google-site-verification=wD8N7i1JTNTkezJ49swvWW..."
- Para poder ver todos los registros se puede usar una consulta
ANY, el problema esque muchos servidores modernos ignoran o limitan estas consultas por seguridad
Luego tenemos estas opciones
| Registro DNS | Descripción | Ejemplo |
|---|---|---|
+short |
solo el resultado | dig google.com +short 🡆 solo la IP` |
+noall +answer |
Más completo que +short porque muestra el TTL y el tipo, pero sin las estadísticas. |
dig google.com +noall +answer |
@servidor -p puerto |
Consultar a un servidor DNS alternativo y permite usar otro puerto | dig @9.9.9.9 -p 53 google.com |
+trace |
Simula la resolución recursiva desde los root servers, o sea muestra todo el camino completo |
Algunos servidores pueden detectar y bloquear consultas DNS excesivas. Ten cuidado y respeta los límites de tasa. Siempre obtén permiso antes de realizar un reconocimiento de DNS extensivo en un objetivo.
2.2. Herramientas de reconocimiento
WHOIS
WHOIS es un protocolo de consulta y respuesta (query and response protocol) ampliamente utilizado, diseñado para acceder a bases de datos que almacenan información sobre los recursos de internet registrados.
Cada registro WHOIS suele contener la siguiente información: - Domain Name: El propio nombre de dominio (p. ej., example.com) - Registrar: La empresa donde se registró el dominio (p. ej., GoDaddy, Namecheap) - Registrant Contact: La persona u organización que registró el dominio. - Administrative Contact: La persona responsable de la gestión del dominio. - Technical Contact: La persona que se ocupa de los problemas técnicos relacionados con el dominio. - Creation and Expiration Dates: Cuándo se registró el dominio y cuándo está previsto que expire. - Name Servers: Servidores DNS. - Location: dirección del titular del registro. Indicio de sospecha: país con una alta prevalencia de ciberdelincuencia.
$: whois facebook.com
# Domain Name: FACEBOOK.COM
# Registry Domain ID: 2320948_DOMAIN_COM-VRSN
# Registrar WHOIS Server: whois.registrarsafe.com
# Registrar URL: http://www.registrarsafe.com
# (...)
Indicios de sospecha
-
La información del titular del registro está oculta detrás de un servicio de privacidad o un registrador con un historial de políticas de abuso laxas.
-
Dominio registrado hace unos dias, correo gratuito anónimo
-
Proveedor de alojamiento a prueba de balas (bulletproof hosting) o dominios bajo los mismos DNS (infraestructura comun)
Otros
Tenemos otras herramientas de reconocimiento
| Herramienta | Uso |
|---|---|
nslookup |
Permite consultas DNS simples (registros A, AAAA y MX) para verificaciones rápidas |
host |
Herramienta de búsqueda de DNS optimizada para busquedas rápidas |
dnsenum |
Herramienta automatizada de enumeración de DNS, ataques de diccionario (dictionary attacks), fuerza bruta (brute-forcing), transferencias de zona (si están permitidas). |
fierce |
Herramienta de reconocimiento de DNS y enumeración de subdominios con búsqueda recursiva y detección de comodines (wildcard detection). |
dnsrecon |
Enumeración completa de DNS, identificando subdominios y recopilando registros DNS para un análisis posterior. |
theHarvester |
Herramienta de OSINT que recopila información de diversas fuentes, incluyendo registros DNS (direcciones de correo electrónico). |
Con la herramienta DNSenum o con subroute, podemos enumerar subdominios válidos
dnsenum --dnsserver 10.129.14.128 --enum -p 0 -s 0 -o subdomains.txt -f /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt web.htb
echo "ns1.inlanefreight.htb" > resolvers.txt
python3 subbrute.py inlanefreight.htb -s names.txt -r resolvers.txt