Skip to main content

Presentamos parlay, una herramienta para enriquecer SBOMs

Escrito por
blog feature parlay announcement

7 de junio de 2023

0 minutos de lectura

Necesitamos SBOMs más completos

La creciente adopción de los estándares de lista de materiales de software (SBOM) está empezando a impulsar una mejor interoperabilidad entre las herramientas de seguridad. El trabajo de la NTIA para definir un conjunto mínimo de elementos para un SBOM fue una parte clave de ese avance, sobre todo porque hay varios formatos de uso generalizado, como CycloneDX y SPDX. Sin embargo, con los avances de SPDX 3.0 y CycloneDX 1.5, hay muchas otras cosas que podemos hacer con los formatos SBOM, más allá de los elementos mínimos.

Quizás quieras tomar decisiones basadas en políticas sobre la información de licencias de los paquetes. Tal vez quieras acceder rápidamente a los sitios web de los paquetes que usas o saber quién los creó. También quizá quieras conocer las vulnerabilidades de esos paquetes junto con esa información.

Presentamos Parlay

parlay es una nueva herramienta de código abierto de Snyk que enriquece los SBOMs. La forma más sencilla de mostrarlo es con un ejemplo, así que veamos un SBOM simple de una aplicación JavaScript.

$ cat testing/sbom.cyclonedx.json
...
{
	"bom-ref": "68-subtext@6.0.12",
	"type": "library",
	"name": "subtext",
	"version": "6.0.12",
	"purl": "pkg:npm/subtext@6.0.12"
}
...

Con parlay, lo enriquecemos con datos de ecosyste.ms:

$ cat testing/sbom.cyclonedx.json | parlay ecosystems enrich -

Esto agrega información sobre cada paquete, como detalles de licencias, enlaces externos, información de los responsables del mantenimiento y mucho más.

...
{
	"bom-ref": "68-subtext@6.0.12",
	"type": "library",
	"supplier": {
		"name": "hapi.js",
		"url": [
			"https://hapi.dev"
		]
	},
	"author": "hapi.js",
	"name": "subtext",
	"version": "6.0.12",
	"description": "HTTP payload parsing",
	"licenses": [
		{
			"expression": "BSD-3-Clause"
		}
	],
	"purl": "pkg:npm/subtext@6.0.12",
	"externalReferences": [
		{
			"url": "https://github.com/hapijs/subtext",
			"type": "website"
		},
		{
			"url": "https://www.npmjs.com/package/subtext",
			"type": "distribution"
		},
		{
			"url": "https://github.com/hapijs/subtext",
			"type": "vcs"
		}
	],
	"properties": [
		{
			"name": "ecosystems:first_release_published_at",
			"value": "2014-09-29T01:56:03Z"
		},
		{
			"name": "ecosystems:latest_release_published_at",
			"value": "2019-01-31T19:36:58Z"
		}
	]
}
...

parlay también permite enriquecer los SBOMs con datos de vulnerabilidades de Snyk para los clientes de Snyk.

parlay snyk enrich testing/sbom.cyclonedx.json

Esto agrega un nuevo atributo de vulnerabilidades al SBOM, por ejemplo:

"vulnerabilities": [
  {
    "bom-ref": "68-subtext@6.0.12",
    "id": "SNYK-JS-SUBTEXT-467257",
    "ratings": [
      {
        "source": {
          "name": "Snyk",
          "url": "https://security.snyk.io"
        },
        "score": 7.5,
        "severity": "high",
        "method": "CVSSv31",
        "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
      }
    ],
    "cwes": [
      400
    ],
    "description": "Denial of Service (DoS)",
    "detail": "...",
    "advisories": [
      {
        "title": "GitHub Commit",
        "url": "https://github.com/brave-intl/subtext/commit/9557c115b1384191a0d6e4a9ea028fedf8b44ae6"
      },
      {
        "title": "GitHub Issue",
        "url": "https://github.com/hapijs/subtext/issues/72"
      },
      {
        "title": "NPM Security Advisory",
        "url": "https://www.npmjs.com/advisories/1168"
      }
    ],
    "created": "2019-09-19T10:25:11Z",
    "updated": "2020-12-14T14:41:09Z"
  }

A parlay le encanta stdin y stdout: puedes canalizar SBOMs desde otras herramientas hacia parlay y también entre los distintos comandos enrich.

Quizás quieras enriquecer un SBOM con datos de ecosyste.ms y de Snyk:

cat testing/sbom.cyclonedx.json | parlay e enrich - | parlay s enrich - | jq

Quizás quieras tomar la salida de Syft y agregar datos de vulnerabilidades:

syft -o cyclonedx-json nginx | parlay s enrich - | jq

Quizás quieras generar un SBOM con Snyk, enriquecerlo con información adicional y probarlo con bomber:

snyk sbom | parlay e enrich - | bomber scan --provider snyk -

El enriquecimiento de ecosyste.ms agrega información sobre licencias, que Bomber muestra al analizar un SBOM en busca de vulnerabilidades:

Ecosystems detected: gem
■ Scanning 18 packages for vulnerabilities...
■ Vulnerability Provider: Snyk (https://security.snyk.io)

■ Files Scanned
        - (sha256:701770b2317ea8cbd03aa398ecb6a0381c85beaf24d46c45665b53331816e360)

■ Licenses Found: MIT, Apache-2.0, BSD-3-Clause, Ruby

¿Qué sigue?

Nos gustaría saber qué opina la gente sobre la idea de enriquecer los SBOMs. Muchas herramientas existentes y nuevas generan SBOMs en CycloneDX y SPDX, pero suelen ser bastante básicos. Con SBOMs más completos, podemos crear herramientas más interesantes. Y para que toda la inversión en generar SBOMs valga la pena, necesitamos más herramientas que los procesen y resuelvan problemas de los usuarios.

Puedes descargar parlay desde la sección de versiones del repositorio de GitHub. Para conocer algunos casos de uso avanzados —como la creación de pipelines y la verificación de políticas— y seguir los pasos con un proyecto de ejemplo, consulta nuestra guía de parlay y de lo que puedes hacer con un SBOM enriquecido.

Empezamos con Ecosyste.ms, el enriquecimiento de Snyk y CycloneDX, pero si tienes ideas para otras fuentes de datos o quieres ayudar a dar soporte a SPDX, abre un issue en el repositorio oficial de GitHub.