feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# Capability: osint-enrich
|
||||
|
||||
Orquestadores de enriquecimiento OSINT: componen las funciones atómicas de
|
||||
[osint-passive](osint-passive.md) 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
|
||||
|
||||
```bash
|
||||
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).
|
||||
Reference in New Issue
Block a user