サプライチェーンリスク管理戦略
はじめに
このページでは、私たちのソフトウェアサプライチェーン内のリスクを特定、評価、軽減するための GitLab の包括的な戦略について説明します。私たちのリスクベースのアプローチは、自社データと顧客データの両方を保護しつつ、Supply chain Levels for Software Artifacts (SLSA) 準拠の段階的により高いレベルへ前進するように設計されています。
目標と目的
- サプライチェーン全体を通して GitLab の内部データ資産に対するリスクを特定し軽減する
- ソフトウェア提供パイプラインの整合性とセキュリティを確保することで、顧客データを保護する
- リスクに焦点を当てた改善を通して、SLSA 準拠の段階的により高いレベルを達成し維持する
- サプライチェーンの脅威と脆弱性を検出するための包括的な可視性とトレーサビリティを確立する
- 新たなサプライチェーンの脅威に対処するためのプロアクティブなリスク管理フレームワークを実装する
- サプライチェーン攻撃面を削減するための測定可能なアプローチを作成する
- 構造化されたサプライチェーンリスクデータと分析で Product Security Risk Register (PSRR) をサポートし強化する
サプライチェーンコンポーネントモデル
サプライチェーンの複雑性を分解する
GitLab の完全なサプライチェーンは、単一の包括的な図で表すには複雑すぎます。代わりに、再帰的なモデルを使用して、この複雑性を管理可能なコンポーネントに分解します。
- 各アーティファクトには独自のサプライチェーンがあります
- 各アーティファクトのサプライチェーンは、独自のサプライチェーンを持つ他のアーティファクトに依存する場合があります
- これにより以下のような有向グラフ構造が作成されます:
- ルートノードは配布されるアーティファクト (最終製品) です
- 内部ノードは中間アーティファクトとコンポーネントです
- 葉ノードは私たちのサプライチェーンの境界を表します (外部コンポーネント)
私たちは、GitLab の直接的な制御内にあるアーティファクトとコンポーネントに、インベントリと管理の取り組みを集中します。外部コンポーネント (葉ノード) については、それらの起源と基本的なメタデータを追跡しますが、現段階ではそれらのサプライチェーン全体を文書化することは試みません。
SLSA サプライチェーンモデル
私たちは、保護すべき 3 つの主要領域を定義する SLSA フレームワーク (Specification 1.1) に合わせてサプライチェーン追跡を整合させています。
このモデルは、私たちが追跡するコアステップを示しています。
- Source: コードが作成、レビュー、保存される場所
- Build: ソースがパッケージ/アーティファクトに変換される場所
- Distribution: ビルドされたアーティファクトが保存され配布される場所
このモデルはまた、以下も描いています。
- Producer: ソフトウェアを作成する責任のあるエンティティ
- Consumer: ソフトウェアを消費するエンティティ (別のサプライチェーンまたはエンドユーザー)
- Dependencies: Build と Distribution プロセスに供給される内部および外部のコンポーネント
私たちのサプライチェーン内の各アーティファクトについて、これら 3 つのコアステップを通じてのその経路を追跡し、各段階でコントロールと出所を文書化します。
サプライチェーンコンポーネントタイプ
私たちのモデルは、サプライチェーンの各コアステップ内で特定のコンポーネントタイプを識別します。これらのタイプは、サプライチェーンの特定のサブセットを記述する際に使用される参照要素として機能します。すべてのコンポーネントがすべてのサプライチェーンに存在するわけではないことに注意してください — 以下のカテゴリ化は、包括的なモデリングのためのフレームワークを提供します。
これらのタイプは PSRR の SLSA 脅威 にリンクされ、包括的なリスクを作成します。下の「脅威」セクションを参照してください。リスクは、より細かい粒度が必要な場合はサブタイプにリンクできます。
Source コンポーネント
Source コアステップには、Build ステップの前にソースコードを編集および変更できるすべてのものが含まれます。
| コンポーネントタイプ | サブタイプ | ラベル |
|---|---|---|
| 開発依存関係 | (以下のすべてのサブタイプを包含) | ~sscs-rm-component:src:dev-dependencies |
| 開発環境セットアップツールおよび依存関係 (例: asdf/mise) | ~sscs-rm-component:src:dev-setup-tools | |
| IDE (拡張機能とプラグインを含む) | ~sscs-rm-component:src:IDEs | |
| Docker イメージ | ~sscs-rm-component:src:docker-images | |
| プリコミットフック | ~sscs-rm-component:src:pre-commit-hooks | |
| ローカルコードフォーマッタとリンター | ~sscs-rm-component:src:linters | |
| GitLab リポジトリ | (以下のすべてのサブタイプを包含) | ~sscs-rm-component:src:repo |
| プロジェクト構成 | ~sscs-rm-component:src:repo-config | |
| Code Owners 構成 | ~sscs-rm-component:src:repo-code-owners | |
| リポジトリアクセス制御 | ~sscs-rm-component:src:repo-access-control |
Build コンポーネント
Build コアステップには、ソースコードを変換 (コンパイル、リンティングなど) してアーティファクトを生成できるすべてのものが含まれます。
Distribution コンポーネント
| コンポーネントタイプ | サブタイプ | ラベル |
|---|---|---|
| レジストリ | (以下のすべてのサブタイプを包含) | ~sscs-rm-component:dis:registries |
| パッケージレジストリ | ~sscs-rm-component:dis:package-registry | |
| コンテナレジストリ | ~sscs-rm-component:dis:container-registry | |
| 配布インフラ | (以下のすべてのサブタイプを包含) | ~sscs-rm-component:dis:distribution-infra |
| CDN | ~sscs-rm-component:dis:cdns | |
| ミラーサービス | ~sscs-rm-component:dis:mirror-services | |
| ダウンロードサーバー | ~sscs-rm-component:dis:download-servers | |
| 検証システム | (以下のすべてのサブタイプを包含) | ~sscs-rm-component:dis:verification-systems |
| 署名検証 | ~sscs-rm-component:dis:signature-verification | |
| チェックサムサービス | ~sscs-rm-component:dis:checksumming-services | |
| 認証システム | ~sscs-rm-component:dis:attestation-systems |
SLSA 1.1 との整合
このフレームワークは Supply chain Levels for Software Artifacts (SLSA) 仕様 1.1 に基づいています。私たちは業界標準との一貫性を保ち、コンプライアンスの取り組みを促進するため、SLSA の用語と概念を意図的に採用しています。私たちのモデルに組み込まれた主要な SLSA 要素は次のとおりです。
- ビルド出所のドキュメント
- ソース検証
- ビルド整合性コントロール
- アーティファクト認証
- アクセス制御要件
脅威
SLSA は、PSRR でモデルの要素をリスクにリンクするために使用される 一連の脅威を定義しています。
Product Security Risk Register との統合
サプライチェーンリスク管理戦略は、Product Security Risk Register (PSRR) の重要な基盤として機能します。PSRR で特定された各サプライチェーン関連リスクは、このサプライチェーンモデル内の特定の要素にリンクされる必要があります。
リスクマッピング要件
- PSRR のすべてのサプライチェーンリスクは、このモデルから特定のコンポーネントを参照する必要があります
- 拡張すると、リスクはサプライチェーンステップのどの部分が影響を受けるかを特定します (Source、Build、または Distribution)
- リスクドキュメントには、関与する特定のアーティファクトを含めることができます
- サプライチェーンを通したリスク伝播の可能性を文書化する必要があります
双方向トレーサビリティ
- サプライチェーンモデルコンポーネントは、関連する PSRR リスク項目にリンクし返す必要があります (上記のラベル参照)
- PSRR エントリは、影響を受けるサプライチェーンコンポーネントにリンクする必要があります
- サプライチェーンモデルへの更新は、関連する PSRR エントリのレビューをトリガーする必要があります
- サプライチェーンに関連する新しい PSRR リスクは、リスク登録時にこのモデルにマッピングされる必要があります
統一されたリスクアセスメントアプローチ
- リスクスコアリング方法論は、このモデルと PSRR で一貫している必要があります
- PSRR で文書化されたサプライチェーンリスクの軽減策は、このモデルのコントロールに整合する必要があります
- リスク受容判断は、サプライチェーングラフの完全なコンテキストを考慮する必要があります
この統合により、既存のセキュリティフレームワークを活用しつつ、サプライチェーン固有の脅威への深い可視性を提供する、サプライチェーンリスク管理への包括的なアプローチが保証されます。
このモデルの使い方
開発チーム向け
Note
以下の項目は将来/北極星のリクエストを表しており、現在の要件ではありません。アーティファクトのドキュメント
- 各新しいアーティファクトタイプについて、そのソースコンポーネントを文書化する
- アーティファクトを中央インベントリに登録する (https://gitlab.com/groups/gitlab-org/-/epics/16484 を参照)
コンプライアンス検証
- モデル要件に対する定期的な自己評価
- コントロール実装の証拠を文書化する
- 定期的なサプライチェーンレビューに参加する
セキュリティチーム向け
リスク監視とインテリジェンス
- 登録されたコンポーネントの継続的なリスク監視を実装する
- サプライチェーンエコシステム全体で定期的な脅威ハンティングを実施する
- サプライチェーン脅威インテリジェンスプログラムを維持する
- 検出された異常に対するリスク閾値とエスカレーション手順を確立する
リスクベースの監査サポート
- コンプライアンス目的のためのリスク証拠収集を維持する
- リスクアセスメントドキュメントで外部監査をサポートする
- チーム横断的なリスクコントロールの実装と有効性を検証する
- リスクに焦点を当てた監査ナラティブとドキュメントを開発する
リスクモデルの進化
- 新しい脅威と攻撃手法が出現するにつれてリスクモデルを更新する
- インシデントデータと運用フィードバックに基づいてリスク分類基準を洗練する
- 進化する SLSA 要件と業界の脅威の状況との整合を確保する
- サプライチェーンセキュリティのレジリエンスをテストするため、定期的にレッドチーム演習を実施する
リスク管理メトリクスと成功基準
Note
以下のメトリクスは将来/北極星の指標を表します。これらは現在追跡されておらず、変更される可能性があります。サプライチェーンリスク管理戦略の成功は、以下によって測定されます。
| メトリック | 可能な方法論 | 依存関係 |
|---|---|---|
| すべてのコンポーネントとアーティファクトにわたるリスクアセスメントカバレッジの完全性 | 各コンポーネントについて行われた脅威モデルを追跡する。 | GitLab パブリックアーティファクトのインベントリ |
| サプライチェーンセキュリティインシデントと脆弱性の定量化可能な削減 | サプライチェーンに関連するインシデントと脆弱性を追跡するための新しいラベルを作成する。 | AppSec チーム |
| サプライチェーン脅威の検出と対応の平均時間の短縮 | PSRR のリスクには修正 Issue がリンクされているはずですが、検出 Issue もリンクされる必要があります。 | PSRR |
| 文書化されたリスク削減を伴う、より高い SLSA レベルの段階的達成 | 実装された SLSA 要件 を追跡する。 | SLSA Level 3 サポートのためのこの Epic。 |
| 最小限の検出での外部セキュリティ監査の合格 | サプライチェーンに関連する検出をマッピングする。上記のカバレッジとループバックして、以前は不明だったリスクがログに記録されることを確認する。 | SecAssurance / AppSec |
| サプライチェーンリスクと依存関係の可視性と定量化の改善 | サプライチェーンの「行き止まり」(欠落情報) を追跡する。 | 各リスクが PSRR で正しくラベル付けされている、および GitLab パブリックアーティファクトのインベントリ |
| サプライチェーン内の重大および高リスクコンポーネントの数の削減 | 閾値以上のリスクスコアを持つコンポーネントの数。 | PSRR |
bfd74782)