
Escanea las Listas de Materiales de Software (SBOM) en busca de vulnerabilidades de seguridad

bomber es una aplicación que escanea SBOMs en busca de vulnerabilidades de seguridad.
Entonces le ha pedido a un proveedor una Lista de Materiales de Software (SBOM) para uno de sus productos de código cerrado, y le proporcionaron una en un archivo JSON... ¿y ahora qué?
Lo primero que querrá hacer es ver si alguno de los componentes listados en la SBOM tiene vulnerabilidades de seguridad, y qué tipo de licencias tienen estos componentes. Esto le ayudará a identificar qué tipo de riesgo asumirá al usar el producto.
Encontrar vulnerabilidades de seguridad e información de licencias para los componentes identificados en una SBOM es exactamente para lo que está diseñado bomber. bomber puede leer cualquier formato CycloneDX basado en JSON o XML, o una SBOM formateada en JSON de SPDX o Syft, y le dirá rápidamente si hay vulnerabilidades.
El software puede ser de código abierto o cerrado. Puede considerar los componentes de terceros que encontrará en GitHub, o cualquier repositorio de código fuente público, como código abierto. Técnicamente, el software que crea internamente en su propia empresa también es código abierto (no es público, pero sus equipos internos pueden verlo). El software de código cerrado también puede ser interno, pero generalmente es software que compra a proveedores externos.
Las empresas pueden usar herramientas SCA proporcionadas por proveedores como GitHub, Sonatype, Snyk, etc., para escanear cualquier tipo de código abierto y proporcionar datos de vulnerabilidades, e incluso generar SBOMs en algunos casos. Lo que no pueden hacer (todavía...) es escanear software de código cerrado al que no tienen visibilidad. Aquí es donde entran en juego las SBOMs y bomber. Las SBOMs proporcionan la composición del software al que no puede acceder, y bomber determina si algo en la SBOM tiene vulnerabilidades.
Creamos bomber para escanear las SBOMs de código cerrado que se proporcionan cuando las recibe de los proveedores. También puede escanear SBOMs de código abierto y, técnicamente, podría usar bomber como una herramienta SCA de código abierto si lo desea.
Actualmente existen bastantes formatos de SBOM. bomber admite los siguientes:

bomber admite múltiples fuentes de información sobre vulnerabilidades. A estas las llamamos proveedores. Actualmente, bomber usa OSV como proveedor predeterminado, pero también puede usar la Base de Datos de Asesorías de GitHub, el Índice OSS de Sonatype o Snyk.
En este momento, tenga en cuenta que OSV es gratuito y no requiere credenciales para su uso, Índice OSS de Sonatype es gratuito pero requiere registrarse y obtener un token, y el soporte de Snyk requiere una licencia de Snyk.
Además de los datos que bomber recopila de los Proveedores, también enriquece los datos de vulnerabilidades con información adicional, como probabilidades de explotación.
Tenga en cuenta que cada proveedor admite diferentes ecosistemas, por lo que si no ve vulnerabilidades en uno, pruebe con otro. Un ecosistema es simplemente el gestor de paquetes o el tipo de paquete. Los ejemplos incluyen rpm, npm, gems, etc. Es importante comprender que cada proveedor puede reportar diferentes vulnerabilidades. En caso de duda, consulte varios de ellos.
Si bomber no encuentra vulnerabilidades, no significa que no las haya. Solo significa que el proveedor utilizado no detectó ninguna, o que no admite el ecosistema. Algunos proveedores tienen vulnerabilidades que no devuelven información de Severidad. En este caso, la Severidad se mostrará como "INDEFINIDA".
La documentación de los proveedores para bomber se puede encontrar:
Puede usar Homebrew para instalar bomber con el siguiente comando:
brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber
Si no tiene Homebrew, aún puede descargar la última versión (ej: bomber_0.4.1_darwin_all.tar.gz), extraer los archivos del archivo comprimido y usar el binario bomber.
Si lo desea, puede mover el binario bomber a su directorio /usr/local/bin o a cualquier lugar en su PATH.
Para instalar bomber, descargue la última versión para su plataforma e instálela localmente. Por ejemplo, para instalar bomber en Ubuntu:
dpkg -i bomber_0.5.0_linux_arm64.deb
Puede escanear una carpeta completa de SBOMs o una SBOM individual con bomber. A bomber no le importa si tiene múltiples formatos en una sola carpeta. Lo ordenará todo por usted.
Tenga en cuenta que la salida predeterminada de bomber es STDOUT. Las opciones para generar salida en HTML o JSON se describen más adelante en este documento.
# Usando OSV (el proveedor predeterminado) que no requiere credenciales
bomber scan cyclonedx.sbom.json
# Usando un proveedor que requiere credenciales (ossindex)
bomber scan --provider=xxx --username=xxx --token=xxx [sbom.json]
Si el proveedor encuentra vulnerabilidades, verá una salida similar a la siguiente:

Si el proveedor no devuelve vulnerabilidades, verá un mensaje indicando que no se encontraron vulnerabilidades.
NOTA: El hecho de que no se hayan encontrado vulnerabilidades usando un proveedor específico no significa que no las haya. Por favor, pruebe los otros proveedores que admite bomber.
Esto es útil cuando recibe múltiples SBOMs de un proveedor para el mismo producto. O tal vez quiera descubrir qué vulnerabilidades tiene en toda su organización. Un escaneo de carpeta encontrará todos los componentes, los deduplicará y luego los escaneará en busca de vulnerabilidades.
# Escanear una carpeta de SBOMs (el siguiente comando escaneará una carpeta llamada "sboms" en su directorio actual)
bomber scan --provider=xxx --username=xxx --token=xxx ./sboms
Verá un resultado similar al que proporciona un escaneo de una sola SBOM.
bomber genera datos en tres formatos útiles. Por defecto, la salida se muestra en la línea de comandos. Para informes mejorados, puede generar salida a HTML usando la bandera --output=html. Para generar salida a JSON, utilice la bandera --output=json. Use especificación de salida separada por comas para obtener salida en múltiples formatos --output=html,stdout,json.
Si desea un informe legible con información detallada de vulnerabilidades, puede usar la bandera --output para guardar un informe en un archivo HTML.
Ejemplo de comando:
bomber scan bad-bom.json --output=html
Esto guardará un archivo en su carpeta actual con el formato "YYYY-MM-DD-HH-MM-SS-bomber-results.html". Si abre este archivo en un navegador web, verá una salida como la siguiente:

bomber puede generar datos de vulnerabilidades en formato JSON usando la bandera --output. La salida predeterminada es a STDOUT. Hay mucha más información en la salida JSON que la que se muestra en la terminal. Podrá ver una descripción del paquete y su propósito, el nombre de la vulnerabilidad, un resumen de la vulnerabilidad, y más.

Ejemplo de comando:
bomber scan bad-bom.json --output=json > filename.json
bomber también admite salida en formato Markdown. Es muy similar a la salida HTML, pero delega el estilo al renderizador de Markdown, como GitHub. La salida se guarda en un archivo con el formato "YYYY-MM-DD-HH-MM-SS-bomber-results.md".
Ejemplo de comando:
bomber scan bad-bom.json --output=md
Si es necesario, puede usar la bandera --ignore-file para cargar una lista de CVEs que se ignorarán en la salida de vulnerabilidades. Esta lista debe estar en un formato específico donde cada CVE a ignorar se ingresa en una línea separada, similar a lo siguiente:
CVE-2022-31163
CVE-2022-23520
Hay un archivo de ejemplo bomber.ignore aquí
Para usar el archivo bomber.ignore, use la sintaxis de la siguiente manera:
bomber --ignore-file=bomber.ignore scan bom.json
Puede establecer el nivel de severidad con la bandera --severity para devolver vulnerabilidades de severidades específicas. Por ejemplo, si establece --severity=moderate, solo se devolverán las vulnerabilidades con una severidad de MODERATE o superior.
Por ejemplo, el siguiente comando devolverá solo vulnerabilidades altas y críticas.
bomber --severity=high scan bom.json
bomber tiene la capacidad de enriquecer los datos de vulnerabilidades obtenidos de los Proveedores. El primer "enriquecedor" que hemos implementado es para EPSS.
NOTA: La puntuación EPSS ya no está activada de forma predeterminada en bomber 0.5.0 y superiores. Para mostrar puntuaciones EPSS, asegúrese de usar la bandera --enrich=epss.
EPSS significa Sistema de Puntuación de Predicción de Explotación y es un marco que predice la probabilidad de que una vulnerabilidad sea explotada. EPSS se usa a menudo para ayudar a identificar vulnerabilidades de alto riesgo para priorizar su remediación.
EPSS usa un porcentaje para la probabilidad. Por lo tanto, si ve 94, la puntuación indica que esa vulnerabilidad tiene un 94% de probabilidad de explotación. Y es lógico que una vulnerabilidad con una puntuación como 94 merezca atención inmediata, mientras que una vulnerabilidad con una puntuación de, digamos, 20 merece una prioridad más baja.
Si lo desea, puede establecer dos variables de entorno para almacenar sus credenciales y no tener que escribirlas en la línea de comandos. Consulte la información sobre Variables de Entorno más adelante en este README.
Si está usando bomber en sus pipelines de CI/CD, puede hacer un comodo todo en uno con Syft para generar y escanear una SBOM en busca de vulnerabilidades. Para hacer esto, puede usar un comando como el siguiente:
# Asegúrese de incluir el carácter - al final del comando. Esto indica a bomber que lea desde STDIN
syft packages . -o cyclonedx-json | bomber scan --provider ossindex --output json -
Este comando crea una SBOM, la envía a bomber y genera resultados en formato JSON.
Si no quiere ingresar credenciales todo el tiempo, puede agregar lo siguiente a su .bashrc o .bash_profile
export BOMBER_PROVIDER_USERNAME={{su nombre de usuario de OSS Index}}
export BOMBER_PROVIDER_TOKEN={{su token de API de OSS Index}}
Usando la bandera --exitcode, se devolverá un código de salida que representa la mayor severidad de vulnerabilidad encontrada. Sin esta bandera, puede esperar un código de salida de 0 para éxito, o 1 si se encontró un error.
Suponiendo que no hay error, los siguientes valores serán devueltos por bomber cuando se use --exitcode.
| Severidad | Código de Retorno |
|---|---|
| NO ESPECIFICADA (Este es un estado donde el proveedor nos da algo extraño o sin información) | 10 |
| BAJA | 11 |
| MODERADA |
bomber ahora contiene una función experimental que enriquece la descripción de las vulnerabilidades en una salida html. Esta función toma una vulnerabilidad y cambia la descripción a algo más comprensible para un usuario no técnico.
NOTA: Esta función se encuentra en un estado alfa importante en este momento. Es extremadamente lenta y la salida no está muy bien formateada.
Para usar esta función, necesitará proporcionar una clave de API de OpenAI. Puede pasar esta clave en la CLI usando la bandera --openai-api-key={{su clave de API de OpenAI}} o agregar una variable de entorno:
export OPENAI_API_KEY={{su clave de API de OpenAI}}
Después de configurar su clave de API de OpenAI, puede establecer la bandera de salida de la siguiente manera:
bomber scan --output ai [sbom.json]
Si quiere probar bomber, encontrará una selección de SBOMs de prueba en la carpeta test.
--license. Si necesita información de licencias, asegúrese de solicitarla junto con la SBOM.bomber necesita enviar un PURL a la vez para obtener vulnerabilidades, por lo que en una SBOM grande tomará algo de tiempo. Estaremos atentos a esto.Si desea contribuir al desarrollo de bomber, consulte el archivo CONTRIBUTING.md en este repositorio. Por favor, lea el archivo CODE_OF_CONDUCT.md antes de contribuir.
bomber usa Syft para generar una Lista de Materiales de Software cada vez que un desarrollador envía código a este repositorio (siempre que se esté usando Hookz y se haya inicializado en el directorio de trabajo). Más información sobre CycloneDX está disponible aquí.
La SBOM CycloneDX actual de bomber está disponible aquí.
Gracias a los patrocinadores y seguidores de bomber

Un gran agradecimiento a nuestros amigos de ZERO por el logotipo de bomber.
Gracias a Sonatype por proporcionar una herramienta genial como el Índice OSS de Sonatype.
Muchas gracias a nuestros amigos y compañeros contribuyentes de bomber en Snyk por crear un proveedor y programar el procesamiento de una SBOM desde STDIN. Son geniales.
La descripción de EPSS proviene del equipo de Nucleus. ¡Gracias!
| 12 |
| ALTA | 13 |
| CRÍTICA | 14 |