Files
fn_registry/docs/capabilities/osint-passive.md
T
egutierrez eb8dbf66a1 feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 00:16:46 +02:00

3.7 KiB

Capability: osint-passive

Recolección OSINT pasiva: obtener información sin interactuar de forma intrusiva con el objetivo, usando solo fuentes públicas (DNS público, RDAP, Certificate Transparency, metadatos de documentos propios, servicios de perfil públicos). Pensado para investigación autorizada, due diligence, pentest con permiso y enriquecimiento de las fichas del vault osint.

Encuadre: dual-use. Úsese solo contra objetivos propios o con autorización. Las funciones que tocan servicios públicos (enumerate_username_sites, enum_subdomains_crtsh) dejan una huella mínima (un request a cada servicio); respeta sus rate limits.

Funciones

ID Firma Qué hace
extract_exif_metadata_py_cybersecurity extract_exif_metadata(image_path) -> dict EXIF de una imagen (fecha, cámara, software, GPS decimal) vía Pillow.
extract_pdf_metadata_py_cybersecurity extract_pdf_metadata(pdf_path) -> dict Document Info de un PDF (autor, fechas, software, páginas) vía pypdf.
guess_email_formats_py_cybersecurity guess_email_formats(nombre, apellidos, dominio) -> list Pure. Candidatos de email comunes a partir de nombre + dominio.
enumerate_username_sites_py_cybersecurity enumerate_username_sites(username, ...) -> list ¿Existe un username en ~12 redes públicas? (sherlock ligero, por código HTTP).
build_search_dorks_py_cybersecurity build_search_dorks(target, tipo, ...) -> list Pure. Genera dorks de motor de búsqueda (persona/email/dominio/usuario).
dns_records_py_cybersecurity dns_records(dominio, types=None) -> dict Registros DNS (A/AAAA/MX/TXT/NS/CNAME) vía dig.
whois_lookup_py_cybersecurity whois_lookup(dominio, ...) -> dict Datos de registro vía RDAP (WHOIS moderno HTTP/JSON, sin CLI).
enum_subdomains_crtsh_py_cybersecurity enum_subdomains_crtsh(dominio, ...) -> list Subdominios desde Certificate Transparency (crt.sh).

Orquestadores (grupo osint-enrich): scan_ficha_attachments_metadata, enrich_person_passive, enrich_org_passive.

Ejemplo canónico

cd /home/enmanuel/fn_registry
python/.venv/bin/python3 - <<'PYEOF'
import sys; sys.path.insert(0, "python/functions")
from cybersecurity import (dns_records, whois_lookup, enum_subdomains_crtsh,
                           guess_email_formats, build_search_dorks, extract_exif_metadata)

# Dominio (org)
print(whois_lookup("organic-machine.com")["registrar"])      # OVH sas
print(dns_records("organic-machine.com")["A"])                # ['135.125.201.30']
print(enum_subdomains_crtsh("organic-machine.com")[:5])

# Persona
print(guess_email_formats("Enmanuel", "Gutierrez Perez", "gmail.com")[:5])
print(build_search_dorks("Enmanuel Gutierrez Perez", "persona")[:3])

# Metadatos de un documento propio
print(extract_exif_metadata("/home/enmanuel/Obsidian/osint/attachments/personas/enmanuel-gutierrez-perez/dni-1.jpg"))
PYEOF

Fronteras (qué NO es)

  • No es recolección activa: no hace port scan, dns brute, ni sondea la infra del objetivo. Eso sería el grupo osint-active (no construido todavía).
  • No verifica los candidatos: guess_email_formats propone, no confirma que el email exista.
  • No ejecuta los dorks: build_search_dorks los genera; ejecutarlos es otro paso (browser).
  • No incluye breach/leak lookup (HIBP requiere API key de pago) — pendiente.

Gotchas

  • crt.sh va lento / rate-limitado y a veces responde 404; los orquestadores lo capturan en errors y siguen.
  • enumerate_username_sites da falsos positivos/negativos por anti-bot de algunos sitios.
  • El GPS de EXIF revela ubicación — dato sensible; trátese como PII.