
Офлайн-сканер секретов, объединяющий правила на основе регулярных выражений, лексический семантический анализ и сопоставление хешированных значений для обнаружения раскрытых учётных данных в коде с выводом в формате SARIF.
Абсолютно нет!
В эпоху повального увлечения LLM DeepSecrets по-прежнему работает полностью на вашей машине — обеспечивая отличные результаты офлайн, безопасно и бесплатно.
Большинство существующих сканеров на самом деле не «понимают» код. Вместо этого они просто разбирают текст и имеют плохое покрытие.
DeepSecrets сокращает разрыв между классическими сканерами на основе регулярных выражений и полноценными коммерческими SAST-инструментами. Он расширяет классическую стратегию сканирования на основе регулярных выражений, активно опираясь на семантический анализ кода, обнаружение опасных переменных и контекстно-зависимый энтропийный анализ. Это означает, что кандидаты в секреты всегда семантически корректны. Мы достигаем настоящего понимания кода в более чем 500 языках и форматах, используя методы лексического и синтаксического анализа.
DeepSecrets также представляет новый способ поиска учётных данных без каких-либо предварительных знаний: движок HashedSecret. Просто предоставьте хешированные значения ваших известных производственных секретов, и инструмент найдёт их в открытом виде в вашем коде.
DeepSecrets v2.0 был оценён (июнь 2026) на бенчмарке SecretBench, превзойдя традиционные сканеры плоского текста:
(Полную историю о внутреннем устройстве и разбор бенчмарков можно прочитать в моей статье на HackerNoon здесь)
С GitHub через pip
$ pip install git+https://github.com/ntoskernel/deepsecrets.git
Из PyPi
$ pip install deepsecrets
Для работы DeepSecrets требуется Python 3.11 или более поздняя версия.
Самый простой способ запустить сканирование:
$ deepsecrets --target-dir /path/to/your/code --outformat dojo-sarif --outfile report.json
Это запустит сканирование /path/to/your/code с использованием конфигурации по умолчанию:
Отчёт в формате SARIF (совместимый с DefectDojo и GitHub Security) будет сохранён в report.json.
Команда --help всегда готова помочь вам, но вот ключевые флаги, которые можно использовать для адаптации сканирования к вашей среде:
--regex-rules /path/to/rules.json: Укажите собственный набор правил regex.--hashed-values /path/to/hashes.json: Предоставьте список предварительно хешированных известных производственных секретов для их безопасного поиска.--excluded-paths /path/to/exclusions.json: Переопределите или расширьте пути по умолчанию, игнорируемые при сканировании.--deep-max-size BYTES: Файлы больше этого размера (по умолчанию 250 000 байт) проходят быстрый анализ: правила regex и поиск переменных, без языкового лексера. Большие файлы в основном сгенерированы или минифицированы, лексер занимает большую часть времени сканирования на них и редко находит там что-то большее. 0 даёт каждому файлу полный анализ.--skip-bundles: Полностью пропускать минифицированный JavaScript, source maps и бандлы (*.min.js, *.map, *.bundle.js) в дополнение к другим исключениям путей.--confidence-level {all,low,medium,high,very-high}: Наименьший уровень достоверности для отчёта (по умолчанию low, все находки). medium, high и very-high сохраняют достоверность 3, 6 и 9 или более; all также сообщает о совпадениях regex, которые сканер счёл не секретами (заполнители, примеры), с идентификатором правила -INFO.--report-diagnostics: Добавить каждый файл, найденный в целевой директории, в отчёт SARIF с его статусом, временем сканирования, причиной пропуска и глубиной анализа.--regex-candidate-scoring-rules /path/to/rules.json: Укажите собственные правила для оценки совпадений regex перед их отчётом. Укажите флаг без значения, чтобы сообщать о совпадениях regex без оценки.--multiprocessing-context {forkserver,spawn,fork}: Способ запуска рабочих процессов. По умолчанию используется forkserver, где он доступен на платформе (Linux, macOS): рабочие процессы разделяют сканер, уже загруженный в серверном процессе. Windows использует spawn. Все три дают одинаковые находки.--disable-masking: Оставлять потенциальные секреты немаскированными в выходном отчёте (см. предупреждение ниже).--ci / --no-ci: Включить или выключить режим CI. Режим CI выводит простую строку прогресса каждые 30 секунд вместо живого отображения прогресса. Он включается автоматически внутри CI-сервисов (GitHub Actions, GitLab CI, Jenkins и других) и всякий раз, когда вывод не является терминалом.напр. .github/workflows/deepsecrets.yml
name: DeepSecrets Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install DeepSecrets
run: pip install deepsecrets
- name: Run Scan
run: deepsecrets --target-dir . --outformat dojo-sarif --outfile report.sarif
continue-on-error: true
- name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: report.sarif
Начиная с версии v1.3.0, потенциальные секреты автоматически маскируются внутри отчётов для защиты артефактов вашего пайплайна. При необходимости это можно отключить с помощью флага --disable-masking.
Маскирование не нарушает логику дедупликации нижестоящих платформ (таких как Github), поскольку раздел partialFingerprints в отчёте корректно заполняется на основе исходных данных.
[!Caution]
Если вы интегрируете DeepSecrets в свой CI-пайплайн с отключённым маскированием, вы, скорее всего, снова допустите утечку секретов в логи и артефакты CI.
Каждая находка получает оценку уверенности. Однако разные платформы безопасности по-разному интерпретируют метрики SARIF. Чтобы обеспечить совместимость с современными панелями ASPM, DeepSecrets делает следующее:
Виртуальные подправила (rules[]): Динамически генерирует правила по уровням уверенности, от S105-LOW через -MEDIUM и -HIGH до S105-VERY-HIGH (и -INFO для отклонённых совпадений, сообщаемых при --confidence-level all). Это заставляет GitHub Security и DefectDojo корректно отображать разброс семантической точности, не ломая нативные парсеры.
Детерминированный уровень результата: Инструмент всегда явно устанавливает level: error в модели results[]. Это служит универсальным запасным вариантом для CI/CD-пайплайнов и старых SAST-парсеров, гарантируя, что раскрытые секреты надёжно ломают сборки или блокируют Pull Request независимо от интерпретации отдельных правил.
Контекстные сообщения: Встраивает исходную числовую оценку уверенности непосредственно в result.message.text, чтобы аналитики по безопасности сразу видели её на своих панелях.
Встроенный набор правил для проверок по регулярным выражениям находится в /deepsecrets/rules/regexes.json. Вы можете следовать этому формату и создавать собственный набор правил.