Cómo encontrar vulnerabilidades en contenedores y archivos con Grype

Grype es un escáner de vulnerabilidades de código abierto que encuentra debilidades en imágenes de contenedores y directorios del sistema de archivos. Grype es desarrollado por Anchore pero funciona como un binario independiente que es más fácil de administrar que Anchore Engine.

Las vulnerabilidades conocidas se abren paso en el software a través de paquetes de sistemas operativos obsoletos, dependencias comprometidas del lenguaje de programación e imágenes base inseguras. El escaneo activo de sus artefactos lo mantiene informado de los problemas antes de que los agentes malintencionados los encuentren. A continuación, se explica cómo usar Grype para encontrar problemas en el código y los contenedores.

Índice de contenidos
  1. Instalación de Grype
  2. Escaneos básicos
  3. Análisis del sistema de archivos
  4. Filtrado de vulnerabilidades
  5. Ignorar vulnerabilidades
  6. Usando SBOM
  7. Personalizar la salida de Grype
  8. Base de datos de vulnerabilidades
  9. Resumen

Instalación de Grype

Grype se distribuye como un binario precompilado en deb, rpm, Fuente Linux y formatos Mac. Puede tomar la última versión de GitHub e instalarla con el administrador de paquetes de su sistema o copiando el binario en una ubicación en su ruta. Alternativamente, use el script de instalación para automatizar el proceso:

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

Verifique que su binario esté funcionando ejecutando el grype mando. Se mostrará la documentación sobre los comandos disponibles.

Escaneos básicos

En su forma más simple, Grype acepta un único argumento que especifica la imagen del contenedor o la ruta del sistema de archivos a escanear. Para escanear una imagen, proporcione una etiqueta de registro válida. Grype utilizará las credenciales de Docker disponibles para extraer imágenes de Docker Hub y registros privados.

grype alpine:latest

También puede escanear un archivo de imágenes que se haya exportado desde Docker:

grype saved-image.tar

Grype descargará su base de datos de vulnerabilidades la primera vez que se ejecute. Actualmente pesa alrededor de 90 MB. Una vez que la base de datos esté disponible, Grype extraerá la imagen de Docker, catalogará el software que contiene y analizará las vulnerabilidades conocidas en la base de datos.

Captura de pantalla de un escaneo de un contenedor Grype

Los resultados se muestran en una tabla dentro del terminal. Cada vulnerabilidad incluye su ID de CVE, el nombre del paquete afectado y su nivel de gravedad. Cuando el problema se haya solucionado en una versión posterior, verá el número de versión de la actualización en el FIXED-IN columna. Esto ayuda a determinar si una vulnerabilidad se puede resolver fácilmente con una simple actualización del administrador de paquetes.

Grype puede trabajar con paquetes para todas las distribuciones populares de Linux. También admite paquetes Ruby Gems, NPM y Yarn, dependencias de Python Eggs, Wheels y Poetry, y módulos Java en formatos JAR, WAR, EAR, JPI y HPI.

Análisis del sistema de archivos

Grype puede escanear las rutas del sistema de archivos en su máquina. Esto le permite descubrir vulnerabilidades en los repositorios de código fuente antes de crear una imagen. Para utilizar esta función, especifique una ruta de directorio con el dir: esquema:

grype dir:/example-dir

Grype buscará archivos compatibles anidados en la raíz del directorio dado. Cada archivo encontrado será indexado y escaneado en busca de vulnerabilidades.

Captura de pantalla de un escaneo del sistema de archivos Grype

Los análisis del sistema de archivos surgen de los mismos tipos de vulnerabilidades que los análisis de imágenes de contenedores. El análisis puede tardar un par de minutos en completarse si está trabajando con un árbol de directorios grande.

Filtrado de vulnerabilidades

Se admiten dos indicadores de filtro para limitar el alcance del informe solo a las vulnerabilidades u opciones de resolución que le interesen:

  • --only-fixed - Muestra solo las vulnerabilidades que se han solucionado en una versión posterior del paquete afectado.
  • --fail-on high - Salga inmediatamente con un código de error cuando un highSe encuentra un nivel de vulnerabilidad. Puede sustituir cualquier nivel de error admitido (crítico, alto, medio o bajo) en lugar de high.

Ignorar vulnerabilidades

Las vulnerabilidades se pueden ignorar para ocultar falsos positivos o problemas que ha decidido no abordar, quizás porque no son relevantes para usar el paquete.

Para ignorar una vulnerabilidad, debe crear un archivo de configuración de Grype personalizado en formato YAML. Agregue el CVE de la vulnerabilidad debajo del nivel superior ignore campo:

ignore:
  - vulnerability: CVE-2021-12345

También se admiten otros campos, como esta variante para ignorar todos los problemas que surgen de los paquetes NPM:

ignore:
  - package:
      type: npm

Guarde su archivo de configuración en .grype.yaml o .grype/config.yaml en su directorio de trabajo. Se utilizará automáticamente la próxima vez que ejecute un escaneo de Grype. El archivo de configuración global ~/.grype.yaml también es compatible. El archivo en su directorio de trabajo se fusionará con el global en tiempo de ejecución.

Las vulnerabilidades no afectarán el código de salida de Grype si se ignoran. El informe JSON los moverá a un ignoredMatches mientras que los informes de la tabla terminal los excluyen por completo. Si ignora una vulnerabilidad, recuerde documentar por qué fue aceptada para que cada colaborador comprenda el riesgo.

Usando SBOM

Grype puede trabajar con SBOM generado por Syft, otro de los proyectos de Anchore. Syft indexa las imágenes del contenedor para producir una lista de las dependencias que contienen.

Utilice Syft para crear un SBOM para su imagen en formato JSON:

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

Luego ejecute un escaneo de Grype usando SBOM:

grype sbom:/alpine-sbom.json

Grype inspeccionará la imagen de referencia en busca de nuevas vulnerabilidades derivadas de su BOM. Continúe usando Grype con su SBOM para monitorear problemas emergentes en las dependencias de imágenes que ya haya verificado e indexado.

Personalizar la salida de Grype

Grype proporciona cuatro formateadores de salida diferentes entre los que puede alternar el uso de -o Bandera CLI:

  • table - La tabla legible predefinida para el consumo dentro del terminal.
  • json - Un informe en formato JSON que contiene información mucho más completa sobre cada vulnerabilidad, así como detalles de la base de datos Grype utilizada para el escaneo. Los archivos JSON son adecuados para el almacenamiento y la comparación a largo plazo o para usarse como artefactos de compilación de CI.
  • cyclonedx - Un informe compatible con CycloneDX en formato XML listo para integrarse en otras herramientas que admiten SBOM y listas de vulnerabilidades.
  • template - Este formateador avanzado le permite producir sus informes en formatos arbitrarios.

El template el formateador acepta un modelo Go que se utilizará para representar la salida del informe. Para usar este formateador, no lo especifique por su nombre, sino pase la ruta a un archivo que contenga su modelo Go:

grype alpine:latest -o output-template.tmpl

El modelo debe utilizar la sintaxis del modelo Go para hacer referencia a las variables proporcionadas por Grype. Puede crear cualquier tipo de formato de archivo que necesite, como una página HTML, un archivo Markdown o una estructura JSON personalizada. Los documentos de Grype incluyen un ejemplo de cómo producir un archivo CSV a partir de variables disponibles.

Base de datos de vulnerabilidades

La base de datos de vulnerabilidades almacena detalles de todas las vulnerabilidades conocidas de Grype. Una vez descargada, la versión en caché se reutilizará hasta que haya una actualización disponible. Por lo general, no es necesario realizar interacciones manuales con la base de datos.

En algunas situaciones, puede ser necesario forzar la descarga de la base de datos. Esto podría deberse a que está configurando un servidor de espacio de aire antes de ejecutar un escaneo. Utilizar el grype db check Y grype db update comandos para verificar y descargar una versión más reciente de la base de datos.

Una vez que la base de datos esté disponible, los escaneos funcionarán mientras el sistema esté fuera de línea. Puede deshabilitar las comprobaciones de actualización automática de la base de datos de Grype configurando el GRYPE_DB_AUTO_UPDATE variable de entorno a false en tu caparazón.

Resumen

Grype le advierte de las vulnerabilidades dentro de sus contenedores y en su sistema de archivos. Al ser un binario CLI independiente, es más fácil comenzar que una instalación completa de Anchore.

Si se pregunta cuál elegir, el valor de Anchore radica en su extensibilidad y opciones de configuración avanzadas. Con Anchore Engine puede definir sus propios conjuntos de criterios basados ​​en puertos, disparadores y acciones. Estos le permiten adaptar con precisión sus escaneos a su entorno específico. Grype ofrece una experiencia más ágil cuando solo desea una lista de vulnerabilidades conocidas en su imagen.

Cualquiera que elija, la adopción de alguna forma de escaneo activo de vulnerabilidades lo mantendrá informado de las debilidades en su cadena de suministro de software. Para un enfoque completamente integrado, use Grype como parte de su canal de CI para que reciba alertas sobre nuevas vulnerabilidades tan pronto como su código esté comprometido.

Descubre más contenido

Subir Change privacy settings