OSINT: Operación Atlas

Reconocimiento pasivo de dominios desde terminal

Documentación de apoyo: Reconocimiento de dominios por terminal y scripting


1. Introducción

Una organización ficticia llamada Atlas Digital está revisando la información que su infraestructura publica en Internet. Durante los últimos años ha creado páginas web, aplicaciones, servicios de correo y entornos de pruebas, pero no dispone de un inventario actualizado.

El equipo de seguridad necesita conocer su superficie externa visible mediante fuentes públicas antes de realizar una auditoría más profunda.

Tu misión será actuar como analista OSINT. Utilizarás la terminal de Linux para descubrir subdominios, resolver direcciones IP, consultar información pública sobre esas direcciones y automatizar parte del proceso mediante un script en Bash.

El objetivo no consiste únicamente en ejecutar comandos. Tendrás que interpretar, relacionar y documentar los resultados.


2. Objetivos de aprendizaje

Al finalizar el reto deberás ser capaz de:

  • Explicar qué es el reconocimiento OSINT pasivo.
  • Utilizar herramientas desde una terminal Linux.
  • Enumerar subdominios con Amass y Subfinder.
  • guardar, ordenar, combinar y filtrar resultados.
  • Resolver nombres de dominio y obtener sus direcciones IP.
  • Consultar información WHOIS y datos aproximados de geolocalización.
  • Procesar respuestas JSON con curl y jq.
  • Crear un script Bash sencillo para automatizar el análisis.
  • Diferenciar entre un dato, una evidencia y una conclusión.
  • Elaborar un informe técnico reproducible.

3. Normas y alcance autorizado

Esta actividad es exclusivamente de reconocimiento pasivo.

Está permitido

  • Consultar fuentes públicas.
  • Utilizar Amass en modo -passive.
  • Utilizar Subfinder con sus fuentes OSINT.
  • Resolver registros DNS.
  • Consultar WHOIS y servicios públicos de información de IP.
  • Trabajar únicamente con el dominio indicado por el profesor.

No está permitido

  • Escanear puertos con Nmap u otras herramientas.
  • Buscar vulnerabilidades o ejecutar exploits.
  • Realizar fuerza bruta de subdominios, directorios o credenciales.
  • Acceder a paneles, cuentas o zonas privadas.
  • Enviar tráfico masivo o intentar evadir límites.
  • Investigar dominios distintos de los autorizados.

Encontrar un servicio visible no autoriza a entrar en él. Si descubres algo que parezca sensible, registra únicamente el nombre y comunícalo al profesor.


4. Material necesario

  • Ubuntu, Debian, Kali Linux o una máquina virtual Linux.
  • Conexión a Internet.
  • Un dominio autorizado por el profesor.
  • Terminal y editor de texto.
  • Herramientas: amass, subfinder, dnsutils, whois, curl, jq y, opcionalmente, geoip-bin.

El profesor proporcionará el objetivo:

DOMINIO_AUTORIZADO=____________________________

No sustituyas esta variable por el dominio de una empresa elegida al azar.


5. Preparación del entorno

Paso 1. Crear la estructura de trabajo

mkdir -p operacion-atlas/{capturas,resultados,script}
cd operacion-atlas

Comprueba la estructura:

find . -maxdepth 2 -type d

Paso 2. Instalar las herramientas

En una distribución basada en Ubuntu o Debian:

sudo apt update
sudo apt install amass dnsutils whois curl jq geoip-bin

Si Subfinder no está disponible en los repositorios de tu distribución, sigue la opción de instalación explicada en la documentación del curso. Por ejemplo, si tienes Snap:

sudo snap install subfinder

Paso 3. Comprobar la instalación

amass version
subfinder -version
host -V
whois --version
curl --version
jq --version

Evidencia 1: incluye una captura o salida de terminal que demuestre que las herramientas están disponibles. Si alguna no se puede instalar, explica el problema y continúa con las que funcionen.


6. Fase 1: reconocimiento inicial

Antes de ejecutar herramientas, completa una pequeña ficha:

CampoRespuesta
Dominio autorizado
Fecha y hora de inicio
Sistema operativo
Hipótesis inicial
¿Qué información esperas encontrar?

Formula al menos dos hipótesis. Por ejemplo:

  • El dominio puede utilizar varios subdominios para separar servicios.
  • Parte de la infraestructura puede estar alojada en un proveedor cloud.

No importa si después resultan incorrectas: deberán contrastarse con evidencias.


7. Fase 2: enumeración pasiva con Amass

Paso 1. Ejecutar Amass en modo pasivo

Sustituye dominio-autorizado.example por el objetivo indicado por el profesor:

amass enum -passive -d dominio-autorizado.example \
  -o resultados/amass.txt

El parámetro -passive es obligatorio en este reto.

Paso 2. Revisar los resultados

cat resultados/amass.txt

Cuenta los resultados:

wc -l resultados/amass.txt

Ordénalos y elimina duplicados:

sort -u resultados/amass.txt -o resultados/amass_limpio.txt

Paso 3. Interpretar

Responde:

  1. ¿Cuántos subdominios distintos encontró Amass?
  2. ¿Qué nombres parecen corresponder a servicios web, correo, API, desarrollo o administración?
  3. ¿Un nombre como dev, test o staging demuestra que existe un entorno vulnerable? Justifica la respuesta.
  4. ¿Por qué el resultado de una fuente OSINT puede estar desactualizado?

Evidencia 2: incluye el comando, el número de resultados y una selección razonada de hasta diez subdominios. No llenes el informe con capturas repetitivas.


8. Fase 3: enumeración con Subfinder

Paso 1. Ejecutar la segunda herramienta

subfinder -d dominio-autorizado.example \
  -o resultados/subfinder.txt

Paso 2. Limpiar la salida

sort -u resultados/subfinder.txt -o resultados/subfinder_limpio.txt

Paso 3. Comparar las herramientas

Subdominios encontrados por ambas:

comm -12 resultados/amass_limpio.txt resultados/subfinder_limpio.txt \
  > resultados/coincidencias.txt

Encontrados solamente por Amass:

comm -23 resultados/amass_limpio.txt resultados/subfinder_limpio.txt \
  > resultados/solo_amass.txt

Encontrados solamente por Subfinder:

comm -13 resultados/amass_limpio.txt resultados/subfinder_limpio.txt \
  > resultados/solo_subfinder.txt

Combina todos los resultados:

sort -u resultados/amass_limpio.txt resultados/subfinder_limpio.txt \
  > resultados/subdominios_finales.txt

Obtén los recuentos:

wc -l resultados/amass_limpio.txt \
      resultados/subfinder_limpio.txt \
      resultados/coincidencias.txt \
      resultados/subdominios_finales.txt

Completa la tabla:

ResultadoCantidad
Amass
Subfinder
Coincidencias
Total único

Preguntas:

  1. ¿Qué herramienta ha encontrado más resultados?
  2. ¿Por qué dos herramientas OSINT pueden devolver resultados diferentes?
  3. ¿Por qué una coincidencia entre ambas fuentes aumenta la confianza, pero no confirma por sí sola que el servicio esté activo?

Evidencia 3: tabla comparativa y explicación de las diferencias.


9. Fase 4: resolución DNS

Ahora comprobarás qué nombres de la lista pueden resolverse actualmente.

Paso 1. Probar manualmente un subdominio

host subdominio.dominio-autorizado.example

También puedes consultar registros concretos:

dig +short A subdominio.dominio-autorizado.example
dig +short AAAA subdominio.dominio-autorizado.example
dig +short CNAME subdominio.dominio-autorizado.example

Paso 2. Automatizar la resolución de la lista

while IFS= read -r subdominio; do
  echo "### $subdominio"
  host "$subdominio"
done < resultados/subdominios_finales.txt \
  | tee resultados/resolucion_dns.txt

Paso 3. Crear una lista única de IPv4

while IFS= read -r subdominio; do
  dig +short A "$subdominio"
done < resultados/subdominios_finales.txt \
  | grep -E '^[0-9]+(\.[0-9]+){3}$' \
  | sort -u \
  > resultados/ips.txt

Revisa el resultado:

cat resultados/ips.txt
wc -l resultados/ips.txt

Paso 4. Analizar

Responde:

  1. ¿Todos los nombres encontrados mediante OSINT resuelven actualmente?
  2. ¿Hay varios subdominios que apunten a la misma IP?
  3. ¿Has encontrado registros CNAME?
  4. ¿Qué puede significar que varios servicios compartan dirección IP?
  5. ¿Qué diferencia existe entre no resolver un nombre y demostrar que nunca existió?

Evidencia 4: presenta una tabla con una muestra de entre cinco y diez resultados.

SubdominioTipo de registroIP o destino¿Resuelve?Observación

10. Fase 5: contexto de las direcciones IP

Selecciona un máximo de cinco IP públicas distintas. No es necesario consultar todas si la lista es muy grande.

Paso 1. Consulta WHOIS

whois DIRECCION_IP

Busca datos como:

  • Organización o propietario del rango.
  • ASN, si aparece.
  • País de registro.
  • Rango o bloque de red.
  • Contactos de abuso, sin utilizarlos ni recopilar datos innecesarios.

El país registrado en WHOIS no tiene por qué coincidir con la ubicación física exacta del servidor.

Paso 2. Consulta GeoIP local

geoiplookup DIRECCION_IP

Paso 3. Consulta una API desde terminal

curl -s "https://ipinfo.io/DIRECCION_IP/json" | jq

Extrae solamente algunos campos:

curl -s "https://ipinfo.io/DIRECCION_IP/json" \
  | jq '{ip, city, region, country, org, loc}'

Respeta los límites del servicio: una consulta por cada IP seleccionada es suficiente.

Paso 4. Correlacionar

Completa la tabla:

IPSubdominios asociadosOrganización/ASNPaís aproximadoPosible proveedorConfianza
Alta/Media/Baja

Responde:

  1. ¿Parece infraestructura propia, alojamiento compartido, CDN o proveedor cloud?
  2. ¿Coinciden WHOIS, GeoIP y la API?
  3. ¿Qué campos son hechos observados y cuáles son inferencias?
  4. ¿Por qué no debemos presentar una geolocalización de IP como una ubicación exacta?

Evidencia 5: tabla completada y una conclusión prudente sobre la infraestructura.


11. Fase 6: construir el script atlas.sh

Debes crear un script que automatice el proceso básico.

Requisitos mínimos

El script deberá:

  1. Recibir un dominio como argumento.
  2. Comprobar que se ha indicado dicho argumento.
  3. Crear un directorio de resultados.
  4. Ejecutar Amass en modo pasivo.
  5. Ejecutar Subfinder.
  6. Combinar y eliminar duplicados.
  7. Resolver las direcciones IPv4.
  8. Guardar los resultados en archivos.
  9. Mostrar un resumen final.

Plantilla orientativa

Guárdala como script/atlas.sh y completa las partes marcadas:

#!/usr/bin/env bash

set -u

if [ "$#" -ne 1 ]; then
  echo "Uso: $0 dominio-autorizado.example"
  exit 1
fi

DOMINIO="$1"
FECHA="$(date +%Y%m%d_%H%M%S)"
SALIDA="resultados_${DOMINIO}_${FECHA}"

mkdir -p "$SALIDA"

echo "[+] Iniciando reconocimiento pasivo de: $DOMINIO"

# 1. Comprobar que las herramientas necesarias existen.
# PISTA: command -v nombre_herramienta

# 2. Ejecutar Amass exclusivamente en modo pasivo.

# 3. Ejecutar Subfinder.

# 4. Ordenar, combinar y eliminar duplicados.

# 5. Resolver las direcciones IPv4 con dig.

# 6. Mostrar el número de subdominios e IP únicas.

echo "[+] Proceso finalizado. Resultados guardados en: $SALIDA"

Da permiso de ejecución:

chmod +x script/atlas.sh

Ejecútalo únicamente con el dominio autorizado:

./script/atlas.sh dominio-autorizado.example

Validaciones que debe incorporar

Como mínimo, comprueba la presencia de cada herramienta:

if ! command -v amass >/dev/null 2>&1; then
  echo "Error: Amass no está instalado."
  exit 1
fi

Repite o adapta la validación para las demás herramientas.

Pruebas obligatorias

Documenta qué ocurre cuando:

  • Se ejecuta sin argumentos.
  • Se ejecuta con el dominio autorizado.
  • Falta una herramienta necesaria.
  • Una de las herramientas no devuelve resultados.

Evidencia 6: código completo del script, capturas o salidas de las pruebas y explicación de su funcionamiento.


12. Fase 7: análisis final

Redacta una conclusión que responda a estas preguntas:

  1. ¿Cuál es la superficie externa observada?
  2. ¿Cuántos subdominios únicos se han identificado?
  3. ¿Cuántos resolvían en el momento del análisis?
  4. ¿Qué proveedores o redes parecen alojarlos?
  5. ¿Existen indicios de servicios de desarrollo, pruebas, API o correo?
  6. ¿Qué resultados tienen una confianza alta, media o baja?
  7. ¿Qué limitaciones ha tenido la investigación?
  8. ¿Se confirmaron las hipótesis iniciales?
  9. ¿Qué recomendarías revisar al responsable del dominio?

Las recomendaciones deben ser defensivas. Por ejemplo:

  • Mantener un inventario de subdominios.
  • Eliminar registros DNS abandonados.
  • Revisar nombres que revelen información innecesaria.
  • Comprobar que los entornos de prueba no estén publicados accidentalmente.
  • Repetir periódicamente el inventario pasivo.

No afirmes que existe una vulnerabilidad si no dispones de evidencia suficiente.


13. Entrega

Entrega un archivo ZIP con esta estructura:

operacion-atlas/
├── README.md
├── capturas/
│   ├── 01_herramientas.png
│   ├── 02_amass.png
│   ├── 03_subfinder.png
│   └── ...
├── resultados/
│   ├── amass.txt
│   ├── subfinder.txt
│   ├── coincidencias.txt
│   ├── subdominios_finales.txt
│   ├── resolucion_dns.txt
│   └── ips.txt
└── script/
    └── atlas.sh

El archivo README.md será el informe principal y deberá contener:

  1. Portada e identificación del alumno o equipo.
  2. Objetivo y alcance autorizado.
  3. Entorno y herramientas.
  4. Hipótesis iniciales.
  5. Procedimiento reproducible.
  6. Evidencias seleccionadas.
  7. Tablas de resultados.
  8. Explicación del script.
  9. Conclusiones y recomendaciones.
  10. Limitaciones y fuentes consultadas.

No se valorará mejor un informe por tener más capturas. Se valorará que cada evidencia sea legible, necesaria y esté interpretada.


14. Rúbrica de evaluación

CriterioPuntuación
Preparación, alcance ético y organización1 punto
Enumeración pasiva con Amass y Subfinder2 puntos
Limpieza, comparación y combinación de resultados1,5 puntos
Resolución DNS y análisis de IP1,5 puntos
Script Bash, validaciones y pruebas2 puntos
Interpretación, correlación y conclusiones1,5 puntos
Calidad del README y evidencias0,5 puntos
Total10 puntos

Penalizaciones importantes

  • Uso de técnicas activas no autorizadas: la práctica podrá considerarse no superada.
  • Investigación de dominios fuera del alcance: la práctica podrá considerarse no superada.
  • Script que no se explica o no se prueba: no se considerará completamente válido.
  • Capturas sin interpretación: tendrán poco valor como evidencia.
  • Resultados o conclusiones inventados: penalización grave.

15. Nivel avanzado opcional: inteligencia reproducible

Quienes terminen antes pueden incorporar estas mejoras:

Mejora A. Archivo CSV

Genera un archivo con el formato:

subdominio,ip
www.dominio.example,203.0.113.10
api.dominio.example,203.0.113.20

Mejora B. Parámetros adicionales

Permite utilizar:

./script/atlas.sh -d dominio-autorizado.example -o informe

Mejora C. Registro de ejecución

Guarda fecha, herramienta, versión y comando ejecutado en un archivo log.txt.

Mejora D. Manejo de errores

Haz que el script continúe de forma controlada si Amass o Subfinder falla, indicando qué fuente no estuvo disponible.

Mejora E. Comparación temporal

Ejecuta el análisis en dos momentos autorizados distintos y compara las listas:

comm -13 resultado_anterior.txt resultado_actual.txt

Explica qué nombres son nuevos, cuáles han desaparecido y por qué eso no basta para asegurar que se haya producido un cambio real en la infraestructura.


16. Pregunta de cierre

Si todas las herramientas utilizadas consultan fuentes públicas, ¿por qué sigue siendo necesario definir un alcance, aplicar límites y tratar los resultados con responsabilidad?