2023 年 04 月 12 日 Yocto Project よもやま話
今回のブログ記事は、予告を変更してリネオのセールス&マーケティング部の者が伊東の監修のもとで執筆したものを掲載します。「SBOM を生成してみた」と題して、Yocto Project を利用した生成物につけることができる SBOM について解説します。
YoctoProject で SBOM 対応を実施した Joshua Watt 氏は SBoM の表記を使用していますが、本ブログでは LinuxFoundation の刊行物で使用されている SBOM の表記を採用しています。
SBoM は Software Bill Of Materials の略称で、日本語に翻訳すると「ソフトウェア部品表」になります。ソフトウェアアプリケーションなどのソフトウェア成果物を構築するために使用されるコンポーネントの一覧です。SBOM の利用方法は食品ラベルに似ています。アレルギーを引き起こす可能性のある食品を避けるために食品ラベルを参照するように、組織や個人は自分たちに害を及ぼす可能性のあるソフトウェアの使用を回避するために SBOM を参照することができます。
SBOM が注目を浴びるきっかけとなったのは、2021 年 5 月 12 日に発行された米国大統領令「Executive Order on Improving the Nation's Cybersecurity(国家のサイバーセキュリティの向上に関する大統領令)」でした。この中の第4章「ソフトウェア・サプライチェーン・セキュリティの強化」に SBOM が記載されています。
また、欧州委員会は 2022 年 9 月 15 日、サイバーレジリエンス法案(Cyber Resilience Act1)を公表しました。この中に、欧州で製品を販売する製造者は、脆弱性に関する報告窓口の情報や製造者が意図した製品の使用法、SBOM、そして適合宣言書などへのアクセス方法などを提供することが盛り込まれています。
米国では前項で取り上げた 2021 年 5 月 12 日発行の大統領令に従い、同年 7 月 12 日に商務省国家電気通信情報局(NTIA)が SBOM の最小要素を定めた「The Minimum Elements For a Software Bill of Materials」(以下、最小要素)を公開しています。
この Baseline Component 情報を含めるデータフォーマットには SPDX,CyconeDX,SWID などがあります。
SPDX は、Linux Foundation の傘下のプロジェクトです。SPDX を使って、ソフトウェアに関するコンポーネント、ライセンス、著作権、セキュリティ参照、その他のメタデータを表現することができます。
2010 年 2 月に Linux Foundation 傘下の FOSSBazaar で仕様策定が開始され、同年 8月に主要な OpenCompliance の一つとして発表されました。当初の目的は、ライセンスのコンプライアンスを改善することでした。
その後サプライチェーンの透明性やセキュリティなど、さらなる使用例を促進するために拡張され、2020 年 10 月の SPDX2.2.1 から ISO に即した発行のためにフォーマットの使用を転換しています。
SPDX ドキュメントはセクションで構成されますが、SPDX2.1 の仕様では以下のようなセクションが定められています。
Document Creation Information (ドキュメント作成者) |
ドキュメントを作成者やその作成方法、その他作成に関連する有用な情報の表記 |
---|---|
Package Information (パッケージ情報) |
パッケージについての情報を提供します。生成者、ダウンロード URL,チェックサム、ライセンス概要など。 |
File Information (ファイル情報) |
特定のファイルに関する情報を表示します。ファイルの著作権(あれば)、ライセンス、チェックサム、コントリビューターなどの情報が含まれます。 |
Snippet Information (スニペット情報) |
ファイル内の範囲で関連するライセンス情報を定義するのに使用します。 | Other Licensing Information (その他のライセンス情報) |
SPDX ライセンスリストにないライセンスを記述するのに用います。 | Relationships (リレーションシップ) |
SPDX2.0 仕様で導入されました。SPDX ドキュメント同士がどのように関連しあっているかを表記します。 | Annotations (注釈) |
ドキュメント内の様々な要素に対して人がつけたコメントです。ドキュメントのレビューなどに利用します。 |
SPDX v2.2 ドキュメントの内容
Yocto Project では SBOM のサポートをバージョン 3.4 から開始しています。SBOM 情報に利用するライセンスの標準には Software Package Data Exchange(SPDX)を採用しています。
この SBOM のサポートを利用すると、一度行われた YoctoProject でプロジェクトのイメージの構築、一度確認された各ソフトウェアコンポーネントの全てのライセンス、一度適用された脆弱性の修正について、 OpenEmbedded ビルドシステムは使用したすべてのコンポーネンについて、そのライセンス、その依存関係、適用したその変更、修正した既知の脆弱性についての説明書きを作成することができます。説明書きは、SPDX 標準を利用して、ソフトウェア部品表(SBOM)の形式で生成されます。
※ 一部記述を訂正しました。(2024/7/10)
OpenEmbedded ビルドシステムは素のままでは SBOM を生成しません。生成させるためには、SPDX を有効にしなくてはなりません。
設定ファイルに create-spdx の継承を行わせるよう設定を入れる必要があります。
今回実際に試してみようということで、 設定にあたり、local.conf に以下の記述を追加しました。
# added for SBOM # required. enable to generate spdx files. INHERIT += "create-spdx" # optional. if "1", output spdx files will be formatted. SPDX_PRETTY = "1" # optional. if "1", output spdx files includes [file-information section](https://spdx.github.io/spdx-spec/v2.3/file-information/). SPDX_INCLUDE_SOURCES = "1" # optional. if "1", bitbake will create source files archive for each package. SPDX_ARCHIVE_SOURCES = "1" # optional. if "1", bitbake will create output binary archive for each package. SPDX_ARCHIVE_PACKAGED = "1"
以下記述部分の説明です。
まずは create-spdx クラスを継承します。
INHERIT += "create-spdx"
次は生成されたファイルを読みやすくするためのオプションです。
SPDX_PRETTY = "1"
ターゲットレシピで処理されるソースファイルの説明を追加するオプションです。
SPDX_INCLUDE_SOURCES ="1"
ソースファイル自体のアーカイブを追加するオプションです。
SPDX_ARCHIVE_SOURCES = "1"
生成されたターゲットパッケージのファイルの圧縮アーカイブを追加するオプションです。
SPDX_ARCHIVE_PACKAGED ="1"
この記述を加えた後、イメージを構築します。
$bitbake core-image-minimal
マニュアルには JSON 形式の SPDX 出力がビルドディレクトリ下の
/tmp/deploy/images/MACHINEにIMAGE-MACHINE.spdx.json ファイルとして出力される、とあります。
core-image-mnimal-qemu86-64.spdx.json がインデックスとして、また、JSON SPDX ファイルをすべて固めた圧縮ファイルとして core-image-minimal-qemux86-64.spdx.tar.zst ファイルが作成されました。
インデックスファイルの core-image-minimal-qemu86-64.spdx.json の冒頭が以下です。
1.で挙げた Document Creation Information (ドキュメント作成情報)に相当する部分です。
{ "SPDXID": "SPDXRef-DOCUMENT", "creationInfo": { "comment": "This document was created by analyzing the source of the Yocto recipe during the build.", "created": "2023-03-17T08:25:03Z", "creators": [ "Tool: OpenEmbedded Core create-spdx.bbclass", "Organization: OpenEmbedded ()", "Person: N/A ()" ], "licenseListVersion": "3.14" }, "dataLicense": "CC0-1.0",
core-image-minimal-qemu86-64.spdx.json はインデックス情報のみですので、パッケージ情報は kernel-image-5.15.91-yocto-standard.spdx.json のものを例に挙げます。以下のようになっていました。
"name": "kernel-image-5.15.91-yocto-standard", "packages": [ { "SPDXID": "SPDXRef-Package-kernel-image-5.15.91-yocto-standard", "copyrightText": "NOASSERTION", "downloadLocation": "NOASSERTION", "licenseConcluded": "NOASSERTION", "licenseDeclared": "GPL-2.0-only", "licenseInfoFromFiles": [ "NOASSERTION" ], "name": "kernel-image-5.15.91-yocto-standard", "packageFileName": "kernel-image-5.15.91-yocto-standard.tar.zst", "packageVerificationCode": { "packageVerificationCodeValue": "da39a3ee5e6b4b0d3255bfef95601890afd80709" }, "supplier": "Organization: OpenEmbedded ()", "versionInfo": "5.15.91+gitAUTOINC+8df0d345ef_531238ba91" } ],
"licenseDeclared": "GPL-2.0-only",とあり、SPDX ライセンスリストに掲載されているライセンス形態のうち GPL-2.0-only を採用していることがわかります。
YoctoProject バージョン3.3以前では、YoctoProject 内で SBOM 準拠の出力を出すことは現状ではできません。なお、現在LTSとして、2024年4月までメンテナンスが行われるYocto3.1に関して、Joshua Watt氏のバックポートパッチが提出されており、早ければ2023/5/19リリース予定のYocto3.1.25から利用可能となります。
また、サードパーティで SBOM 出力を可能にするサービスを提供するところがあります。
例えば、リネオが取り扱っている Timesys Vigiles では、バージョン 3.3 以前の Yocto Project のプロジェクトからも SBOM を生成することができます。
Vigiles は YoctoProject 以外にも Buildroot、PetaLinux、Wind River Linux、PTXdist、OpenWrt、Timesys Factory を含むすべての Linux ビルドシステム統合をサポートし、正確な SBOM 生成を行っています。また厳選された脆弱性データベースに対する SBOM の自動スキャンにより、CVE レポートを作成します。
ソフトウェアの脆弱性を狙うサイバー攻撃は後を絶ちません。Linux の性質上、サプライチェーンの情報を収集しての脆弱性の検知と対策パッチの手当ては重要な課題となっています。SBOM の利用が Linux ベースの製品の安全性の確保に役立ちます。
次回は 4 月末リリース予定の Yocto4.2(Mickledore)に関するリリース情報をお届けする予定です。
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2023 年 08 月 28 日 Vigiles サポート
2024 年 03 月 26 日 Yocto Project よもやま話
2023 年 07 月 25 日 Yocto Project よもやま話
2023 年 06 月 20 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2024 年 07 月 26 日 イベントレポート
2024 年 07 月 09 日 イベントレポート
2024 年 06 月 03 日 イベントレポート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2022 年 09 月 27 日 リクルート
2024 年 09 月 25 日 信州リネオ便り
2024 年 08 月 20 日 信州リネオ便り
2024 年 08 月 07 日 信州リネオ便り
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部