Аудит безопасности Docker-образов: сканирование уязвимостей с Trivy и Grype
- Наличие критических уязвимостей (CVE Critical/High) в базовых образах production-сервисов.
- Требования стандартов безопасности (PCI-DSS, ISO 27001, SOC2) по регулярному аудиту цепочек поставки ПО (Software Supply Chain).
- Отсутствие прозрачности состава пакетов и транзитивных библиотек (SBOM) в сборках.
1. Установка утилиты сканирования Trivy (Aqua Security)
# Установка на Ubuntu / Debian
apt-get install -y wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor -o /usr/share/keyrings/trivy.gpg
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/trivy.list
apt-get update && apt-get install -y trivy2. Сканирование локального Docker-образа через Trivy
# Поиск только критических и высоких уязвимостей с кодом возврата для CI/CD
trivy image --severity HIGH,CRITICAL --ignore-unfixed --exit-code 1 my-app:latest3. Генерация SBOM (Software Bill of Materials) через Syft и анализ в Grype
# Установка Grype и Syft (Anchore)
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
# Создание паспорта компонентов SBOM в формате SPDX/CycloneDX
syft my-app:latest -o cyclonedx-json > sbom.json
# Сканирование SBOM на известные CVE
grype sbom:sbom.json --fail-on high4. Интеграция в GitLab CI (.gitlab-ci.yml)
container_scanning:
stage: test
image:
name: aquasec/trivy:latest
entrypoint: [""]
script:
- trivy image --no-progress --format template --template "@/contrib/gitlab.tpl" -o gl-container-scanning-report.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- trivy image --exit-code 1 --severity CRITICAL --no-progress $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
reports:
container_scanning: gl-container-scanning-report.json Частые вопросы (FAQ)
Что означает опция --ignore-unfixed в Trivy?
Она скрывает из отчета уязвимости, для которых мейнтейнеры дистрибутива еще не выпустили исправлений (security patches), предотвращая ложные блокировки CI/CD пайплайнов.
В чем разница между сканированием Trivy и Grype?
Оба сканера высокоэффективны, но используют разные базы фидов: Trivy сканирует не только OS-пакеты, но и зависимости языков (npm, pip, go.mod), а Grype оптимизирован для работы в связке с SBOM генератором Syft.