Content last updated 2025-04-25

サプライチェーンリスク管理戦略

このページでは、ソフトウェア開発ライフサイクル全体にわたるリスクを特定、評価、軽減するための構造化されたフレームワークを提供しながら、より高い SLSA 準拠レベルへ前進することを目指す GitLab のサプライチェーンリスク管理への包括的なアプローチを説明します。

はじめに

このページでは、私たちのソフトウェアサプライチェーン内のリスクを特定、評価、軽減するための GitLab の包括的な戦略について説明します。私たちのリスクベースのアプローチは、自社データと顧客データの両方を保護しつつ、Supply chain Levels for Software Artifacts (SLSA) 準拠の段階的により高いレベルへ前進するように設計されています。

目標と目的

  • サプライチェーン全体を通して GitLab の内部データ資産に対するリスクを特定し軽減する
  • ソフトウェア提供パイプラインの整合性とセキュリティを確保することで、顧客データを保護する
  • リスクに焦点を当てた改善を通して、SLSA 準拠の段階的により高いレベルを達成し維持する
  • サプライチェーンの脅威と脆弱性を検出するための包括的な可視性とトレーサビリティを確立する
  • 新たなサプライチェーンの脅威に対処するためのプロアクティブなリスク管理フレームワークを実装する
  • サプライチェーン攻撃面を削減するための測定可能なアプローチを作成する
  • 構造化されたサプライチェーンリスクデータと分析で Product Security Risk Register (PSRR) をサポートし強化する

サプライチェーンコンポーネントモデル

サプライチェーンの複雑性を分解する

GitLab の完全なサプライチェーンは、単一の包括的な図で表すには複雑すぎます。代わりに、再帰的なモデルを使用して、この複雑性を管理可能なコンポーネントに分解します。

  • 各アーティファクトには独自のサプライチェーンがあります
  • 各アーティファクトのサプライチェーンは、独自のサプライチェーンを持つ他のアーティファクトに依存する場合があります
  • これにより以下のような有向グラフ構造が作成されます:
    • ルートノードは配布されるアーティファクト (最終製品) です
    • 内部ノードは中間アーティファクトとコンポーネントです
    • 葉ノードは私たちのサプライチェーンの境界を表します (外部コンポーネント)

私たちは、GitLab の直接的な制御内にあるアーティファクトとコンポーネントに、インベントリと管理の取り組みを集中します。外部コンポーネント (葉ノード) については、それらの起源と基本的なメタデータを追跡しますが、現段階ではそれらのサプライチェーン全体を文書化することは試みません。

SLSA サプライチェーンモデル

私たちは、保護すべき 3 つの主要領域を定義する SLSA フレームワーク (Specification 1.1) に合わせてサプライチェーン追跡を整合させています。

SLSA Supply Chain Model

このモデルは、私たちが追跡するコアステップを示しています。

  1. Source: コードが作成、レビュー、保存される場所
  2. Build: ソースがパッケージ/アーティファクトに変換される場所
  3. 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 コアステップには、ソースコードを変換 (コンパイル、リンティングなど) してアーティファクトを生成できるすべてのものが含まれます。

コンポーネントタイプサブタイプラベル
CI/CD(以下のすべてのサブタイプを包含)~sscs-rm-component:build:ci-cd
GitLab Runners~sscs-rm-component:build:gitlab-runners
CI/CD テンプレート~sscs-rm-component:build:ci-templates
CI/CD コンポーネント~sscs-rm-component:build:ci-components
ビルドイメージ(以下のすべてのサブタイプを包含)~sscs-rm-component:build:build-images
Base Docker イメージ~sscs-rm-component:build:base-docker-images
中間イメージ~sscs-rm-component:build:intermediate-images
コンテナビルドツール~sscs-rm-component:build:container-build-tools
コンテナレジストリ~sscs-rm-component:build:container-registry
ランタイム依存関係(以下のすべてのサブタイプを包含)~sscs-rm-component:build:runtime-dependencies
Ruby Gems~sscs-rm-component:build:ruby-gems
NPM パッケージ~sscs-rm-component:build:npm-packages
Go モジュール~sscs-rm-component:build:go-modules
Python パッケージ~sscs-rm-component:build:python-packages
その他言語固有の依存関係~sscs-rm-component:build:other-packages
シークレット(以下のすべてのサブタイプを包含)~sscs-rm-component:build:secrets
Vault~sscs-rm-component:build:vault
CI/CD 変数~sscs-rm-component:build:ci-variables
キー管理システム~sscs-rm-component:build:key-management
証明機関~sscs-rm-component:build:certificate-authorities
署名インフラ~sscs-rm-component:build:signing-infra

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 でモデルの要素をリスクにリンクするために使用される 一連の脅威を定義しています

SLSA Threats

脅威領域脅威説明ラベル
Source(A) Producerソフトウェア製造者が意図的に悪意のあるソースリビジョンを作成する~sscs-rm-threat::a-malicious-source
(B) Modifying the source -> (B1) Submit change without reviewレビューなしで直接送信する~sscs-rm-threat::b1-submit-without-review
単一のアクターが複数のアカウントを制御する~sscs-rm-threat::b1-actor-controls-multiple-accounts
ロボットアカウントを使用して変更を送信する~sscs-rm-threat::b1-robot-account-submit
ルール例外の悪用~sscs-rm-threat::b1-abuse-rule-exceptions
高権限のアクターがコントロールをバイパスまたは無効化する~sscs-rm-threat::b1-bypass-controls
(B) Modifying the source -> (B2) Evade change management processレビュー後にコードを変更する~sscs-rm-threat::b2-modify-after-review
レビュー不可能な変更を送信する~sscs-rm-threat::b2-unreviewable-change
レビューされた変更を別のコンテキストにコピーする~sscs-rm-threat::b2-copy-to-another-context
コミットグラフ攻撃~sscs-rm-threat::b2-commit-graph-attacks
(B) Modifying the source -> (B3) Render code review ineffective別の信頼された人と共謀する~sscs-rm-threat::b3-collusion
レビュアーをだまして悪意のあるコードを承認させる~sscs-rm-threat::b3-trick-reviewer
レビュアーが盲目的に変更を承認する~sscs-rm-threat::b3-blind-approval
(B) Modifying the source -> (B4) Render change metadata ineffective変更メタデータを偽造する~sscs-rm-threat::b4-forge-metadata
(C) Source code managementプラットフォーム管理者が特権を悪用する~sscs-rm-threat::c-admin-abuse
SCM の脆弱性を悪用する~sscs-rm-threat::c-exploit-scm-vulnerability
Build(D) External build parametersコードの非公式フォークからビルドする~sscs-rm-threat::d-unofficial-fork
非公式ブランチまたはタグからビルドする~sscs-rm-threat::d-unofficial-branch
非公式のビルドステップからビルドする~sscs-rm-threat::d-unofficial-steps
非公式のパラメーターからビルドする~sscs-rm-threat::d-unofficial-parameters
チェックアウト後に変更されたコードからビルドする~sscs-rm-threat::d-modified-after-checkout
(E) Build process出所値 (出力ダイジェスト以外) を偽造する~sscs-rm-threat::e-forge-provenance-values
出所の出力ダイジェストを偽造する~sscs-rm-threat::e-forge-output-digest
プロジェクトオーナーを侵害する~sscs-rm-threat::e-compromise-owner
他のビルドを侵害する~sscs-rm-threat::e-compromise-other-build
暗号化シークレットを盗む~sscs-rm-threat::e-steal-secrets
ビルドキャッシュに毒を盛る~sscs-rm-threat::e-poison-cache
ビルドプラットフォーム管理者を侵害する~sscs-rm-threat::e-compromise-platform-admin
(F) Artifact publication信頼されない CI/CD でビルドする~sscs-rm-threat::f-untrusted-cicd
出所なしでパッケージをアップロードする~sscs-rm-threat::f-upload-without-provenance
CI/CD 後にアーティファクトを改ざんする~sscs-rm-threat::f-tamper-after-cicd
出所を改ざんする~sscs-rm-threat::f-tamper-with-provenance
(G) Distribution channel信頼されない CI/CD でビルドする~sscs-rm-threat::g-untrusted-cicd
信頼されない仲介者から VSA を発行する~sscs-rm-threat::g-untrusted-vsa
出所または VSA なしでパッケージをアップロードする~sscs-rm-threat::g-upload-without-verification
パッケージと VSA を別のものに置き換える~sscs-rm-threat::g-replace-package-vsa
アップロード後にアーティファクトを改ざんする~sscs-rm-threat::g-tamper-after-upload
出所または VSA を改ざんする~sscs-rm-threat::g-tamper-verification
Usage(H) Package selection依存関係の混乱~sscs-rm-threat::h-dependency-confusion
タイポスクワッティング~sscs-rm-threat::h-typosquatting
(I) Usage不適切な使用~sscs-rm-threat::i-improper-usage
DependencyBuild dependency脆弱な依存関係を含める~sscs-rm-threat::dep-vulnerable-dependency
侵害されたビルドツールを使用する~sscs-rm-threat::dep-compromised-build-tool
ビルド中に侵害されたランタイム依存関係を使用する~sscs-rm-threat::dep-compromised-runtime-dependency

Product Security Risk Register との統合

サプライチェーンリスク管理戦略は、Product Security Risk Register (PSRR) の重要な基盤として機能します。PSRR で特定された各サプライチェーン関連リスクは、このサプライチェーンモデル内の特定の要素にリンクされる必要があります。

  1. リスクマッピング要件

    • PSRR のすべてのサプライチェーンリスクは、このモデルから特定のコンポーネントを参照する必要があります
    • 拡張すると、リスクはサプライチェーンステップのどの部分が影響を受けるかを特定します (Source、Build、または Distribution)
    • リスクドキュメントには、関与する特定のアーティファクトを含めることができます
    • サプライチェーンを通したリスク伝播の可能性を文書化する必要があります
  2. 双方向トレーサビリティ

    • サプライチェーンモデルコンポーネントは、関連する PSRR リスク項目にリンクし返す必要があります (上記のラベル参照)
    • PSRR エントリは、影響を受けるサプライチェーンコンポーネントにリンクする必要があります
    • サプライチェーンモデルへの更新は、関連する PSRR エントリのレビューをトリガーする必要があります
    • サプライチェーンに関連する新しい PSRR リスクは、リスク登録時にこのモデルにマッピングされる必要があります
  3. 統一されたリスクアセスメントアプローチ

    • リスクスコアリング方法論は、このモデルと PSRR で一貫している必要があります
    • PSRR で文書化されたサプライチェーンリスクの軽減策は、このモデルのコントロールに整合する必要があります
    • リスク受容判断は、サプライチェーングラフの完全なコンテキストを考慮する必要があります

この統合により、既存のセキュリティフレームワークを活用しつつ、サプライチェーン固有の脅威への深い可視性を提供する、サプライチェーンリスク管理への包括的なアプローチが保証されます。

このモデルの使い方

開発チーム向け

  1. アーティファクトのドキュメント

  2. コンプライアンス検証

    • モデル要件に対する定期的な自己評価
    • コントロール実装の証拠を文書化する
    • 定期的なサプライチェーンレビューに参加する

セキュリティチーム向け

  1. リスク監視とインテリジェンス

    • 登録されたコンポーネントの継続的なリスク監視を実装する
    • サプライチェーンエコシステム全体で定期的な脅威ハンティングを実施する
    • サプライチェーン脅威インテリジェンスプログラムを維持する
    • 検出された異常に対するリスク閾値とエスカレーション手順を確立する
  2. リスクベースの監査サポート

    • コンプライアンス目的のためのリスク証拠収集を維持する
    • リスクアセスメントドキュメントで外部監査をサポートする
    • チーム横断的なリスクコントロールの実装と有効性を検証する
    • リスクに焦点を当てた監査ナラティブとドキュメントを開発する
  3. リスクモデルの進化

    • 新しい脅威と攻撃手法が出現するにつれてリスクモデルを更新する
    • インシデントデータと運用フィードバックに基づいてリスク分類基準を洗練する
    • 進化する SLSA 要件と業界の脅威の状況との整合を確保する
    • サプライチェーンセキュリティのレジリエンスをテストするため、定期的にレッドチーム演習を実施する

リスク管理メトリクスと成功基準

サプライチェーンリスク管理戦略の成功は、以下によって測定されます。

メトリック可能な方法論依存関係
すべてのコンポーネントとアーティファクトにわたるリスクアセスメントカバレッジの完全性各コンポーネントについて行われた脅威モデルを追跡する。GitLab パブリックアーティファクトのインベントリ
サプライチェーンセキュリティインシデントと脆弱性の定量化可能な削減サプライチェーンに関連するインシデントと脆弱性を追跡するための新しいラベルを作成する。AppSec チーム
サプライチェーン脅威の検出と対応の平均時間の短縮PSRR のリスクには修正 Issue がリンクされているはずですが、検出 Issue もリンクされる必要があります。PSRR
文書化されたリスク削減を伴う、より高い SLSA レベルの段階的達成実装された SLSA 要件 を追跡する。SLSA Level 3 サポートのためのこの Epic
最小限の検出での外部セキュリティ監査の合格サプライチェーンに関連する検出をマッピングする。上記のカバレッジとループバックして、以前は不明だったリスクがログに記録されることを確認する。SecAssurance / AppSec
サプライチェーンリスクと依存関係の可視性と定量化の改善サプライチェーンの「行き止まり」(欠落情報) を追跡する。各リスクが PSRR で正しくラベル付けされている、および GitLab パブリックアーティファクトのインベントリ
サプライチェーン内の重大および高リスクコンポーネントの数の削減閾値以上のリスクスコアを持つコンポーネントの数。PSRR