
Триаж раскрытия учётных данных и конфиденциальных данных для файловых ресурсов
Триаж утечек учётных данных и чувствительной информации для файловых ресурсов.
Когда появляется открытый файловый ресурс, вопрос никогда не звучит как «есть ли в этом репозитории утёкший ключ». Он звучит так: «что именно оказалось раскрыто, и что мне нужно отозвать до конца рабочего дня». sift создан именно для этого вопроса: высокая полнота поиска, быстрая очередь просмотра и цикл обратной связи, благодаря которому всё, что вы заметите невооружённым глазом, превращается в правило, которое находит остальные двести копий.

Python 3.11+, только стандартная библиотека. Без pip install, без интернета, без шага сборки. Он работает на изолированном ноутбуке для реагирования на инциденты — именно там, где он вам нужен.```bash sift survey \fileserver\openshare # how big is this thing sift copy \fileserver\openshare C:\IR\case-4471 # take a throttled copy sift scan C:\IR\case-4471 # scan it, opens the triage UI
Сканирование на месте тоже работает. Сначала попробуйте его на сетевом ресурсе с вымышленными учётными данными:```bash
sift demo C:\temp\demoshare
sift.cmd — это лаунчер, который работает из любого каталога. Чтобы вводить sift вместо
полного пути, добавьте C:\Dev\sift в PATH:```bash
setx PATH "%PATH%;C:\Dev\sift"
Для машины без Python вообще `python build_portable.py` собирает
`dist/sift-secrets-<version>-portable-win64.zip`: официальный встраиваемый рантайм python.org плюс это дерево исходников, распакуй и запускай через прилагаемый `sift.cmd`. ~11 МБ, без установки, без прав администратора, и в нём ничего не компилируется и не переупаковывается — см. docstring в `build_portable.py`, почему это лучше замороженного .exe на заблокированном ноутбуке для IR.
---
## Почему не просто gitleaks или trufflehog
Оба — хорошие инструменты, решающие другую задачу.
Это **точные** инструменты, созданные для CI, где ложное срабатывание стоит разработчику целого дня, поэтому они в основном срабатывают на то, что по форме похоже на известный API-ключ вендора. trufflehog идёт дальше и предпочитает секреты, которые можно *проверить*, вызвав API вендора, — это действительно отличный сигнал, который regex не способен воспроизвести.
Триаж на файловом ресурсе переворачивает экономику. Человек и так читает каждое срабатывание, так что ложное срабатывание стоит три секунды. По-настоящему дорого обходится **пропуск**.
API-ключи вендоров действительно утекают на файловых ресурсах — бэкап корня веб-сервера, скрипт деплоя, чья-то проектная папка, скопированная на общий диск, и там лежит `.env` с живым ключом Stripe. Их ловить стоит, и sift их ловит. Но это как раз та часть, с которой gitleaks и trufflehog уже отлично справляются. Пробел — всё остальное, и на файловом ресурсе это большая часть всего:
| Что пропускают CI-сканеры | Почему они проходят мимо |
|---|---|
| `web.config` с SQL-строкой подключения | Не известный формат ключа, нет вендора для проверки |
| `Map-Drives.ps1` с `net use ... /user:` | Просто shell-команда со словом после неё |
| `New Hire Setup Guide.docx` | Office-файл, читается как бинарный, полностью пропускается |
| `unattend.xml`, GPP `Groups.xml` | Артефакты развёртывания Windows, для которых никто не написал детектор |
| `confCons.xml`, `.rdg`, WinSCP.ini | Обратимо сохранённые пароли, но не «секретный формат» |
| `passwords.xlsx` | Это ZIP. Сканеры plain-text видят бинарные данные и идут дальше |
| `.kdbx`, `.pfx`, `id_rsa` | Непрозрачные байты — *имя файла* и есть находка |
| `.bak` со строкой подключения внутри | Бинарный, поэтому никогда не читается |
sift покрывает и это, поставляет собственные правила для ключей вендоров и **импортирует наборы правил и результаты других инструментов** — правила gitleaks в TOML, Kingfisher/Titus в YAML и trufflehog в JSON, — так что вам не приходится выбирать между инструментами.
Ближайший аналог — [Snaffler](https://github.com/SnaffCon/Snaffler), который отлично справляется с половиной этой задачи — классификацией по именам файлов — и послужил прямым источником вдохновения для правил имён файлов. Чего в нём нет — и что на деле оказывается узким местом, когда у вас 400 срабатываний, — так это цикла ревью.
---
## Цикл
1. **Просканируйте** ресурс.
2. **Работайте с очередью.** Каждая находка показывает окружающие строки с подсвеченным совпадением. Стрелки расширяют контекст; один клик открывает весь файл в VS Code на этой строке или в Notepad.
3. **Замечаете пропуск.** Так и будет. Подсветите его в предпросмотре и нажмите `r`.
4. **sift предлагает паттерны** и в реальном времени показывает, сколько раз каждый из них совпадёт со всем уже прочитанным.
5. **Сохраните его.** Кэшированное повторное сканирование занимает около секунды, и новые находки появляются в очереди, а ваши предыдущие решения по триажу остаются нетронутыми.
Шаг 5 — та часть, ради которой всё остальное. Находки идентифицируются по `(path, rule, line, value-hash)`, поэтому повторное сканирование вставляет те же строки, а ваш статус, заметки и ответственный сохраняются. Без этого вам пришлось бы заново просматривать те же 300 срабатываний на каждой итерации, и вы бросили бы это на третьей.
---
## Команды```bash
# size it up first: file count, total bytes, biggest folders, transfer estimates
sift survey \\fileserver\share
# take a rate-limited local copy (resumable; gentle = 5 MB/s by default)
sift copy \\fileserver\share C:\IR\case-4471 --speed gentle
# scan a share and open the triage UI
sift scan \\fileserver\share
# maximum recall: more noise, but a human is reading anyway
sift scan D:\dfs\dept --tier 3
# re-open the UI over the most recent scan
sift ui
# build a share of fabricated credentials, scan it, open the UI
sift demo C:\temp\demoshare
# inherit other tools' vendor-key rules, then use them in the live rescan loop
sift import-rules gitleaks.toml # gitleaks TOML
sift import-rules path/to/kingfisher/data/rules # a directory of YAML
# pull in what the other scanners found, into the same queue
trufflehog filesystem \\fileserver\share --json > th.json
sift import-findings th.json
# hand off to the incident record (redacted unless you say otherwise)
sift export --fmt pdf --status confirmed --out ir-4471.pdf
sift export --fmt csv --out ir-4471.csv
sift export --fmt pdf --no-redact # plaintext; handle as evidence
sift rules # what is loaded
sift selftest # detection tests against a synthetic share
# ask vendors whether confirmed findings are still live. NETWORK. Opt-in.
sift validate --status confirmed
В любом месте, где встречается sift, вы можете использовать python -m sift вместо этого, из каталога C:\Dev\sift.
| Флаг | Действие |
|---|---|
--tier 1|2|3 | Регулятор полноты. 1 = высокий сигнал, 2 = по умолчанию, 3 = не пропустить ничего |
--redact | Маскирует значения в хранилище и экспортах. Используйте, если БД покидает границы инцидента |
--no-ui | Заполняет хранилище и завершает работу, для скриптовых запусков |
--no-browser | Запускает UI-сервер, но не открывает браузер (полезно через RDP) |
--include/--exclude GLOB | Сужает обход |
--no-archives | Не открывает контейнеры docx/xlsx/zip |
--no-strings | Не выполняет проход strings по бинарным файлам |
--no-large | Пропускает файлы больше --max-size вместо чтения блоками |
--jobs N | Рабочие процессы (по умолчанию: авто) |
--max-size MB | Пропускает файлы больше этого размера (по умолчанию 25) |
--port N | Порт UI (по умолчанию 8973) |