# GCP - Compute Instances

{{#include ../../../../banners/hacktricks-training.md}}

## Informazioni di Base

Google Cloud Compute Instances sono **macchine virtuali personalizzabili sull'infrastruttura cloud di Google**, che offrono potenza di calcolo scalabile e on-demand per una vasta gamma di applicazioni. Forniscono funzionalità come distribuzione globale, archiviazione persistente, scelte flessibili del sistema operativo e forti integrazioni di rete e sicurezza, rendendole una scelta versatile per ospitare siti web, elaborare dati e eseguire applicazioni in modo efficiente nel cloud.

### VM Riservate

Le VM riservate utilizzano **funzionalità di sicurezza basate sull'hardware** offerte dall'ultima generazione di processori AMD EPYC, che includono crittografia della memoria e virtualizzazione crittografata sicura. Queste funzionalità consentono alla VM di proteggere i dati elaborati e memorizzati al suo interno anche dal sistema operativo host e dall'ipervisore.

Per eseguire una VM riservata potrebbe essere necessario **cambiare** cose come il **tipo** della **macchina**, l'**interfaccia** di rete, l'**immagine del disco di avvio**.

### Disco e Crittografia del Disco

È possibile **selezionare il disco** da utilizzare o **crearne uno nuovo**. Se selezioni uno nuovo puoi:

- Selezionare la **dimensione** del disco
- Selezionare il **SO**
- Indicare se desideri **eliminare il disco quando l'istanza viene eliminata**
- **Crittografia**: Per **default** verrà utilizzata una **chiave gestita da Google**, ma puoi anche **selezionare una chiave da KMS** o indicare **una chiave grezza da utilizzare**.

### Distribuire Container

È possibile distribuire un **container** all'interno della macchina virtuale.\
È possibile configurare l'**immagine** da utilizzare, impostare il **comando** da eseguire all'interno, **argomenti**, montare un **volume** e **variabili d'ambiente** (informazioni sensibili?) e configurare diverse opzioni per questo container come eseguire come **privilegiato**, stdin e pseudo TTY.

### Account di Servizio

Per impostazione predefinita, verrà utilizzato l'**account di servizio predefinito di Compute Engine**. L'email di questo SA è simile a: `<proj-num>-compute@developer.gserviceaccount.com`\
Questo account di servizio ha **ruolo di Editor su tutto il progetto (privilegi elevati).**

E i **perimetri di accesso predefiniti** sono i seguenti:

- **https://www.googleapis.com/auth/devstorage.read\_only** -- Accesso in lettura ai bucket :)
- [https://www.googleapis.com/auth/logging.write](https://www.googleapis.com/auth/logging.write)
- [https://www.googleapis.com/auth/monitoring.write](https://www.googleapis.com/auth/monitoring.write)
- [https://www.googleapis.com/auth/servicecontrol](https://www.googleapis.com/auth/servicecontrol)
- [https://www.googleapis.com/auth/service.management.readonly](https://www.googleapis.com/auth/service.management.readonly)
- [https://www.googleapis.com/auth/trace.append](https://www.googleapis.com/auth/trace.append)

Tuttavia, è possibile **concedere `cloud-platform` con un clic** o specificare **personalizzati**.

<figure><img src="../../../../images/image (327).png" alt=""><figcaption></figcaption></figure>

### Firewall

È possibile consentire il traffico HTTP e HTTPS.

<figure><img src="../../../../images/image (326).png" alt=""><figcaption></figcaption></figure>

### Networking

- **IP Forwarding**: È possibile **abilitare l'inoltro IP** dalla creazione dell'istanza.
- **Hostname**: È possibile dare all'istanza un hostname permanente.
- **Interfaccia**: È possibile aggiungere un'interfaccia di rete.

### Sicurezza Aggiuntiva

Queste opzioni **aumenteranno la sicurezza** della VM e sono raccomandate:

- **Secure boot:** Secure boot aiuta a proteggere le tue istanze VM contro malware e rootkit a livello di avvio e kernel.
- **Abilita vTPM:** Il Modulo di Piattaforma Fidato Virtuale (vTPM) convalida l'integrità pre-avvio e di avvio della tua VM guest e offre generazione e protezione delle chiavi.
- **Supervisione dell'integrità:** Il monitoraggio dell'integrità ti consente di monitorare e verificare l'integrità di avvio in tempo reale delle tue istanze VM protette utilizzando i rapporti di Stackdriver. Richiede che vTPM sia abilitato.

### Accesso alla VM

Il modo comune per abilitare l'accesso alla VM è **consentire a determinate chiavi pubbliche SSH** di accedere alla VM.\
Tuttavia, è anche possibile **abilitare l'accesso alla VM tramite il servizio `os-config` utilizzando IAM**. Inoltre, è possibile abilitare 2FA per accedere alla VM utilizzando questo servizio.\
Quando questo **servizio** è **abilitato**, l'accesso tramite **chiavi SSH è disabilitato.**

<figure><img src="../../../../images/image (328).png" alt=""><figcaption></figcaption></figure>

### Metadata

È possibile definire **automazione** (userdata in AWS) che sono **comandi shell** che verranno eseguiti ogni volta che la macchina si accende o si riavvia.

È anche possibile **aggiungere valori chiave-valore di metadata extra** che saranno accessibili dall'endpoint dei metadata. Queste informazioni sono comunemente utilizzate per variabili d'ambiente e script di avvio/arresto. Queste possono essere ottenute utilizzando il **metodo `describe`** da un comando nella sezione di enumerazione, ma possono anche essere recuperate dall'interno dell'istanza accedendo all'endpoint dei metadata.
```bash
# view project metadata
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"

# view instance metadata
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"
```
Inoltre, **il token di autenticazione per l'account di servizio allegato** e **informazioni generali** sull'istanza, sulla rete e sul progetto saranno disponibili anche dall'**endpoint dei metadati**. Per ulteriori informazioni, controlla:

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}

### Crittografia

Una chiave di crittografia gestita da Google viene utilizzata per impostazione predefinita, ma è possibile configurare una chiave di crittografia gestita dal cliente (CMEK). Puoi anche configurare cosa fare quando il CMEK utilizzato viene revocato: Notificare o spegnere la VM.

<figure><img src="../../../../images/image (329).png" alt=""><figcaption></figcaption></figure>

{{#include ../../../../banners/hacktricks-training.md}}
