代表的なSBOMフォーマット「CycloneDX」とは
公開日:2023年11月27日
更新日:2023年11月27日

お世話になっております、株式会社 日立ソリューションズの中村と申します。
本日はOSS利用に関するリスク対応において必要とされるSBOM(Software Bill of Materials:ソフトウェア部品表)フォーマットで代表的な「CycloneDX(読み方:サイクロンディーエックス)」についてご紹介したいと思います。
IT未経験で入社したIT初心者の私が学んだCycloneDXについての記事です。初心者サイドの「わからない」に寄り添った記事になることに努めました。
- ※本記事は2023/10/30時点での情報をもとにした記事になります。
そもそも、SBOMって?
多くのソフトウェアは自社で開発したソフトウェアに加え、OSS(Open Source Software)やサードパーティソフトウェアを、部品として含んでいることがほとんどです。OSSはソースコードが公開されているソフトウェアで、それぞれ固有のライセンスが適用されており、ライセンス条件に違反しない範囲での利用が著作者により許されています。このライセンスに違反すると法的措置が取られる場合があります。
複数のOSSを含むソフトウェアには、「どのようなOSSが含まれているのか」「それらが信用できるのか」「ライセンスは何が適用されているのか」「セキュリティ面で安全なのか(脆弱性はないか)」といったさまざまな懸念要素があります。このようなリスクに対応するためには、ソフトウェアの構成要素を部品表として記すことで、各ソフトウェアの透明性・安全性を保つことが有効です。このような用途にSBOMを利用できます。また、SBOM作成の目的にもよりますが、OSSだけではなく自社製品やサードパーティ製品などもSBOMの要素として管理しておくことで、開発自体への理解が深まり、開発の効率化や品質保証などの効果も期待できます。
そしてSBOMは、2021年の米大統領令にて使用が推奨され、2023年の今年7月には経済産業省にてSBOMの導入に関する手引きが策定され、日本やアメリカなどの国から対応が求められています。
本記事について
SBOMを生成するにあたり、「フォーマットは何があるのか」「何のフォーマットを使用するのが適切なのか」「粒度はどうするのか」…など、対応にあたりさまざまな疑問があるかと思います。このような疑問を解消するため、本記事では、CycloneDX(v1.5)という代表フォーマットの概要を説明します。SBOM対応のお力添えになれば幸いです。
CycloneDXとは
CycloneDXは、完全自動化可能でセキュリティに特化したBOM規格です。SBOMフォーマットの標準の開発を目標として、OWASPのプロジェクトによって、2017年に開発されました。OWASP(Open Worldwide Application Security Project) とは、オープンソース・ソフトウェアコミュニティです。ソフトウェアのセキュリティ環境の現状、セキュアなソフトウェア開発を促進する技術やプロセスに関する情報共有と啓発を目的として活動しています。CycloneDXは、そのOWASPコミュニティのコアワーキンググループにて管理と更新がされ続けています。
2017年に開発されたCycloneDXは2011年にリリースされたSPDXと比較すると新しいです。そのため、現代におけるソフトウェア開発ライフサイクル(SDLC)における懸念点を考慮して開発されていると捉えることもできます。
CycloneDXは、米国NTIA(National Telecommunications and Information Administration)によって定義されている最小要件を満たしています。また、自動処理により効率化が図られることから、自動処理可能なフォーマットを使用することが推奨されており、CycloneDXはそれに該当します。
またCycloneDXは汎用性のあるBOM規格ですので、ソフトウェアだけでなく下記9つの規格がサポートされており、さまざまな使い方が想定されたSBOMフォーマットとなっています。
- Software Bill of Materials (SBOM)
- Software-as-a-Service Bill of Materials (SaaSBOM)
- Hardware Bill of Materials (HBOM)
- Machine Learning Bill of Materials (ML-BOM)
- Operations Bill of Materials (OBOM)
- Manufacturing Bill of Materials (MBOM)
- Bill of Vulnerabilities (BOV)
- Vulnerability Disclosure Report (VDR)
- Vulnerability Exploitability eXchange (VEX)
- Common Release Notes Format
本記事ではSBOMに焦点をあて記述します。
ファイル形式
CycloneDXフォーマットによるSBOMでは、以下の3つのファイル形式がサポートされています。
ファイル形式 | リソース | URL |
---|---|---|
JSON | ドキュメント | |
スキーマ | ||
XML | ドキュメント | |
スキーマ | ||
Protobuf | スキーマ |
各形式の詳細は各URLをご参照ください。
フォーマット構成
CycloneDXのフォーマットは、体系立てられたオブジェクトモデルで構成されており、それぞれ以下の要素で構成されています。
Image via CycloneDX公式HP
-
「Metadata : SBOMのメタデータ」
SBOM自体を説明するための情報を提示(サプライヤー、開発者、対象ソフトウェアの範囲、SBOM作成時に使用したツールなど)
-
「Components : コンポーネント」
ファーストパーティおよびサードパーティのソフトウェアコンポーネントを提示
-
「Services : 外部サービス」
SBOMドキュメントが対象とするソフトウェアが呼び出す可能性のある外部APIの情報を提示
-
「Dependencies : 依存関係」
コンポーネント間やサービスの依存関係を提示
-
「Compositions : 構成要素の完全性」
SBOM内における各構成要素(コンポーネント、サービス、依存関係を含む)と構成要素の完全性を提示
-
「Vulnerabilities : 脆弱性」
SBOMに含まれるサードパーティソフトウェアやOSSに存在する既知の脆弱性とその脆弱性の悪用可能性を提示
-
「Formulation : 配合」
SBOMドキュメントが対象とするソフトウェアがどのようにデプロイやテストされたかなどのSBOMの配合情報を提示
-
「Annotations : 注釈」
コメントやノート、説明書きなどによる追加情報の提示
-
「Extensions : 拡張機能」
CycloneDXにおける新しい機能の試行、特殊なユースケースや将来のユースケースのサポートを提供
下図がCycloneDX(v1.5)の出力結果のサンプルです。(XML形式)

CycloneDXはこれらの各要素(オブジェクト)で構成されており、各要素の詳細ユースケースは本記事では省略します。
CycloneDXの特徴
- セキュリティ管理を念頭に置いたSBOMフォーマットであり、既知の脆弱性に関する情報や、その脆弱性の悪用可能性に関する情報(要素:Vulnerabilities)を記載可能
- さまざまな種類のソフトウェア/ハードウェアに対応したSBOMフォーマットで、幅広い業界での商用利用に最適
→仕様の拡張(要素:Extensions)を使用し、組織や業界特有の要件に応じた新しい機能の試行が可能になります。 - 体系立てられたオブジェクトモデルで構成されるフォーマットであり学習と導入が容易
- 多くの開発エコシステムと統合することによって自動化を実現
+以下、v1.5に追加された機能
上記が基本的な機能ですが、2023/06/23に公表されたv1.5に新しく追加された特徴的な機能を一部抜粋して紹介します。
- 包括的なライセンスサポートだけでなく、商用ライセンスサポートが追加
→ユーザーはプロジェクト内の任意の依存コンポーネントについて、ライセンス、ライセンサー、ライセンシー、ライセンス番号やタイプ、更新日および有効期限を文書化できるようになりました。 - ソフトウェア開発ライフサイクル(SDLC)とソフトウェア資産管理(SAM)に関連する新しいフィールドが追加。
→SBOMが生成された製品ライフサイクルの段階を識別することで、SBOMの品質を伝達できるようになります。既に使用しているソフトウェアや初期のライフサイクルでのSBOMを管理することで、SDLCにおいてのリスクを軽減させます。
CycloneDXドキュメントの作成
では、実際にCycloneDXドキュメントを作成するにはどうしたらよいのか疑問に思われた方もいらっしゃるかと思います。
基本的には、CycloneDXドキュメントの作成に対応しているSBOM作成ツールを使用して、解析対象のソフトウェアをスキャンしCycloneDXのレポートを出力します。
手作業でドキュメントを作成するのは、開発したソフトウェアパッケージに含まれている無数のOSSやコンポーネントの詳細を自身で記述するということであり、あまり現実的ではありません。
CycloneDXドキュメントの作成に対応しているSBOM作成ツールと解析時の対応言語/パッケージマネージャを一部以下に抜粋します。
V1.4
ツールの名称 | 対応言語 | 対応パッケージマネージャー |
---|---|---|
BlackDuck | Java, JavaScript, C/C++, C#, Objective-C, .NET, Perl, PHP, Python, Ruby, RUST, Go, Node.js, Kotlin, Swift... | Cocoapods, maven, gradle, npm, yarn, NuGet, CPAN, Cargo, composer, Conda, gems, Pip, Yocto... |
Mend | Java, JavaScript, C/C++, C#, PHP, Python, Ruby, RUST, Go, Kotlin, Swift... | Cocoapods, maven, gradle, npm, yarn, NuGet, composer, Conda, gems, Pip... |
FOSSA | Java, JavaScript, C/C++, C#, .NET, Perl, PHP, Python, Ruby, RUST, Go, Kotlin, Swift, Erlang/Elixir, Scala... | Cocoapods, maven, gradle, ant/ivy, bower, npm, yarn, NuGet&Paket, CPAN, Cargo, composer, Conda, gems, Pip, mix, rebar3, sbt... |
Syft&Grype | Java, JavaScript, C/C++, Objective-C, .NET, PHP, Python, Ruby, Go, Swift... | Cocoapods, gradle, npm, yarn, composer, gems... |
V1.4+
ツールの名称 | 対応言語 | 対応パッケージマネージャー |
---|---|---|
Trivy | Java, JavaScript, C/C++, .NET, PHP, Python, Ruby, Go, Node.js, Swift... | Cocoapods, maven, gradle, npm, yarn, NuGet, composer, Conda, gems, Pip... |
Dependency Track | Java, JavaScript, .NET, PHP, Python, Ruby, RUST, Erlang/Elixir... | maven, npm, NuGet, composer, Cargo, Hex... |
- ※各ツールにはそれぞれコンポーネント解析時に読み込み可能なデータ形式に条件があります。
ツールによって対応する機能やフォーマット、ファイル形式、実際に出力される情報は異なります。
そのため、出力結果はツールの仕様に依存します。
まとめ
- CycloneDXは2017年にOWASPにより開発されたセキュリティ管理を念頭に置いたSBOMフォーマットである。
- オブジェクトモデルで構成されており、各オブジェクトに加え拡張機能を使用することで、ニーズに合わせた新しい機能の試行が容易である。
- 実際にCycloneDXでSBOMを出力するには、それに対応したツールを使用する必要がある。
おわり
SBOMの代表的なフォーマットCycloneDXについての理解は深まりましたでしょうか。CycloneDXに関する情報は公式HPが主であり、日本語でわかりやすくまとまった情報にたどり着くのが難しいと思い、本記事の作成にあたりました。少しでもCycloneDXについてのイメージを掴むことができましたら幸いです。また、CycloneDXの活用に関してお悩みをお持ちの方・SBOM活用に関してご支援を必要としている方は、本ページお問い合わせからお気軽にご連絡ください。
参考HP
雑誌の執筆やインタビューの依頼をお受けしております。ご希望の方はお問い合わせからご連絡ください!