Dominios vs subdominios: cómo enumerarlos.
De qué se compone un dominio, por qué los subdominios son superficie de ataque y cómo enumerarlos –pasiva y activamente– con crt.sh, Amass, subfinder y más.
Toda investigación, todo encargo de bug bounty y la fase de reconocimiento de todo atacante empiezan en el mismo sitio: un nombre. Antes de que nadie toque un servicio, quiere saber cómo de grande es el objetivo en realidad, y la respuesta sincera casi siempre es «más grande de lo que sugiere la web de marketing». Ese hueco entre example.com y las decenas de nombres de host olvidados que cuelgan de él es donde vive una enorme cantidad de riesgo real. Este artículo desmonta el nombre, explica de dónde salen los subdominios y recorre cómo enumerarlos bien: de forma pasiva, de forma activa y de forma responsable.
Anatomía de un nombre de dominio
Un nombre de dominio parece una sola cosa, pero en realidad es una pila de etiquetas que se leen de derecha a izquierda, cada una un nivel de delegación en una jerarquía global. Coge un nombre completamente cualificado como api.staging.example.com y desármalo:
| Parte | Ejemplo | Qué es |
|---|---|---|
| Raíz | . (implícita) | La cima sin nombre del árbol. Está ahí de verdad: example.com. con un punto final es el FQDN auténtico. |
| TLD | com | Dominio de nivel superior. Gestionado por un registro (Verisign para .com) bajo la ICANN. Puede ser un gTLD (.com, .io) o un ccTLD (.uk, .es). |
| Dominio de segundo nivel | example | La etiqueta que registras y pagas. example + .com es el dominio registrable: la unidad que WHOIS conoce. |
| Subdominio | staging, api | Cualquier etiqueta a la izquierda del dominio registrable. Los creas tú mismo, gratis, tantos como quieras. |
| FQDN | api.staging.example.com | El nombre de dominio completamente cualificado: la ruta completa e inequívoca del host a la raíz. |
Dos sutilezas confunden a la gente. Primera, «www» no es especial: www.example.com es solo un subdominio llamado www, en nada distinto en su naturaleza de api o vpn. Segunda, la frontera entre «dominio registrable» y «subdominio» no siempre está a dos etiquetas desde la derecha. Bajo example.co.uk, el dominio registrable tiene tres etiquetas de profundidad porque co.uk es un TLD efectivo. La Public Suffix List es el mapa autoritativo de dónde cae esa línea, y toda herramienta de enumeración seria la consulta para no confundir co.uk con el subdominio de alguien.
Qué es un subdominio, y por qué le importa a la seguridad
Un subdominio es simplemente una entrada DNS que el propietario del dominio creó bajo un nombre que controla. No hay registrador, ni tarifa, ni paso de aprobación: quien controla la zona DNS de example.com puede hacer aparecer internal.example.com en segundos. Esa comodidad es exactamente por lo que los subdominios importan tanto a un defensor o a un investigador.
- Son la superficie de ataque. El dominio registrable es una marca; los subdominios son las máquinas, aplicaciones y API reales. Cartografiarlos es cartografiar el objetivo. Diez subdominios que no conocías son diez servicios que nadie parchea, vigila ni tiene en mente.
- Filtran entornos. Nombres como
dev.,staging.,uat.,test.,jenkins.ovpn.anuncian sistemas no productivos que a menudo se montan por comodidad, no por robustez: credenciales por defecto, errores verbosos, sin WAF, software obsoleto. Un atacante que no puede entrar por la puerta principal entrará encantado por staging. - Permiten el subdomain takeover. Un subdominio que apunta (vía
CNAME) a un servicio en la nube que ya no existe puede ser reclamado en silencio por un atacante; más sobre esto abajo.
Por eso la enumeración de subdominios es una habilidad fundamental de OSINT y reconocimiento. Si eres nuevo en la disciplina más amplia, nuestra guía sobre qué es OSINT y el flujo de trabajo que lo rodea pone este paso en contexto: la enumeración es la fase de «pivotar hacia fuera», donde un artefacto (un dominio) se usa para descubrir el siguiente (sus hosts).
Los registros DNS que hacen reales a los subdominios
Un subdominio solo «existe» en internet porque un registro DNS responde por él. Entender los tipos de registro es lo que separa una lista de nombres de una comprensión de la infraestructura que hay detrás. El propio proceso de resolución lo cubrimos en cómo funcionan las redes; aquí está el subconjunto práctico que importa para la enumeración:
| Registro | Responde a la pregunta | Por qué importa en la enumeración |
|---|---|---|
A | ¿En qué dirección IPv4 está este host? | Confirma que un nombre está vivo y apunta a algún sitio. Invierte la IP para encontrar vecinos. |
AAAA | ¿En qué dirección IPv6 está este host? | Cada vez más común; a veces los hosts exponen IPv6 sin el mismo firewall que IPv4. |
CNAME | ¿De qué otro nombre es alias este nombre? | El registro clave para la caza de takeovers: un CNAME que apunta a un servicio sin reclamar es la vulnerabilidad. |
MX | ¿Qué servidores gestionan el correo de este dominio? | Revela el proveedor de correo y, a menudo, la nomenclatura de las pasarelas internas. |
TXT | Texto arbitrario: SPF, DKIM, tokens de verificación. | Los registros SPF enumeran IP emisoras y servicios de terceros; los tokens de verificación identifican el SaaS que usa una empresa. |
NS | ¿Qué servidores de nombres son autoritativos para esta zona? | Identifica el proveedor de DNS y puede revelar subzonas delegadas gestionadas por otros equipos. |
Puedes sacar cualquiera de estos con dig. Un vistazo rápido a los registros de un nombre que estás investigando te dice si es un host real, un alias o un extremo de correo:
$ dig +short A api.example.com
203.0.113.42
$ dig +short CNAME assets.example.com
example-cdn.s3.amazonaws.com.
$ dig +short TXT example.com
"v=spf1 include:_spf.google.com include:mailgun.org ~all"
Esa única línea de SPF ya te dice que la organización usa Google Workspace y Mailgun: inteligencia de infraestructura, directa desde un registro público, sin tocar el objetivo ni una vez.
Enumeración pasiva vs activa
Hay dos formas fundamentalmente distintas de descubrir subdominios, y saber en qué modo estás en cada paso es a la vez una decisión de seguridad operativa (OPSEC) y, a veces, legal.
La enumeración pasiva lee datos de subdominios de terceros –registros de certificados, índices de buscadores, bases de datos de DNS pasivo– y nunca envía un paquete al objetivo. El objetivo no tiene forma de saber que miraste. La enumeración activa resuelve o solicita nombres contra la propia infraestructura del objetivo: consulta sus resolvers DNS, se conecta a sus servidores y puede quedar registrada. La fuerza bruta de subdominios es activa por definición. Como regla, empieza en modo pasivo y solo pasa a activo dentro de un alcance autorizado.
| Técnica | Modo | Herramienta | Cuándo usarla |
|---|---|---|---|
| Búsqueda en Certificate Transparency | Pasiva | crt.sh | Siempre; la primera pasada más rápida y silenciosa. Los registros de CT filtran nombres que nadie pretendía publicar. |
| Fuentes pasivas agregadas | Pasiva | subfinder, Amass (pasivo), assetfinder | Un primer barrido amplio que tira de decenas de conjuntos de datos a la vez. |
| DNS pasivo / DNS histórico | Pasiva | SecurityTrails, VirusTotal, Netcraft | Cuando quieres histórico: nombres que resolvían en el pasado pero se eliminaron. |
| Resolución / validación DNS | Activa | dnsx | Para confirmar qué nombres descubiertos están realmente vivos antes de actuar sobre ellos. |
| Fuerza bruta de DNS | Activa | gobuster, ffuf, Amass (activo) | Solo en objetivos autorizados: para encontrar nombres que no aparecen en ningún conjunto de datos público. |
| Detección de takeover | Activa | subjack, nuclei | Tras la enumeración, para probar si los CNAME colgantes son reclamables. |
Enumeración pasiva, con comandos
Certificate Transparency (crt.sh)
Todo certificado TLS de confianza pública queda registrado en registros de Certificate Transparency de solo adición (append-only), el mecanismo que explicamos en certificados TLS y Certificate Transparency. Como un certificado nombra los hosts que cubre, esos registros son una lista accidental y autoritativa de los subdominios de una organización. La vía más fácil es crt.sh, consultable desde el navegador o la línea de comandos:
# Todos los nombres jamás certificados bajo example.com, sin duplicados
$ curl -s "https://crt.sh/?q=%25.example.com&output=json" \
| jq -r '.[].name_value' \
| sed 's/\*\.//g' \
| sort -u
api.example.com
dev.example.com
mail.example.com
vpn.example.com
...
El %25 es un % codificado como URL, el comodín SQL que crt.sh entiende. Esta única petición, enviada a un tercero y nunca al objetivo, a menudo devuelve más nombres de host reales que cualquier otra técnica individual.
Agregadores: subfinder, Amass, assetfinder
subfinder (de ProjectDiscovery) consulta decenas de fuentes pasivas a la vez y es la opción rápida por defecto:
$ subfinder -d example.com -silent
api.example.com
blog.example.com
cdn.example.com
staging.example.com
Amass, el proyecto de OWASP, es el más exhaustivo. Ejecútalo en modo pasivo para permanecer del todo fuera del objetivo mientras tira de su amplia lista de fuentes:
$ amass enum -passive -d example.com
assetfinder es una herramienta diminuta y rápida que rasca un puñado de las fuentes de mayor valor; perfecta para encadenar con otras herramientas:
$ assetfinder --subs-only example.com | sort -u
En la práctica ejecutas varias y fusionas los resultados, porque ninguna fuente por sí sola es completa:
$ { subfinder -d example.com -silent; assetfinder --subs-only example.com; } \
| sort -u > subs-passive.txt
Enumeración activa, con comandos
Todo lo de esta sección envía tráfico a la infraestructura que estás enumerando. Ejecútalo solo contra dominios que posees o para los que tienes autorización explícita y por escrito para probar (tus propios activos, un alcance de pentest firmado o la lista dentro de alcance de un programa de bug bounty). Hacer fuerza bruta y resolver nombres contra un objetivo que no tienes permiso para probar puede constituir actividad no autorizada. Observa, no te entrometas.
Validar lo que encontraste (dnsx)
Una lista pasiva está llena de nombres muertos: hosts que se dieron de baja o que nunca llegaron a estar vivos. dnsx resuelve la lista contra el DNS y se queda solo con los que responden, mostrando opcionalmente los datos del registro:
$ cat subs-passive.txt | dnsx -silent -a -resp
api.example.com [203.0.113.42]
cdn.example.com [198.51.100.10]
vpn.example.com [203.0.113.77]
Fuerza bruta de DNS (gobuster, ffuf, Amass activo)
Algunos subdominios no aparecen en ningún conjunto de datos público. La única forma de encontrarlos es adivinar nombres candidatos a partir de un diccionario y comprobar cuáles resuelven. gobuster en modo dns es el clásico:
$ gobuster dns -d example.com \
-w subdomains-top1million-5000.txt
Found: grafana.example.com
Found: git.example.com
Found: backup.example.com
Los buenos diccionarios vienen de SecLists (la carpeta Discovery/DNS). Para encontrar virtual hosts –sitios distintos servidos desde la misma IP según la cabecera Host–, ffuf hace fuzzing de esa cabecera y filtra el tamaño de la respuesta por defecto:
$ ffuf -w subdomains.txt \
-u https://example.com \
-H "Host: FUZZ.example.com" \
-fs 4242
Amass también puede hacer resolución activa y fuerza bruta cuando quitas el flag -passive y añades -brute: potente, y firmemente en el terreno de «solo objetivos autorizados».
DNS con comodín y falsos positivos
Antes de fiarte de un resultado de fuerza bruta, comprueba si hay un registro comodín (wildcard). Una entrada *.example.com hace que todos los subdominios posibles resuelvan a la misma dirección, así que una fuerza bruta ingenua reportará miles de hosts «encontrados» que en realidad no existen. La prueba es una única consulta por un nombre que ningún administrador cuerdo crearía:
$ dig +short definitely-not-real-8f3a9.example.com
198.51.100.200 <- una respuesta significa que hay un comodín en juego
Si un nombre basura aleatorio resuelve, la zona tiene un comodín, y debes filtrar en consecuencia: anota la IP del comodín y descarta cualquier nombre de fuerza bruta que resuelva a ella, o usa una herramienta que lo haga automáticamente. Amass, el resolver de subfinder y dnsx incluyen todos lógica de filtrado de comodines precisamente porque es una fuente de ruido tan común. La lección general vale para todo el OSINT: un resultado que no has corroborado es una pista, no un hallazgo.
Subdomain takeover
Un subdomain takeover es uno de los problemas de mayor impacto que la enumeración saca a la luz. El montaje: una empresa crea promo.example.com como un CNAME que apunta a un servicio de terceros –un bucket en la nube, una app de Heroku, un sitio de GitHub Pages, una landing de SaaS–. Más tarde, elimina el recurso en el proveedor pero se olvida de quitar el registro DNS. El CNAME queda ahora colgante: apunta a un nombre de servicio que cualquiera puede registrar.
Si un atacante registra ese nombre de servicio, el propio DNS de la víctima envía ahora a los visitantes a contenido controlado por el atacante en un nombre de host de aspecto legítimo. Eso permite un phishing convincente, robo de cookies con alcance al dominio padre y evasiones de la confianza same-site. La señal reveladora es un CNAME a un proveedor conocido combinado con la página de error «no such app / bucket not found» de ese proveedor:
$ dig +short CNAME promo.example.com
example-promo.herokuapp.com.
$ curl -s https://promo.example.com | grep -i "no such app"
<title>No such app</title> <- CNAME colgante, probablemente reclamable
A escala automatizas la detección. subjack comprueba una lista de subdominios contra una base de datos de huellas de servicios vulnerables:
$ subjack -w subs-live.txt -t 100 -ssl \
-c fingerprints.json -v
nuclei incluye un conjunto mantenido de plantillas de takeover y es la opción más moderna:
$ nuclei -l subs-live.txt -t http/takeovers/
Encontrar un takeover no es lo mismo que explotarlo. En un encargo autorizado, lo responsable suele ser demostrar que es reclamable con un fichero marcador inofensivo y reportarlo, no servir contenido real desde el nombre de host.
Herramientas y webs que conviene guardar
Más allá de las herramientas de línea de comandos anteriores, varios servicios web hacen descubrimiento de subdominios e infraestructura desde el navegador, lo cual es ideal para una primera ojeada rápida y del todo pasiva:
- crt.sh: búsqueda en registros de Certificate Transparency. La mejor fuente pasiva individual de subdominios.
- DNSDumpster: reconocimiento de DNS gratuito que mapea los hosts, registros y relaciones de red de un dominio en una única vista visual.
- SecurityTrails: datos históricos de DNS y subdominios; ve a qué apuntaba antes un nombre, inestimable para rastrear infraestructura a lo largo del tiempo.
- VirusTotal: la pestaña «Relations» de un dominio enumera los subdominios observados que ha visto en circulación.
- Netcraft: informes de sitios de larga trayectoria y una base de datos consultable de hosts e historial de alojamiento.
- Amass (OWASP) y la suite de ProjectDiscovery –subfinder y dnsx–: para una enumeración programable y repetible.
Una consulta de registro redondea el cuadro: emparejar la enumeración con WHOIS te dice no solo qué hosts existen, sino quién registró el dominio padre y cuándo. Juntos convierten un solo nombre en un mapa.
La conclusión
Un nombre de dominio es una jerarquía, y los subdominios que cuelgan de él son la superficie de ataque real y desparramada que la mayoría de las organizaciones infravalora. Enumerarlos bien significa empezar en modo pasivo –Certificate Transparency y agregadores que nunca tocan el objetivo–, validar con resolución, y hacer fuerza bruta o probar takeover solo donde tengas autorización explícita. Hazlo en ese orden y verás sistemáticamente más de un objetivo de lo que pretendía mostrar, sin cruzar jamás la línea de la observación a la intrusión.
Preguntas frecuentes
¿Qué son los subdominios?
¿Cuál es la diferencia entre un dominio y un subdominio?
¿Cómo encuentro todos los subdominios de un dominio?
¿Qué es un subdomain takeover?
¿Cuál es la diferencia entre enumeración pasiva y activa de subdominios?
¿Es legal la enumeración de subdominios?
¿Por qué importan tanto en seguridad los subdominios dev y staging?
Daniel A. y Óscar S. llevan Breachfolio, un sitio pequeño e independiente sobre seguridad e IA. Este artículo se redactó con asistencia de IA y una persona lo revisó antes de publicarlo. Escribimos a partir de documentación, fuentes de los fabricantes e investigación publicada, no de pruebas de laboratorio propias, y enlazamos la fuente en la propia frase que se apoya en ella. Cómo trabajamos · Quiénes somos
