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.