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

Cómo encontrar vulnerabilidades en contenedores y archivos con Grype

Grype es un escáner de vulnerabilidades de código abierto que encuentra debilidades dentro de las imágenes de contenedores y los directorios del sistema de archivos. Anchore desarrolló Grype, pero funciona como un binario independiente que es más fácil de manejar que Anchore Engine.

Las vulnerabilidades conocidas se abren paso en su software a través de paquetes de sistema operativo obsoletos, dependencias de lenguaje de programación comprometidas e imágenes base inseguras. El escaneo activo de sus artefactos lo mantiene informado de los problemas antes de que los actores maliciosos los encuentren. Aquí se explica cómo usar Grype para encontrar problemas en su código y contenedores.

Instalando Grype

Grype se distribuye como un binario precompilado en deb , rpm , fuente Linux y formatos Mac. Puede obtener 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. Como alternativa, utilice 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 funcione ejecutando grype dominio. Se mostrará la documentación sobre los comandos disponibles.

Escaneos básicos

En su forma más simple, Grype toma un solo argumento que especifica la imagen del contenedor o la ruta del sistema de archivos para 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 imagen que se haya exportado desde Docker:

grype saved-image.tar

Grype descargará su base de datos de vulnerabilidades la primera vez que se ejecute. Esto 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 presentes en la base de datos.

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

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

Escaneo de sistemas 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 usar esta función, especifique una ruta de directorio con 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.

Los análisis de sistemas de archivos muestran los mismos tipos de vulnerabilidad 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 filtrado para limitar el alcance del informe solo a las vulnerabilidades o las opciones de resolución que le interesan:

  • --only-fixed – Mostrar solo las vulnerabilidades que se han parcheado en una versión posterior del paquete afectado.
  • --fail-on high – Salga inmediatamente con un código de error cuando un high Se encuentra una vulnerabilidad de nivel. 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 haya decidido no abordar, quizás porque no son relevantes para el uso que hace del 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 ignore de nivel superior campo:

ignore:
  - vulnerability: CVE-2021-12345

También se admiten otros campos, como esta variante para ignorar todos los problemas derivados 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 análisis 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 separado mientras que los informes de la tabla de terminales los excluyen por completo. Si ignora una vulnerabilidad, recuerde documentar por qué se aceptó para que todos los colaboradores comprendan el riesgo.

Uso de SBOM

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

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

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

Luego ejecute un escaneo Grype usando el SBOM:

grype sbom:/alpine-sbom.json

Grype inspeccionará la imagen de referencia en busca de nuevas vulnerabilidades que surjan de su lista de materiales. Siga usando Grype con su SBOM para monitorear problemas emergentes en las dependencias de imágenes que ya ha auditado e indexado.

Personalizar la salida de Grype

Grype proporciona cuatro formateadores de salida diferentes entre los que puede cambiar usando -o Indicador CLI:

  • table – La tabla legible por humanos predeterminada para el consumo en la 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 escanear. Los archivos JSON son adecuados para el archivado y la comparación a largo plazo, o se pueden usar como artefactos de compilación de CI.
  • cyclonedx – Un informe compatible con CycloneDX en formato XML que está listo para incorporarse a otras herramientas compatibles con SBOM y listas de vulnerabilidades.
  • template – Este formateador avanzado le permite producir sus propios informes en formatos arbitrarios.

La template El formateador acepta una plantilla de Go que se usará para representar la salida del informe. Para usar este formateador, no lo especifique por su nombre; en su lugar, pase la ruta a un archivo que contenga su plantilla de Go:

grype alpine:latest -o output-template.tmpl

La plantilla debe usar la sintaxis de plantillas de Go para hacer referencia a las variables que proporciona Grype. Puede construir 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 producción de un archivo CSV a partir de las variables disponibles.

Base de datos de vulnerabilidades

La base de datos de vulnerabilidades almacena detalles de todas las vulnerabilidades conocidas por Grype. Una vez que se haya descargado, la versión almacenada en caché se reutilizará hasta que haya una actualización disponible. Las interacciones manuales con la base de datos no suelen ser necesarias.

En algunas situaciones, es posible que deba forzar la descarga de una base de datos. Esto podría deberse a que está configurando un servidor con espacio de aire antes de ejecutar un escaneo. Usa la grype db check y grype db update Comandos para buscar 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 su sistema esté fuera de línea. Puede desactivar las comprobaciones automáticas de actualización de la base de datos de Grype configurando GRYPE_DB_AUTO_UPDATE variable de entorno a false en tu caparazón.

Resumen

Grype lo alerta sobre vulnerabilidades dentro de sus contenedores y en su sistema de archivos. Como un binario CLI independiente, es más fácil comenzar que con una instalación completa de Anchore.

Si se pregunta cuál debería elegir, el valor de Anchore radica en su extensibilidad y opciones de configuración avanzadas. Con Anchore Engine, puede definir sus propios conjuntos de políticas en función de puertas, activadores y acciones. Estos le permiten adaptar con precisión sus escaneos a su entorno específico. Grype brinda una experiencia más optimizada cuando solo desea una lista de vulnerabilidades conocidas en su imagen.

Cualquiera que elija, la adopción de alguna forma de exploración activa 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 canalización de CI para recibir alertas sobre nuevas vulnerabilidades a medida que se confirma el código.


Docker
  1. Cómo encontrar archivos grandes de Linux con los comandos find y du

  2. ¿Cómo encontrar archivos con una determinada subruta?

  3. ¿Cómo buscar archivos por tamaño y extensión?

  4. ¿Cómo encontrar todos los archivos que terminan en .rb con Linux?

  5. Encuentre archivos y péguelos (con espacios)

Cómo encontrar archivos en Linux con el comando Buscar

Cómo excluir archivos y directorios con Rsync

Cómo encontrar y eliminar archivos duplicados en Linux

Cómo encontrar archivos con el comando fd en Linux

Cómo encontrar archivos duplicados en Linux y eliminarlos

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores