DevSecOps - build phase
Первая фаза DevSecOps-конвейера относится к сборке проекта и состоит из этапов pre-commit, Pre-build и Post-build. Сегодня предлагаю рассмотреть возможные проверки и инструменты этих этапов. Преимущество буду отдавать передовым open-source-решениям.

Все проверки этой фазы выполняются методом белого/серого ящика — анализируется код, файлы проекта или метаданные артефактов сборки.
Pre-commit
На этапе Pre-commit можно настроить Secret Detection. Вызов сканера интегрируется в Git через pre-commit hook. Преимущества понятны, а вот к недостаткам следует отнести необходимость локальной установки и настройки, поддержка идентичности которой отдельная и крайне неприятная задача. Между тем, многие настройки можно положить в Git.
Управление секретами — прежде всего определённый уровень инженерной культуры проекта. Иначе говоря, сначала нужно договориться о способе работы с секретами, а потом вводить инструменты контроля.
Популярные инструменты:
- Trivy — универсальный сканер для обнаружения проблем с безопасностью. Производит анализ пакетов в SBOM, находит известные уязвимости (CVE), некорректные настройки в IaC, конфиденциальную информацию и секреты, проблемы с лицензированием. Имеет подробную документацию и интеграцию с множеством инструментов. Лицензия Apache-2.0, 27.9k звёзд на GitHub.
- gitleaks — сканер для детектирования секретов в Git-репозитории, файловой системе и
stdin. Позволяет гибко настраивать правила проверки. Лицензия MIT, 22.9k звёзд на GitHub.
Pre-build
На этом уровне можно настроить следующие проверки:
- Secret Detection — обнаружение секретов, но уже после того, как изменения отправлены в центральный репозиторий. Инструменты: GitLab Secret Detection (Free); Trivy; gitleaks.
- Static Application Security Testing (SAST) — анализ исходного кода на наличие распространённых уязвимостей. Отчёт включает список уязвимостей со ссылкой на конкретные фрагменты кода. Статический анализ не запускает проверяемый код, следовательно, провоцирует множество ложно-положительных срабатываний и пропускает некоторые виды уязвимостей. Инструменты: GitLab SAST (Free), GitFlic SAST (Enterprise); PVS-Studio SAST; SonarQube.
- Software Composition Analysis (SCA) — обнаружение уязвимостей в используемых зависимостях с открытым исходным кодом, анализ лицензионной совместимости и возможные риски нарушения лицензионных прав. Инструменты: Trivy; PVS-Studio SCA; GitLab Dependency Scanning (Ultimate); GitFlic SCA (Enterprise).
Как мне кажется, несмотря на все недостатки, по соотношению прилагаемых усилий и получаемого эффекта статический анализ остаётся самым простым и рабочим инструментом. Обратите внимание, что часть проверок доступна из коробки CI/CD, следовательно, подключить эти проверки будет проще. Некоторые инструменты могут быть интегрированы в IDE (Trivy, PVS-Studio).
Для SCA требуется сформировать файл SBOM. Они бывают разных форматов, поэтому выбирать нужно тот, который совместим с используемым SCA. В Java файл SBOM проще всего формировать на этапе сборки. Например, для генерации SBOM в формате CycloneDX используйте официальный Gradle-плагин.
Post-build
На этом уровне выполняется Binary SCA — обнаружение уязвимостей в бинарных артефактах, полученных после сборки. Проверяться может как содержимое файлов, так и их хэш-сумма. В последнем случае по хэш-сумме находят сведения о файле в открытых базах уязвимостей. Инструменты: GitLab Container Scanning (Free); Trivy; grype; clair.
Делитесь своими историями использования статических сканеров. У меня есть одна…
На одном из проектов SAST-проверку делал заказчик. Под анализ попадал не только код, но и локальная конфигурация с тестами. Нормально договориться так и не получилось, пришлось искать “обходные пути”. В итоге вся проверка была сведена к какому-то бесполезному ритуалу. Уверен, что всё можно сделать значительно эффективней, но эффективность, по всей видимости, во многом зависит от того, насколько ИБ понимает разработку, а разработка ИБ.
Понравилась статья?
Посмею напомнить, что у меня есть Telegram-канал Архитектоника в ИТ, где я публикую материал на похожие темы примерно раз в неделю. Подписчики меня мотивируют, но ещё больше мотивируют живые дискуссии, ведь именно в них рождается истина. Поэтому подписывайтесь на канал и будем оставаться на связи! ;-)
Статьи из той же категории: