SBOMスキャンの仕様#
ここでは、SBOM 管理機能を脆弱性管理と組み合わせた際のスキャン仕様について説明します。
サポートするSBOMツール#
2025年2月時点では、以下のSBOM仕様のスキャンをサポートします。
- CycloneDX 〜v1.6 (JSON/XML)
- SPDX 〜v2.3 (JSON/tag:value)
また、2024年12月時点では以下のツールから生成されたSBOMのスキャンをサポートします。
- Vuls / FutureVuls (CycloneDXのみ)
- Trivy
- Syft
- SBOM Tool (SPDXのみ)
- CycloneDX Generator (cdxgen) (CycloneDXのみ)
- Amazon Inspector
他ツールから出力されたSBOMの対応の依頼はお問い合わせください。
SBOMファイルをスキャンする際に利用する情報#
PURL#
SBOMに含まれる各ソフトウェア情報は PURL (PackageURL) を含めてください。 PURLは、ソフトウェアの名前、バージョン、種類、およびその他の情報を一意に識別するための標準的な方法の一つです。PURLはFutureVulsが脆弱性を検知するためのキーとして使用されるため、PURLが含まれていないソフトウェア情報は、FutureVulsにインポートできません。
OS情報#
サーバSBOMの場合、OS情報が含まれているとFutureVulsにインポートできます。 (例:amazon linux 2, ubuntu 20.04, centos 7 など)
- インポートされたOS情報は、サーバ詳細の「サーバ情報:OS」で確認できます。
- OS名とバージョン情報を含むことが推奨されます。
- OS情報が複数含まれている場合、インポートエラーとなります。
- OS情報が含まれていない場合、Pseudo OSとして登録されます。
- アプリケーションSBOMの場合、OS情報はインポートされません。
OSパッケージ情報#
サーバSBOMの場合、OSパッケージ情報が含まれているとFutureVulsにインポートできます。 (例:RPMパッケージ、debパッケージ、apkパッケージなど)
- インポートされたOSパッケージ情報は、サーバ詳細 > ソフトウェアタブに
ソフトウェア種別:pkg
として一覧表示されます。 - OSパッケージ情報の種別は、OS情報とマッチすることが推奨されます。 (例:RedHat系OSとRPMパッケージ、Debian系OSとdeb(dpkg)パッケージ)
- OS情報がなく、OSパッケージ情報のみが含まれている場合はインポートエラーとなります。
- OSパッケージの種別が複数含まれている場合もインポートエラーです。 (例:debパッケージとapkパッケージが混在)
- アプリケーションSBOMの場合、OSパッケージ情報はインポートされません。
依存ライブラリ情報#
Java、Python、Node.js、Goなどの依存ライブラリ情報が含まれている場合、FutureVulsにインポートされます。
- インポートされた依存ライブラリ情報は、サーバ詳細 > ソフトウェアタブで
ソフトウェア種別:library
として一覧表示されます。 - 依存ライブラリのPURLにある
type
は purl-spec に準拠していることが推奨されます。 - 各依存ライブラリ情報は、アプリケーションとしてまとめられ、
location
に表示されます。 - アプリケーションSBOMをサーバに追加することで、依存ライブラリ情報も新たにインポートできます。
アプリケーション#
SBOMの中に、複数の依存ライブラリをまとめた(依存する)アプリケーション(もしくはpom.xmlなどマニフェストファイルやLockfile)が明示的に存在している場合、FutureVulsにインポートできます。 しかし、多くのSBOMは依存ライブラリのみで構成されることが多いため、アプリケーション情報が含まれていない場合は、(pip・npmなどのエコシステム)に応じてFutureVulsで任意のアプリケーションとしてまとめられます。
- SBOMからインポートされたアプリケーションは、アプリケーション名の後にSBOMファイルのUUIDが追記されます。
(例:
opt/vuls-saas/vuls | 12345678-1234-1234-1234-123456789012
) - このUUIDはアプリケーションの一意性を保つために使用され、同じUUIDを持つアプリケーションは同じSBOMファイルからインポートされたものとして扱われます。
- 各アプリケーションはSBOMと独立して削除が可能で、脆弱性検知の対象外にすることもできます。
アプリケーションのまとめ方#
SBOMの中にアプリケーション情報が含まれていない場合、FutureVulsでは複数の依存ライブラリを任意のアプリケーションとしてまとめてインポートします。
- アプリケーションのまとめ方は、SBOM生成ツールごとに異なるメカニズムで行われます。
- ほとんどの場合、依存ライブラリのPURLにある
type
によってエコシステム毎にアプリケーションとしてまとめます。 (例:type
がmaven
の場合、Java application
としてまとめられる) - SBOMの中にある各依存ライブラリのファイルパス属性がLockfileやマニフェストファイルを指す場合、そのパスをアプリケーションとしてインポートします。
(例:
path/to/composer.lock
が存在する場合、path/to/composer.lock
をアプリケーションとして認識)
その他#
各フォーマットの詳細な取り込み条件については下記をご参照ください。
インポートされたSBOMファイルと、それにより登録されたソフトウェア、脆弱性✕タスクの関係性については、SBOMとソフトウェアの関連付けをご参照ください。
SBOMファイルをスキャンする際に利用されない情報#
脆弱性情報#
SBOMファイル内に記載されてある脆弱性情報はFutureVulsに取り込まれず、FutureVulsの脆弱性データベースを用いたスキャンによって改めて脆弱性を検知します。
SBOM内の脆弱性情報を使わない理由
SBOMに記載された脆弱性情報は、SBOMが生成された時点(過去)の情報であり、既に古くなっている可能性があります。 一方、FutureVulsの脆弱性データベースは常に最新の情報が反映されるため、SBOMの情報に依存せず独自のスキャンを実行することで、より正確かつ最新の脆弱性を把握できます。
CPE#
CPE のみが定義されたソフトウェア情報はFutureVulsに取り込まれず、PURL 付きのソフトウェア情報を優先的に取り込む仕組みになっています。
SBOM内のCPEで定義されたソフトウェア情報をインポートしない理由
CPE(Common Platform Enumeration)は脆弱性識別の1つの方法として主にNVDで利用されていますが、「OSパッケージ情報」や「OSS依存ライブラリ」を示すには情報が不足しがちで、誤検知の可能性が高いという課題があります。 また、CVE(脆弱性)が発番されていないソフトウェアにはCPEが定義されないことが多く、OSSの大部分をカバーできないケースもあります。
一方、PURL (PackageURL) は言語・パッケージ管理システムとの連携を前提としており、パッケージ名やバージョン、エコシステム情報など具体的なメタデータが含まれるため、OSパッケージやOSS依存ライブラリの脆弱性検知に最適です。FutureVuls ではこの PURL を主要キーとすることで、より正確かつ広範な脆弱性スキャンを実現しています。
そのため、CPE のみが定義されたソフトウェア情報はインポートせず、PURL 付きのソフトウェア情報を優先的にインポートする仕組みになっています。
SBOMファイルのスキャンが上手くいかない場合#
SBOMファイルのスキャンがうまく行かない場合は、以下の点を参考にしてください。
ファイル登録時にエラーが発生したとき#
SBOMを生成したツールがサポート対象か#
FutureVuls では正確な脆弱性検知のため、SBOM 生成ツール特有の仕様に個別対応しています。 登録しようとした SBOM ファイルが現時点でサポート対象であるかをご確認ください。
サーバ SBOM として登録する場合、OS情報が適切に記載されているか#
SBOM ファイルを サーバ SBOM として登録する場合、SBOM ファイル内に OS 情報が含まれていないと登録に失敗する場合があります。 登録に失敗するのは「SBOM ファイル内に OS パッケージ情報がある」一方で「SBOM ファイル内に OS 情報が存在しない」ケースです。
OS情報なし | OS情報あり | |
---|---|---|
OSパッケージ情報なし | Pseudo OSとしてインポート可 | インポート可 |
OSパッケージ情報あり | インポートエラー | インポート可 |
また、以下のようなケースもファイル登録時にエラーが発生します。
- OS情報が複数含まれている場合
- OSパッケージの種別が複数含まれている場合 (例:debパッケージとapkパッケージの混在)
スキャンには成功したが、SBOMファイル内の情報が正しくインポートされなかったとき#
- アプリケーションSBOMとして追加した場合、SBOM内のOS情報とOSパッケージ情報はインポートされません。
- PackageURL(PURL) が含まれていないソフトウェア情報はインポートされません。
- SBOMファイル内の脆弱性情報は登録されません。FutureVulsのスキャンで改めて脆弱性を検知しています。