Heute erfahren Sie, wie Sie Docker-Container-Images scannen.
Einführung
Trivy (tri ausgesprochen wie tri gger, vy ausgesprochen wie Neid ) ist ein einfacher und umfassender Scanner für Schwachstellen in Container-Images, Dateisystemen und Git-Repositories sowie für Konfigurationsprobleme. Trivy erkennt Schwachstellen von Betriebssystempaketen (Alpine, RHEL, CentOS usw.) und sprachspezifischen Paketen (Bundler, Composer, npm, Garn usw.).
Darüber hinaus scannt Trivy Infrastructure as Code (IaC)-Dateien wie Terraform, Dockerfile und Kubernetes, um potenzielle Konfigurationsprobleme zu erkennen, die Ihre Bereitstellungen einem Angriffsrisiko aussetzen. Trivy ist einfach zu bedienen. Installieren Sie einfach die Binärdatei und schon können Sie scannen.
Funktionen
- Umfassende Schwachstellenerkennung
- OS-Pakete (Alpine Linux, Red Hat Universal Base Image, Red Hat Enterprise Linux, CentOS, AlmaLinux, Rocky Linux, CBL-Mariner, Oracle Linux, Debian, Ubuntu, Amazon Linux, openSUSE Leap, SUSE Enterprise Linux, Photon OS und Distroless)
- Sprachspezifische Pakete (Bundler, Composer, Pipenv, Poetry, npm, Garn, Cargo, NuGet, Maven und Go)
- Fehlkonfigurationserkennung (IaC-Scannen)
- Eine Vielzahl integrierter Richtlinien wird out of the box bereitgestellt
- Kubernetes, Docker, Terraform und mehr folgen bald
- Benutzerdefinierte Richtlinien unterstützen
- Eine Vielzahl integrierter Richtlinien wird out of the box bereitgestellt
- Hohe Genauigkeit
- Mehrere Ziele unterstützen
- Container-Image, lokales Dateisystem und entferntes Git-Repository
Installation
Auf CentOS
- Installieren Sie Trivy auf CentOS von seinem Repo, fügen Sie also das Repo von Trivy hinzu und installieren Sie es dann wie folgt:
echo -e "\n[trivy]\nname=Trivy repository\nbaseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/\$releasever/\$basearch/\ngpgcheck=0\nenabled=1" | sudo tee -a /etc/yum.repos.d/kubernetes.repo
sudo yum -y install trivy
- Oder installieren Sie Trivy von seiner RPM-Quelle, Sie müssen die neueste Trivy-Version herunterladen und dann ausführen:
wget https://github.com/aquasecurity/trivy/releases/download/v0.23.0/trivy_0.23.0_Linux-64bit.rpm
sudo yum localinstall ./trivy_0.23.0_Linux-64bit.rpm
Auf Ubuntu
- Aus dem Repository
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 /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
- Von der Debian-Quelle müssen Sie auch die neueste Trivy-Version herunterladen, wie wir es in CentOS getan haben, und dann die folgenden Befehle ausführen:
wget https://github.com/aquasecurity/trivy/releases/download/v0.23.0/trivy_0.23.0_Linux-64bit.deb
sudo apt install ./trivy_0.23.0_Linux-64bit.deb
Auf Arch Linux|Manjaro
pikaur -Sy trivy-bin
OR
yay -Sy trivy-bin
Verwenden Sie Trivy
Scannen eines Dateisystems und von Git-Repos
- Trivy kann ein Dateisystem scannen (z. B. eine Hostmaschine, ein Image einer virtuellen Maschine oder ein entpacktes Container-Image-Dateisystem).
trivy fs /home/glassfish/
- So scannen Sie ein Git-Repository mit trivy
trivy repo https://github.com/aquasecurity/trivy
Scannen eines Container-Images
- Listen Sie Ihre Bilder auf
docker images
- Scannen Sie es mit trivy
trivy image httpd
Trivy in Dockerfile anwenden
Sie können Trivy einfügen in Ihrem Dockerfile und es wird alles scannen, während es das Image erstellt.
Zum Beispiel:
- Erstellen Sie eine Dockerdatei, die Trivy enthält
vim Dockerfile
- Folgendes hinzufügen:
FROM alpine:3.7
RUN apk add curl \
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
&& trivy filesystem --exit-code 1 --no-progress /
- Bild erstellen.
[root@unixcop ~]# docker build -t scanned-image .
Sending build context to Docker daemon 244.6MB
Step 1/2 : FROM alpine:3.7
3.7: Pulling from library/alpine
5d20c808ce19: Pull complete
Digest: sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10
Status: Downloaded newer image for alpine:3.7
---> 6d1ef012b567
Step 2/2 : RUN apk add curl && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin && trivy filesystem --exit-code 1 --no-progress /
---> Running in 7f2b8771050d
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20190108-r0)
(2/4) Installing libssh2 (1.9.0-r1)
(3/4) Installing libcurl (7.61.1-r3)
(4/4) Installing curl (7.61.1-r3)
Executing busybox-1.27.2-r11.trigger
Executing ca-certificates-20190108-r0.trigger
OK: 6 MiB in 17 packages
aquasecurity/trivy info checking GitHub for latest tag
aquasecurity/trivy info found version: 0.23.0 for v0.23.0/Linux/64bit
aquasecurity/trivy info installed /usr/local/bin/trivy
2022-02-12T11:47:49.846Z INFO Need to update DB
2022-02-12T11:47:49.846Z INFO Downloading DB...
2022-02-12T11:48:24.761Z INFO Detected OS: alpine
2022-02-12T11:48:24.761Z INFO Detecting Alpine vulnerabilities...
2022-02-12T11:48:24.789Z INFO Number of language-specific files: 0
2022-02-12T11:48:24.789Z WARN This OS version is no longer supported by the distribution: alpine 3.7.3
2022-02-12T11:48:24.789Z WARN The vulnerability detection may be insufficient because security updates are not provided
7f2b8771050d (alpine 3.7.3)
===========================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
+------------+------------------+----------+-------------------+---------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+------------+------------------+----------+-------------------+---------------+---------------------------------------+
| musl | CVE-2019-14697 | CRITICAL | 1.1.18-r3 | 1.1.18-r4 | musl libc through 1.1.23 has |
| | | | | | an x87 floating-point stack |
| | | | | | adjustment imbalance, related... |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-14697 |
+------------+ + + + + +
| musl-utils | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
+------------+------------------+----------+-------------------+---------------+---------------------------------------+
The command '/bin/sh -c apk add curl && curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin && trivy filesystem --exit-code 1 --no-progress /' returned a non-zero code: 1
[root@unixcop ~]#
Wie oben gezeigt, hat trivy beim Erstellen nach Schwachstellen für das in der Docker-Datei enthaltene Image gesucht.
- Sie können Schwachstellen auch nach Schweregrad filtern mit:
trivy image --severity HIGH,CRITICAL httpd:latest
Wie oben gezeigt, haben wir das Ergebnis nur nach kritischen und hohen Schweregraden gefiltert.
- Scannen Sie den Container aus dem Inneren des Containers heraus
docker run --rm -it nginx \
&& curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin \
&& trivy fs /
Schlussfolgerung
Das ist es
In diesem Leitfaden haben wir gezeigt, wie Docker-Container-Images zusätzlich zu Dateisystemen und Git-Repositorys mit Trivy auf Schwachstellen gescannt werden.
Danke