
Analise saídas de LLMs e conteúdos gerados por IA em busca de sinais de exfiltração de dados (EchoLeak, CVE-2025-32711) antes que cheguem aos usuários ou a sistemas downstream.
Analise saídas de LLM e conteúdo gerado por IA para sinais de exfiltração de dados antes que eles cheguem a usuários, logs ou sistemas a jusante.
Aplicações modernas de LLM processam rotineiramente prompts sensíveis, documentos internos, respostas de API e dados de usuários. Isso cria uma nova fronteira de segurança: a camada de saída.
A família de ataques EchoLeak (incluindo CVE-2025-32711) demonstrou como payloads ocultos ou ofuscados podem ser embutidos em texto gerado e usados para exfiltrar dados por meio de ferramentas, links ou cadeias de parsing.
Scanners tradicionais focam em arquivos, dependências e tráfego em runtime. Eles não inspecionam a saída gerada pelo modelo de uma forma especificamente projetada para isso.
exfil-scan fornece um "scanner de vírus para respostas de LLM":
| Category | Severity | What is detected |
|---|---|---|
| Hidden Text | HIGH | Sequências Unicode de largura zero e invisíveis usadas para ocultar payloads |
| Encoded Data | HIGH | Sequências de escape Base64/hex/octal/unicode que provavelmente carregam conteúdo codificado |
| Data-in-URL | MEDIUM | Strings de consulta suspeitamente longas e payloads codificados em parâmetros de URL |
| Metadata Leaks | HIGH | Chaves semelhantes a credenciais e formatos de token em saídas estruturadas/não estruturadas |
| Unicode Steganography | MEDIUM | Controles bidirecionais e palavras em estilo homóglifo com scripts mistos |
| Structural Anomalies | LOW | Sequências extremas de novas linhas/tabs e artefatos de codificação com caracteres de substituição |
low, medium, highstdin, arquivo único ou diretóriotext, 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
Notas:
--input ou --directory, não ambos.stdin.1.exfil-scan --input suspicious.txt --format text
Estilo esperado:
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
Forma esperada:
{
"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 esperado:
exfil-scan --input suspicious.txt --format markdown --output report.md
Estilo esperado:
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
O repositório acompanha o arquivo default-config.yaml.
Você pode passar seu próprio arquivo com --config.
Ajuste de sensibilidade:
low: menos falsos positivos, limites maioresmedium: padrões equilibradoshigh: captura padrões mais sutisSubstituição de sensibilidade pela CLI:
exfil-scan --input out.txt --sensitivity high
Você pode adicionar seus próprios formatos de token e chaves de metadados:
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"
Em seguida, execute:
exfil-scan --input response.log --config ./my-config.yaml
Responsabilidades dos módulos:
exfil_scan/cli.py: parsing de argumentos, seleção de entrada, renderização de saída, tratamento de saídaexfil_scan/config.py: padrões, carregamento de YAML, merge recursivo, normalização de perfisexfil_scan/scanner.py: seis mecanismos de detecção, dataclasses de achados, formatação de relatóriostests/test_scan.py: testes de regressão de detecção e de formatos de saídaFluxo de execução:
| Code | Meaning |
|---|---|
0 | Nenhum achado (limpo) |
1 | Achados detectados |
2 | Erro de runtime ou de argumento |
Isso torna a integração com CI direta:
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Se qualquer detecção for encontrada, sua tarefa pode falhar rapidamente com base no código de saída 1.
Execute os testes:
pytest
A cobertura inclui:
exfil-scan é um scanner heurístico.
Ele foi projetado para reduzir riscos e expor saídas suspeitas, não para comprovar a segurança do conteúdo.
Padrão de implantação recomendado:
Este projeto está licenciado sob a Licença MIT.
Consulte LICENSE para os termos completos.
Contribuições são bem-vindas. Ao abrir um PR, inclua:
| Option | Type | Default | Description |
|---|
-i, --input | path | none | Escaneia um arquivo de entrada |
-d, --directory | path | none | Escaneia todos os arquivos suportados em um diretório |
-r, --recursive | flag | false | Percorre recursivamente subdiretórios com --directory |
-c, --config | path | none | Caminho do arquivo de configuração YAML |
-s, --sensitivity | low|medium|high | config/default | Substitui o perfil de sensibilidade |
-f, --format | text|json|html|markdown | text | Renderiza o formato do relatório |
-o, --output | path | stdout | Escreve o relatório renderizado em um arquivo |
--version | flag | n/a | Exibe a versão da CLI |
-h, --help | flag | n/a | Mostra uso e argumentos |