GCP - Network Docker Escape
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
この技術が指定されている両方のレポートで、攻撃者はGCPによって管理されているDockerコンテナ内でrootアクセスを取得し、ホストネットワークへのアクセス(および**CAP_NET_ADMIN
とCAP_NET_RAW
**の権限)を持っていました。
Google Compute Engineインスタンスでは、ネットワークトラフィックの定期的な検査により、メタデータインスタンスへの多数の平文HTTPリクエストが明らかになります。オープンソースサービスであるGoogle Guest Agentは、頻繁にそのようなリクエストを行います。
このエージェントはメタデータの変更を監視するように設計されています。特に、メタデータにはSSH公開鍵用のフィールドが含まれています。新しい公開SSH鍵がメタデータに追加されると、エージェントは自動的にそれを.authorized_key
ファイルに認証します。また、必要に応じて新しいユーザーを作成し、sudoersに追加することもあります。
エージェントは、すべてのメタデータ値を再帰的に取得するリクエストを送信することで変更を監視します(GET /computeMetadata/v1/?recursive=true
)。このリクエストは、前回の取得以降にメタデータに変更があった場合のみ、メタデータサーバーが応答を送信するように設計されています。これはEtag(wait_for_change=true&last_etag=
)によって識別されます。さらに、タイムアウトパラメータ(timeout_sec=
)も含まれています。指定されたタイムアウト内に変更が発生しない場合、サーバーは変更されていない値で応答します。
このプロセスにより、IMDS(インスタンスメタデータサービス)は、構成変更が発生しなかった場合に60秒後に応答することができ、ゲストエージェントに対して偽の構成応答を注入する潜在的なウィンドウを作成します。
攻撃者は、Man-in-the-Middle (MitM)攻撃を実行し、IMDSサーバーからの応答を偽装し、新しい公開鍵を挿入することでこれを悪用できます。これにより、ホストへの不正なSSHアクセスが可能になります。
ARPスプーフィングはGoogle Compute Engineネットワークでは効果がありませんが、rshijackの修正版を使用して、SSHユーザーを注入するためのパケット注入が可能です。
このrshijackのバージョンは、ACKおよびSEQ番号をコマンドライン引数として入力できるため、実際のメタデータサーバーの応答の前に応答を偽装することが容易になります。さらに、小さなシェルスクリプトが使用され、特別に作成されたペイロードを返します。このペイロードは、Google Guest Agentに対して、.authorized_keys
ファイルに指定された公開鍵を持つユーザーwouter
を作成するようにトリガーします。
スクリプトは同じETagを使用して、メタデータサーバーが異なるメタデータ値をGoogle Guest Agentに即座に通知しないようにし、応答を遅延させます。
スプーフィングを実行するには、次の手順が必要です。
tcpdumpを使用してメタデータサーバーへのリクエストを監視する:
次のような行を探してください:
正しいETAGを持つ偽のメタデータデータをrshijackに送信します:
このステップは公開鍵を認証し、対応する秘密鍵を使用してSSH接続を有効にします。
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)