2026年に報告されたCVEは、1日あたり前年比131%増加しています。

サプライチェーン

CI/CDセキュリティ

CI/CDセキュリティとは、ソフトウェアをビルド、テスト、出荷するパイプラインを保護する取り組みです。パイプラインはさまざまな出どころのコードを実行し、本番環境のシークレットを保持し、顧客がインストールするものを生み出します。そのため社内で最も価値の高い標的の1つでありながら、多くの場合、最も監視が手薄なものの1つでもあります。

更新日

パイプラインが狙われる理由

  • 鍵を握っている。クラウドの認証情報、レジストリのトークン、署名鍵はすべてCIを通過します。
  • 他人のコードを実行する。すべての依存関係、インストールスクリプト、サードパーティのアクションがランナー上で実行されます。
  • 本番環境に届く。パイプラインから出てきたものは信頼され、署名され、出荷されます。ビルドに侵入した攻撃者は、すべての顧客に一度に到達します。
  • 監視する人が少ない。ワークフローファイルはめったに変更されず、アプリケーションコードほどレビューされません。

tj-actionsの侵害もShai-Hulud npmワームも、CI内のシークレットを狙ったものでした。こうした攻撃がどのように展開するかは、サプライチェーン攻撃とはをご覧ください。

CI/CDセキュリティの主なリスク

標準的な参考資料はOWASP Top 10 CI/CD Security Risksです。何が問題になるかで分類すると、次のとおりです。

領域 OWASPのリスク 典型的な状況
誰が何を変更できるか 不十分なフロー制御、不適切なIDおよびアクセス管理 レビューなしでコードが本番環境に届く、または古いアカウントがアクセス権を持ち続ける
パイプラインで何が実行されるか 依存関係チェーンの悪用、ポイズンドパイプライン実行 悪意あるパッケージや改変されたワークフローが、ジョブの権限で実行される
ジョブが何に到達できるか 不十分なパイプラインベースのアクセス制御、不十分な認証情報の衛生管理 1つのジョブがすべてのシークレットを読み取れ、トークンが何年も有効なまま
どのように構成されているか 安全でないシステム構成、サードパーティサービスの無秩序な利用 パッチが適用されていないランナー、必要以上の権限を持つ連携
何を証明できるか 不適切な成果物の完全性検証、不十分なログ記録と可視性 リリースに何が入ったか、ジョブがどこに接続したかを誰も説明できない

各リスクとランナーの制御との対応は、ランナーセキュリティの比較をご覧ください。

CI/CDセキュリティのベストプラクティス

  1. パイプライン定義を本番コードとして扱う。ワークフローファイルにはレビューを必須とし、信頼できないプルリクエストをシークレットから遠ざけます。
  2. 各ジョブができることを制限する。トークンには必要最小限の権限を与え、保存されたシークレットよりも短期間の認証情報を優先します。
  3. サードパーティのアクションをコミットハッシュで固定する。タグは別のコードに付け替えられる可能性があります。
  4. ジョブを隔離する。各ジョブを新しい環境で実行し、次のジョブに何も引き継がれないようにします。
  5. 外向きの通信を制御する。ビルドに必要なのは既知のソースと既知の送信先です。それ以外をすべてブロックすれば、盗まれたシークレットの持ち出しを防げます。GitHub Actionsのエグレスポリシーをご覧ください。
  6. 何が起きたかを記録する。各ビルドのSBOMとネットワーク活動のログを残し、後から問いに答えられるようにします。

手順ごとの版は、CI/CDパイプラインセキュリティチェックリストをご覧ください。

CI/CDセキュリティツールの種類

種類 役割 例
ランナーセキュリティ ジョブを隔離し、実行中の到達先を制御する CRACI、StepSecurity
ポスチャー管理 リスクのあるパイプラインやリポジトリの設定を見つける Legit Security、Cycode、Apiiro、OX Security
コードと依存関係のスキャン 変更ごとにコード、依存関係、シークレットをチェックする GitHub Advanced Security、Snyk、Semgrep
SBOMとエビデンス 各リリースに何が入ったかを記録する CRACI、Syft、Anchore

これらは異なる段階で機能するため、多くのチームは組み合わせて使います。スキャナーはビルド前にファイルを調べ、ポスチャー管理ツールは設定を調べ、ランナーセキュリティはジョブの実行中、つまり悪意あるパッケージが動き出すその時に機能します。ソフトウェアサプライチェーンセキュリティツールの比較とDevSecOpsツールの比較をご覧ください。

CRACIの役割

CRACIは、実行中のビルドを保護します。GitHubホステッドランナーを、より高速で低コストなランナーに置き換えます。各ジョブはそれぞれ隔離された仮想マシンで実行され、エグレスポリシーがビルドに不要な接続をブロックし、ジョブが取得したすべてのパッケージがSBOMに記録されます。ポリシーはビルドに必要なものだけを許可するため、誰も見たことのない攻撃からも保護します。

CRACIはワークフローの構成チェック、ソースコードやシークレットのスキャン、来歴への署名は行いません。それらについては既存のツールを使い続けるか、追加してください。現在サポートしているCIシステムはGitHub Actionsで、その他のCIシステムはロードマップに掲載されています。

CI/CDセキュリティのよくあるご質問

CI/CDセキュリティとは何ですか?

ソフトウェアをビルド、テスト、出荷するパイプラインを、その認証情報、実行するコード、生成する成果物を含めて保護する取り組みです。

CI/CDセキュリティの最大のリスクは何ですか?

悪意ある依存関係やサードパーティのアクション、ポイズンドパイプライン、過剰な権限を持つトークンや長期間有効なシークレット、そしてビルドが何をしたかの可視性の欠如です。標準的なリストはOWASP Top 10 CI/CD Security Risksです。

ポイズンドパイプライン実行とは何ですか?

攻撃者がパイプラインの実行内容を変更することです。たとえばプルリクエストを通じてワークフローファイルや、そこから呼び出されるスクリプトを編集し、自分のコードをパイプラインの権限で実行させます。

CI/CDパイプラインはどのように保護すればよいですか?

パイプラインの変更をレビューし、各ジョブに必要最小限のアクセス権を与え、サードパーティのアクションをコミットハッシュで固定し、ジョブを隔離し、外向きの通信を制限し、各ビルドが何をしたかの記録を残します。

CI/CDセキュリティとDevSecOpsの違いは何ですか?

DevSecOpsは、ソフトウェア開発のあり方にセキュリティを組み込む、より広い取り組みです。CI/CDセキュリティはパイプラインそのものに焦点を当てており、DevSecOpsのツールもそのパイプラインに依存しています。

GitHub Actionsには追加のセキュリティが必要ですか?

GitHubはトークンの権限設定やシークレットスキャンなどの制御を提供していますが、それらは自分で設定する必要があり、ホスト型ランナーはデフォルトでは外向きの通信を制限しません。多くのチームは、アクションの固定、レビュールール、ランナーの制御を追加しています。

実行中のビルドを保護

GitHub ActionsのワークフローをCRACIに移行すれば、隔離されたジョブ、エグレス制御、すべてのビルドのSBOMが得られます。

デモを予約