Die Sicherheit deiner Container und Images ist von entscheidender Bedeutung, insbesondere wenn du Docker in deinen Anwendungen verwendest. Trivy ist ein leistungsstarkes Tool, das dir hilft, Schwachstellen in deinen Docker-Images zu identifizieren und zu beheben. In diesem Artikel werde ich dir zeigen, wie du Trivy mittels Docker installierst und verwendest, um deine Container auf mögliche Sicherheitslücken zu überprüfen.
Datum | Änderungen |
---|---|
24.08.2023 | Erstellung dieser Anleitung |
28.08.2023 | Infos zu Cache hinzugefügt. Danke an @bernds |
1. Grundvoraussetzung
2. Trivy starten
Nun kannst du Trivy verwenden, um deine Docker-Images oder Repositorys auf Schwachstellen zu überprüfen.
2.1 Docker Images überprüfen (ohne Cache)
Führe den folgenden Befehl aus, um eine Schwachstellenanalyse für ein bestimmtes Image durchzuführen:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <image_name> zum Beispiel: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image nginx:stable-alpine3.17-slim
Ausgabe bei einem Image ohne bekannte Schwachstellen:
nginx:stable-alpine3.17-slim (alpine 3.17.4) ============================================ Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
2.2 Docker Images überprüfen (mit Cache)
Führe den folgenden Befehl aus, um eine Schwachstellenanalyse für ein bestimmtes Image durchzuführen:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/trivy:/root/.cache aquasec/trivy image <image_name> zum Beispiel: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/trivy:/root/.cache aquasec/trivy image nginx:stable-alpine3.17-slim
Ausgabe bei einem Image ohne bekannte Schwachstellen:
nginx:stable-alpine3.17-slim (alpine 3.17.4) ============================================ Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
2.3 Repository überprüfen
Führe den folgenden Befehl aus, um eine Schwachstellenanalyse für ein bestimmtes Repository durchzuführen:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy repository <Repository URL> zum Beispiel: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy repository https://github.com/aquasecurity/trivy-ci-test
Ausgabe mit Schwachstellen:
Cargo.lock (cargo) ================== Total: 10 (UNKNOWN: 0, LOW: 1, MEDIUM: 2, HIGH: 3, CRITICAL: 4) ┌────────────────┬─────────────────────┬──────────┬───────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │ ├────────────────┼─────────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ │ ammonia │ CVE-2019-15542 │ HIGH │ 1.9.0 │ 2.1.0 │ Uncontrolled recursion in ammonia │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-15542 │ │ ├─────────────────────┼──────────┤ ├───────────────┼─────────────────────────────────────────────────────────────┤ │ │ CVE-2021-38193 │ MEDIUM │ │ 2.1.3, 3.1.0 │ An issue was discovered in the ammonia crate before 3.1.0 │ │ │ │ │ │ │ for Rust.... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-38193 │ ├────────────────┼─────────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ │ openssl │ CVE-2016-10931 │ HIGH │ 0.8.3 │ 0.9.0 │ Improper Certificate Validation in openssl │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2016-10931 │ ├────────────────┼─────────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ │ rand_core │ CVE-2020-25576 │ CRITICAL │ 0.4.0 │ 0.3.1, 0.4.2 │ An issue was discovered in the rand_core crate before 0.4.2 │ │ │ │ │ │ │ for Rust.... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-25576 │ ├────────────────┼─────────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ │ remove_dir_all │ GHSA-mc8h-8q98-g5hr │ LOW │ 0.5.1 │ 0.8.0 │ Race Condition Enabling Link Following and Time-of-check │ │ │ │ │ │ │ Time-of-use (TOCTOU) Race Condition in... │ │ │ │ │ │ │ https://github.com/advisories/GHSA-mc8h-8q98-g5hr │ ├────────────────┼─────────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ │ smallvec │ CVE-2019-15551 │ CRITICAL │ 0.6.9 │ 0.6.10 │ An issue was discovered in the smallvec crate before 0.6.10 │ │ │ │ │ │ │ for Rust.... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-15551 │ │ ├─────────────────────┤ │ │ ├─────────────────────────────────────────────────────────────┤ │ │ CVE-2019-15554 │ │ │ │ An issue was discovered in the smallvec crate before 0.6.10 │ │ │ │ │ │ │ for Rust.... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-15554 │ │ ├─────────────────────┤ │ ├───────────────┼─────────────────────────────────────────────────────────────┤ │ │ CVE-2021-25900 │ │ │ 1.6.1, 0.6.14 │ An issue was discovered in the smallvec crate before 0.6.14 │ │ │ │ │ │ │ and 1.x... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-25900 │ │ ├─────────────────────┼──────────┤ ├───────────────┼─────────────────────────────────────────────────────────────┤ │ │ CVE-2018-25023 │ HIGH │ │ 0.6.13 │ An issue was discovered in the smallvec crate before 0.6.13 │ │ │ │ │ │ │ for Rust.... │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2018-25023 │ │ ├─────────────────────┼──────────┤ │ ├─────────────────────────────────────────────────────────────┤ │ │ GHSA-66p5-j55p-32r9 │ MEDIUM │ │ │ smallvec creates uninitialized value of any type │ │ │ │ │ │ │ https://github.com/advisories/GHSA-66p5-j55p-32r9 │ └────────────────┴─────────────────────┴──────────┴───────────────────┴───────────────┴─────────────────────────────────────────────────────────────┘
3. Trivy Parameter
Hier eine Übersicht einiger Parameter:
Scanning Commands aws [EXPERIMENTAL] Scan AWS account config Scan config files for misconfigurations filesystem Scan local filesystem image Scan a container image kubernetes [EXPERIMENTAL] Scan kubernetes cluster repository Scan a remote repository rootfs Scan rootfs sbom Scan SBOM for vulnerabilities vm [EXPERIMENTAL] Scan a virtual machine image Management Commands module Manage modules plugin Manage plugins Utility Commands completion Generate the autocompletion script for the specified shell convert Convert Trivy JSON report into a different format help Help about any command server Server mode version Print the version Flags: --cache-dir string cache directory (default "/root/.cache/trivy") -c, --config string config path (default "trivy.yaml") -d, --debug debug mode -f, --format string version format (json) --generate-default-config write the default config to trivy-default.yaml -h, --help help for trivy --insecure allow insecure server connections -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version
Weitere Informationen zu Trivy kannst du dir direkt beim Hersteller bekommen.
Danke für die Vorstellung. Kannte ich bisher nicht. Gefällt mir sehr gut. Ich habe eben mal mehrere eigene Images gecheckt und konnte gleich einige Schwachstellen beseitigen 😀
Kleiner Tipp: Will man mehrere Images am Stück prüfen, lohnt es sich die Datenbank im Cache zwischenzuspeichern, da sonst jedes Mal beim Aufruf alles neu heruntergeladen wird (ca. 500MB).
Dafür einfach noch ein weiteres Volume einbinden: -v /tmp/trivy:/root/.cache
Um beim obigen Beispiel zubleiben: