GNU/Linux >> Tutoriales Linux >  >> Linux

DevSecOps:Escaneo de imágenes en sus tuberías usando el escáner quay.io

Según el Informe de seguridad y uso de contenedores de Sysdig 2021, la seguridad de los contenedores es una preocupación creciente para muchas organizaciones. Sin embargo, todavía hay algunas lagunas. El escaneo de imágenes de contenedores y los contenedores privilegiados son dos de los aspectos más cruciales.

Los contenedores sin raíz de Podman (consulte Ejecución de Podman sin raíz como usuario no raíz y Contenedores sin raíz con Podman:conceptos básicos) y OpenShift Container Platform implementan el principio de privilegio mínimo de forma predeterminada, lo que ayuda a los administradores a aplicar las mejores prácticas de seguridad. Las ofertas de registro de contenedores de Red Hat quay.io y Red Hat quay ayudan a los administradores y desarrolladores a incorporar el análisis de vulnerabilidades de imágenes en sus canalizaciones de CI/CD.

[ También puede disfrutar leyendo: Integración mejorada de systemd con Podman 2.0 ]

Red Hat administra quay.io, un registro de contenedores público alojado. Las personas o empresas pueden usar el registro para almacenar y compartir imágenes de contenedores (dentro de una organización o para el público en general). Las imágenes de base universal (UBI) de Red Hat se basan en RHEL y ofrecen una forma de crear y compartir las imágenes de su aplicación libremente.

El registro tiene un escáner de seguridad incorporado que verifica las imágenes en busca de vulnerabilidades, brinda detalles sobre los paquetes en la imagen e identifica las vulnerabilidades con sus correcciones asociadas. Organiza las vulnerabilidades en categorías de gravedad baja, media y alta. También proporciona metadatos como el número CVE y un enlace a la errata relacionada con las vulnerabilidades. A medida que las imágenes de contenedor envejecen, se descubren nuevos CVE, por lo que para este artículo, veremos una versión anterior de UBI. Por ejemplo, al momento de escribir este artículo, una de las compilaciones específicas de ubi8 (8.2-299) tiene el siguiente resultado que destaca 178 paquetes (10 paquetes con alto impacto) y 38 vulnerabilidades (10 alto).

La interfaz de usuario de quay.io proporciona la información relacionada con las vulnerabilidades en un formato fácil de usar. Uno puede navegar por la lista de paquetes, verificar los paquetes afectados y ver los detalles de la vulnerabilidad. Sin embargo, con organizaciones enfocadas en DevSecOps, es beneficioso obtener esta información sobre la marcha y utilizarla antes de cada implementación para garantizar que solo las imágenes seguras lleguen al entorno de producción.

Este artículo asume cierta familiaridad básica con los conceptos de quay.io como repositorios, cuentas de robots y tareas generales como compilaciones de imágenes (usando DockerFiles) y etiquetado de imágenes. En caso de que esté interesado en obtener más información sobre estos conceptos, puede consultar las guías de usuario de quay.io.

Para obtener la información de escaneo a través de la línea de comando, use el skopeo y jq comandos Skopeo permite a los usuarios no solo inspeccionar imágenes sin descargarlas primero en una máquina local, sino que también permite copiar imágenes de un repositorio (local o remoto) a otro.

El siguiente comando obtendrá los metadatos de la imagen de forma similar a docker inspect comando ejecutado contra una imagen local:

# IMAGE_NAME='app-sre/ubi8-ubi'
# IMAGE_TAG='8.2-299'
# skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG

Para obtener el resumen único de la imagen, podemos analizar la salida json recibida usando jq comando.

# IMAGE_DIGEST=`skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG | jq -r .Digest`

Con el resumen, puede obtener el informe de seguridad de la imagen consultando las API de quay.io. Podemos almacenar la salida (archivo json) en un archivo local y utilizar jq para filtrar el contenido deseado.

# curl -o `basename $IMAGE_NAME`.json https://quay.io/api/v1/repository/$IMAGE_NAME/manifest/$IMAGE_DIGEST/security?vulnerabilities=true

Por ejemplo, para obtener la información relativa a las vulnerabilidades de gravedad alta con el ID de aviso asociado, la URL de aviso, el nombre del paquete, su versión afectada y la versión que contiene las correcciones, se puede utilizar el siguiente comando:

jq '.data.Layer.Features[]' `basename $IMAGE_NAME`.json | jq -c '{"Name":.Name,"Version":.Version,"Advisory":.Vulnerabilities[]} | select(.Advisory.Severity=="High") | {"Advisory":.Advisory.Name,"Link":.Advisory.Link,"PACKAGE":.Name,"CURRENT VERSION":.Version,"FIXED IN VERSION":.Advisory.FixedBy }'

El comando produce un resultado como el siguiente que indica que esta imagen UBI (app-sre/ubi8-ubi) tiene 10 notificaciones de aviso:

{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-tools","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-libs","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-common","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-daemon","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:2755","Link":"https://access.redhat.com/errata/RHSA-2020:2755","PACKAGE":"libnghttp2","CURRENT VERSION":"1.33.0-1.el8_0.1","FIXED IN VERSION":"0:1.33.0-3.el8_2.1"}
{"Advisory":"RHSA-2020:5476","Link":"https://access.redhat.com/errata/RHSA-2020:5476","PACKAGE":"openssl-libs","CURRENT VERSION":"1:1.1.1c-15.el8","FIXED IN VERSION":"1:1.1.1g-12.el8_3"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"python3-librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:2637","Link":"https://access.redhat.com/errata/RHSA-2020:2637","PACKAGE":"gnutls","CURRENT VERSION":"3.6.8-10.el8_2","FIXED IN VERSION":"0:3.6.8-11.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}

[ Curso gratuito:Resumen técnico de Red Hat Satellite. ] 

Resumir

En la siguiente parte de esta serie de artículos, incorporo la información de este artículo en una canalización de muestra para tomar decisiones informadas sobre si continuar con esta imagen e implementar aplicaciones en producción.


Linux
  1. Acelerar la creación de imágenes de contenedores con Buildah

  2. Encontrar dispositivos no autorizados en su red usando Nmap

  3. Cómo aligerar la carga en su registro de contenedores usando Quay.io

  4. Agregue estas 4 herramientas a su caja de herramientas de contenedor de Linux

  5. Cómo escribir texto en la imagen usando el comando de Linux

Administra tus juegos usando Lutris en Linux

Uso de Telnet para solucionar problemas de su sistema de correo

Construyendo un contenedor de Linux a mano usando espacios de nombres

Una introducción al registro de contenedores de Quay

Cómo cambiar el tamaño de las imágenes usando Python

Skanlite:una herramienta simple de escaneo de imágenes para Linux