あなたのKubernetesオートメーションはあなたに対して機能している可能性があります。悪意のあるコントローラは再起動を生き残り、目に見えるところに隠れている「ゴースト」サイドカーを作成します。
クラウドネイティブ環境を保護する私の長年の経験の中で、繰り返し発生するブラインドスポットに気づきました。私たちは公開されたダッシュボード、設定が間違ったRBAC、またはパッチが適用されていないコンテナの脆弱性など、「フロントドア」を執拗に気にします。周辺をハードニングしますが、内部で鳴り響いている機械を無視することがよくあります。
高度な攻撃者は単純な強盗戦術を超えて移動しました。彼らは数時間暗号マイナーを実行したいだけではありません。永続性が欲しいのです。ノードの再起動、ポッドの再起動、またはクラスターのアップグレードさえも生き残る足がかりが欲しいのです。
この永続性のための最も危険で見落とされているメカニズムは、Kubernetesコントローラパターンです。悪意のあるコントローラを侵害または登録することで、攻撃者はクラスターの独自のオートメーションをそれに対して使用し、検出が非常に難しい自己修復バックドアを作成します。これはクラウド時代のための究極の「土地に住む」技術です。
制御ループの兵器化
その本質において、Kubernetesはオートメーションエンジンです。それは常に望ましい状態(YAML)を実際の状態(実行中のポッド)と比較し、その違いを調整します。このロジックはコントローラに存在します。
悪意のあるコントローラは、クラスターイベントに登録することで機能します。アプリケーションを展開する代わりに、新しいネームスペースの作成や特定のシークレットの展開など、特定のトリガーを監視し、自動的に悪意のあるコードを注入します。
シナリオ:「シャドウ」サイドカーインジェクタ
私たちはこれがPalo Alto Networks Unit 42によって明かされた洗練されたマルウェアキャンペーンであるSiloscopeで実際に展開されるのを目撃しました。典型的なcryptoジャッキングスクリプトとは異なり、Siloscopeは単にコンピュートリソースを望んでいませんでした。クラスター自体を望んでいました。Windowsコンテナをターゲットにし、基盤となるノードにエスケープし、ノードの認証情報を使用してAPIサーバー経由で拡散しました。
同様に、TeamTNTグループは、永続性のためにkubelet APIを悪用するためにHildegardマルウェアを使用していることが文書化されています。これらは理論的な教室の演習ではありません。攻撃者がコントロールプレーンを兵器化してKubernetesを所有者に対して使用した文書化されたキャンペーンです。
クラスターのAPIサーバーへの限定的な書き込みアクセスを取得した攻撃者を考えてください。このアクセスは、侵害されたCI/CDパイプライン認証情報または、MutatingWebhookConfigurationを作成するのに十分な許可を持っているがフルクラスター管理者権限を持たない開発者のリークされたkubeconfigから来ているかもしれません。攻撃者は直接ワークロードを展開する必要がありません。彼らはAPIサーバーに他のすべてのワークロードでそのロジックを実行するよう指示する必要があるだけです。
mining-rigという目立つ名前のポッドを起動する代わりに、彼らはMutatingAdmissionWebhookを登録します。

ニランジャン・クマール・シャルマ
図1に示すように、このウェブフックはコントローラとして機能します。正当なポッドが作成されるたびに(例えば、支払いサービス)、APIサーバーはポッドの定義をetcdに永続化する前に承認のために攻撃者のウェブフックに送信します。ウェブフックはポッド仕様を変更して、悪意のあるサイドカーコンテナを注入します。
隠れた危険:
- kubectlで見えません:悪意のあるサイドカーはしばしばポッド仕様の深くに隠されており、攻撃者がproxy-agentのような一般的な名前を使用する場合、正当なメッシュトラフィックに溶け込みます。
- クリーンアップを生き残ります:侵害されたポッドを削除した場合、デプロイメントコントローラは新しいものを作成します。新しいものがウェブフックをトリガーし、バックドアが再注入されます。永続性はクラスター自体のライフサイクルに組み込まれています。
脅威のマッピング:このテクニックは、MITRE ATT&CK for Containersマトリックスの永続性(TA0003)にマップします。これは特にアクセスを維持するためにクラスターの独自の制御ループを利用しており、従来のシェルベースのバックドアよりもはるかに回復力があります。
APIのゴーストを狩る
これをキャッチするには、標準ログを超えて見る必要があります。クラスターのコントロールプレーン構成を監査する必要があります。
1. MutatingWebhookConfigurationsを監査します
このコマンドを実行して、ポッド作成を誰が傍受しているかを確認します:
kubectl get mutatingwebhookconfigurations
外部URLまたは認識していないネームスペース内のサービスを指すウェブフックを探します(例えば、kube-publicまたはdefault)。compliance-checkという名前のウェブフックがVPC外のIPアドレスを指しているのを見た場合、それを大きな赤旗として扱います。
2. RoleBindingの変更を監視します
コントローラはアクセス許可が必要です。悪意のあるコントローラはダメージを与えるためにServiceAccountを持つ必要があります。監査ログで、SecretsまたはPodsに対する監視またはリスト許可を与える新しいRoleBindingsを監視してください。
3. 異常なOwnerReferencesを確認します
KubernetesオブジェクトはOwnerReferencesをガベージコレクションに使用します。存在しないコントローラが所有していると主張するポッド、または標準的なデプロイメントパターンと一致しないポッドが表示される場合、直ちに調査します。
機械をロックダウンします
コントローラベースの永続性を防ぐには、クラスターの機械へのアクセスを制限する必要があります。
- ウェブフック登録を制限します:Kubernetes RBACを使用して、クラスター管理者(特にCI/CDパイプライン識別子)のみがMutatingWebhookConfigurationsを作成または変更できることを確認します。開発者はこの許可を持つべきではありません。
- コントロールプレーン用のネットワークポリシー:自己管理のコントロールプレーンを実行している場合は、APIサーバーが既知のホワイトリストに登録されているウェブフックエンドポイントとのみ通信できることを確認してください。
- 画像に署名します:KyvernoまたはOPA Gatekeeperなどのアドミッション制御を使用して、注入されたサイドカーを含むポッド内のすべてのコンテナイメージが組織の信頼できるキーで署名されていることを確認します。
最終的な考え
Kubernetesクラスターが成熟するにつれて、攻撃者はスタックを上に移動しています。彼らはもう単純なコンテナエスケープに満足していません。オーケストレーションレイヤー自体を対象にしています。
Kubernetesコントローラパターンは、オートメーションと自己修復を提供するため、強力です。攻撃者の手に、これらの同じプロパティは永続的で回復力のある足がかりを作成します。APIサーバーを信頼できるブラックボックスとして扱うのをやめて、クラスターを接着するウェブフックを監査し始める必要があります。
この記事はFoundry Expert Contributor Networkの一部として公開されています。
参加したいですか?
翻訳元: https://www.csoonline.com/article/4151367/why-kubernetes-controllers-are-the-perfect-backdoor.html