Сканирование выводов LLM и AI-сгенерированного контента на предмет сигналов эксфильтрации данных до того, как они попадут к пользователям, в логи или в нижестоящие системы.
Современные LLM-приложения регулярно обрабатывают чувствительные промпты, внутренние документы, ответы API и пользовательские данные. Это создаёт новую границу безопасности: **выходной слой**.
Семейство атак EchoLeak (включая CVE-2025-32711) продемонстрировало, как скрытые или обфусцированные полезные нагрузки могут быть встроены в сгенерированный текст и использованы для эксфильтрации данных через инструменты, ссылки или цепочки разбора.
Традиционные сканеры фокусируются на файлах, зависимостях и сетевом трафике. Они не проверяют сгенерированный вывод модели специализированным образом.
`exfil-scan` предоставляет «антивирусный сканер для ответов LLM»:
* проверяет обычный текст, JSON, Markdown и логи
* выявляет шесть классов подозрительных эксфильтрационных паттернов
* сообщает о находках с уровнем серьёзности и местоположением
* легко интегрируется в CI/CD и локальные рабочие процессы разработчика
Категория| Серьёзность| Что обнаруживается
Скрытый текст| HIGH| Нулевой ширины и невидимые Unicode-последовательности, используемые для сокрытия полезной нагрузки
Закодированные данные| HIGH| Base64/hex/octal/unicode escape-последовательности, которые с высокой вероятностью содержат закодированный контент
Данные в URL| MEDIUM| Подозрительно длинные строки запроса и закодированные параметры в URL
Утечки метаданных| HIGH| Ключи, похожие на учётные данные, и форматы токенов в структурированных/неструктурированных выводах
Юникодная стеганография| MEDIUM| Управляющие символы двунаправленного текста и слова, похожие на гомоглифы из смешанных алфавитов
Структурные аномалии| LOW| Экстремальные последовательности переводов строк/табуляций и артефакты кодирования с символами замены
* Три профиля чувствительности: `low`, `medium`, `high`
* Поддержка переопределения конфигурации через YAML
* Ввод из `stdin`, одного файла или каталога
* Вывод в форматах `text`, `json`, `markdown` или `html`
* Стабильные коды возврата для автоматизации
* Чистый Python API для встраивания в другие инструменты
git clone
### Стандартная установка через pip (когда будет опубликовано)
### Сканирование вывода LLM через конвейер
echo 'api_key: sk-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456' | exfil-scan
exfil-scan --directory ./model-logs --recursive
* Используйте либо `--input`, либо `--directory`, но не оба одновременно.
* Если путь не указан, инструмент читает из `stdin`.
* Если найдены срабатывания, процесс завершается с кодом `1`.
## 7) Примеры использования по форматам вывода
exfil-scan --input suspicious.txt --format text
1. [HIGH] metadata_leaks/known_token_format:openai_key
Description: Matched known credential/token format (openai_key).
exfil-scan --input suspicious.txt --format json
"description": "Matched known credential/token format (openai_key).",
exfil-scan --directory ./outputs --recursive --format html --output report.html
* Создаёт отдельную HTML-страницу с таблицей находок
* Экранирует контент для безопасного отображения
* Включает серьёзность, категорию, правило, местоположение, описание
exfil-scan --input suspicious.txt --format markdown --output report.md
В репозитории поставляется файл `default-config.yaml`. Вы можете передать собственный файл с помощью `--config`.
* `low`: меньше ложных срабатываний, больше пороговые значения
* `medium`: сбалансированные настройки по умолчанию
* `high`: обнаруживает более тонкие паттерны
Переопределение чувствительности через CLI:
exfil-scan --input out.txt --sensitivity high
## 9) Собственные паттерны и настройка политик
Вы можете добавить собственные форматы токенов и ключи метаданных:
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`: регрессионные тесты обнаружения и форматов вывода
2. Конфигурация загружает значения по умолчанию + необязательные переопределения.
3. Сканер читает текст из stdin/файла/каталога.
4. Каждая включённая категория запускается независимо.
5. Находки сортируются по серьёзности и выводятся.
6. Код завершения сообщает об успехе/срабатывании/ошибке для автоматизации.
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Если обнаружено хоть одно срабатывание, ваша задача может остановиться по коду `1`.
* форматирование отчётов во всех четырёх режимах вывода
* проверки на уровне правил для стабильного поведения
`exfil-scan` — эвристический сканер. Он предназначен для снижения риска и выявления подозрительного вывода, а не для доказательства безопасности контента.
1. запускайте сканер в CI на тестовых промптах и фикстурных выводах
2. запускайте сканер в продакшн-гардрейлах на сгенерированных ответах
3. направляйте находки на триаж аналитикам и в телеметрию
4. постоянно настраивайте пороговые значения конфигурации на основе анализа ложных срабатываний
Этот проект распространяется под лицензией MIT. Полные условия см. в `LICENSE`.
Вклад приветствуется. При открытии PR обязательно включайте:
* обновления документации при добавлении новых правил
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
