
Сканируйте выводы LLM и контент, сгенерированный ИИ, на наличие сигналов эксфильтрации данных (EchoLeak, CVE-2025-32711), прежде чем они попадут к пользователям или в downstream-системы.
Сканирование выводов LLM и AI-сгенерированного контента на предмет сигналов эксфильтрации данных до того, как они попадут к пользователям, в логи или в нижестоящие системы.
Современные LLM-приложения регулярно обрабатывают чувствительные промпты, внутренние документы, ответы API и пользовательские данные. Это создаёт новую границу безопасности: выходной слой.
Семейство атак EchoLeak (включая CVE-2025-32711) продемонстрировало, как скрытые или обфусцированные полезные нагрузки могут быть встроены в сгенерированный текст и использованы для эксфильтрации данных через инструменты, ссылки или цепочки разбора.
Традиционные сканеры фокусируются на файлах, зависимостях и сетевом трафике. Они не проверяют сгенерированный вывод модели специализированным образом.
exfil-scan предоставляет «антивирусный сканер для ответов LLM»:
| Категория | Серьёзность | Что обнаруживается |
|---|---|---|
| Скрытый текст | HIGH | Нулевой ширины и невидимые Unicode-последовательности, используемые для сокрытия полезной нагрузки |
| Закодированные данные | HIGH | Base64/hex/octal/unicode escape-последовательности, которые с высокой вероятностью содержат закодированный контент |
| Данные в URL | MEDIUM | Подозрительно длинные строки запроса и закодированные параметры в URL |
| Утечки метаданных | HIGH | Ключи, похожие на учётные данные, и форматы токенов в структурированных/неструктурированных выводах |
| Юникодная стеганография | MEDIUM | Управляющие символы двунаправленного текста и слова, похожие на гомоглифы из смешанных алфавитов |
| Структурные аномалии | LOW | Экстремальные последовательности переводов строк/табуляций и артефакты кодирования с символами замены |
low, medium, highstdin, одного файла или каталогаtext, json, markdown или 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
Примечания:
--input, либо --directory, но не оба одновременно.stdin.1.exfil-scan --input suspicious.txt --format text
Ожидаемый вид:
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
Ожидаемая структура:
{
"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
Ожидаемое поведение:
exfil-scan --input suspicious.txt --format markdown --output report.md
Ожидаемый вид:
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
В репозитории поставляется файл default-config.yaml.
Вы можете передать собственный файл с помощью --config.
Настройка чувствительности:
low: меньше ложных срабатываний, больше пороговые значенияmedium: сбалансированные настройки по умолчаниюhigh: обнаруживает более тонкие паттерныПереопределение чувствительности через CLI:
exfil-scan --input out.txt --sensitivity high
Вы можете добавить собственные форматы токенов и ключи метаданных:
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"
Затем выполните:
exfil-scan --input response.log --config ./my-config.yaml
Обязанности модулей:
exfil_scan/cli.py: разбор аргументов, выбор источника ввода, рендеринг вывода, обработка кодов завершенияexfil_scan/config.py: значения по умолчанию, загрузка YAML, рекурсивное слияние, нормализация профилейexfil_scan/scanner.py: шесть движков обнаружения, dataclasses находок, форматирование отчётовtests/test_scan.py: регрессионные тесты обнаружения и форматов выводаПорядок выполнения:
| Код | Значение |
|---|---|
0 | Срабатываний не найдено (чисто) |
1 | Обнаружены срабатывания |
2 | Ошибка выполнения или аргументов |
Это упрощает интеграцию с CI:
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Если обнаружено хоть одно срабатывание, ваша задача может остановиться по коду 1.
Запуск тестов:
pytest
Покрытие включает:
exfil-scan — эвристический сканер.
Он предназначен для снижения риска и выявления подозрительного вывода, а не для доказательства безопасности контента.
Рекомендуемая схема развёртывания:
Этот проект распространяется под лицензией MIT.
Полные условия см. в LICENSE.
Вклад приветствуется. При открытии PR обязательно включайте:
| Параметр | Тип | По умолчанию | Описание |
|---|
-i, --input | path | нет | Сканировать один входной файл |
-d, --directory | path | нет | Сканировать все поддерживаемые файлы в каталоге |
-r, --recursive | flag | false | Рекурсивно обходить вложенные каталоги с --directory |
-c, --config | path | нет | Путь к YAML-файлу конфигурации |
-s, --sensitivity | low|medium|high | config/default | Переопределить профиль чувствительности |
-f, --format | text|json|html|markdown | text | Формат отчёта |
-o, --output | path | stdout | Записать сформированный отчёт в файл |
--version | flag | n/a | Вывести версию CLI |
-h, --help | flag | n/a | Показать использование и аргументы |