Oggi imparerai come scansionare le immagini di Docker Container.
Introduzione
Fantastico (tri pronunciato come tri gger, vy pronunciato come invidia vy ) è uno scanner semplice e completo per le vulnerabilità nelle immagini del contenitore, nei file system e nei repository Git, nonché per i problemi di configurazione. Trivy rileva le vulnerabilità dei pacchetti del sistema operativo (Alpine, RHEL, CentOS, ecc.) e dei pacchetti specifici della lingua (Bundler, Composer, npm, yarn, ecc.).
Inoltre, Trivy esegue la scansione dei file Infrastructure as Code (IaC) come Terraform, Dockerfile e Kubernetes, per rilevare potenziali problemi di configurazione che espongono le tue distribuzioni al rischio di attacchi. Trivy è facile da usare. Basta installare il binario e sei pronto per la scansione.
Caratteristiche
- Rilevamento completo delle vulnerabilità
- Pacchetti OS (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 e Distroless)
- Pacchetti specifici per lingua (Bundler, Composer, Pipenv, Poetry, npm, yarn, Cargo, NuGet, Maven e Go)
- Rilevamento di errori di configurazione (scansione IaC)
- Viene fornita un'ampia varietà di norme integrate pronte all'uso
- Kubernetes, Docker, Terraform e altri in arrivo
- Supporta le politiche personalizzate
- Viene fornita un'ampia varietà di norme integrate pronte all'uso
- Alta precisione
- Supporta più bersagli
- immagine del contenitore, filesystem locale e repository git remoto
Installazione
Su CentTOS
- Installa Trivy su CentOS dal suo repository, quindi aggiungi il repository di trivy quindi installalo come segue:
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
- Oppure installa trivy dalla sua fonte RPM, dovrai ottenere l'ultima versione di Trivy, quindi eseguire:
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
Su Ubuntu
- Dal 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
- Dal sorgente Debian, dovrai ottenere anche l'ultima versione di Trivy come abbiamo fatto in CentOS, quindi eseguire i comandi seguenti:
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
Su Arch Linux|Manjaro
pikaur -Sy trivy-bin
OR
yay -Sy trivy-bin
Usa Trivy
Scansione di un filesystem e repository git
- Quotidiano può eseguire la scansione di un filesystem (come una macchina host, un'immagine di una macchina virtuale o un filesystem di un'immagine contenitore decompresso).
trivy fs /home/glassfish/
- Per scansionare un repository Git con trivy
trivy repo https://github.com/aquasecurity/trivy
Scansione dell'immagine di un container
- Elenca le tue immagini
docker images
- Scansionalo con curiosità
trivy image httpd
Applica Trivy in Dockerfile
Puoi includere trivy nel tuo Dockerfile ed eseguirà la scansione di tutto mentre costruisce l'immagine.
Ad esempio:
- Crea un Dockerfile che contenga trivy
vim Dockerfile
- Aggiungi quanto segue:
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 /
- Costruisci l'immagine.
[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 ~]#
Come mostrato sopra, trivy ha scansionato le vulnerabilità per l'immagine inclusa nel Dockerfile durante la creazione.
- Puoi anche filtrare le vulnerabilità per gravità con:
trivy image --severity HIGH,CRITICAL httpd:latest
Come mostrato sopra, abbiamo filtrato il risultato solo per gravità critica e alta.
- Scansiona il contenitore dall'interno del contenitore
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 /
Conclusione
Questo è tutto
In questa guida, abbiamo illustrato come scansionare le immagini del contenitore Docker alla ricerca di vulnerabilità con Trivy oltre ai file system e ai repository git.
grazie