GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo escanear imágenes de contenedores Docker en busca de vulnerabilidades con Trivy

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


Docker
  1. Cómo instalar WordPress con Docker en Ubuntu

  2. Cómo instalar Jenkins con Docker

  3. Cómo crear un contenedor MySQL Docker para pruebas

  4. Cómo cambiar la zona horaria de un contenedor Docker

  5. ¿Cómo usar imágenes acoplables locales con Minikube?

Cómo usar Docker Scan para encontrar vulnerabilidades en sus imágenes

Cómo editar código en contenedores Docker con Visual Studio Code

Cómo insertar y extraer imágenes de Docker con el registro de contenedores de DigitalOcean

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

Cómo copiar archivos con Docker cp a su Docker Container

Cómo usar Docker Commit para cambiar imágenes de contenedores