CycloneDX形式のインポート仕様#
OWASP の CycloneDX(v1.x)形式の SBOM について、FutureVuls がどのフィールドをどう解釈してインポートするかを説明します。
コンポーネントの種別判定や OS・依存ライブラリの取り込みといった形式に依存しない共通仕様は「SBOMのインポート仕様」を参照してください。本ページでは CycloneDX 固有のフィールド対応 を説明します。
FutureVuls は、CycloneDX の以下の情報を読み取ります。
metadata#
"metadata": {
"timestamp": "2023-08-08T08:22:10+00:00",
"tools": [
{
"vendor": "aquasecurity",
"name": "trivy",
"version": "0.43.0"
}
],
"component": {
"bom-ref": "__ROOT_COMPONENT_REF__",
"type": "container",
"name": "ami-xxxxxxxxxxxxxxxxx"
}
}
toolsにより生成されたツールを検知します。componentがtype: operating-systemの場合、OS 情報として取り入れるケースがあります。
components#
"components": [
{
"bom-ref": "__OPERATING_SYSTEM_COMPONENT_REF__",
"type": "operating-system",
"name": "amazon",
"version": "2023"
},
{
"bom-ref": "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64",
"type": "library",
"name": "bash",
"version": "4.2.46-34.amzn2023",
"purl": "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64"
},
{
"bom-ref": "__APPLICATION_COMPONENT_REF__",
"type": "application",
"name": "opt/vuls-saas/vuls",
"properties": [
{
"name": "aquasecurity:trivy:Type",
"value": "gobinary"
}
]
},
{
"bom-ref": "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2",
"type": "library",
"name": "github.com/vulsio/go-exploitdb",
"version": "v0.4.2",
"purl": "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2"
},
...
]
CycloneDX のソフトウェア一覧を表す components は、type をヒントに以下のように取り込みます。
type: operating-systemの場合、OS 情報として取り入れます。type: libraryの場合、OS パッケージ、もしくは言語ライブラリ情報として取り入れます。type: applicationの場合、アプリケーション情報として取り入れます。(例外あり)type: firmwareやtype: deviceなども取り込み対象です。
各コンポーネントの実際のソフトウェア種別(os / library / private)は、purl と cpe の情報をもとに判定されます。判定ルールは「コンポーネントの種別判定」を参照してください。
また、licenses に記載されたライセンス情報も取り込みます。
dependencies#
"dependencies": [
{
"ref": "__ROOT_COMPONENT_REF__",
"dependsOn": [
"__OPERATING_SYSTEM_COMPONENT_REF__",
"__APPLICATION_COMPONENT_REF__"
]
},
{
"ref": "__OPERATING_SYSTEM_COMPONENT_REF__",
"dependsOn": [
...
"pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64",
...
]
},
{
"ref": "__APPLICATION_COMPONENT_REF__",
"dependsOn": [
...
"pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2",
...
]
},
...
]
refが OS の場合、OS が依存するdependsOnのcomponentは OS パッケージとして取り入れます。refがアプリケーションの場合、アプリケーションが依存するdependsOnのcomponentは依存ライブラリとして取り入れます。dependsOnが別のdependencyを参照する場合、それを再帰的に取り入れます。dependenciesに存在しないcomponentsは、PURL を参照し、OS パッケージと依存ライブラリに分けて取り入れます。