Images scannen mit Trivy - Schwachstellen in Docker-Images finden
Images scannen mit Trivy - Schwachstellen in Docker-Images finden
Trivy scannt Docker-Images auf bekannte Sicherheitslücken in OS-Paketen und Anwendungsabhängigkeiten — und lässt sich einfach in CI-Pipelines integrieren.
Installation
# Debian/Ubuntu
apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add -
echo "deb 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 trivy
# macOS
brew install trivy
# Via Docker (kein Install nötig)
docker run --rm aquasec/trivy image nginx:latest
Grundnutzung
trivy image nginx:latest # Remote Image scannen
trivy image myapp:latest # Lokales Image scannen
trivy image myapp:$(git rev-parse --short HEAD)
Typische Ausgabe:
nginx:latest (debian 12.4)
==========================
Total: 42 (UNKNOWN: 0, LOW: 12, MEDIUM: 18, HIGH: 8, CRITICAL: 4)
┌───────────────────┬────────────────┬──────────┬──────────────┬──────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Title │
├───────────────────┼────────────────┼──────────┼──────────────┼──────────────────────────────────┤
│ openssl │ CVE-2024-0727 │ HIGH │ fixed │ OpenSSL: PKCS12 Decoding crash │
└───────────────────┴────────────────┴──────────┴──────────────┴──────────────────────────────────┘
Auf kritische Schwachstellen fokussieren
# Nur HIGH und CRITICAL
trivy image --severity HIGH,CRITICAL nginx:latest
# Nur CRITICAL
trivy image --severity CRITICAL nginx:latest
In CI integrieren
# Pipeline schlägt fehl bei CRITICAL-Schwachstellen
trivy image --exit-code 1 --severity CRITICAL myapp:latest
# Auch HIGH berücksichtigen
trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
--exit-code 1 lässt Trivy mit Exit-Code 1 enden wenn Schwachstellen gefunden werden — das bricht die CI-Pipeline ab.
GitHub Actions Beispiel
- name: Scan Docker Image
uses: aquasecurity/trivy-action@master
with:
image-ref: myapp:${{ github.sha }}
format: table
exit-code: 1
severity: HIGH,CRITICAL
ignore-unfixed: true # Ignoriert Schwachstellen ohne verfügbaren Fix
Dockerfiles scannen
Trivy scannt nicht nur Images, sondern auch Dockerfiles auf Konfigurationsprobleme:
trivy config ./Dockerfile
trivy config ./docker-compose.yml
trivy config . # Alle Konfigurationsdateien im Verzeichnis
Meldet z.B. fehlende USER-Anweisung, falsche Healthchecks, exponierte Ports.
Ausgabeformate
trivy image --format json nginx:latest > trivy-report.json
trivy image --format sarif nginx:latest > trivy.sarif # GitHub Security Alerts
trivy image --format template --template "@contrib/html.tpl" -o report.html nginx:latest
Ignorieren von akzeptierten Schwachstellen
# .trivyignore
CVE-2019-8457 # Kein Fix verfügbar, Risiko akzeptiert
CVE-2021-33574 # Nicht ausnutzbar in diesem Kontext
trivy image --ignorefile .trivyignore myapp:latest
Trivy vs. Alternativen
| Tool | Stärken |
|---|---|
| Trivy | Einfach, schnell, viele Formate, kostenlos |
| Grype | Ähnlich zu Trivy, gute SBOM-Unterstützung |
| Snyk | Kommerziell, bessere Dev-Integration |
| Docker Scout | In Docker CLI integriert, docker scout cves image |
# Docker Scout (ab Docker Desktop 4.17)
docker scout cves nginx:latest
docker scout recommendations nginx:latest # Empfiehlt sicherere Basis-Images
Regelmäßig scannen
Images veralten — neue Schwachstellen werden täglich entdeckt. Wer ein Image einmal scannt und dann nie wieder, hat keinen echten Schutz:
# Wöchentlicher Cron-Scan aller laufenden Images
docker ps --format "{{.Image}}" | sort -u | \
xargs -I{} trivy image --severity CRITICAL --exit-code 0 {}
Trivy ist der einfachste Einstieg in Image-Scanning — kein Konto nötig, keine Cloud-Dependency, funktioniert offline mit lokalem DB-Cache.