Hoy aprenderá a escanear imágenes de Docker Container.
Introducción
Curiosidades (tri pronunciado como tri gger, vy pronunciado como envy ) es un escáner simple y completo para detectar vulnerabilidades en imágenes de contenedores, sistemas de archivos y repositorios de Git, así como también para problemas de configuración. Trivy detecta vulnerabilidades de paquetes de SO (Alpine, RHEL, CentOS, etc.) y paquetes específicos del idioma (Bundler, Composer, npm, yarn, etc.).
Además, Trivy analiza archivos de infraestructura como código (IaC) como Terraform, Dockerfile y Kubernetes para detectar posibles problemas de configuración que exponen sus implementaciones al riesgo de ataques. Trivy es fácil de usar. Simplemente instale el binario y estará listo para escanear.
Características
- Detección integral de vulnerabilidades
- Paquetes de sistema operativo (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 y sin distribución)
- Paquetes específicos de idioma (Bundler, Composer, Pipenv, Poetry, npm, yarn, Cargo, NuGet, Maven y Go)
- Detección de errores de configuración (escaneo IaC)
- Se proporciona una amplia variedad de políticas integradas listas para usar
- Kubernetes, Docker, Terraform y más próximamente
- Admite políticas personalizadas
- Se proporciona una amplia variedad de políticas integradas listas para usar
- Alta precisión
- Admite múltiples objetivos
- imagen del contenedor, sistema de archivos local y repositorio git remoto
Instalación
En CentOS
- Instala Trivy en CentOS desde su repositorio, así que agrega el repositorio de trivy y luego instálalo de la siguiente manera:
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
- O instale trivy desde su fuente RPM, deberá obtener la versión más reciente de Trivy y luego ejecutar:
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
En Ubuntu
- Desde el repositorio
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
- Desde la fuente de Debian, también deberá obtener la última versión de Trivy como lo hicimos en CentOS y luego ejecutar los siguientes comandos:
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
En Arch Linux|Manjaro
pikaur -Sy trivy-bin
OR
yay -Sy trivy-bin
Usar Trivy
Escanear un sistema de archivos y repositorios git
- Curiosidades puede escanear un sistema de archivos (como una máquina host, una imagen de máquina virtual o un sistema de archivos de imagen de contenedor desempaquetado).
trivy fs /home/glassfish/

- Para escanear un repositorio Git con trivy
trivy repo https://github.com/aquasecurity/trivy
Escaneando una imagen de contenedor
- Enumere sus imágenes
docker images
- Escanéalo con trivy
trivy image httpd

Aplicar Trivy en Dockerfile
Puedes incluir trivy en su Dockerfile y escaneará todo a medida que construye la imagen.
Por ejemplo:
- Cree un Dockerfile que contenga trivy
vim Dockerfile
- Agregue lo siguiente:
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 /
- Crea la imagen.
[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 ~]#
Como se muestra arriba, trivy analizó las vulnerabilidades de la imagen incluida en el Dockerfile durante la construcción.

- También puede filtrar vulnerabilidades por gravedad con:
trivy image --severity HIGH,CRITICAL httpd:latest

Como se muestra arriba, filtramos el resultado solo para niveles críticos y de gravedad alta.
- Escanear el contenedor desde el interior del contenedor
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 /
Conclusión
Eso es todo
En esta guía, ilustramos cómo escanear imágenes de contenedores Docker en busca de vulnerabilidades con Trivy, además de sistemas de archivos y repositorios git.
gracias