Отслеживание утечек секретов при разработке программных решений
Утечка данных - тема, которой последнее время уделяется особое внимание. Количество инцидентов растет из года в год, а свежие базы появляются и гуляют по сети чуть ли не ежедневно. Во главе списка причин вовсе не действия неких специалистов или группировок, организующих атаки на инфраструктуру и эксплуатирующих уязвимости в программном обеспечении для получения доступа к серверам организаций, а банальный человеческий фактор - попадание учетных данных в публичный доступ.
❗️ При разработке программных продуктов мы так или иначе взаимодействуем с различными ресурсами, сервисами, базами данных как внутри ИТ инфраструктуры компании, так и за ее пределами. Для получения доступа к этим ресурсам используются секреты - ключи, токены, логины и пароли и прочее, т.е. разного рода конфиденциальные данные для аутентификации, заполучив которые, злоумышленники откроют для себя возможность беспрепятственного сбора информации.
⚠️ В угоду скорости или удобству, по невнимательности или неопытности, непосредственные участники процесса (разработчики, тестировщики, администраторы) могут оставить секреты в открытом виде прямо в коде или конфигурационных файлах. После публикации такого проекта на платформе для размещения исходного кода, например, github или gitlab, секреты становятся доступными всем желающим. Даже если на очередной итерации вы “прибрали за собой”, то история проекта помнит все. Таким образом, помимо управления секретами, возникает необходимость проверки кода на наличие секретов в открытом виде.
📌 Поиск по ключевым словам
Простой, но действенный способ обнаружить забытые в коде секреты - поиск по ключевым словам. Составляем список слов, например, password, key, private, token и так далее, используем grep по содержимому проекта или поисковую систему на площадке размещения. Чем больше проект и чем больше в нем участников, тем сложнее будет полагаться только на ручную проверку.
📌 Gitleaks
Gitleaks - утилита с открытым исходным кодом для мониторинга конкретных репозиториев, каталогов, файлов. Позволяет автоматизировать процесс контроля за возможными утечками секретов как при самостоятельной разработке на каких-либо одиночных проектах, так и внутри хранилища исходного кода большой команды или целой компании. Важной особенностью здесь является проверка всей истории проекта, а не только актуального состояния.
Поддерживается большинство популярных платформ, включая вариант с использованием docker. Попробовал готовые сборки под Windows и Linux. Долго разбираться не пришлось, параметры запуска описаны в официальном репозитории проекта. Единственное с чем могут возникнуть трудности, так это с формированием собственных правил поиска на основе регулярных выражений, однако в большинстве случаев будет достаточно конфигурационного файла по умолчанию, количество поддерживаемых вариантов секретов накопилось довольно серьезное за время существования проекта.
💻 Несколько примеров работы с программой
✅ Сканируем git репозиторий, включая полную историю
1
2
3
4
# с выводом всей информации в консоль
gitleaks git -v
# с сохранением отчета в файл
gitleaks git --report-path gitleaks-report.json
✅ Проверяем директорию
1
gitleaks dir -v path/to/dir
✅ Передаем в gitleaks поток на анализ
1
2
3
4
# windows
type mysecretkey.pem | gitleaks -v stdin
# linux
cat mysecretkey.pem | gitleaks -v stdin
💡 Автоматизировать процесс можно благодаря хуку на pre-commit, за счет которого на каждый git commit будет выполняться проверка через gitleaks. Процесс настройки описан в README. Очень полезная опция.
📌 gitGrabber
В дополнение к gitleaks упомяну и gitGrabber - отслеживает последние индексируемые github файлы по мере их появления, что позволяет узнать об упоминании о вашем проекте, сервисе, организации, домене и тому подобное. Зачем это нужно? Источником утечек не обязательно являются сотрудники именно вашей команды или компании, ими в точно такой же степени могут оказаться пользователи, поставщики услуг, фрилансеры, с которыми вы работаете или работали, и о существовании публичного профиля которых ничего неизвестно.
Инструмент не анализирует историю репозиториев, работает на регулярных выражениях, умеет слать уведомления о своих находках.
🌎 Применение специализированных инструментов мониторинга позволяет снизить риск непреднамеренного попадания учетных данных в публичное пространство или же своевременно отреагировать на возникшие инциденты. Следует отметить, что отслеживание ни в коем случае не освобождает от такой важной задачи, как управление секретами, обеспечение хранения и безопасного доступа к ним.
