サプライチェーン
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セキュリティのベストプラクティス
- パイプライン定義を本番コードとして扱う。ワークフローファイルにはレビューを必須とし、信頼できないプルリクエストをシークレットから遠ざけます。
- 各ジョブができることを制限する。トークンには必要最小限の権限を与え、保存されたシークレットよりも短期間の認証情報を優先します。
- サードパーティのアクションをコミットハッシュで固定する。タグは別のコードに付け替えられる可能性があります。
- ジョブを隔離する。各ジョブを新しい環境で実行し、次のジョブに何も引き継がれないようにします。
- 外向きの通信を制御する。ビルドに必要なのは既知のソースと既知の送信先です。それ以外をすべてブロックすれば、盗まれたシークレットの持ち出しを防げます。GitHub Actionsのエグレスポリシーをご覧ください。
- 何が起きたかを記録する。各ビルドの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はトークンの権限設定やシークレットスキャンなどの制御を提供していますが、それらは自分で設定する必要があり、ホスト型ランナーはデフォルトでは外向きの通信を制限しません。多くのチームは、アクションの固定、レビュールール、ランナーの制御を追加しています。