ハードニングされた runner とは何か? 攻撃に耐えるように作られた CI マシン
ハードニングされた runner は、改ざんに抵抗し、job が到達できるものを制限し、次の job のために状態を残さないよう意図的に構成された CI マシンです。
runner は、完全には信頼できないかもしれない依存関係やプルリクエストのコードを含め、パイプラインが指示するものを何でも実行します。ハードニングされた runner は、そのコードの一部が敵対的かもしれないと想定し、被害を制限するように作られています。厳格なデフォルト、制限されたネットワークアクセス、監視、そして永続的な状態の排除です。それは、柔らかい標的と要塞化された標的の違いです。
ハードニングに含まれるもの
- 全能のユーザーとしてではなく、最小権限で job を実行する。
- 予期しない外向き接続をブロックする egress フィルタリング。
- 異常なプロセスとネットワークの挙動を監視する。
- 共有状態のないエフェメラルで分離された環境。
デフォルトの runner が危険な理由
長命で広範な権限を持つ runner は魅力的な標的です。多くの job を見て、強力な認証情報を保持し、状態を永続化します。1 つの job の侵害が次を汚染したり、複数の実行にまたがってシークレットを収集したりできます。ハードニングはそうした余地を取り除きます。
egress フィルタリングと監視
最も効果的なコントロールの 2 つは、job がデータを送れる先を制限すること (exfiltration が失敗するように) と、疑わしい挙動を監視すること (build ステップが突然、これまで開いたことのないネットワーク接続を開くなど) です。両者を合わせると、多くのサプライチェーン攻撃を実行中に捉えてブロックします。
分離とエフェメラリティ
ハードニングされた runner は各 job に新しい分離された環境を与え、その後に破棄します。この単一の特性が、一連の攻撃を打ち破ります。侵害された job は永続化できず、他の job のシークレットを read できず、将来の build を改ざんできません。
managed なデフォルトとしてのハードニング
セルフホストのフリートをハードニングするのは継続的な作業です。設計上分離されエフェメラルな managed runner (Latchkey など) は、チームがメンテナンスすることなく、中核となるハードニング、job ごとの新しい環境、共有状態なし、縮小された攻撃対象領域を提供します。
重要なポイント
- ハードニングされた runner は改ざんに抵抗し、敵対的なコードからの被害を封じ込めます。
- 最小権限、egress フィルタリング、監視、分離が中核となるコントロールです。
- エフェメラルで分離された環境は、永続化と job 間のシークレット窃取を打ち破ります。