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ユーザーを注入するためのパケット注入が可能です。この修正版は、Ezequielによって開発されました。
この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)