Files
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

2.5 KiB

Capability: osint-enrich

Orquestadores de enriquecimiento OSINT: componen las funciones atómicas de osint-passive para aumentar los datapoints de una entidad (persona u organización) del vault osint a partir de fuentes públicas. No tocan al objetivo de forma intrusiva. Mismo encuadre dual-use que osint-passive: solo investigación autorizada.

Funciones

ID Firma Qué hace
scan_ficha_attachments_metadata_py_cybersecurity scan_ficha_attachments_metadata(attachments_dir) -> dict Escanea los attachments de una ficha (imágenes + PDFs), extrae EXIF/PDF metadata y agrega GPS y fechas.
enrich_person_passive_py_cybersecurity enrich_person_passive(nombre, apellidos, dominios=None, usernames=None) -> dict Candidatos para una persona: emails (guess), username hits, dorks. No verifica ni ejecuta.
enrich_org_passive_py_cybersecurity enrich_org_passive(dominio) -> dict Perfil pasivo de una org: whois + dns + subdominios. Resiliente a fallo parcial (campo errors).

Ejemplo canónico

cd /home/enmanuel/fn_registry
python/.venv/bin/python3 - <<'PYEOF'
import sys; sys.path.insert(0, "python/functions")
from cybersecurity import (scan_ficha_attachments_metadata,
                           enrich_person_passive, enrich_org_passive)

# 1. Metadatos de los documentos ya guardados de una persona (datos propios)
m = scan_ficha_attachments_metadata(
    "/home/enmanuel/Obsidian/osint/attachments/personas/enmanuel-gutierrez-perez")
print(m["summary"])              # {n_files, n_images, n_pdfs, n_gps_points, n_dates, errors}

# 2. Candidatos de enriquecimiento de una persona (no toca al objetivo)
p = enrich_person_passive("Enmanuel", "Gutierrez Perez",
                          dominios=["gmail.com"], usernames=["enmanuelgp"])
print(p["email_candidates"][:5], len(p["dorks"]))

# 3. Perfil pasivo de una organización por su dominio
o = enrich_org_passive("organic-machine.com")
print(o["whois"].get("registrar"), o["dns"].get("A"), len(o["subdomains"]), o["errors"])
PYEOF

Fronteras

  • Compone solo funciones osint-passive. Para activa (port scan, fingerprint) haría falta osint-active (no construido).
  • Devuelve candidatos/datos crudos; decidir qué escribir en la ficha (y verificar) es del caller. Encaja con el reporte de projects/osint/tools/person_datapoints.py.

Gotchas

  • enrich_org_passive nunca peta por una fuente lenta (crt.sh): el fallo va a errors.
  • enrich_person_passive puede tardar por enumerate_username_sites (un request por sitio).