Skip to content
Latchkey

CIにおけるegressフィルタリングとは何か? buildの接続先を制御する

egressフィルタリングは、CIジョブがデータを送信できる先を制限します。これによりbuildは必要なサービスに到達できますが、secretを攻撃者に流出させることはできません。

ほとんどのセキュリティはbuildに何が入るかに焦点を当てます。egressフィルタリングは何が出ていくかに焦点を当てます。secretを盗む侵害された依存関係も、それをどこかに送信しなければなりません。egressフィルタリングはその最終ステップを失敗させます。既知の安全な宛先への接続のみを許可することで、成功した窃盗を無意味なものに変えます。

流出の問題

悪意のあるパッケージは、あなたのsecretをミリ秒単位で読み取れます。被害が生じるのは、それを外部へ、攻撃者のURLやIPへ送り出したときだけです。buildがその宛先に到達できなければ、secretは決して出ていかず、攻撃は最後のステップで無力化されます。

egressフィルタリングの仕組み

  • buildが正当に必要とする宛先のallowlistを定義する。
  • それ以外のすべての送信接続をデフォルトでブロックする。
  • リスト外への到達の試みをログ記録またはアラートする。
  • 正当な依存関係が判明するにつれてallowlistを調整する。

allowlist対blocklist

blocklistは、攻撃者が新しい宛先を使うため失敗します。default-denyのallowlistが堅牢なアプローチです。buildはあなたのregistry、cloud、パッケージミラーとは通信できますが、それ以外とはできません。予期しないものはすべてブロックされ、表面化します。

攻撃を現行犯で捕らえる

ブロックすることに加えて、egressフィルタリングは検知シグナルです。あるbuildステップが突然未知のホストに到達しようとするのは、侵害の強い兆候であり、流出の最中にある汚染された依存関係です。そのアラートは、次のbuildが実行される前に調査を引き起こせます。

ランナーでのegress制御

egressフィルタリングはランナーまたはネットワーク境界に存在する必要があり、寄せ集めのself-hostedフリートに後付けするのは困難です。管理された分離済みランナーは、堅牢化された環境の一部としてjobごとにネットワークポリシーを強制できるので、各チームがfirewallを配線しなくても流出がブロックされます。

重要なポイント

  • egressフィルタリングはCIジョブがデータを送信できる先を制御し、流出をブロックします。
  • default-denyのallowlistは、攻撃者の新しい宛先に対してblocklistより優れています。
  • ブロックされたegressの試みは、侵害の検知シグナルとしても機能します。

関連ガイド