CurrentStack
#security#supply-chain#ci/cd#devops#compliance

GitHub Actionsタグ改ざんに備える: CIサプライチェーン侵害のインシデント対応プレイブック

参考: https://news.ycombinator.com/

CIのサプライチェーン侵害は、もはや例外的事故ではありません。GitHub Actionsタグの改ざん、依存物汚染、artifact経路の悪用によって、日常の自動化が攻撃チャネルに反転します。難しいのは検知そのものより、不確実性が高い状況で停止判断と復旧判断をどう切るかです。

前提: workflowの信頼は“取り消し可能”とみなす

タグ参照は便利ですが可変です。インシデント時には、mutable参照を全て暫定不信として扱うべきです。

初動で実施する統制:

  • 非クリティカルなデプロイを一時停止
  • 外部action参照をcommit SHA固定へ切り替え
  • CIで使う高権限トークンを即時失効・再発行

まず解析のための安全な時間を確保します。

実行事実ベースで時系列を再構成する

推測より先に、workflow証跡を順序立てて集めます。

  1. run IDと実行時刻
  2. 実行時に解決されたaction参照
  3. runner種別(hosted/self-hosted)と外向き通信ログ
  4. その時点で有効だったsecretと権限スコープ

攻撃者意図を先に決めると、証拠解釈が歪みます。

シークレット漏えい評価の実務

全runを同一危険度で扱うと対応が遅れます。次で層別化します。

  • ジョブ文脈で参照可能だったsecret
  • そのsecretが外部操作可能な権限を持つか
  • ログ/artifactに不審エンコードや送信痕跡があるか

影響tier順にローテーションし、高影響資格情報は漏えい確度が低くても先行更新します。

self-hosted runner隔離の原則

self-hosted runnerは柔軟ですが、侵害時の影響範囲が広がります。

  • 該当runnerグループを即時隔離
  • キャッシュ済みツールチェーン/レイヤーを破棄
  • 既知良性イメージから再構築し整合性を証明

再イメージなしで復帰させるのは典型的な再発要因です。

連絡系統を分離する

情報混線を防ぐため、受け手別にチャネルを分けます。

  • 経営/ステータス向け: 影響範囲と事業リスク
  • 技術対応向け: 封じ込めタスクと証拠収集
  • CS/法務向け: 開示要件と対外説明タイムライン

1チャネル混在は、技術対応も対外説明も遅らせます。

封じ込め後の恒久対策

復旧後に入れるべき統制を明文化します。

  • SHA固定を必須化し、CIで逸脱を拒否
  • 許可actionレジストリとオーナー情報管理
  • 長期秘密鍵からOIDC短命資格情報へ移行
  • provenance/attestation検証をゲート化

“気をつける”ではなく、技術的に通らない状態を作ります。

復旧判定基準

デプロイ再開前に、明確な復旧条件を満たす必要があります。

  • 重要secretの再発行・疎通検証完了
  • runner群の再構築またはクリーン証明
  • 不審参照の排除確認
  • 追加検知ルールの稼働確認

「CIが緑に戻った」だけでは安全証明になりません。

組織的な学びを残す

多くの事故は、技術だけでなく所有権設計の欠落を示します。

  • workflow依存のオーナー不在
  • CIトークン権限過大
  • 監査証跡保持不足

事後レビューで責任者と測定指標を明確化し、次回の初動時間短縮につなげます。

まとめ

タグ改ざんインシデントは、DevSecOps成熟度の実地試験です。信頼を素早く取り消し、実行事実を再構成し、より強い統制で配信能力を回復できる組織ほど、被害と信用毀損を最小化できます。

おすすめ記事