eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
3.7 KiB
Markdown
65 lines
3.7 KiB
Markdown
# 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.
|