## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-VIKASUDASI-EXFIL-SCAN
# exfil-scan
Сканирование выводов LLM и AI-сгенерированного контента на предмет сигналов эксфильтрации данных до того, как они попадут к пользователям, в логи или в нижестоящие системы.
* * *
## 1) Зачем нужен exfil-scan
Современные LLM-приложения регулярно обрабатывают чувствительные промпты, внутренние документы, ответы API и пользовательские данные. Это создаёт новую границу безопасности: **выходной слой**.
Семейство атак EchoLeak (включая CVE-2025-32711) продемонстрировало, как скрытые или обфусцированные полезные нагрузки могут быть встроены в сгенерированный текст и использованы для эксфильтрации данных через инструменты, ссылки или цепочки разбора.
Традиционные сканеры фокусируются на файлах, зависимостях и сетевом трафике. Они не проверяют сгенерированный вывод модели специализированным образом.
`exfil-scan` предоставляет «антивирусный сканер для ответов LLM»:
* проверяет обычный текст, JSON, Markdown и логи
* выявляет шесть классов подозрительных эксфильтрационных паттернов
* сообщает о находках с уровнем серьёзности и местоположением
* легко интегрируется в CI/CD и локальные рабочие процессы разработчика
* * *
## 2) Что он обнаруживает
Категория| Серьёзность| Что обнаруживается
---|---|---
Скрытый текст| HIGH| Нулевой ширины и невидимые Unicode-последовательности, используемые для сокрытия полезной нагрузки
Закодированные данные| HIGH| Base64/hex/octal/unicode escape-последовательности, которые с высокой вероятностью содержат закодированный контент
Данные в URL| MEDIUM| Подозрительно длинные строки запроса и закодированные параметры в URL
Утечки метаданных| HIGH| Ключи, похожие на учётные данные, и форматы токенов в структурированных/неструктурированных выводах
Юникодная стеганография| MEDIUM| Управляющие символы двунаправленного текста и слова, похожие на гомоглифы из смешанных алфавитов
Структурные аномалии| LOW| Экстремальные последовательности переводов строк/табуляций и артефакты кодирования с символами замены
* * *
## 3) Ключевые возможности
* Три профиля чувствительности: `low`, `medium`, `high`
* Поддержка переопределения конфигурации через YAML
* Ввод из `stdin`, одного файла или каталога
* Вывод в форматах `text`, `json`, `markdown` или `html`
* Стабильные коды возврата для автоматизации
* Чистый Python API для встраивания в другие инструменты
* * *
## 4) Установка
### Установка из исходников
root@kitploit:~
git clone https://github.com/your-org/exfil-scan.git
cd exfil-scan
pip install -e .
### Стандартная установка через pip (когда будет опубликовано)
root@kitploit:~
pip install exfil-scan
### Установка для разработки
root@kitploit:~
pip install -e ".[dev]"
pytest
* * *
## 5) Быстрый старт
### Сканирование вывода LLM через конвейер
root@kitploit:~
echo 'api_key: sk-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456' | exfil-scan
### Сканирование одного файла
root@kitploit:~
exfil-scan --input output.txt
### Рекурсивное сканирование каталога
root@kitploit:~
exfil-scan --directory ./model-logs --recursive
* * *
## 6) Справочник параметров CLI
Примечания:
* Используйте либо `--input`, либо `--directory`, но не оба одновременно.
* Если путь не указан, инструмент читает из `stdin`.
* Если найдены срабатывания, процесс завершается с кодом `1`.
* * *
## 7) Примеры использования по форматам вывода
### Обычный текстовый вывод
root@kitploit:~
exfil-scan --input suspicious.txt --format text
Ожидаемый вид:
root@kitploit:~
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).
### JSON-вывод
root@kitploit:~
exfil-scan --input suspicious.txt --format json
Ожидаемая структура:
root@kitploit:~
{
"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": "..."
}
]
}
### HTML-вывод
root@kitploit:~
exfil-scan --directory ./outputs --recursive --format html --output report.html
Ожидаемое поведение:
* Создаёт отдельную HTML-страницу с таблицей находок
* Экранирует контент для безопасного отображения
* Включает серьёзность, категорию, правило, местоположение, описание
### Markdown-вывод
root@kitploit:~
exfil-scan --input suspicious.txt --format markdown --output report.md
Ожидаемый вид:
root@kitploit:~
# exfil-scan Report
- Scanned targets: 1
- Total findings: 2
* * *
## 8) Конфигурация и чувствительность
В репозитории поставляется файл `default-config.yaml`. Вы можете передать собственный файл с помощью `--config`.
Настройка чувствительности:
* `low`: меньше ложных срабатываний, больше пороговые значения
* `medium`: сбалансированные настройки по умолчанию
* `high`: обнаруживает более тонкие паттерны
Переопределение чувствительности через CLI:
root@kitploit:~
exfil-scan --input out.txt --sensitivity high
* * *
## 9) Собственные паттерны и настройка политик
Вы можете добавить собственные форматы токенов и ключи метаданных:
root@kitploit:~
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"
Затем выполните:
root@kitploit:~
exfil-scan --input response.log --config ./my-config.yaml
* * *
## 10) Обзор архитектуры
Обязанности модулей:
* `exfil_scan/cli.py`: разбор аргументов, выбор источника ввода, рендеринг вывода, обработка кодов завершения
* `exfil_scan/config.py`: значения по умолчанию, загрузка YAML, рекурсивное слияние, нормализация профилей
* `exfil_scan/scanner.py`: шесть движков обнаружения, dataclasses находок, форматирование отчётов
* `tests/test_scan.py`: регрессионные тесты обнаружения и форматов вывода
Порядок выполнения:
1. CLI разбирает аргументы.
2. Конфигурация загружает значения по умолчанию + необязательные переопределения.
3. Сканер читает текст из stdin/файла/каталога.
4. Каждая включённая категория запускается независимо.
5. Находки сортируются по серьёзности и выводятся.
6. Код завершения сообщает об успехе/срабатывании/ошибке для автоматизации.
* * *
## 11) Коды завершения
Код| Значение
---|---
`0`| Срабатываний не найдено (чисто)
`1`| Обнаружены срабатывания
`2`| Ошибка выполнения или аргументов
Это упрощает интеграцию с CI:
root@kitploit:~
exfil-scan --directory ./artifacts --recursive --format json --output exfil-report.json
Если обнаружено хоть одно срабатывание, ваша задача может остановиться по коду `1`.
* * *
## 12) Тестирование
Запуск тестов:
root@kitploit:~
pytest
Покрытие включает:
* все шесть категорий обнаружения
* форматирование отчётов во всех четырёх режимах вывода
* проверки на уровне правил для стабильного поведения
* * *
## 13) Замечания по безопасности
`exfil-scan` — эвристический сканер. Он предназначен для снижения риска и выявления подозрительного вывода, а не для доказательства безопасности контента.
Рекомендуемая схема развёртывания:
1. запускайте сканер в CI на тестовых промптах и фикстурных выводах
2. запускайте сканер в продакшн-гардрейлах на сгенерированных ответах
3. направляйте находки на триаж аналитикам и в телеметрию
4. постоянно настраивайте пороговые значения конфигурации на основе анализа ложных срабатываний
* * *
## 14) Лицензия
Этот проект распространяется под лицензией MIT. Полные условия см. в `LICENSE`.
* * *
## 15) Вклад в проект
Вклад приветствуется. При открытии PR обязательно включайте:
* понятные шаги воспроизведения
* ожидаемое и фактическое поведение
* тесты для новой логики обнаружения
* обновления документации при добавлении новых правил