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

Cómo indexar las dependencias de su imagen Docker con Syft

Syft es una utilidad CLI que genera una lista de materiales de software (SBOM) para imágenes de contenedores. Un SBOM es un catálogo de dependencias utilizadas por su imagen. Le brinda visibilidad de los "materiales" que forman el sistema de archivos de su imagen.

Producir un SBOM puede ayudarlo a identificar cadenas de suministro de paquetes demasiado complejas que lo ponen en riesgo de ataques de confusión de dependencia. La distribución de un SBOM junto con su imagen informa a los usuarios de lo que hay debajo de la superficie. Esto proporciona un punto de partida útil para reforzar la seguridad de la cadena de suministro.

Syft es desarrollado por Anchore, que también ofrece un motor completo de escaneo de contenedores. Syft CLI es capaz de extraer listas de paquetes de imágenes utilizando sistemas operativos y lenguajes de programación populares. Se admiten las imágenes Docker y OCI.

Instalando Syft

Hay un script de instalación disponible para descargar el último binario de Syft y agregarlo a su ruta:

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

Los usuarios de Mac también pueden obtener Syft de Homebrew agregando anchore/syft repositorio e instalando el syft paquete.

Una vez que tenga Syft en su sistema, ejecute syft en su terminal para mostrar los comandos disponibles. Puede generar finalizaciones para su shell ejecutando syft completion .

Usar syft version para encontrar la versión de su instalación. Consulte la página de etiquetas de GitHub periódicamente para encontrar nuevas versiones, luego reutilice el script de instalación para descargar cada actualización.

Escaneando una imagen

La funcionalidad de Syft actualmente está expuesta por un solo subcomando, syft packages . Pásele una etiqueta de imagen para generar un SBOM para:

syft packages alpine:latest

Syft descargará la imagen, escaneará su contenido y producirá un catálogo de paquetes descubiertos. La salida se mostrará como una tabla en su terminal. Cada resultado incluye el nombre, la versión y el tipo del paquete detectado.

La lista de paquetes para esta imagen es corta. Como se trata de una imagen base de Alpine, los paquetes instalados se simplifican intencionalmente para proporcionar la superficie más pequeña posible. Las imágenes más grandes pueden contener cientos o miles de paquetes en varios formatos diferentes. Puede ser útil combinar Syft con herramientas de terminal Unix existentes como grep y awk para extraer los datos que está buscando.

syft packages example-image:latest | grep example-package-to-find

Tipos de paquetes admitidos

Syft admite muchos formatos de paquetes populares en los principales sistemas operativos y lenguajes de programación. La lista incluye:

  • APK (Alpina), DEB (Debian) y RPM (Fedora) Paquetes de sistema operativo.
  • Identificación de las distribuciones de Linux entre los favores de Alpine, CentOS, Debian y RHEL.
  • Módulos Ir
  • Java en JAR , EAR y WAR variaciones
  • Paquetes de hilo y NPM
  • Ruedas y huevos de pitón
  • Paquetes de rubíes

Aunque no todos los idiomas están cubiertos, aún se beneficiará del escaneo a nivel del sistema operativo, independientemente de la pila elegida para su aplicación.

Cambiando el formato de salida

El formato de salida predeterminado se llama table . Representa una tabla de resultados basada en columnas en su terminal, creando una nueva fila para cada paquete detectado. Un formato alternativo legible por humanos es text que presenta una lista de paquetes con Version y Type campos anidados debajo de cada sección.

Syft también admite varios formatos programáticos:

  • json – Guarde los datos del paquete en una estructura JSON.
  • cyclonedx – Un informe CycloneDX en formato XML.
  • spdx y spdx-json – Informes compatibles con SPDX en formato de valor de etiqueta o JSON.

El uso de uno de estos informes le permite archivar los hallazgos en un archivo para referencia posterior:

syft packages alpine:latest -o json > alpine-packages.json

Los formatos estandarizados CycloneDX y SPDX pueden ayudar a integrar los escaneos de Syft en sus procesos de CI/CD. Los datos son accesibles para otras herramientas del ecosistema que funcionan con listas de paquetes y resultados de SBOM.

Syft también se integra con Grype, el buscador de vulnerabilidades del sistema de archivos contenedor independiente de Anchore. Los datos de Syft se pueden enviar directamente a Grype si usa el formato de salida JSON.

syft packages example-image:latest -o json > sbom.json
grype sbom:./sbom.json

Grype comparará la lista de paquetes con su índice de vulnerabilidades conocidas. Resaltará los paquetes que contienen problemas, brindándole un punto de partida inmediato para mejorar su postura de seguridad.

Uso de otras fuentes de imágenes

Syft puede usar imágenes de otras fuentes además de los registros públicos de Docker. Puede hacer referencia a cualquier imagen compatible con OCI, ya sea a través de una etiqueta de registro o como una imagen tar guardada. Las rutas a los archivos de imágenes se pueden entregar directamente a Syft:

docker image save my-image:latest > my-image.tar
syft packages ./my-image.tar

Syft también funciona con registros privados de Docker. Utiliza sus credenciales existentes en su ~/.docker/config.json archivo:

{
    "auths": {
        "registry.example.com": {
            "username": "",
            "password": ""
        }
    }
}

Aunque Syft se enfoca en escaneos de imágenes de contenedores, también puede crear un SBOM para rutas arbitrarias de sistemas de archivos. Puede usar Syft para indexar los paquetes de su host escaneando directorios que comúnmente contienen archivos binarios y bibliotecas de software:

syft packages dir:/usr/bin

Debe agregar explícitamente el dir: esquema si está haciendo referencia a una ruta fuera de su directorio de trabajo. De lo contrario, Syft intentará interpretarlo como una referencia de etiqueta de imagen.

Conclusión

Syft extrae listas de paquetes de las imágenes de su contenedor. Los datos generados actúan como un SBOM para su imagen, aumentando su conocimiento de la longitud de su cadena de suministro.

Syft se distribuye como un solo binario que produce informes en varios formatos diferentes. Se puede integrar fácilmente en los sistemas de CI/CD para cargar un artefacto SBOM como parte de su proceso de creación de imágenes. Esto aumenta la responsabilidad y ayuda a las pistas de auditoría al registrar la lista completa de software de cada imagen en el momento en que se produce.

Agregar escaneos de Syft a su flujo de trabajo lo mantiene informado sobre los paquetes que está utilizando. Una vez que tenga esta información, puede comenzar a evaluar cada paquete para determinar si es realmente necesario. Si encuentra muchos paquetes que su carga de trabajo no usa, considere cambiar a una imagen base mínima y superponer solo el software esencial en capas.


Docker
  1. Cómo instalar Jenkins con Docker

  2. Cómo implementar microservicios con Docker

  3. Cómo implementar aplicaciones con Rancher

  4. Cómo modificar imágenes de Docker

  5. Cómo confirmar cambios en una imagen de Docker

Cómo reemplazar Docker con Podman en una Mac

Cómo alojar su propia plataforma como servicio (PaaS) con Dokku

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

Mantenga sus imágenes de Docker manejables con Docker Image Prune

Cómo crear una imagen Docker personalizada con Dockerfile