labfy-investigation/docs/osint/TOOLKIT.md
fy59 d65f9559e6 chore(checkpoint): preserve local investigation workbench
Preserve the local graph-first investigation stack through macro V1.

Include reviewed source, tests, contracts, documentation and synthetic assets.

Retain the standalone financial V21 test foundation without runtime migration.

Runtime remains V20; operational JobStore remains V3.

Local experimental checkpoint, not a stable release.
2026-09-27 08:34:46 +02:00

122 lines
10 KiB
Markdown

# Toolkit, adapters et capabilities
> **Statut :** contrat `TARGET` et inventaire `CURRENT` vérifié dans le dépôt
> **Important :** la présence dans ce document ne signifie ni installation ni
> disponibilité sur la machine
## 1. Contrat cible
Le frontend consomme des capabilities, pas une liste de commandes. Une
capability déclare au minimum :
```text
tool_id / tool_version adapter_id / adapter_version
capability_id output_contract_version
accepted_object_types produced_object_types
action_class effects
requirements network_contact
credentials_required cost / risk
availability / health unavailable_reason
```
Familles d'adapters : `NATIVE`, `SUBPROCESS`, `HTTP_API`, `MANUAL`. Un adapter
ne dépend ni de GTK, ni du frontend Web, ni directement de SQLite. Il conserve
le brut et produit des observations normalisées ; les services contrôlent jobs,
scope, persistance et publication.
Le futur gestionnaire distingue `ready`, `missing`, `incompatible`,
`credentials_missing` et `unhealthy`, avec version, origine d'installation et
profil d'exécution. Installation et mise à jour restent explicites et
versionnées ; aucun clic sur un nœud ne les déclenche.
## 2. État réellement présent — CURRENT
Le catalogue C enregistre les outils ci-dessous comme **optionnels**. Leur
détection ne prouve pas une intégration complète. L'action DNS dispose d'un
parcours structuré ; les recherches Sherlock, Maigret et Holehe sont des actions
cataloguées dont la disponibilité dépend de l'outil. Les parcours documentaires
emploient déjà ExifTool, Tesseract et qpdf de façon spécialisée.
| Outil / source primaire | Rôle actuel | Licence et dépendance | Entrée / sortie | Réseau, secrets et limites |
|---|---|---|---|---|
| [`dig`, `host` — BIND](https://www.isc.org/bind/) | DNS ; `dig` a un parcours révisable | licence du paquet à vérifier avant redistribution ; exécutables BIND optionnels | domaine / texte puis propositions DNS | `TARGET` pour DNS réel ; aucun secret ; contrat Toolkit générique absent |
| [`whois`](https://github.com/rfc1036/whois) | catalogue optionnel | licence du paquet à vérifier ; exécutable optionnel | cible / texte | registre tiers ; aucun secret prévu ; sortie hétérogène |
| [curl](https://curl.se/) | catalogue optionnel HTTP | licence curl à vérifier avant redistribution ; exécutable optionnel | URL / octets | tiers ou cible ; secrets possibles ; pas une capability générique sûre |
| [OpenSSL](https://www.openssl.org/) | catalogue optionnel TLS | licence/version du paquet à qualifier ; exécutable optionnel | endpoint ou fichier / texte | cible si connexion ; sortie dépendante de version |
| [Tesseract](https://github.com/tesseract-ocr/tesseract) | OCR spécialisé | Apache-2.0 vérifiée ; Leptonica et modèles de langue | image / texte, TSV | `NONE` ; qualité dépendante du document et des langues |
| [ExifTool](https://exiftool.org/) | métadonnées spécialisées | licence double à vérifier avant redistribution ; Perl et modules packagés | fichier / JSON | `NONE` ; contenu et métadonnées non fiables |
| [qpdf](https://qpdf.readthedocs.io/) | traitement PDF spécialisé | Apache-2.0 ou Artistic-2.0 vérifiée ; exécutable et bibliothèques packagées | PDF / PDF ou diagnostic | `NONE` ; PDF hostile, chiffrement et taille à borner |
| [John, pdf2john](https://www.openwall.com/john/) | récupération PDF facultative | licence/édition à vérifier ; exécutables optionnels | PDF / candidats et diagnostic | `NONE` ; coût CPU/temps élevé, aucun succès garanti |
| [Sherlock](https://github.com/sherlock-project/sherlock), [Maigret](https://github.com/soxoj/maigret) | actions username cataloguées | licences et dépendances Python à qualifier avant admission | username / résultats propres à l'outil | nombreux tiers ; conditions par site ; normalisation uniforme absente |
| [Holehe](https://github.com/megadose/holehe) | action e-mail cataloguée, à requalifier | licence et dépendances Python à requalifier | e-mail / réponses propres à l'outil | nombreux tiers ; effets observables possibles ; statut audit « à requalifier » |
Ce statut provient de `src/core/tool_catalog.c`,
`src/models/osint_action_catalog.c` et des parcours spécialisés. Il ne décrit
pas la présence des exécutables sur un poste donné.
## 3. Candidats recommandés par l'audit — TARGET
Les licences marquées « vérifiée » ont été confrontées à la source officielle
pendant J0 ; les autres restent une condition d'admission, pas une supposition.
Les versions ne sont volontairement pas figées ici.
| Capacité / outil | Statut Labfy et référence primaire | Licence / dépendances | Entrée / sortie cible | Contact réseau, secrets et limites |
|---|---|---|---|---|
| [ExifTool](https://exiftool.org/) | `CURRENT` spécialisé ; candidat adapter local | Perl et modules ; Perl Artistic/GPL à vérifier avant redistribution | fichier → JSON + brut | `NONE` ; formats non fiables, tailles bornées |
| [Tesseract](https://github.com/tesseract-ocr/tesseract) | `CURRENT` spécialisé ; candidat adapter OCR | Leptonica et modèles ; Apache-2.0 vérifiée | image → texte/TSV/hOCR selon contrat | `NONE` ; langues/modèles, qualité variable |
| [qpdf](https://qpdf.readthedocs.io/) | `CURRENT` spécialisé ; candidat adapter PDF | bibliothèques packagées ; Apache-2.0 ou Artistic-2.0 vérifiée | PDF → diagnostic ou dérivé | `NONE` ; chiffrement, bombes et taille |
| [RDAP](https://www.icann.org/rdap) | protocole candidat, aucun fournisseur choisi | client HTTP/provider à choisir ; licence à vérifier | domaine/IP/ASN → JSON | `THIRD_PARTY`, rate limits et conditions propres au registre |
| [Certificate Transparency](https://certificate.transparency.dev/) | écosystème candidat, aucune API unique choisie | client/provider à choisir ; licence à vérifier | domaine/certificat → entrées structurées | `THIRD_PARTY`, couverture et conditions propres au journal/service |
| [Wayback CDX](https://github.com/internetarchive/wayback/tree/master/wayback-cdx-server) | API candidate | client HTTP ; licence et conditions à vérifier | URL/domaine → index CDX/JSON | `THIRD_PARTY`, disponibilité, quotas, contenu archivé non fiable |
| [Subfinder](https://github.com/projectdiscovery/subfinder) | candidat passif, non intégré | binaire Go et providers ; MIT vérifiée | domaine → JSONL/liste avec sources | `THIRD_PARTY`, clés possibles, quotas et conditions par provider |
| [theHarvester](https://github.com/laramies/theHarvester) | candidat multi-source, non intégré | Python/modules/providers ; licence à vérifier | domaine → résultats structurés/bruts | `THIRD_PARTY`, clés et quotas selon modules |
| [Maigret](https://github.com/soxoj/maigret) | `CURRENT` catalogué, adapter commun non livré | Python/modules ; licence à vérifier | username → JSON/rapport + brut | `THIRD_PARTY`, faux positifs et conditions des sites |
RDAP est un protocole et Certificate Transparency un écosystème de journaux :
chaque provider futur aura son propre contrat, ses limites et ses conditions.
## 4. Candidats optionnels ou suspendus
| Outil/service | Position F0 | Condition avant intégration |
|---|---|---|
| [Sherlock](https://github.com/sherlock-project/sherlock) | optionnel, catalogué `CURRENT` | licence, formats, limites et dépendance des sources |
| [Amass](https://github.com/owasp-amass/amass) | optionnel | mode passif/actif, licence et ressources |
| [dnsx](https://github.com/projectdiscovery/dnsx) | optionnel | contact DNS, concurrence et provenance |
| [httpx](https://github.com/projectdiscovery/httpx) | optionnel | classe `PUBLIC_ACTIVE`, scope et redirections |
| [Katana](https://github.com/projectdiscovery/katana) | optionnel | crawling actif, budgets et contenus hostiles |
| [SpiderFoot](https://github.com/smicallef/spiderfoot) | optionnel | architecture, licences des modules et duplication fonctionnelle |
| [Nominatim](https://nominatim.org/) | provider géographique optionnel | politique d'usage, données transmises et cache |
| [GraphSense](https://graphsense.org/) | optionnel spécialisé | API/provider, licence, coût et interprétation financière |
| [Holehe](https://github.com/megadose/holehe) | à requalifier malgré le catalogue actuel | effets observables, maintenance, licence et légitimité des requêtes |
| Metagoofil, Photon, BlockSci | non retenus actuellement | nouvelle analyse explicite nécessaire |
| Nmap, Nuclei, Greenbone/OpenVAS | future piste autorisée séparée | seulement laboratoire/cibles autorisées, jamais v0.1.0 |
## 5. Runner et contrat machine
Le lot J4 est désormais `CURRENT` pour l'analyse EML native et ExifTool. Son
contrat détaillé, ses profils et limites sont dans
[`LOCAL_TOOLKIT_RUNNER.md`](../architecture/LOCAL_TOOLKIT_RUNNER.md). Le registre
est interrogé à l'exécution et lors de la projection ; les autres outils de ce
catalogue ne sont pas implicitement migrés.
Un adapter subprocess utilise des arguments séparés, un environnement minimal,
un répertoire privé, des limites CPU/mémoire/fichiers/processus, timeout,
annulation et arrêt des descendants. `stdout` et `stderr` sont capturés en
streaming avec plafonds distincts.
Le contrat distingue : aperçu tronqué, artefact réellement conservé et statut
`PARTIAL`. Une empreinte ne peut pas être présentée comme celle d'un contenu
complet qui n'a pas été conservé. La publication passe par staging, validation,
renommage puis transaction ou compensation documentée.
Pour Python/CLI/API, le contrat machine est versionné : schéma de sortie,
erreurs structurées, timeout, plafond, compatibilité et fixtures synthétiques.
Les sorties d'outil restent non fiables.
## 6. Règle d'admission
Avant intégration : source primaire, licence et redistribution, maintenance,
version, formats, dépendances, contact réseau, secrets, coût, limites, isolation,
normalisation, provenance et tests synthétiques sont documentés. Une absence
d'outil désactive proprement la capability. Aucun auto-update, téléchargement
exécutable ou installation silencieuse n'est autorisé.