Назад к списку

Выявление уязвимостей в процессах CI/CD разработки программного кода

Разработка ПО — сложный и многокомпонентный процесс, включающий в себя: разработку кода, его хранение, доставку и т.д.

От разработчика требуется не только уметь писать код, но знать и учитывать правила и принципы безопасной разработки программного кода. 
Для облегчения жизни разработчика кода и DevOps сегодня существует достаточное количество инструментов, которые позволяют на этапе разработки и в процессах CI/CD выявить уязвимости или дефекты программного кода, несанкционированные изменения в среде разработки и доставки кода, и оповестить об этом инженера DevOps или специалиста по информационной безопасности. Тем самым минимизируются риски выявления уязвимостей и дефектов при эксплуатации продукта, создается более зрелый с точки зрения информационной безопасности цифровой продукт.
В настоящей статье рассмотрим один их таких инструментов – Trivy и способы его интеграции в процессы сборки и доставки программного кода, в том числе его использование для автоматического сканирования Docker-образов и зависимостей кода на примере связки TeamCity/Trivy, формирование SBOM файла.

Trivy

Trivy — это open-source инструмент, предназначенный для сканирования и выявления дефектов или уязвимостей:
  • Docker-образов (CVE, misconfigurations);
  • конфигураций (Kubernetes, Terraform, Dockerfile);
  • ОС (пакеты в Linux: RPM, DEB, APK) и бинарных файлов (например, собранных на C/C++).
А также Trivy используется для выявления хранения секретов в коде и составления SBOM-файла.
SBOM (Software Bill of Materials) - структурированный список компонентов, библиотек и зависимостей, из которых состоит программное обеспечение. SBOM содержит детальную информацию о составе ПО, включая версии компонентов, сведения о лицензировании и имеющихся актуальных уязвимостях.
Основные преимущества при использовании Trivy:
  • простота установки и использования;
  • поддержка множества форматов;
  • интеграция с CI/CD;
  • обширный функционал;
  • отсутствие платы за использование инструмента (свободно распространяемое ПО).

Интеграция Trivy в CI/CD циклы разработки ПО

В качестве инструмента CI/CD будем рассматривать TeamCity.

1. Установка Trivy
Для запуска сканирования собираемого ПО нам нужно установить Trivy. Так как в TeamCity сборкой занимается отдельный агент (чаще всего на отдельной виртуальной машине), то на него и будет установлен сканер уязвимостей. Следующая команда установит актуальную версию:
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
После установки необходимо проверить, что Trivy установлен: 
trivy --version
В результате мы должны получить версию установленного trivy.
2. Сканирование зависимостей
На данном этапе можно сканировать уязвимости прямо на агенте сборки, формировать отчеты и т.д. При сканировании зависимостей Trivy анализирует пакетные менеджеры и lock-файлы для обнаружения уязвимостей (CVE) в зависимостях:
  • Java: pom.xml (Maven), build.gradle (Gradle);
  • JavaScript/Node.js: package.json, package-lock.json, yarn.lock;
  • Python: requirements.txt, Pipfile.lock, poetry.lock;
  • Go: go.mod, go.sum;
  • Ruby: Gemfile.lock;
  • Rust: Cargo.lock;
  • PHP: composer.lock;
  • .NET: .csproj, packages.lock.json (NuGet);
  • Swift/Objective-C: Package.resolved (CocoaPods, SwiftPM);
  • Elixir: mix.lock.
Для сканирования зависимостей в файловой системе используется команда trivy fs (file system):
trivy fs --format [формат вывода] --output [файл вывода] [путь к каталогу проверки]
где параметр format отвечает за формат выводимого файла, здесь могут быть варианты:

  • --format table - табличный вид (по умолчанию). Удобен для чтения в терминале;
  • --format json - JSON-структура со всеми деталями. Подходит для парсинга программами;
  • --format spdx-json - SPDX (формат для Software Bill of Materials). Для совместимости с системами аудита;
  • --format template - кастомный формат через Go-шаблоны (например, для HTML или Markdown);
  • --format sarif - SARIF (стандарт для статического анализа кода).Для загрузки в GitHub Code Scanning.

Параметр --output отвечает за имя файла вывода.
Например, следующая команда просканирует зависимости проекта в каталоге /project и запишет отчет в файл report.txt в человеко-читаемой форме:
trivy fs --format table --output report.txt /project
3. Интеграция с TeamCity - Автоматизируем наш процесс поиска уязвимостей
При интеграции в процесс сборки нужно определиться на каком этапе сканировать ПО и что мы хотим просканировать: файловую систему или docker образы. Находим нужный нам проект и в его настройках добавляем новый шаг в Build Steps. Нам нужен шаг Command Line для запуска команд. В выбранном шаге настраиваем рабочую директорию (Working directory) и прописываем команду для сканирования проекта (Custom script):
trivy fs --format table --output report.txt .
Данная команда просканирует зависимости проекта в текущем каталоге ./ и запишет отчет в файл report.txt в человеко-читаемой табличной форме.
Если хотим, чтобы сборка не падала при нахождении всех ошибок подряд, включая False-Positive, то нужно прописать параметр --exit-code 1 и указать проверку уровня уязвимостей: например --severity CRITICAL,HIGH — проверка только критических и высоких уязвимостей. Например:
trivy fs --format table --exit-code 1 --severity CRITICAL,HIGH --output report.txt .
С данной командой сборка упадет при нахождении критических и высоких уязвимостей.
Для проверки docker образа используется команда trivy image:
trivy image --exit-code 1 --severity CRITICAL,HIGH [ваш-образ]:[тег]
Добавляем артефакт-отчет (если нужно сохранить результаты): --output report.txt и не забываем вывести его в сборке проекта в General Settings -> Artifact Paths.

Вывод

Интеграция Trivy в TeamCity позволяет:
  • автоматически проверять образы docker и программный код на уязвимости;
  • останавливать сборку при выявлении критических уязвимостей или дефектов;
  • генерировать отчеты для последующего аудита и управления изменениями.
Это значительно снижает риски безопасности и ускоряет процесс исправления уязвимостей до выхода в production.
Рекомендация: настройте ежедневное сканирование и автоматические оповещения для максимальной защиты!
Дополнительные материалы:

🚀 Безопасная разработка — это просто с Trivy и TeamCity!


Специалисты компании Никотех помогут просканировать проект на уязвимости, сделать отчет и составить SBOM файл. Поможем внедрить в сборку сканирование уязвимостей в TeamCity. Если наше предложение актуально для вашего бизнеса, пожалуйста, свяжитесь с нами.
Сергей Филиппов, ведущий разработчик программного обеспечения

Поиск по сайту