
Analyser les sorties des LLM et les contenus générés par IA pour détecter les signaux d'exfiltration de données (EchoLeak, CVE-2025-32711) avant qu'ils n'atteignent les utilisateurs ou les systèmes en aval
Analyse les sorties des LLM et les contenus générés par l'IA à la recherche de signaux d'exfiltration de données avant qu'ils n'atteignent les utilisateurs, les journaux ou les systèmes en aval.
Les applications LLM modernes traitent couramment des invites sensibles, des documents internes, des réponses API et des données utilisateur. Cela crée une nouvelle frontière de sécurité : la couche de sortie.
La famille d'attaques EchoLeak (dont CVE-2025-32711) a démontré comment des charges utiles cachées ou obscurcies peuvent être intégrées dans du texte généré et utilisées pour exfiltrer des données via des outils, des liens ou des chaînes d'analyse.
Les scanners traditionnels se concentrent sur les fichiers, les dépendances et le trafic d'exécution. Ils n'inspectent pas les sorties générées par le modèle de manière dédiée.
exfil-scan fournit un « antivirus pour réponses LLM » :
| Catégorie | Sévérité | Ce qui est détecté |
|---|---|---|
| Texte caché | HIGH | Séquences Unicode à largeur nulle et invisibles utilisées pour dissimuler des charges utiles |
| Données encodées | HIGH | Suites d'échappement Base64/hex/octal/unicode susceptibles de transporter du contenu encodé |
| Données dans les URL | MEDIUM | Chaînes de requête anormalement longues et charges utiles encodées dans des paramètres d'URL |
| Fuites de métadonnées | HIGH | Clés de type identifiants et formats de jetons dans les sorties structurées/non structurées |
| Stéganographie Unicode | MEDIUM | Contrôles bidirectionnels et mots de type homoglyphes à écritures mixtes |
| Anomalies structurelles | LOW | Suites extrêmes de sauts de ligne/tabulations et artefacts d'encodage à caractères de remplacement |
low, medium, highstdin, un fichier unique ou un répertoiretext, json, markdown ou htmlgit clone https://github.com/your-org/exfil-scan.git
cd exfil-scan
pip install -e .
pip install exfil-scan
pip install -e ".[dev]"
pytest
echo 'api_key: sk-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456' | exfil-scan
exfil-scan --input output.txt
exfil-scan --directory ./model-logs --recursive
Remarques :
--input, soit --directory, pas les deux.stdin.1.exfil-scan --input suspicious.txt --format text
Style attendu :
exfil-scan report
=================
Scanned targets: 1
Total findings: 2
1. [HIGH] metadata_leaks/known_token_format:openai_key
Location: suspicious.txt:1:10
Description: Matched known credential/token format (openai_key).
exfil-scan --input suspicious.txt --format json
Forme attendue :
{
"finding_count": 2,
"scanned_targets": ["suspicious.txt"],
"findings": [
{
"category": "metadata_leaks",
"rule": "known_token_format:openai_key",
"severity": "HIGH",
"description": "Matched known credential/token format (openai_key).",
"location": "suspicious.txt:1:10",
"snippet": "..."
}
]
}
exfil-scan --directory ./outputs --recursive --format html --output report.html
Comportement attendu :
exfil-scan --input suspicious.txt --format markdown --output report.md
Style attendu :
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
Le dépôt est fourni avec default-config.yaml.
Vous pouvez passer votre propre fichier avec --config.
Réglage de la sensibilité :
low : moins de faux positifs, seuils plus élevésmedium : valeurs par défaut équilibréeshigh : détecte des motifs plus subtilsRemplacement de la sensibilité via le CLI :
exfil-scan --input out.txt --sensitivity high
Vous pouvez ajouter vos propres formats de jetons et clés de métadonnées :
sensitivity: medium
rules:
metadata_keys:
- api_key
- db_password
- internal_token
token_patterns:
custom_jwt: "\\beyJ[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\.[A-Za-z0-9_\\-]{10,}\\b"
corp_secret: "\\bcorp_[A-Za-z0-9]{24,}\\b"
Exécutez ensuite :
exfil-scan --input response.log --config ./my-config.yaml
Responsabilités des modules :
exfil_scan/cli.py : analyse des arguments, sélection de l'entrée, rendu de la sortie, gestion des codes de sortieexfil_scan/config.py : valeurs par défaut, chargement YAML, fusion récursive, normalisation des profilsexfil_scan/scanner.py : six moteurs de détection, classes de données des résultats, formatage des rapportstests/test_scan.py : tests de régression sur la détection et les formats de sortieFlux d'exécution :
| Code | Signification |
|---|---|
0 | Aucun résultat (propre) |
1 | Résultats détectés |
2 | Erreur d'exécution ou d'argument |
Cela rend l'intégration CI directe :
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Si une détection est trouvée, votre tâche peut échouer rapidement grâce au code de sortie 1.
Exécutez les tests :
pytest
La couverture comprend :
exfil-scan est un scanner heuristique.
Il est conçu pour réduire les risques et faire remonter les sorties suspectes, pas pour prouver la sécurité d'un contenu.
Modèle de déploiement recommandé :
Ce projet est sous licence MIT.
Voir LICENSE pour les conditions complètes.
Les contributions sont les bienvenues. Lors de l'ouverture d'une PR, incluez :
| Option | Type | Défaut | Description |
|---|
-i, --input | chemin | aucun | Analyse un fichier d'entrée |
-d, --directory | chemin | aucun | Analyse tous les fichiers pris en charge d'un répertoire |
-r, --recursive | indicateur | false | Parcourt récursivement les sous-répertoires avec --directory |
-c, --config | chemin | aucun | Chemin du fichier de configuration YAML |
-s, --sensitivity | low|medium|high | config/défaut | Remplace le profil de sensibilité |
-f, --format | text|json|html|markdown | text | Format de rendu du rapport |
-o, --output | chemin | stdout | Écrit le rapport rendu dans un fichier |
--version | indicateur | n/a | Affiche la version du CLI |
-h, --help | indicateur | n/a | Affiche l'usage et les arguments |