はじめに
さて、本日はSBOMフォーマットの話題です。
SBOMの非常に重要な要素のひとつがAutomation Support(自動生成や機械可読性など、自動化に対応していること)です。大規模なシステムや製品であれば、数十~数百個のコンポーネントを内包していることもあるため、機械処理できないと大変ですよね(とても、読めないし、書けない)。そして、機械処理するためには、内容や書き方、粒度などを統一する必要があり、書き方のルールを定めた「フォーマット」を定義する必要があります。
SBOMの標準フォーマットは、The Software Package Data Exchange(SPDX)、CycloneDXおよびSoftware Identification (SWID) tagsの3種類とされており、実務ではSPDXとCycloneDXを活用されているケースが多いようです。
SPDX
SPDXは古くからソフトウェア部品の主にコンプライアンス関連の情報を記述するためのフォーマットとして活用されてきたものですが、2021年5月の米国大統領令(EO #14028)からの一連のSBOMの議論の中で推奨フォーマットのひとつとして言及されたことから、実質上のデファクトスタンダード的なポジショニングで語られることが多くなりました。V2.2.1がISO/IEC 5962:2021として国際標準化されており、RDF, XML, xlsx, tag-value, JSON, YAML等のファイル形式で表現することができます。現在の最新バージョンはv2.3で、近日中にv3.0のRC2が発表される予定です。その成り立ちから、ライセンス情報を伝達するための項目が豊富です。
CycloneDX
CycloneDXは、完全自動化可能でセキュリティに特化したBOM規格です。 SBOMフォーマットの標準の開発を目標として、OWASP(Open Worldwide Application Security Project)のプロジェクトによって、2017年に開発されました。CycloneDXは汎用性のあるBOM規格であり、ソフトウェアだけでなく、SaaSBOM、HBOM、OBOM、VEXなどの規格がサポートされており、さまざまな使い方が想定されています。現在の最新バージョンはv1.5で、XML, JSON, Protocol Buffers(protobuf)等のファイル形式で表現することができます。
SPDXとCycloneDXの特長
SPDXとCycloneDX、いずれも古くから活用されているフォーマットであり、実績があります。ざっくりいうと、SPDXはライセンスコンプライアンスの目的に強く、CycloneDXはセキュリティの目的に強い、ということになりますが、「どちらが優れている」というようなものではなく、目的や用途、状況(例えば、提供先からの指定など)に応じて適切な方を選択して使用してください。
下記の図は、NTIAのSBOM最小構成(The Minimum Elements)を例にとり、SPDXとCycloneDXの該当項目をマッピングしたものです。
SPDXとCycloneDXでは、有するパラメータが異なるため、一方のフォーマットに限定してデータ管理をしていると、もう一方のフォーマットに対応できなくなってしまいます。SBOMは「他エンティティと情報をやりとりするためのフォーマット」と理解し、社内でのデータ蓄積・管理ではどちらのフォーマットにも対応できるように、必要なデータ項目を網羅しておくのがおすすめです。十分なデータがあれば、必要に応じてどちらのフォーマットのSBOMファイルを生成することが可能です。(SPDXとCycloneDXの変換をおこなうツールもありますので活用してみてください。)