Skip to main content

SBOMを拡充するツール「parlay」のご紹介

blog feature parlay announcement

2023年6月7日

0 分で読めます

より充実したSBOMが必要

ソフトウェア部品表(SBOM)標準の採用が広がり、セキュリティツール間の相互運用性が向上し始めています。NTIAによるSBOMの最低限の要素セットの定義は、その大きな要因の一つでした。特に、CycloneDXやSPDXなど複数のフォーマットが広く使われる中で重要な取り組みです。しかし、SPDX 3.0やCycloneDX 1.5の開発が進むにつれ、最低限の要素にとどまらず、SBOMフォーマットを活用できることが増えています。

パッケージのライセンス情報に基づいてポリシーを適用したい場合もあるでしょう。利用しているパッケージのウェブサイトへのリンクをすぐに確認したい、あるいは作成者を知りたい場合もあるでしょう。また、こうした情報とあわせて、パッケージに含まれる脆弱性を把握したいこともあるでしょう。

Parlayのご紹介

parlayは、Snykが提供する新しいオープンソースツールで、SBOMを拡充します。例を使って説明するのが最も分かりやすいため、シンプルなJavaScriptアプリケーションのSBOMを見てみましょう。

$ 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"
}
...

parlayを使って、ecosyste.msのデータで情報を拡充します。

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

各パッケージのライセンス情報、外部リンク、メンテナー情報などが追加されます。

...
{
	"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は、Snykのお客様向けにSnykの脆弱性データを使った拡充にも対応しています。

parlay snyk enrich testing/sbom.cyclonedx.json

これにより、たとえばSBOMに新しいvulnerabilities属性が追加されます。

"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"
  }

parlayはstdinとstdoutを活用します。他のツールからSBOMをparlayにパイプで渡したり、個別のenrichコマンド間でパイプをつないだりできます。

ecosyste.msとSnyk、両方のデータでSBOMを拡充することもできます。

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

Syftの出力を使って、脆弱性データを追加することもできます。

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

SnykでSBOMを生成し、追加情報で拡充してから、bomberでテストすることもできます。

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

ecosyste.msによる拡充でライセンス情報が追加されます。BomberでSBOMの脆弱性をスキャンすると、その情報を確認できます。

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

今後の展開

SBOMを拡充するという考え方について、皆さんのご意見をぜひお聞かせください。CycloneDXとSPDXの両方でSBOMを生成する既存ツールや新しいツールは数多くありますが、そのSBOMはかなり最小限の内容にとどまっていることが少なくありません。より充実したSBOMがあれば、その上にさらに便利なツールを構築できます。また、SBOM生成への投資を活かすには、SBOMを利用してユーザーの課題を解決するツールがもっと必要です。

GitHubリポジトリのリリースセクションからparlayをダウンロードできます。パイプライン処理やポリシーチェックなどの高度なシナリオを学び、サンプルプロジェクトを使って試すには、parlayと、拡充したSBOMでできることを解説したガイドをご覧ください。

現在、Ecosyste.ms、Snykによる情報拡充、CycloneDXに対応しています。他のデータソースについてアイデアがある方や、SPDXのサポートに協力したい方は、公式GitHubリポジトリでissueを作成してください。