Сканирование репозитория на наличие секретов с помощью TruffleHog
Случайно закоммитили API-ключ в репозиторий? Вы не одиноки. Тысячи учётных данных утекают через git каждый день — часто оставаясь в истории коммитов ещё долго после того, как разработчики думают, что удалили их. Сканирование секретов с помощью TruffleHog предлагает простой способ обнаружить скомпрометированные API-ключи в репозиториях до того, как они станут инцидентами безопасности.
В этой статье рассматривается, как работает TruffleHog, как сканировать git-репозитории на наличие секретов локально и в CI, а также как интерпретировать результаты, чтобы эффективно расставлять приоритеты при устранении проблем.
Ключевые выводы
- TruffleHog сканирует всю историю git, а не только текущие файлы, обнаруживая секреты, скрытые в старых коммитах
- Верифицированные находки указывают на действующие, эксплуатируемые учётные данные, требующие немедленной ротации
- Интеграция TruffleHog в CI-пайплайны предотвращает утечку учётных данных до их попадания в продакшн
- Когда секреты обнаружены, сначала выполните ротацию, затем удалите их из истории с помощью таких инструментов, как BFG Repo-Cleaner или git-filter-repo
Почему секреты попадают в Git
Разработчики работают быстро. Пароль от базы данных жёстко прописывается во время отладки. AWS-ключ оказывается в конфигурационном файле. Такие ошибки происходят постоянно, а неизменяемая история git означает, что даже «удалённые» секреты сохраняются в старых коммитах.
Риск реален: автоматизированные боты непрерывно сканируют публичные репозитории, и скомпрометированные учётные данные могут быть использованы в течение нескольких минут после отправки. Даже приватные репозитории не защищены — одна скомпрометированная учётная запись разработчика или неправильно настроенный контроль доступа могут раскрыть всё.
Как TruffleHog обнаруживает секреты
TruffleHog — это не простой инструмент grep. Он использует сканирование на основе детекторов с сотнями встроенных шаблонов для конкретных типов учётных данных: AWS-ключей, GitHub-токенов, Stripe API-ключей, строк подключения к базам данных и многого другого.
Подход к обнаружению сочетает:
- Сопоставление с шаблонами: регулярные выражения, настроенные для известных форматов секретов
- Контекстный анализ: изучение окружающего кода для снижения шума
- Опциональная верификация: тестирование учётных данных на реальных API для подтверждения их активности
Такой многоуровневый подход означает меньше ложных срабатываний по сравнению со сканерами, основанными только на энтропии. Когда TruffleHog что-то помечает, это обычно стоит проверить.
Сканирование локального репозитория
Чтобы просканировать git-репозиторий на наличие секретов локально, направьте TruffleHog на ваш репозиторий:
trufflehog git file://.
Это сканирует всю историю git — не только текущее рабочее дерево. Секреты, скрытые в старых коммитах, обнаруживаются наряду с недавними.
Для более быстрой обратной связи во время разработки можно ограничить область сканирования недавними коммитами или конкретными ветками. Это делает практичным запуск перед отправкой изменений.
Понимание верифицированных и неверифицированных результатов
TruffleHog различает два типа находок:
- Верифицированные: учётные данные были протестированы на соответствующем API и подтверждены как активные
- Неверифицированные: шаблон соответствует известному формату секрета, но верификация была невозможна или не проводилась
Верифицированные находки требуют немедленных действий — это действующие учётные данные, которые могут быть использованы прямо сейчас. Неверифицированные находки всё ещё заслуживают проверки, но при сортировке большого набора результатов им можно присвоить более низкий приоритет.
Чтобы отфильтровать вывод только до верифицированных результатов:
trufflehog git file://. --only-verified
Discover how at OpenReplay.com.
Интеграция TruffleHog GitHub Action в CI
Ручное выполнение сканирований выявляет проблемы, но автоматизация предотвращает их. TruffleHog GitHub Action интегрируется напрямую в ваш CI-пайплайн для сканирования каждого pull request и push.
Базовая конфигурация workflow сканирует входящие изменения и прерывает сборку при обнаружении секретов. Это создаёт барьер, который останавливает утечку учётных данных до их попадания в основную ветку — или, что ещё хуже, в продакшн.
Action поддерживает сканирование только различий (быстрее для проверок PR) или полной истории репозитория (полезно для периодических аудитов). Большинство команд запускают лёгкие сканирования различий при каждом PR и планируют комплексные сканирования истории еженедельно.
За пределами Git: другие цели сканирования
Хотя эта статья фокусируется на git-рабочих процессах, TruffleHog поддерживает дополнительные цели: файловые системы, S3-бакеты и Docker-образы. Для большинства разработчиков сканеры git и файловой системы покрывают типичные сценарии использования. Более широкие возможности становятся актуальными по мере роста вашей инфраструктуры.
Что делать при обнаружении секретов
Обнаружение секрета — это только первый шаг. Реакция важнее:
- Немедленно выполните ротацию учётных данных — считайте их скомпрометированными
- Удалите их из истории git с помощью таких инструментов, как BFG Repo-Cleaner или git-filter-repo
- Проверьте журналы доступа для затронутого сервиса на предмет несанкционированного использования
- Обновите свой рабочий процесс, чтобы предотвратить утечку учётных данных в систему контроля версий в будущем
Простое удаление файла и повторный коммит не помогут. Секрет остаётся в истории до тех пор, пока вы не перепишете её.
Заключение
TruffleHog работает лучше всего как превентивный контроль, а не просто инструмент аудита. Запускайте его на ранних этапах CI, в идеале при каждом pull request. Чем раньше вы обнаружите утечку учётных данных, тем меньше радиус поражения.
Сочетайте автоматизированное сканирование с хорошей гигиеной: используйте переменные окружения для секретов, добавляйте чувствительные шаблоны в .gitignore и рассмотрите возможность использования pre-commit хуков для локального контроля.
Сканирование секретов не устранит все риски, но значительно сократит промежуток между ошибкой и её обнаружением. Часто именно это является разницей между «чуть не случилось» и инцидентом.
Часто задаваемые вопросы
TruffleHog по умолчанию сканирует всю историю git, а не только текущее рабочее дерево. Это означает, что секреты, скрытые в старых коммитах, обнаруживаются, даже если они были удалены в последующих коммитах. Неизменяемая история Git сохраняет всё, поэтому комплексное сканирование необходимо для обнаружения всех скомпрометированных учётных данных.
Верифицированные находки означают, что TruffleHog протестировал учётные данные на реальном API и подтвердил, что они всё ещё активны. Неверифицированные находки соответствуют известным шаблонам секретов, но не были проверены. Присвойте приоритет верифицированным находкам для немедленных действий, поскольку они представляют действующие, эксплуатируемые учётные данные.
Удаление файла и коммит не удалят секрет из истории. Используйте такие инструменты, как BFG Repo-Cleaner или git-filter-repo, чтобы переписать историю git и удалить учётные данные из всех коммитов. После переписывания выполните force-push в удалённый репозиторий и попросите всех участников повторно клонировать репозиторий.
Да, TruffleHog может работать как pre-commit хук для локального контроля. Это обнаруживает секреты до того, как они попадут в ваш удалённый репозиторий. Сочетайте pre-commit хуки с интеграцией в CI для эшелонированной защиты, гарантируя блокировку секретов как локально, так и в вашем пайплайне.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.