Содержание статьи
Поиск секретов (Secrets Detection) — это процесс обнаружения и удаления так называемых чувствительных данных: паролей, ключей API, токенов доступа, настроек, которые могут случайно оказаться в исходном коде, конфигурационных файлах или других артефактах разработки. Такие лазейки дают злоумышленнику легкий доступ к важным системам и сервисам, что приведет к утечке данных или полной компрометации.
Кстати, многие отрасли требуют соблюдения строгих стандартов безопасности: GDPR, HIPAA, PCI DSS и других. Поиск и защита секретов — одна из составляющих соответствия этим стандартам.
Какие методы автоматизации выбрать?
Искать секреты вручную — все равно что просеивать песок в поисках крупицы золота. Поэтому автоматизация — единственное надежное решение. Искать секреты на потоке можно, например, с помощью регулярных выражений или путем анализа энтропии. У каждого из подходов — свои плюсы и минусы.
Регулярные выражения
Регулярные выражения (regular expressions, regex, регулярки) — это мощный инструмент для манипуляций с текстом, использующий специальный синтаксис шаблонов, чтобы искать, менять и вытаскивать данные.
Среди плюсов:
- Точность и возможность тонкого контроля. Мы можем задавать любые специфические паттерны для обнаружения строк, что минимизирует количество ложных срабатываний. Это особенно полезно для поиска конкретных типов секретов, таких как ключи API, пароли и токены доступа.
- Гибкость. Поскольку регулярные выражения поддерживают сложные шаблоны, мы можем искать самую разную инфу, включая email-адреса, IP-адреса, номера кредитных карт и любую другую чувствительную информацию.
- Простота внедрения. Многие среды разработки и редакторы кода имеют встроенную поддержку regex, также есть библиотеки почти для любых языков программирования. Это позволяет легко интегрировать регулярки в любой проект.
- Автоматизация. С использованием систем CI/CD regex можно настроить для автоматического сканирования кода при каждом коммите, что помогает быстро обнаруживать и устранять уязвимости. Некоторые инструменты, например Gitleaks, позволяют использовать pre-commit hook, что повышает уровень защиты от утечек.
Так в чем подвох? Если все так прекрасно, то зачем вообще использовать что‑то еще? Дело в том, что у этого метода также есть и минусы.
- Зависимость от шаблонов. Регулярки эффективны только для поиска известных шаблонов и могут пропускать секреты, которые им не соответствуют. Если формат меняется или используется уникальный, то инструмент на базе регулярных выражений может ничего не обнаружить.
- Сложность создания регулярных выражений и управления ими. Написание эффективных и безопасных регулярок может быть непростой задачей, особенно для нестандартных шаблонов.
- Ложные срабатывания. Если шаблон слишком общий, он обнаруживает строки, которые не являются секретами. Поэтому фильтровать и анализировать придется дополнительно и уже ручками.
- Производительность. Сложные регулярные выражения могут медленно работать на больших файлах или множестве файлов.
Анализ энтропии
Помимо регулярных выражений, при поиске секретов применяют еще один эффективный метод — анализ энтропии. Для начала давай разберем основные термины.
Энтропия — это показатель, который позволяет оценить степень случайности или, наоборот, предсказуемости данных. В контексте поиска секретов в коде он помогает выделить фрагменты, которые отличаются от остального текста по своей структуре и, возможно, содержат скрытую информацию, такую как пароли, ключи или токены. Чем выше энтропия, тем более случайная и непредсказуемая строка.
Для расчета энтропии строки есть математическая формула Клода Шеннона. Общий процесс вычисления энтропии выглядит так:
- Чтение строки: сначала берется строка из кода или файла, например
a9$L2@xZ
. - Подсчет символов: подсчитывается количество каждого символа в строке.
- Вычисление вероятности: определяется, как часто каждый символ появляется в строке. Например,
a
встречается один раз из восьми символов. - Расчет энтропии.
Для расчета энтропии используется формула Шеннона:
где
- H(X) — энтропия строки X;
- P(xi) — вероятность появления символа xi;
- n — количество уникальных символов в строке.
Секреты, такие как пароли или ключи API, часто имеют высокую энтропию, потому что они созданы для безопасности и содержат много случайных символов. Анализ энтропии помогает обнаруживать такие строки в коде, поскольку обычный текст (например, комментарии или обычные переменные) чаще всего имеет низкую энтропию.
После вычисления энтропии устанавливается некий порог, выше которого все строки считаются потенциальными секретами. Он зависит от конкретной среды и типов данных, но часто выбирается эмпирически. Дальше надо фильтровать и анализировать найденные строки.
А теперь о преимуществах и недостатках этого метода. Преимущества:
- Обнаружение неизвестных шаблонов. Использование энтропии позволяет выявлять случайные строки, которые могут не соответствовать известным шаблонам секретов.
- Автоматическое обновление. Метод не требует постоянного обновления правил или шаблонов при изменении формата секретов.
- Широкий охват. Можно выявлять разные типы секретов без создания специфических шаблонов.
Анализ энтропии удобный, но не идеальный метод. Вот какие у него есть минусы:
- Ложные срабатывания. Увы, пока что не существует ни одного метода без этого косяка. Высокая энтропия может быть у строк, которые не являются секретами (например, хеши, случайные данные), что приводит к ложным срабатываниям.
- Сложность настройки. Способ требует тщательной настройки порогов энтропии, чтобы сбалансировать точность и количество ложных срабатываний.
- Производительность. Анализ энтропии может быть вычислительно затратным, особенно для больших объемов данных.
Как видишь, сложность настройки и затрата ресурсов — неизбежные минусы в любом случае. Но детали могут отличаться в зависимости от реализации того и другого метода.
Какие есть инструменты?
Поиск секретов — один из процессов разработки безопасного программного обеспечения. По ГОСТ 56939 здесь мы также можем использовать инструменты статического анализа. Однако практика показывает, что его качество оставляет желать лучшего. Поэтому в рамках исследования рассмотрим три инструмента:
- Gitleaks;
- TruffleHog;
- Detect Secrets.
Gitleaks — это инструмент для обнаружения секретов преимущественно в репозиториях Git, но при нормальной настройке он также может сканировать локальные исходные данные. Этот инструмент использует как регулярные выражения, так и анализ энтропии для поиска конфиденциальной инфы, что делает его невероятно полезным для предотвращения утечек информации.
Gitleaks поддерживает множество шаблонов для разных секретов, имеет возможность гибкой настройки — пользователь сам может редактировать правила и шаблоны для более точного обнаружения. Gitleaks легко интегрируется с пайплайнами CI/CD, обеспечивая автоматическое сканирование на этапе разработки. А еще он бесплатный и у него активное сообщество, что способствует его развитию и улучшению. Но здесь есть недостаток: анализ энтропии не всегда может быть точным и требует тщательной настройки порогов.
TruffleHog находит секреты в репозиториях Git и других системах контроля версий. Он применяет регулярные выражения для обнаружения известных типов секретов, а до версии 3 включал и анализ энтропии. Несмотря на некоторые ограничения, такие как производительность и ложные срабатывания, TruffleHog остается популярным выбором благодаря простоте использования.
Последний в нашем обзоре — Detect Secrets. Чтобы обнаружить секретную информацию, он использует комбинацию регулярных выражений, анализа энтропии и спецплагинов. Благодаря своей гибкости и возможности интеграции с CI/CD Detect Secrets пользуется популярностью среди разработчиков и специалистов по безопасности. Но имей в виду: чтобы все работало эффективно, придется попотеть на этапе настройки и фильтрации ложных срабатываний.
Краткая характеристика базовых инструментов
Инструмент | Методы | Плюсы | Минусы |
---|---|---|---|
Gitleaks | Regex, анализ энтропии | Широкий спектр поддерживаемых секретов, настраиваемые правила, интеграция с CI/CD, открытый исходный код | Ложные срабатывания, ограниченные возможности анализа энтропии |
TruffleHog | Regex | Высокая точность, поддержка разных систем контроля версий, простота использования | Производительность на больших репозиториях, настройка порогов энтропии |
Detect Secrets | Regex, анализ энтропии, обнаружение известных секретов | Гибкость и множество плагинов, интеграция с CI/CD, активная поддержка | Требует настройки, ложные срабатывания |
Оцениваем эффективность инструментов на практике
У каждого из этих инструментов свои тест‑кейсы, но мы нашли кое‑что поинтереснее. Тестировать будем на OWASP WrongSecrets. Этот проект предоставляет интерактивную платформу, где разработчики и специалисты по безопасности могут учиться на практике, как правильно хранить секреты, такие как API-ключи, пароли, токены доступа и конфиденциальные данные, и управлять ими. Он специально создан для демонстрации неправильного обращения с секретами в приложениях и для обучения лучшим практикам их защиты. Это делает его идеальной тестовой средой инструментов, предназначенных для поиска и управления секретами.
Посмотрим, что найдут инструменты, если мы не будем трогать настройки по умолчанию.
Gitleaks
Для запуска инструмента использовалась следующая команда:
docker run -v /путь/до/wrongsecrets-master/:/path zricethezav/gitleaks:latest detect --no-git --source="/path" -r="/path/gitleaks_report.json"
Здесь папка с исходниками локальная, поэтому используется ключ --no-git
. В результате сканирования мы получили файл gitleaks_report.
, содержащий 20 найденных секретов. Из них 9 секретов признаны ложно положительными.
Для чистоты эксперимента запустим стандартное сканирование, но с конфигурационным файлом, который предлагают разработчики Gitleaks:
docker run -v /исходная/директория:/path zricethezav/gitleaks:latest detect --no-git --config="/path/gitleaks.toml" --source="/path/wrongsecrets-master -r="/path/gitleaks_report.json""
И снова получим 20 найденных секретов, из которых 9 — ложные срабатывания.
TruffleHog
Этот инструмент запускался следующей командой:
run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest filesystem /pwd/wrongsecrets-master/ > trufflehog_local_report.txt
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»