Установка Trivy#
# macOS
brew install aquasecurity/trivy/trivy
# Ubuntu/Debian
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
# скачать напрямую
wget https://github.com/aquasecurity/trivy/releases/latest/download/trivy_0.51.2_Linux-64bit.tar.gz
tar -xzf trivy_0.51.2_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/Обновление БД:
trivy image --download-db-only
# или
trivy image --refreshПодготовить образы#
Скачать образы с Docker Hub:
docker pull nginx:latest
docker pull alpine:latest
docker pull python:3.9-slimСкачать и сохранить как архив tar:
docker pull nginx:latest
docker pull alpine:latest
docker save nginx:latest -o nginx.tar
docker save alpine:latest -o alpine.tar
# Сразу несколько образов в 1 архив
docker save nginx:latest alpine:latest -o multiple-images.tarСканирование#
Сканировать образы в Docker демоне:
trivy image nginx:latest
# прямой скан сразу в реестре
trivy image docker.io/nginx:latest
# выбор выходного формата
trivy image --format table nginx:latest
trivy image --format json nginx:latest > scan_results.json
trivy image --format sarif nginx:latest > scan_results.sarif
# выбор критичности выводимых данных
trivy image --severity HIGH,CRITICAL nginx:latest
# игнорировать уязвимости без фикса
trivy image --ignore-unfixed nginx:latest
# сканирование в частном реестре (после входа в него)
docker login private-registry.example.com
trivy image private-registry.example.com/myapp:latestПропуск выбранных уязвимостей:
# создать файл .trivyignore и вписать имена уязвимостей
echo "CVE-2021-12345" >> .trivyignore
echo "CVE-2021-67890" >> .trivyignore
# сканировать
trivy image myimage:latestСкан rootless контейнеров через сокет Docker-а:
DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock trivy image nginx:latestСканировать образы в архивах tar:
trivy image --input nginx.tarСоздание Software Bill of Materials (SBOM):
# формат SPDX
trivy image --format spdx nginx:latest > sbom.spdx.json
# формат CycloneDX
trivy image --format cyclonedx nginx:latest > sbom.cyclonedx.json
# создание SBOM в JSON + сканирование
trivy image --format json --scanners vuln,sbom nginx:latest > full_scan.jsonИнтеграция с CI/CD:
# остановить конвеер в случае критичной уязвимости
trivy image --exit-code 1 --severity CRITICAL myapp:latest
# создание артифакта сборки для GitLab
trivy image --format gitlab myapp:latest > container-scanning-report.jsonСкриптование#
Скан всех образов реестра в цикле:
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
echo "Scanning $image"
trivy image --format table $image
done