Skip to content
exfil

exfil

Sploitus September 8, 2026

Сканирование выводов 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 обязательно включайте:

* обновления документации при добавлении новых правил