Snyk CLI を使用した SBOM の作成
2024年2月8日
0 分で読めますソフトウェア部品表 (SBOM) は今や、オープンソースセキュリティとコンプライアンスに不可欠な要素となりつつあります。この記事では、SBOM の定義、SBOM が必要な理由、オープンソースセキュリティにおける役割について詳しく説明します。
SBOM とは
ソフトウェア部品表 (SBOM) は、ソフトウェア製品に使用されるすべてのコンポーネントを掲載した総合的な目録 (インベントリ) です。各コンポーネントの名前、バージョン、ライセンス情報など、必要な詳細がすべて記載されています。SBOM はソフトウェアの原材料リストのようなもので、ソフトウェア製品の構成要素の全容を明らかにします。
さまざまな依存関係を持つシンプルな Python プロジェクトについて考えてみましょう。このプロジェクトの SBOM を単純化した例は次のとおりです。
1[
2 {
3 "component_name": "numpy",
4 "version": "1.21.0",
5 "license": "BSD"
6 },
7 {
8 "component_name": "pandas",
9 "version": "1.3.0",
10 "license": "BSD"
11 }
12]
SBOM が必要な理由
SBOM は、ソフトウェア構成を理解するうえで重要な役割を果たします。しかし、オープンソース開発の分野では、SBOM はさらに重要な役割を果たしています。オープンソースコンポーネントは多くの場合、独自の依存関係を持っており、相互接続されたコンポーネントのネットワークは複雑化しています。SBOM を確認することでこのネットワークを理解しやすくなり、アプリ内のサードパーティの依存関係から生じる潜在的なセキュリティリスクやコンプライアンス上の問題に暴露される可能性の全容を把握できます。
作成された成果物に SBOM を添付することは、ソフトウェアのユーザーがプロジェクトのセキュリティ状況を評価できるようになるため、極めて重要です。Log4Shell や Spring4Shell における事例のように、特定のオープンソースパッケージで重大な脆弱性が公表された場合には、脆弱性のあるコンポーネントの利用者全員が、自分がこのセキュリティ脆弱性の影響を受けるかどうかを判断できるようになります。
SBOM は、あらゆるソフトウェアにとって有用なアドオンであり、すべてのリリースで提供すべきものです。これにより、透明性が得られ、セキュリティとコンプライアンスが強化されるとともに、ソフトウェアの品質が向上します。
Snyk CLI を使用した SBOM の作成
Snyk コマンドラインインタフェース (CLI) は、開発者や DevOps 専門家がオープンソースの依存関係に存在する既知の脆弱性を発見、修正、監視できるようにするオープンソースセキュリティツールです。Snyk CLI は、JavaScript (npm、yarn)、Python (pip)、Java (Maven)、.NET (NuGet)、Ruby (RubyGems)、PHP (Composer) など、各種のプログラミング言語とパッケージマネージャーを幅広くサポートしています。Snyk CLI は、ソフトウェアプロジェクトの SAST、SCA、コンテナ、IaC スキャンに、ローカルまたはパイプラインで使用できます。
現在では、プロジェクト用の SBOM を作成することもできます。
Snyk CLI のインストール
Snyk CLI を導入するには、開発環境にインストールする必要があります。以下は、npm を使用して Snyk CLI をインストールする簡単なガイドです。 詳細情報や Snyk CLI をインストールする別の方法については、ユーザードキュメントを参照してください。
npm install -g snyk
Snyk CLI のインストール後は、`snyk auth` コマンドを使用してアカウントを認証する必要があります。この操作により、ウェブブラウザが開き、Snyk アカウントにログインまたはサインアップできます。
snyk auth
または、Snyk トークンを環境変数として設定することもできます。これは、CI/CD パイプラインで CLI を使用する場合に推奨されます。詳細については、便利な CLI チートシートまたは公式ドキュメントを参照してください。
Snyk CLI を使用した SBOM の生成
CLI を稼動し、エンタープライズ Snyk アカウントに接続したら、次のコマンドを使用してソフトウェアプロジェクトの SBOM の作成を開始できます。
snyk sbom --format=<cyclonedx1.4+json|cyclonedx1.4+xml|spdx2.3+json>
`--format` オプションは必須です。生成される SBOM の出力形式を指定します。CylconeDX、XML、JSON 形式の SPDX のいずれかを選択します。
SBOM は、`>` 演算子を使用して `stdout` をファイルにリダイレクトすると、ファイルに保存できます。cyclonedx 1.4 JSON で出力を必要とする単純なプロジェクトでは、次のようになります。
snyk sbom --format=cyclonedx1.4+json > mysbom.json
プロジェクトのルートディレクトリからこれを実行すると、アーティファクトの出荷時に添付できる SBOM ファイルが生成されます。
または、`--json-file-output=<OUTPUT_FILE_PATH>` フラグを使用すると、SBOM の JSON 出力を JSON ファイルにエクスポートできます。このフラグは、SBOM の XML バリアントを生成する場合には、当然ながら機能しません。
複数のプロジェクト
Snyk CLI は、ビルドシステムのパッケージマニフェストファイルを使用して依存関係ツリーを構築します。これにより、SBOM の入力が決定されます。デフォルトでは、CLI マニフェストファイルを 1 つ検出すると停止します。ただし、プロジェクトに複数のマニフェストファイルや 1 つ以上のビルドシステムがある場合もあります。たとえば、Maven を使った Java のバックエンドと、npm を使用した Node.js のフロントエンドを持つプロジェクトが存在する場合もあります。SBOM コマンドに `--all-projects` フラグを追加すると、Snyk CLI はマニフェストファイルを検索しながらプロジェクトを横断し、その結果または SBOM 出力に追加します。
snyk sbom --format=cyclonedx1.4+json --all-projects > mysbom.json
マニフェストファイルを検索するデフォルトの深さは 4 ですが、これは `--detection-depth` フラグを使用して設定可能です。さらに、`--exclude` フラグで特定のファイルを除外することもできます。
snyk sbom --format=cyclonedx1.4+json --all-projects --detection-depth=3 --exclude=package.json > mysbom.json
マルチモジュールの Maven ファイル、Gradle の設定属性、Yarn のワークスペースなど、特定のエコシステムの処理に利用できるコマンドラインフラグが多数存在することに注意してください。Snyk SBOM で使用可能なすべてのフラグの概要については、Snyk の広範なドキュメントページをご覧ください。
Snyk CLI を使用した SBOM 生成の自動化
Snyk CLI を使用したソフトウェア部品表生成の自動化は、CI/CD パイプラインにおけるセキュリティとコンプライアンスを強化するうえで不可欠なステップです。Snyk CLI をビルドプロセスに統合することで、コードをビルドするたびに包括的な SBOM を自動生成できます。この SBOM は、推移的な依存関係を含むすべての依存関係を一覧表示します。
コードが CI/CD パイプラインを通過する際、Snyk はセキュリティ脆弱性を発見するだけでなく、ビルドリリースごとに最新の SBOM を生成して配信することもできます。この自動化により、安全で最新の SBOM を維持するプロセスが効率化されるだけでなく、ソフトウェア開発ライフサイクルにセキュリティ対策を組み込み、顧客との信頼関係を築きながら、規制要件や業界標準にも準拠しやすくなります。
SBOM の分析
SBOM の作成は、Snyk CLI を効果的に活用する簡単な方法です。しかし、SBOM を消費し、ソフトウェアパッケージで使用されている既知の脆弱性の存在をチェックする必要がある場合はどうでしょうか。現在、いくつかのオプションが用意されています。
Snyk SBOM チェッカー
Snyk SBOM セキュリティチェッカーは、使いやすいウェブインタフェースです。
CycloneDX または SPDX SBOM を専用フィールドにドラッグするかペーストし、Check SBOM をクリックします。Snyk は指定された SBOM をスキャンし、脆弱性のリストを作成します。
Bomber
Bomber は、SBOM のセキュリティ脆弱性をスキャンするオープンソースアプリケーションです。Snyk は SBOM をスキャンする `Bomber` の統合プロバイダーの 1 つです。
Bomber をインストールするには、公式 GitHub リポジトリから最新リリースをダウンロードするか、macOS では Homebrew、Linux では `dpkg` ツールを使用します。
Homebrew (macOS):
brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber
Dpkg (Linux):
dpkg -i bomber_0.4.1_linux_arm64.deb
Snyk を使用してコマンドラインから Bomber を実行するには、Snyk API トークンを指定する必要があります。このトークンは、Snyk ウェブインタフェースから取得できます。CLI がローカルマシンにインストールされている場合は、`snyk config get api` を実行してください。
Snyk API トークンを取得したら、次のように Bomber を実行できます。
bomber scan --provider snyk --token xxx mysbom.json
出力は、画面上にすべての既知の脆弱性を表示します。
Snyk を使用して最新の SBOM を提供
Snyk CLI を使用すると、ソフトウェアのビルドごとに最新の SBOM を作成できます。構築済みのアーティファクトに SBOM を提供することはベストプラクティスです (場合によっては要求されることもあります)。
これは、Snyk CLI を使用してパイプラインで SBOM の生産を自動化すると、簡単に実現できます。最後に、プロジェクトで SBOM を使用する際には、次のようなステップを推奨します。