Trivy (ausgesprochen /ˈtraɪvi/) ist ein umfassender Open-Source Sicherheitsscanner von Aqua Security. Auf GitHub hat er über 35.000 Stars und gehört damit zu den beliebtesten Open-Source Sicherheitstools überhaupt.
Der große Vorteil von Trivy ist seine Vielseitigkeit – er kann verschiedene Ziele scannen (Container-Images, Dateisysteme, Git-Repositories, VM-Images, Kubernetes-Cluster) und verschiedene Sicherheitsprobleme erkennen (bekannte CVEs, IaC-Fehlkonfigurationen, Leaks sensibler Daten, Software-Lizenzen, SBOM-Generierung). Für moderne DevSecOps-Teams deckt Trivy praktisch die gesamte Sicherheitskette ab – vom Code-Commit bis zur Produktivsetzung.
Dieser Artikel führt dich durch Installation, Kernfunktionen, praktische Anwendung und CI/CD-Integration. So kommst du schnell mit diesem mächtigen Tool zurecht.
Warum Trivy?
Vor Trivy war das Sicherheitsscanning oft fragmentiert: Du brauchtest verschiedene Tools für Container-Images, IaC-Checks und Secret-Leaks. Trivy vereint all das in einem einzigen CLI-Tool:
1. Multi-Target-Support
Trivy scannt:
- Container-Images: Docker, OCI-kompatible Images (lokal oder remote)
- Dateisysteme: Lokale Verzeichnisse, Projektquellcode
- Git-Repositories: Remote-Repos (ohne Cloning)
- VM-Images: AWS EC2 AMIs, Azure VMs etc.
- Kubernetes-Cluster: Laufende Cluster-Ressourcen
2. Multi-Dimensionale Sicherheitserkennung
Trivy findet:
- Bekannte Schwachstellen (CVEs): Basierend auf OS-Pakete und Software-Abhängigkeiten
- IaC-Fehlkonfigurationen: Verstöße gegen Best Practices bei Terraform, CloudFormation, Kubernetes YAML etc.
- Sensitive Daten: Hardcodierte API-Keys, Passwörter, Tokens
- Lizenz-Compliance: Erkennung verwendeter Open-Source-Lizenzen
- SBOM-Generierung: Software Bill of Materials
3. Einfache Integration
Trivy bietet:
- GitHub Actions: trivy-action
- Kubernetes Operator: trivy-operator
- VS Code Extension: trivy-vscode-extension
- CI/CD-Plattformen: Jenkins, GitLab CI, CircleCI etc.
4. Schnell und ressourcenschonend
Trivy ist in Go geschrieben – startet blitzschnell und braucht wenig RAM. Perfekt für häufige CI/CD-Runs.
Trivy installieren
Mehrere Installationsmethoden stehen zur Verfügung:
Option 1: Homebrew (macOS/Linux)
brew install trivy
Option 2: Docker
docker run aquasec/trivy --version
Option 3: Binary-Download
Von GitHub Releases:
# Linux x86_64
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.0/trivy_0.50.0_Linux-64bit.tar.gz
tar -xzf trivy_0.50.0_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/
Option 4: apt/yum (Linux-Distributionen)
# Ubuntu/Debian
sudo apt-get install wget gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
# CentOS/RHEL
sudo yum install trivy
Installation prüfen
trivy --version
# Beispielausgabe: Version: 0.50.0
Schnellstart: Dein erstes Container-Image scannen
Ein einfaches Beispiel – wir scannen ein öffentliches Docker-Image:
Python-Official-Image scannen
trivy image python:3.9-slim
Trivy zeigt etwa Folgendes:
python:3.9-slim (debian 11.7)
=====================================
Total: 123 (UNKNOWN: 0, LOW: 45, MEDIUM: 52, HIGH: 24, CRITICAL: 2)
+------------------+---------------------+----------+-------------------+---------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+------------------+---------------------+----------+-------------------+---------------+---------------------------------------+
| libssl1.1 | CVE-2023-5678 | CRITICAL | 1.1.1w-0+deb11u1 | 1.1.1w-0+deb11u2 | OpenSSL: X.509 Email Address ... |
| openssl | CVE-2023-6129 | HIGH | 1.1.1w-0+deb11u1 | 1.1.1w-0+deb11u2 | OpenSSL: POLY1305 MAC implementation... |
+------------------+---------------------+----------+-------------------+---------------+---------------------------------------+
Wichtige Informationen:
- Gesamtzahl: Nach Schweregrad kategorisiert (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL)
- Details: Bibliothek, CVE-ID, Schweregrad, aktuelle Version, gefixte Version, Beschreibung
Nur HIGH und CRITICAL anzeigen
trivy image --severity HIGH,CRITICAL python:3.9-slim
JSON-Output (für Automatisierung)
trivy image --format json python:3.9-slim > results.json
Kernfunktionen im Detail
1. Dateisystem-Scanning
Trivy scannt lokale Verzeichnisse auf Schwachstellen in Abhängigkeiten – ideal für die frühe Erkennung in der Entwicklung.
# Aktuelles Verzeichnis
trivy fs .
# Bestimmtes Verzeichnis
trivy fs /path/to/project
# Nur bestimmte Sprache
trivy fs --scanners vuln --language python /path/to/project
Unterstützte Sprachen: Python, Node.js, Java, Go, Ruby, PHP, .NET, Rust und mehr.
2. Git-Repository-Scanning
Trivy scannt Remote-Repos direkt, ohne Cloning:
# Öffentliches GitHub-Repo
trivy repo https://github.com/aquasecurity/trivy
# Bestimmter Branch
trivy repo https://github.com/aquasecurity/trivy@main
Praktisch für Sicherheits-Audits von Third-Open-Source-Projekten.
3. Kubernetes-Konfiguration scannen
Fehlkonfigurationen in K8s sind eine Hauptursache für Sicherheitsvorfälle. Trivy prüft YAML-Dateien gegen Best Practices:
# Einzelne YAML-Datei
trivy config deployment.yaml
# Alle Dateien im Verzeichnis
trivy config ./k8s-manifests/
Erkannte Probleme:
- Container läuft als root
- Keine Ressourcenlimits (CPU/RAM)
- Nutzung des
latest-Tags - Privilegierter Modus aktiviert
- Hardcodierte Secrets in Umgebungsvariablen
Beispielausgabe:
k8s-manifests/deployment.yaml
=============================
Tests: 15 (SUCCESSES: 12, FAILURES: 3, EXCEPTIONS: 0)
Failures: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 1, HIGH: 1, CRITICAL: 0)
+-----------+------------+-----------------+----------+---------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+-----------+------------+-----------------+----------+---------------------------------------+
| Kubernetes| KSV012 | Image Tag | MEDIUM | Container 'app' uses 'latest' tag |
| Kubernetes| KSV001 | Privileged | HIGH | Container 'app' runs in privileged mode|
+-----------+------------+-----------------+----------+---------------------------------------+
4. SBOM generieren
SBOMs sind essenziell für Supply-Chain-Sicherheit. Trivy generiert Standardformate:
# SPDX-Format
trivy image --format spdx-json python:3.9-slim > sbom.spdx.json
# CycloneDX-Format
trivy image --format cyclonedx python:3.9-slim > sbom.cyclonedx.xml
Nützlich für Compliance-Audits und Impact-Analysen.
5. Sensitive Daten erkennen
Trivy findet hardcodierte Secrets im Code:
trivy fs --scanners secret ./my-project
Eingebaute Regeln für:
- AWS Access Keys
- GitHub Tokens
- Slack Webhook URLs
- Private Keys
- Datenbank-Connection-Strings
CI/CD-Integration in der Praxis
Trivy in die Pipeline zu integrieren ist der Schlüssel zu "Shift Left Security".
GitHub Actions
.github/workflows/trivy.yml erstellen:
name: Trivy Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'python:3.9-slim'
format: 'table'
severity: 'CRITICAL,HIGH'
exit-code: '1' # CI fail bei HIGH/CRITICAL
Automatisches Scanning bei jedem Push/PR. Bei kritischen Schwachstellen schlägt die CI fehl.
GitLab CI
In .gitlab-ci.yml:
trivy-scan:
image:
name: aquasec/trivy:latest
entrypoint: [""]
script:
- trivy fs --exit-code 1 --severity HIGH,CRITICAL .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Jenkins Pipeline
pipeline {
agent any
stages {
stage('Security Scan') {
steps {
sh '''
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image --exit-code 1 --severity HIGH,CRITICAL \
my-app:latest
'''
}
}
}
}
Fortgeschrittene Anwendung
1. Bestimmte CVEs ignorieren
Manche Schwachstellen sind in deinem Kontext nicht relevant. Erstelle .trivyignore:
# .trivyignore
CVE-2023-1234
CVE-2023-5678
Oder nutze --ignorefile:
trivy image --ignorefile .trivyignore python:3.9-slim
2. Datenbank cachen
Trivy lädt standardmäßig bei jedem Scan die DB neu (~100-200MB). Für schnellere CI-Runs:
# DB einmalig herunterladen
trivy image --download-db-only
# Spätere Scans nutzen Cache
trivy image --skip-db-update python:3.9-slim
In GitHub Actions mit actions/cache:
- name: Cache Trivy DB
uses: actions/cache@v3
with:
path: ~/.cache/trivy
key: trivy-db-${{ hashFiles('~/.cache/trivy/db/trivy.db') }}
restore-keys: trivy-db-
3. Benutzerdefinierte Templates
Trivy unterstützt Go-Templates:
trivy image --format template --template "@contrib/html.tpl" python:3.9-slim > report.html
Eingebaute Templates:
@contrib/html.tpl: HTML-Report@contrib/junit.tpl: JUnit XML (für CI/CD)@contrib/sarif.tpl: SARIF (für GitHub Code Scanning)
4. Trivy Operator (Kubernetes)
Für laufende K8s-Cluster: Trivy Operator deployen:
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm install trivy-operator aqua/trivy-operator --namespace trivy-system --create-namespace
Der Operator scannt Workloads kontinuierlich und speichert Ergebnisse als Kubernetes CRDs. Dashboard oder API-Abfragen zeigen den aktuellen Sicherheitsstatus.
Troubleshooting
Problem 1: Langsame Scans
Ursache: Erster Scan lädt die Vuln-DB (~100-200MB).
Lösung: --skip-db-update nutzen oder DB vorab herunterladen:
trivy image --download-db-only
trivy image --skip-db-update python:3.9-slim
Problem 2: Zu viele False Positives
Ursache: Manche CVEs sind in deinem Kontext nicht relevant.
Lösung: .trivyignore nutzen oder --severity anpassen.
Problem 3: Private Images scheitern
Ursache: Keine Authentifizierung für private Registry.
Lösung: Umgebungsvariablen oder --registry-token:
export TRIVY_USERNAME=myuser
export TRIVY_PASSWORD=mypassword
trivy image registry.example.com/my-private-image:latest
Problem 4: Speicherprobleme
Ursache: Große Images/Dateisysteme brauchen viel RAM.
Lösung: Mehr RAM zuweisen oder --light Modus:
trivy image --light python:3.9-slim
Zusammenfassung
Trivy ist ein mächtiges und einfach zu nutzendes Open-Source Sicherheitstool:
- Umfassend: Multi-Target, Multi-Scanner – deckt die ganze Pipeline ab
- Benutzerfreundlich: Einfache CLI, gute Docs, aktive Community
- Integrationsfreundlich: Native Unterstützung für alle gängigen Plattformen
- Performant: Go-basiert, schnell, ressourcenschonend
Für jedes sicherheitsbewusste Entwicklungsteam ist Trivy eine kluge Wahl. Frühzeitige Erkennung und Behebung von Schwachstellen senken das Risiko in der Produktion erheblich.
Nächste Schritte:
- Trivy lokal installieren und ein paar Images scannen
- In CI/CD integrieren mit passenden Schwellenwerten
- Regelmäßige Reviews etablieren
- Trivy Operator für K8s-Monitoring evaluieren
Offizielle Dokumentation: https://trivy.dev
GitHub: https://github.com/aquasecurity/trivy
Weiterlesen: