GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So scannen Sie Docker-Container-Images mit Trivy auf Schwachstellen

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
  • 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


Docker
  1. So installieren Sie Jenkins mit Docker

  2. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

  3. So teilen Sie Docker-Images mit anderen

  4. So ändern Sie die Zeitzone für einen Docker-Container

  5. Wie verwende ich lokale Docker-Images mit Minikube?

So verwenden Sie Docker Scan, um Schwachstellen in Ihren Bildern zu finden

So bearbeiten Sie Code in Docker-Containern mit Visual Studio-Code

So pushen und ziehen Sie Docker-Images mit der Container Registry von DigitalOcean

So erstellen Sie ein Docker-Windows-Image mit Docker-Build-Tag

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So verwenden Sie Docker Commit zum Ändern von Container-Images