🛠 Grype как SCA для артефактов
Салют, сегодня предлагаю посмотреть на еще один open source инструмент для сканирования уязвимостей в образах контейнеров и файловых системах.
Grype работает на уровне артефактов, а не исходного кода и сканирует программные пакеты.
Поддерживает Python, JavaScript (NPM, Yarn), Java, Ruby, Golang, PHP, Rust, .NET. Образы Docker, OCI, Singularity (SIF).
Тип лицензии: Apache 2.0
Форматы отчетов: JSON, SARIF, CycloneDX
Grype используется в связке с Syft
Syft создает список всех зависимостей, который проверяет Grype на наличие уязвимостей. Это позволяет проводить быстрые повторные сканирования без доступа к исходному коду или образу
Применение
curl -sSfL https://get.anchore.io/grype | sh -s -- -b /usr/local/bin # Разворачивание
grype <image:tag> # Сканирование контейнерного образа
grype <image> --scope all-layers # Сканирование с учетом слоев образа
grype dir:path/to/yourproject # Сканирование директории
grype sbom:./sbom.json # Сканирование с использованием SBOM, созданного Syft
grype <image> -o sarif > results.sarif # Сканирование с выводом в SARIF
grype <image> -o json > results.json # Сканирование с выводом в JSON
grype --add-cpes-if-none --distro alpine:3.10 sbom:./sbom.json # Генерация CPE и указание дистрибутива
docker run --rm \ # Запуск сканирования docker
-v /var/run/docker.sock:/var/run/docker.sock \
anchore/grype:latest \
<image:tag>
Gitlab CI
stages:
- security
Syft:
stage: security
image: nixos/nix:latest
script:
- nix-shell -p syft --run "syft ${DOCKER_IMAGE}:latest -o cyclonedx-json=sbom.json"
artifacts:
paths:
- sbom.json
Grype:
stage: security
image: nixos/nix:latest
needs: ["Syft"]
script:
- nix-shell -p grype --run "grype --fail-on high sbom:sbom.json"
Jenkins
pipeline {
agent any
stages {
stage('Grype Scan') {
steps {
sh '''
docker run --rm --volume $(pwd):/tmp/results anchore/grype:latest \
your-image:tag -o json > /tmp/results/grype_report.json
'''
}
}
}
post {
always {
archiveArtifacts artifacts: 'grype_report.json'
}
}
}
Итого:
- локально разработчиком можно использовать для проверки образов перед их отправкой в registry
- имеет интеграции: SARIF, JSON в GitLab Vulnerability Report, DefectDojo, Jira и т.д.
- может сканировать образы контейнеров, файловые системы, docker save и SBOM
- помимо стандартной Severity CVSS, Grype использует EPSS - вероятность эксплуатации и индикатор KEV, чтобы помочь расставить приоритеты
- достаточно часто покрывает false positive, но после исключений срабатывания более точечные если настроить файл .grype.yaml для подавления не влияющих на конкретный проект уязвимостей
- подходит с лету для проектов с Docker-образами и/ или OCI-артефактами
- охватывает и ОС, и языковые пакеты
- политики можно настраивать с помощью флага --fail-on, указывая минимальный уровень Severity, при котором пайплайн должен быть остановлен
- результаты по умолчанию сортируются по Risk Score, но можно изменить сортировку с помощью --sort-by, как пример, по severity, epss, package
#toolchain #containersecurity #sca #sbom
