
Scansiona gli output degli LLM e i contenuti generati dall'IA per individuare segnali di esfiltrazione di dati (EchoLeak, CVE-2025-32711) prima che raggiungano gli utenti o i sistemi a valle
Scansiona gli output LLM e i contenuti generati dall'IA per individuare segnali di esfiltrazione di dati prima che raggiungano gli utenti, i log o i sistemi a valle.
Le applicazioni LLM moderne elaborano di routine prompt sensibili, documenti interni, risposte API e dati utente. Questo crea un nuovo confine di sicurezza: il livello di output.
La famiglia di attacchi EchoLeak (incluso CVE-2025-32711) ha dimostrato come payload nascosti o offuscati possano essere incorporati nel testo generato e utilizzati per esfiltrare dati tramite strumenti, collegamenti o catene di parsing.
Gli scanner tradizionali si concentrano su file, dipendenze e traffico runtime. Non ispezionano l'output del modello generato in modo specificamente progettato.
exfil-scan fornisce un "antivirus per risposte LLM":
| Categoria | Gravità | Cosa viene rilevato |
|---|---|---|
| Testo nascosto | HIGH | Sequenze Unicode a larghezza zero e invisibili usate per nascondere payload |
| Dati codificati | HIGH | Sequenze di escape Base64/hex/octal/unicode che probabilmente trasportano contenuti codificati |
| Dati negli URL | MEDIUM | Query string sospettosamente lunghe e payload codificati nei parametri URL |
| Perdite di metadati | HIGH | Chiavi simili a credenziali e formati di token in output strutturati/non strutturati |
| Steganografia Unicode | MEDIUM | Controlli bidirezionali e parole in stile omoglifo con script misti |
| Anomalie strutturali | LOW | Sequenze estreme di nuove righe/tab e artefatti di codifica con caratteri di sostituzione |
low, medium, highstdin, singolo file o directorytext, json, markdown o 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
Note:
--input oppure --directory, non entrambi.stdin.1.exfil-scan --input suspicious.txt --format text
Stile previsto:
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
Struttura prevista:
{
"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
Comportamento previsto:
exfil-scan --input suspicious.txt --format markdown --output report.md
Stile previsto:
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
Il repository include default-config.yaml.
Puoi passare un tuo file con --config.
Regolazione della sensibilità:
low: meno falsi positivi, soglie più altemedium: impostazioni predefinite bilanciatehigh: rileva pattern più sottiliOverride della sensibilità da CLI:
exfil-scan --input out.txt --sensitivity high
Puoi aggiungere i tuoi formati di token e le tue chiavi di metadati:
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"
Quindi esegui:
exfil-scan --input response.log --config ./my-config.yaml
Responsabilità dei moduli:
exfil_scan/cli.py: parsing degli argomenti, selezione dell'input, rendering dell'output, gestione dell'uscitaexfil_scan/config.py: valori predefiniti, caricamento YAML, merge ricorsivo, normalizzazione dei profiliexfil_scan/scanner.py: sei motori di rilevamento, dataclass per i risultati, formattazione del reporttests/test_scan.py: test di regressione per rilevamento e formati di outputFlusso di esecuzione:
| Codice | Significato |
|---|---|
0 | Nessun risultato (pulito) |
1 | Risultati rilevati |
2 | Errore di runtime o degli argomenti |
Questo rende l'integrazione CI semplice:
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Se viene rilevato qualcosa, il tuo job può fallire rapidamente in base al codice di uscita 1.
Esegui i test:
pytest
La copertura include:
exfil-scan è uno scanner euristico.
È progettato per ridurre il rischio e far emergere output sospetti, non per dimostrare la sicurezza del contenuto.
Schema di distribuzione consigliato:
Questo progetto è concesso in licenza MIT.
Consulta LICENSE per i termini completi.
I contributi sono benvenuti. Quando apri una PR, includi:
| Opzione | Tipo | Default | Descrizione |
|---|
-i, --input | path | none | Scansiona un file di input |
-d, --directory | path | none | Scansiona tutti i file supportati in una directory |
-r, --recursive | flag | false | Attraversa ricorsivamente le sottodirectory con --directory |
-c, --config | path | none | Percorso del file di configurazione YAML |
-s, --sensitivity | low|medium|high | config/default | Sovrascrive il profilo di sensibilità |
-f, --format | text|json|html|markdown | text | Formato del report da generare |
-o, --output | path | stdout | Scrive il report generato in un file |
--version | flag | n/a | Mostra la versione della CLI |
-h, --help | flag | n/a | Mostra utilizzo e argomenti |