SBOMのエクスポート#
サーバの構成と脆弱性情報を含む SBOM ファイルをエクスポートできます。 脆弱性情報を含めずに、構成情報だけの SBOM ファイルとしてもエクスポートできます(脆弱性情報を含めないエクスポートを参照)。
含まれる情報は以下の通りです。
- OS、および OS パッケージ情報
- アプリケーション、および言語ライブラリ情報
- ライセンス情報
- 脆弱性情報
複数の SBOM がインポートされているサーバでも、1つの SBOM ファイルとしてエクスポートされます。
エクスポートされる脆弱性情報について
出力される脆弱性情報は、インポートした SBOM に記載されていたものではなく、FutureVuls が最新の脆弱性データベースで検知した結果です(SBOMのインポート仕様 > 脆弱性情報 を参照)。
エクスポートされるライセンス情報について
FutureVuls が保持しているライセンス情報を、エクスポートする SBOM の各コンポーネントに付与します。
CycloneDX では各 component の licenses(license.name)に、SPDX では各 package の licenseDeclared に格納します。
1つのサーバ情報をSBOMエクスポート#
サーバ詳細の「SBOM ファイルのダウンロード」ボタンから、サーバ情報を CycloneDX v1.6の JSON / XML 形式、または SPDX v2.3 の JSON 形式でエクスポートできます。 メニューの「脆弱性情報を含めてダウンロード」「脆弱性情報を含めずダウンロード」から、それぞれの形式を選択します。

Windows サーバの KB は、CycloneDX では metadata.component の properties、SPDX では OS パッケージの annotations に出力されます。
適用済みの KB は WindowsKB:Applied、未適用の KB は WindowsKB:Unapplied として出力されます。
{ "name": "future-architect:vuls:WindowsKB:Applied", "value": "5012170" }
複数のサーバを選択してSBOMエクスポート#
サーバ一覧のチェックリストから複数のサーバを選択して SBOM 形式でエクスポートできます。 これにより、各サーバの SBOM がマージされた1つの SBOM ファイルとしてエクスポートできます。 本機能でエクスポートできるのは CycloneDX v1.6 の JSON / XML 形式のみです(SPDX 形式には対応していません)。 1つのサーバの場合と同様に、「脆弱性情報を含めてダウンロード」「脆弱性情報を含めずダウンロード」から選択できます。

SBOMマージの仕様#
各サーバの SBOM は、以下のような構造に並列の依存関係としてマージされます。
以下、各項目の詳しい仕様については、CycloneDX v1.6 もご参照ください。
metadata.component#
マージされた SBOM の metadata.component には、下記のような component が新しく作成されます。
{
"bom-ref": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "application",
"name": "Merged-SBOM",
"version": "YYYY-mm-dd"
}
components#
各サーバの components 配列は、それぞれの bom-ref をキーとして重複が排除された上で統合されます。
bom-ref の重複が発生するケース
FutureVuls で登録されたソフトウェアは、 PackageURL を bom-ref として使用しています。
そのため、同じソフトウェアが異なるサーバにインストールされている場合、bom-ref が重複することがあります。
この場合、統合後の components 配列では bom-ref の重複は排除されますが、dependencies 配列内に含まれる各依存関係エントリの dependsOn 配列には、重複している各 bom-ref がそのまま追加されます。
各サーバにおける OS 情報(単一サーバとして SBOM 出力する際は metadata.component に記載される情報)は、マージされた SBOM の components 配列に追加されます。
dependencies#
各サーバの dependencies 配列は、内部の ref をキーとして統合されます。
各サーバにおける OS 情報は、上記新しく作成される metadata.component の依存関係として、マージされた SBOM の dependencies 配列に追加されます。
{
"ref": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // Merged-SBOM
"dependsOn": [
"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", // OS component for server A
"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz", // OS component for server B
...
]
}
compositions#
各サーバの OS 情報を持つ component の bom-ref が、下記のような composition の assemblies 配列に追加されます。
{
"aggregate": "complete",
"assemblies": [
"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", // OS component for server A
"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz", // OS component for server B
...
]
}
vulnerabilities#
脆弱性情報は id をキーとして統合されます。
ratings, advisories, affects の各フィールドはそれぞれ以下をキーとして統合されます。
ratings:source.nameadvisories:urlaffects:ref
cwes の配列は、重複が排除された上でそのまま統合されます。
description は、ベースとなるサーバでの情報が優先されます。
脆弱性情報を含めないエクスポート#
「脆弱性情報を含めずダウンロード」を選択すると、脆弱性情報を含まない SBOM ファイルをエクスポートできます。BSI TR-03183 や CRA の考え方に沿って、脆弱性情報を含まない提出用の SBOM を、手作業で編集せずに作成できます。
- 脆弱性情報(CycloneDX の
vulnerabilities、SPDX の advisory 参照)と、未適用の Windows KB は出力されません - コンポーネント・依存関係・CPE / PURL・ライセンス情報は、脆弱性情報を含める場合と同様に出力されます
- ファイル名の末尾に
-components-onlyが付きます
FutureVuls API の「サーバの SBOM ダウンロード」(GET /v1/server/{serverID}/sbom)でも、excludeVulnerabilities=true を指定すると脆弱性情報を含めずにエクスポートできます。