サプライチェーン
ソフトウェアサプライチェーンセキュリティとは?
ソフトウェアサプライチェーンセキュリティとは、ソフトウェアがユーザーに届くまでに入り込むすべてのもの、つまりオープンソースパッケージ、ビルドシステム、パイプラインのツール、そしてリリースそのものを守る取り組みです。攻撃者はアプリケーションではなく、これらを狙うことが増えています。侵害されたパッケージやビルドステップが1つあれば、それを使うすべての製品に到達できるからです。
更新日
ソフトウェアサプライチェーンとは?
ソフトウェアサプライチェーンとは、ソフトウェアが開発者のエディターから本番環境に届くまでに関わるすべての人とものです。それぞれに固有のリスクがある4つの段階で考えてみましょう。
| 段階 | 含まれるもの | 起こりうる問題 |
|---|---|---|
| ソース | 自社のコード、リポジトリ、開発者アカウント | 認証情報の窃取、悪意のあるコミット、シークレットの漏えい |
| 依存関係 | オープンソースパッケージ、ベースイメージ、サードパーティのコード | 脆弱なバージョン、悪意のあるリリース、タイポスクワッティング |
| ビルド | CIランナー、GitHub Actions、ビルドツール、キャッシュ | 侵害されたアクション、汚染されたキャッシュ、パイプラインのシークレットの窃取 |
| リリース | 成果物、レジストリ、デプロイ、アップデート | すり替えられた成果物、改ざんされたアップデート、出荷したものの記録の欠如 |
今、重要である理由
出荷するものの大半は、自分たちで書いたものではありません。現代のアプリケーションの大部分はオープンソースであり、直接の依存関係はそれぞれ、チームの誰も選んでいない別の依存関係を連れてきます。それらのパッケージは自社のコードと同じ権限で実行され、そのインストールスクリプトはCIパイプライン内で、シークレットのすぐそばで実行されることがあります。
ここ数年の事例は、それがどのように悪用されるかを示しています。
- SolarWinds:ビルドが侵害されたため、クリーンなソースツリーから汚染されたリリースが生成されました。
- Log4Shell:1つのロギングライブラリの欠陥が、それを使っていることすら知らなかった製品にまで及びました。
- xz utils:信頼されたコントリビューターが、Linuxディストリビューションに含まれるプロジェクトにバックドアを仕込みました。
- tj-actions:乗っ取られたGitHub Actionが、それを使うパイプラインで攻撃者のコードを実行し、シークレットに手が届く状態になりました。
- Shai-Hulud:ワームがnpmパッケージを通じて拡散し、それをインストールしたマシンやCIジョブからトークンを盗みました。
これらの攻撃の仕組みを段階ごとに知るには、サプライチェーン攻撃とはをご覧ください。
ソフトウェアサプライチェーンセキュリティの仕組み
取り組みに必要なのは4つのことです。それ以外は細部にすぎません。
- 出荷するものを把握する。すべてのリリースについて、正確なSBOMを、それを生成したビルドから、推移的依存関係も含めて保持します。
- 入り込むものを制御する。バージョンを固定し、ロックファイルを使い、ビルドの取得元を制限し、新しいパッケージを精査します。
- ビルドを守る。ジョブを分離し、シークレットを制限し、アクションをコミットで固定し、外向きの通信を制限して、侵害されたパッケージがトークンをどこにも送れないようにします。ランナーのセキュリティとサプライチェーンセキュリティをCIで行うべき理由をご覧ください。
- 出荷したものを監視し続ける。新しい脆弱性は、すでに本番環境にあるソフトウェアにも影響します。それを監視し、どのリリースが影響を受けるかを追跡し、各修正を新しいリリースまで見届けます。
詳しいチェックリストはソフトウェアサプライチェーンセキュリティのベストプラクティスをご覧ください。
フレームワークと規制
| 名称 | 概要 | 適した用途 |
|---|---|---|
| SLSA | ビルドの完全性と来歴に関するレベル | ソフトウェアのビルド方法の強化 |
| NIST SSDF | セキュアな開発プラクティス、SP 800-218 | 包括的なセキュア開発プログラム |
| NIST SP 800-161 | サイバーセキュリティのサプライチェーンリスク管理 | 組織全体のリスク管理 |
| OpenSSF Scorecard | オープンソースプロジェクトの健全性の自動チェック | 依存関係の精査 |
| Cyber Resilience Act | デジタル要素を含む製品に関するEUの法律 | EUでの販売。CRAとはをご覧ください |
どのようなツールが関わるか
これらすべてをカバーする単一の製品はありません。このカテゴリは、SCAツール、SBOMツール、CI/CDとランナーのセキュリティ、パッケージファイアウォール、アプリケーションセキュリティポスチャ管理、バイナリ解析に分かれます。それぞれの役割と提供ベンダーについては、ソフトウェアサプライチェーンセキュリティツールの比較とその費用をご覧ください。
どこから始めるか
- 最も重要な製品について、CIビルドからSBOMを生成し、読んでみる。
- 依存関係の脆弱性アラートを有効にし、誰が担当するかを決める。
- GitHub Actionsをコミットで固定し、ワークフローがアクセスできるシークレットを見直す。
- ビルドからの外向きの通信を、実際に必要なホストに制限する。
- ビルド中のものだけでなく、出荷したものの監視を設定する。
CRACIのアプローチ
CRACIはビルドから始めます。ビルドこそが、すべてを見渡せる唯一の場所だからです。CRACIはGitHubホステッドランナーを、より高速で低コストなランナーに置き換え、各ジョブが取得したすべてのパッケージを、ツリーのあらゆる階層で、CIキャッシュから復元されたパッケージも含めて記録します。エグレスポリシーはビルドに不要な接続をブロックするため、誰も見たことのない攻撃からも守ります。さらにCRACIは、出荷したものを新しい脆弱性と照合し続け、それぞれをトリアージから修正済みリリースまで追跡します。CRACIによるソフトウェアサプライチェーンセキュリティをご覧ください。
ソフトウェアサプライチェーンセキュリティに関するよくあるご質問
ソフトウェアサプライチェーンセキュリティとは何ですか?
ソフトウェアがユーザーに届くまでに入り込むすべてのもの、つまりオープンソースの依存関係、ビルドシステム、パイプラインのツール、リリースを守る取り組みです。
ソフトウェアサプライチェーン攻撃の例を教えてください。
SolarWindsの攻撃ではビルドが侵害されたため、顧客は信頼されたベンダーから汚染されたアップデートを受け取りました。Shai-Huludの攻撃では、ワームがnpmパッケージを通じて拡散し、それをインストールしたマシンからトークンを盗みました。
サプライチェーンセキュリティとアプリケーションセキュリティの違いは何ですか?
アプリケーションセキュリティは、自分たちが書いたコードの欠陥を対象とします。サプライチェーンセキュリティは、自分たちが書いていないもの、そしてソフトウェアがどのようにビルド・リリースされるかを対象とします。取り組みには両方が必要です。
サプライチェーンセキュリティはSBOMだけで十分ですか?
いいえ。SBOMは出荷するものを示すもので、それが基盤になります。そのうえで、入り込むものを制御し、ビルドを守り、リリースしたものを監視し続ける必要があります。
主なフレームワークは何ですか?
ビルドの完全性に関するSLSA、セキュアな開発プラクティスに関するNIST SSDF、サプライチェーンのリスク管理に関するNIST SP 800-161です。EUでは、Cyber Resilience Actがデジタル要素を含む製品に法的要件を定めています。
ソフトウェアサプライチェーンセキュリティは誰が担当しますか?
通常はアプリケーションセキュリティまたはプロダクトセキュリティのチームが担い、パイプラインを運用するプラットフォームチームやDevOpsチームと連携します。修正は各サービスを担当するエンジニアリングチームに引き渡されます。