# 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](osint-enrich.md)): `scan_ficha_attachments_metadata`, `enrich_person_passive`, `enrich_org_passive`. ## Ejemplo canónico ```bash 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.