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) yRPM
(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
yWAR
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
yspdx-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.