ソフトウェアの脆弱性管理に役立つ「SBOM」を知ろう!

最近、システムの開発を発注するときに、「SBOM(Software Bill of Materials)」の作成も依頼することが増えています。
なぜSBOMの作成が求められているのか、そしてどのようなソフトウェアがSBOMを作成すべきなのか、受注側の企業はどのようにして作成するのか、その概要について解説します。

ソフトウェアの脆弱性管理に役立つ「SBOM」を知ろう!

SBOMとは

パソコンやスマートフォンを使って仕事をすることが当たり前になった現代では、業務を円滑に進めるためにさまざまなソフトウェアを使用しています。自社で開発したものだけでなく、外部から購入したもの、外部に開発を依頼したものもあるでしょう。

それらのソフトウェアが動作するために、どのような技術が使われているのかを発注元(購入者)は把握しているでしょうか?

現代のソフトウェアはゼロから作ることはほとんどなく、既存のライブラリや外部のAPIなどが使用されています。これは効率よく開発できる一方で、使用しているライブラリなどに脆弱性(セキュリティ上の不具合)が見つかると、そのソフトウェアそのものに影響が及ぶ可能性があることを意味します。
このとき、そのソフトウェアがどのようなライブラリを使っているのかを発注者が把握していないと、更新の必要があることに気づきません。脆弱性があってもソフトウェアの動作には問題ないため、一般の利用者は気づかずに使ってしまいます。

Windowsのように多くの利用者がいるソフトウェアで、自動アップデートの機能が用意されていれば、その開発元が修正した内容を自動的に適用できますが、自社が発注して開発したソフトウェアでは、そのような自動的なアップデートはありません。開発元が知らせてくれなければ、発注者は問題があることにすら気づかない可能性があるのです。

つまり、ソフトウェアにどのような技術が使われているのか、その内容を発注者がある程度は把握しておくことが求められています。具体的には、そのソフトウェアが使用しているライブラリやデータベースなどの種類、バージョンなどの情報が考えられます。

このように、ソフトウェアに使われている部品の一覧を整理したものをSBOM(Software Bill of Materials)といいます。これには、そのソフトウェアを構築するすべての要素が含まれます。

このような情報は開発側だけが知っていればよく、発注者が知る必要はないと考える人もいるでしょう。しかし、私たちの普段の生活を思い浮かべてみましょう。例えば、スーパーマーケットなどで加工食品を購入するとき、商品のパッケージには原材料が表示されています。
多くの消費者は見ないかも知れませんが、アレルギーのある消費者は影響を判断するために使いますし、保存方法や問い合わせ先などを確認するために重要な情報です。これらは、製造者や販売者が知っておくだけでなく、その食品にどのような材料が使われているのかを消費者が把握するために書かれています。

SBOMが求められる背景

SBOMがソフトウェア開発で求められる背景として、システムに対する発注者側のセキュリティ意識やコンプライアンスについての関心の高まりがあります。これまではシステムの管理を開発会社に任せていたものの、様々な事件の発生により、発注者側でも使用しているソフトウェアを管理したいニーズが生まれてきました。

例えば、2021年12月に発生した「Apache Log4j」というログ作成ライブラリの脆弱性の問題がありました。このライブラリに脆弱性が発見されたことで、このライブラリを使用している多くのシステムに影響が出ました。この脆弱性は「インターネット上で最も深刻な脆弱性の1つ」とも言われています。

このような脆弱性による影響を最小限に抑えるためには、システムで使用しているライブラリを把握し、脆弱性が見つかった場合には、そのシステムに対して修正プログラムを適用しなければなりません。
また、開発したソフトウェアがOSS(オープンソースソフトウェア)を使用しているのであれば、ライセンス違反がないかを発注者が把握しておきたいという要望もあります。
上記のような事件の発生だけでなく、政府などが主導してSBOMの導入を進めていることも最近の広がりに関連しています。

例えば、2021年に米国のバイデン大統領が発行した「Executive Order on Improving the Nation's Cybersecurity(国家のサイバーセキュリティの改善に関する大統領令)」では、政府契約のソフトウェアにSBOMの提出が要求されるようになりました。
【参考】https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/

また、医療機器のセキュリティ規格である「IEC 81001-5-1」が2021年に定められ、医療機器の開発においてはSBOMを作成できるように構成管理をすることが求められています。
【参考】https://www.pmda.go.jp/files/000250907.pdf

さらに、2023年7月末には日本でも、経済産業省が「ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引」を公開しました。
【参考】https://www.meti.go.jp/press/2023/07/20230728004/20230728004.html

このように、様々な業界、分野でSBOMの作成が求められています。

SBOMの対象範囲

ここまでの解説を読んで、SBOMの作成が必要なソフトウェアは大規模なものだとイメージする人がいらっしゃるかもしれません。複数のライブラリを使用していたり、外部のサービスを利用していたりするなど、それなりの規模のソフトウェアが対象だと思われることが多いものです。

しかし、個人や中小企業が作成するような小規模なWebサイトのようなものでもSBOMは有効です。使用しているプログラミング言語やフレームワーク、データベースなどのバージョンを整理しておくと、そのバージョンで脆弱性が見つかったり新しいバージョンが登場したりしたときに、速やかに対応できます。

これは脆弱性に備えるだけではありません。例えば、Webサイトに障害が発生した場合にも、障害の原因がどこにあるのかを調べるときにSBOMなどの資料は有効です。Webサイトを作成するときは、外部のCDNを使用したり、他のサービスと連携したりすることは珍しくありません。Webサイトが使用しているサービスなどの情報を整理しておくだけで、問題が発生したときの調査がスムーズに進むことが期待できます。

もちろん、これまでもシステム開発の現場では、使用しているソフトウェアを管理していました。例えば、ソフトウェアに必要なライブラリを導入するときはパッケージ管理システムなどを使う方法が一般的です。このとき、バージョン番号などを指定した設定ファイルを配置し、その設定ファイルを使って管理していました。

しかし、これを利用者が把握できるようにわかりやすく整理することで、「1つのシステム」として提供されるソフトウェアの内側に使われている個々のソフトウェアを、発注者が容易に把握できるようにするのです。

SBOMを効率よく作成するために

SBOMを作成するには、そのソフトウェア内でどのようなライブラリを使用しているのかを明らかにしなければなりません。ライブラリが他のライブラリを読み込んでいることもあるため、その全体像を把握するのは時間とリソースを要する作業です。
新たに開発するソフトウェアであれば、開発時に記録していく方法を採用することもできますが、既存のシステムについてSBOMを作成するのは面倒です。また、SBOMは一度作成すれば終わりではありません。ソフトウェアの機能追加やバージョンアップなどにより、使用しているライブラリなども変わっていきます。

このため、SBOMを作成するツールが様々な企業で開発されており、作成したSBOMを管理するサービスが提供されていたりします。さらに、作成されたSBOMを発注者が効果的に活用できるように、SBOMの書式などを標準化することについても議論されています。例えば、OWASPが開発したCycloneDXというフォーマットは、SBOMだけでなくハードウェア向けのHBOMや機械学習向けのML-BOMなどもサポートしています。
【参考】https://cyclonedx.org

このように、セキュリティの強化だけでなくライセンスの遵守、製品の品質向上など、様々な目的でSBOMが作成されるようになってきました。SBOMの重要性を認識し、開発者はスムーズに作成するだけでなく、発注者は作成されたSBOMを活用する時代だといえるでしょう。

著者プロフィール
増井 敏克氏(ますい としかつ)
増井技術士事務所代表。技術士(情報工学部門)、情報処理技術者試験にも多数合格。
ビジネス数学検定1級。

「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や各種ソフトウェア開発、データ分析などをおこなっている。

著書に『図解まるわかり セキュリティのしくみ』『図解まるわかり プログラミングのしくみ』『図解まるわかり アルゴリズムのしくみ』『IT用語図鑑』『IT用語図鑑[エンジニア編]』『Pythonではじめるアルゴリズム入門』『プログラマ脳を鍛える数学パズル』『プログラマを育てる脳トレパズル』(以上、翔泳社)、『プログラマのためのディープラーニングのしくみがわかる数学入門』『プログラミング言語図鑑』(以上、ソシム)、『基礎からのプログラミングリテラシー』(技術評論社)、『RとPythonで学ぶ統計学入門』(オーム社)などがある。