Cómo usar "docker sbom" para indexar los paquetes de su imagen Docker

La seguridad de la cadena de suministro de software se ha convertido en un tema de actualidad a raíz de los ataques basados ​​en dependencias de alto perfil. Producir un SBOM para sus artefactos de software puede ayudarlo a identificar debilidades y reducir la cantidad de paquetes en los que confía.

Una nueva característica de Docker integra soporte para la generación de SBOM en el docker CLI. Esto le permite producir un SBOM junto con su compilación y luego distribuirlo a los consumidores de su imagen.

Índice de contenidos
  1. El comando "docker sbom"
  2. Personalización de salida
  3. Casos de uso
  4. Resumen

El comando "docker sbom"

El nuevo docker sbom El comando se incluye con las versiones 4.7.0 y posteriores de Docker Desktop. Puede agregar el comando a una instalación de Docker Engine en Linux instalando el docker-sbom complemento de GitHub:

$ curl -sSfL https://raw.githubusercontent.com/docker/sbom-cli-plugin/main/install.sh | sh -s --

Verifique que la instalación se haya realizado correctamente ejecutando el comando:

$ docker sbom

Usage:  docker sbom [OPTIONS] COMMAND

View the packaged-based Software Bill Of Materials (SBOM) for an image.
...

Ahora puede generar el SBOM para una imagen de Docker pasando su etiqueta al comando:

$ docker sbom nginx:latest
Syft v0.43.0
 ✔ Pulled image            
 ✔ Loaded image            
 ✔ Parsed image            
 ✔ Cataloged packages      [143 packages]
NAME                       VERSION                         TYPE         
adduser                    3.118                           deb           
apt                        2.2.4                           deb           
base-files                 11.1+deb11u3                    deb           
base-passwd                3.5.51                          deb           
bash                       5.1-2+b3                        deb           
bsdutils                   1:2.36.1-8+deb11u1              deb   
...

La CLI extraerá la imagen especificada si aún no existe en su sistema. Luego, el contenido de la imagen se indexa y se muestra una lista de paquetes en su terminal.

Debajo del capó, Docker utiliza el popular generador Syft SBOM para escanear e indexar la imagen. La versión activa de Syft se muestra cada vez que usa el comando. Su salida coincide con lo que produciría una instalación independiente de Syft.

Syft es capaz de identificar paquetes de sistemas operativos y dependencias de lenguajes de programación. El tipo de cada paquete detectado se muestra en la salida del comando, junto a su nombre y versión precisa. Puede usar esta información para auditar con precisión las imágenes de sus contenedores y descubrir el software en el que confían. Cuando se informa una vulnerabilidad importante, puede consultar el SBOM de la imagen para verificar rápidamente si está afectado.

Personalización de salida

La salida se muestra como una tabla legible por humanos de forma predeterminada. Esto es ideal para distribuir junto con su imagen o como parte de su documentación.

Puede eliminar las líneas que contienen la versión de Syft y el informe de progreso agregando el --quiet bandera. Usar --output para escribir el informe en un archivo, en lugar de la ventana de su terminal. La combinación de estas dos opciones le permite guardar fácilmente los datos de la lista de paquetes.

$ docker sbom --output sbom.txt --quiet nginx:latest

Varios formatos de salida alternativos están disponibles a través de la --format bandera. los text variant es otra opción legible por humanos que utiliza un diseño basado en filas:

$ docker sbom --format text --quiet nginx:latest
[Image]
 Layer:      0
 Digest:     sha256:9c1b6dd6c1e6be9fdd2b1987783824670d3b0dd7ae8ad6f57dc3cea5739ac71e
 Size:       80400891
 MediaType:  application/vnd.docker.image.rootfs.diff.tar.gzip

...

[adduser]
 Version:    3.118
 Type:       deb
 Found by:   dpkgdb-cataloger

[apt]
 Version:    2.2.4
 Type:       deb
 Found by:   dpkgdb-cataloger

los [Image] La sección enumera los detalles de todas las capas dentro de la imagen escaneada. Las siguientes secciones enumeran los paquetes detectados, proporcionando su tipo y versión como propiedades anidadas.

También se admiten varios otros formatos, cada uno de los cuales se puede activar usando el --format bandera. Estas son mejores opciones cuando desea consumir datos SBOM mediante programación con herramientas de terceros.

  • syft-json - Salida para informar en formato JSON nativo de Syft.
  • cyclonedx-xml/cyclonedx-json - Produzca un informe compatible con los estándares CycloneDX como XML o JSON. Este estándar SBOM está liderado por OWASP.
  • github-0-json - Un formato de informe compatible con GitHub.
  • spdx-tag-value/spdx-json - Compatible con el estándar SPDX para expresar SBOM, definido por la Fundación Linux.

Los escaneos generalmente miran todo en el sistema de archivos de la imagen. A veces, es posible que desee excluir directorios específicos para evitar que algunos paquetes se muestren en la salida. Pase una expresión global a la --exclude marca para filtrar rutas particulares. Puede usar esto para indexar solo los paquetes asociados con su aplicación, en lugar de aquellos que pertenecen a la capa del sistema operativo de la imagen.

$ docker sbom --exclude /var nginx:latest

En ocasiones, es posible que necesite escanear una imagen creada para una arquitectura que difiere de su plataforma actual. Utilizar el --platform bandera para seleccionar una variante de varias arcadas diferente, como linux o arm64:

$ docker sbom --platform arm64 nginx:latest

Esto le permite indexar imágenes que ha creado para otras plataformas sin cambiar entre dispositivos de hardware físicos.

Casos de uso

Más desarrolladores están comenzando a reconocer los beneficios de los SBOM. Resaltan listas de dependencia excesivamente largas, lo que brinda oportunidades de poda que reducen su exposición a amenazas. Para los consumidores de software, los SBOM son una herramienta cada vez más importante al medir el riesgo que presenta un nuevo proyecto. Es probable que se conviertan en un producto necesario para el software encargado por las principales organizaciones y agencias gubernamentales.

Una vez que tenga un SBOM, los datos se pueden usar con herramientas automatizadas para identificar más problemas de seguridad. Como ejemplo, podría pasar la salida de docker sbom directamente en Grype para identificar CVE asociados con los paquetes en su imagen:

$ docker sbom --format syft-json nginx:latest | grype

La generación SBOM se ha basado anteriormente en la adopción de nuevas herramientas como Syft. Esto reduce la capacidad de descubrimiento y convierte al SBOM en un complemento adicional, en lugar de algo intrínseco a sus artefactos. Al integrar los SBOM en la CLI de Docker, más desarrolladores podrán generar informes a lo largo del ciclo de vida del software.

La implementación actual de docker sbom se considera experimental y de alcance limitado. En el futuro, los datos SBOM podrían capturarse como parte del proceso de creación de imágenes. docker sbom luego mostraría esta información, en lugar de realizar un análisis bajo demanda activo.

Integración de SBOM en docker build los convertiría en un componente de primera clase en la cadena de herramientas de contenedores, garantizando que cada imagen esté acompañada por un SBOM durante toda su vida. El almacenamiento de una imagen en un registro incluiría el SBOM correspondiente, incluso si el host del registro tuviera un espacio de aire y no pudiera realizar escaneos activos. Sin embargo, esta funcionalidad aún está lejos. La versión de hoy de docker sbom sigue siendo una herramienta poderosa que facilita la producción de SBOM de imágenes de contenedores.

Resumen

los docker sbom El comando le permite generar el SBOM para una imagen de Docker sin instalar una herramienta independiente. La CLI de Docker se integra con Syft para proporcionar escaneos bajo demanda que producen un índice de paquetes presentes en el sistema de archivos de la imagen.

Puedes empezar a usar docker sbom hoy actualizando a Docker Desktop v4.7.0 o instalando el complemento SBOM para Docker Engine en Linux. Generar un SBOM cada vez que crea su imagen lo ayudará a identificar y abordar el exceso de dependencia antes de que se convierta en un problema. A menudo, puede reducir la cantidad de paquetes en su imagen cambiando a una imagen base mínima como alpine y eliminando las dependencias del lenguaje de programación no utilizadas.

Descubre más contenido

Subir Change privacy settings