Trivyによるソフトウェアサプライチェーンセキュリティ:SBOM(ソフトウェア部品表)の作成 #aqua #セキュリティ #trivy #sbom

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本ブログは「Aqua Security」社の技術ブログで2022年4月14日に公開された「 Software Supply Chain Security with Trivy: Generating SBOMs 」の日本語翻訳です。

Trivyによるソフトウェアサプライチェーンセキュリティ:SBOM(ソフトウェア部品表)の作成
Trivy は、開発者がアプリケーションで使用されているソフトウェアコンポーネントを可視化するのに役立つ、使いやすい包括的なオープンソーススキャナーです。サプライチェーンのセキュリティに対する意識が高まる中、SBOM(Software Bill Of Materials: ソフトウェア部品表)は、ソフトウェアリストを作成するための標準となっています。このプロセスを簡素化するために、Trivy では最近、業界全体の SBOM 標準である CycloneDX 形式のトップレベルコマンドとして SBOM を生成するサポートを追加しました。
この投稿では、SBOM の概要、使用例、および業界における役割について共有します。また、Trivy を使用して CycloneDX 形式の SBOM を生成する方法についても説明します。
SBOM概要
SBOM はもともと製造業に由来し、製品を構成する部品の明確なロードマップを提供するために使用されます。ソフトウェアの世界では、アメリカ合衆国商務省が SBOM を「SBOM(ソフトウェア部品表)とは、あるソフトウェアを構築するために必要なコンポーネント、ライブラリ、モジュールの完全で形式的な構造化リストと、それらの間のサプライチェーン関係である」と定義しています。これらのコンポーネントは、オープンソース、プロプライエタリ、無償、有償、広く入手可能、アクセスが制限されている、を関係なく含みます。
ソフトウェアの選択、生産、運用のいずれにおいても、製品は様々なサードパーティのライブラリやコンポーネントに依存します。SBOM は、あなたのソフトウェアで動作するそれらのバージョンと関連する脆弱性を機械的に読み取り可能なリストで提供します。
SBOM の利点は、簡単に共有できることです。したがって、製品の使用や統合を約束する前に、その製品のコンポーネント、依存関係、および脆弱性についての洞察を得ることができます。これにより、業界全体のセキュリティ問題の透明性と可視性が向上し、脆弱性を早期かつ効率的に検出可能となります。
SBOM には、主に2つの業界標準があります。
- Software Package Data Exchange(SPDX and SPDX Lite):Linux Foundation が主催する ISO 規格で、ソフトウェアパッケージに関連するコンポーネント、ライセンス、および著作権の概要が記載されています。
- CycloneDX:OWASP(Open Web Application Security Project)から生まれた、アプリケーションセキュリティやサプライチェーン分析に利用されるオープンソースの軽量な SBOM 規格です。
一般に、SBOM が役立つユースケースは、社内外を問わずいくつかあります。
- コンプライアンスレビュー
- セキュリティ評価
- ライセンス対応
- 品質保証
- コンプライアンス監査
- 顧客監査
次のセクションでは、Trivy CLI を使用して SBOM を生成する方法について説明します。現在、Trivy では CycloneDX 規格で SBOM を提供しています。
TrivyでSBOMを生成
以前から Trivy を使ってパッケージリストの作成は可能でした。これは、コンテナイメージに何が組み込まれているかを知りたいときに便利です。
以下の例は、端末に Trivy がインストールされていることが前提となります。インストールガイドとアップグレードオプションについては、Trivy のドキュメントを確認してください。
trivy --version |
以下のコマンドを実行すると、jless でパイプした以下のようなパッケージのバージョンと SHA ハッシュのリストが表示されます。
trivy -q image --ignore-unfixed --format json --list-all-pkgs ubuntu:20.04

これをもとに、Masahiro331 氏からコントリビュートされた Trivy の CycloneDX 機能を使って、SBOM を生成します。
trivy -q image --format cyclonedx ubuntu:20.04 | jless

さらに、Trivy のトップレベルコマンドの1つを使って、SBOM を生成可能です。すでに Trivy を使用している場合は、最新リリースがインストールされていることを確認し、Trivy CLI をアップグレードしてください。
すでに馴染みのある他の Trivy CLI コマンドと同様に、SBOM コマンドを使用できます。
trivy sbom --help

このコマンドを使用して、コンテナイメージの SBOM を生成できます。
trivy sbom alpine:3.15

もし、可読性のある形式で SBOM を取得したい場合は、 sbom の前に「-q」フラグをつけ、パイプを通して jq を実行することで実現できます。
trivy -q sbom alpine:3.15 | jq

他のリソースの SBOM を作成するには、リソースを指定する前にフラグ「-artifact-type」を使用します。
これにより、指定したファイルシステム以下の SBOM を作成できます。
trivy sbom --artifact-type fs ./

また、リポジトリ全体に対して SBOM を作成できます。
trivy sbom --artifact-type repo github.com/aquasecurity/trivy-ci-test

まとめ
信頼性の高いソースパッケージ情報を SBOM の形で生成することは、ソフトウェアサプライチェーンセキュリティの重要な部分です。Trivy を使用すると、開発プロセスにこのステップを簡単に追加でき、アプリケーションのセキュリティを向上できます。
SPDX やその他の SBOM 形式のサポート、SBOM 関連の機能など、Trivy のさらなる機能にご期待ください。具体的な要望があれば、GitHub や Slack でお知らせください。
今すぐ Trivy を試して、GitHub でスターを付けてください。そして、私たちの Slack コミュニティに参加して、Trivy で SBOM をどのように使っているかを共有してください。
