# GCP - Enumerazione Compute

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

## GCP VPC e Networking

Scopri come funziona in:

{{#ref}}
gcp-vpc-and-networking.md
{{#endref}}

### Enumerazione
```bash
# List networks
gcloud compute networks list
gcloud compute networks describe <network>

# List subnetworks
gcloud compute networks subnets list
gcloud compute networks subnets get-iam-policy <name> --region <region>
gcloud compute networks subnets describe <name> --region <region>

# List FW rules in networks
gcloud compute firewall-rules list --format="table(
name,
network,
direction,
priority,
sourceRanges.list():label=SRC_RANGES,
destinationRanges.list():label=DEST_RANGES,
allowed[].map().firewall_rule().list():label=ALLOW,
denied[].map().firewall_rule().list():label=DENY,
sourceTags.list():label=SRC_TAGS,
sourceServiceAccounts.list():label=SRC_SVC_ACCT,
targetTags.list():label=TARGET_TAGS,
targetServiceAccounts.list():label=TARGET_SVC_ACCT,
disabled
)"

# List Hierarchical Firewalls
gcloud compute firewall-policies list  (--folder <value>| --organization <value>)
gcloud compute firewall-policies describe <fw_policy>
gcloud compute firewall-policies list-rules <fw_policy>

# Get Firewalls of each region
gcloud compute network-firewall-policies list
## Get final FWs applied in a region
gcloud compute network-firewall-policies get-effective-firewalls --network=<vpc_name> --region <region>
```
Puoi facilmente trovare istanze di calcolo con regole del firewall aperte con [https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_firewall_enum](https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_firewall_enum)

## Istanze di calcolo

Questo è il modo in cui puoi **eseguire macchine virtuali all'interno di GCP.** Controlla questa pagina per ulteriori informazioni:

{{#ref}}
gcp-compute-instance.md
{{#endref}}

### Enumerazione
```bash
# Get list of zones
# It's interesting to know which zones are being used
gcloud compute regions list | grep -E "NAME|[^0]/"

# List compute instances & get info
gcloud compute instances list
gcloud compute instances describe <instance name>
gcloud compute instances get-iam-policy <instance> --zone=ZONE
gcloud compute instances get-screenshot <instance name> # Instace must have "Display Device" enabled
gcloud compute instances os-inventory list-instances # Get OS info of instances (OS Config agent is running on instances)


# Enumerate disks
gcloud compute disks list
gcloud compute disks describe <disk>
gcloud compute disks get-iam-policy <disk>
```
Per ulteriori informazioni su come **SSH** o **modificare i metadati** di un'istanza per **escalare i privilegi**, controlla questa pagina:

{{#ref}}
../../gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}

### Escalation dei privilegi

Nella pagina seguente, puoi controllare come **abusare delle autorizzazioni di calcolo per escalare i privilegi**:

{{#ref}}
../../gcp-privilege-escalation/gcp-compute-privesc/
{{#endref}}

### Enum non autenticato

{{#ref}}
../../gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md
{{#endref}}

### Post Exploitation

{{#ref}}
../../gcp-post-exploitation/gcp-compute-post-exploitation.md
{{#endref}}

### Persistenza

{{#ref}}
../../gcp-persistence/gcp-compute-persistence.md
{{#endref}}

## Log della Console Seriale

I log della Console Seriale di Compute Engine sono una funzionalità che consente di **visualizzare e diagnosticare i log di avvio e del sistema operativo** delle istanze della tua macchina virtuale.

I log della Console Seriale forniscono una **visione a basso livello del processo di avvio dell'istanza**, inclusi i messaggi del kernel, gli script di inizializzazione e altri eventi di sistema che si verificano durante l'avvio. Questo può essere utile per il debug dei problemi di avvio, l'identificazione di configurazioni errate o errori software, o la risoluzione di problemi di connettività di rete.

Questi log **possono esporre informazioni sensibili** dai log di sistema che un utente a basso privilegio potrebbe non vedere normalmente, ma con le appropriate autorizzazioni IAM potresti essere in grado di leggerli.

Puoi utilizzare il seguente [comando gcloud](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) per interrogare i log della porta seriale (l'autorizzazione richiesta è `compute.instances.getSerialPortOutput`):
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Startup Scripts output

È possibile vedere l'**output degli script di avvio** dalla VM eseguendo:
```bash
sudo journalctl -u google-startup-scripts.service
```
## OS Configuration Manager

Puoi utilizzare il servizio di gestione della configurazione del sistema operativo per **distribuire, interrogare e mantenere configurazioni coerenti** (stato desiderato e software) per la tua istanza VM (VM). Su Compute Engine, devi utilizzare [guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy) per mantenere configurazioni software coerenti su una VM.

La funzionalità di gestione della configurazione del sistema operativo ti consente di definire politiche di configurazione che specificano quali pacchetti software devono essere installati, quali servizi devono essere abilitati e quali file o configurazioni devono essere presenti sulle tue VM. Puoi utilizzare un approccio dichiarativo per gestire la configurazione software delle tue VM, il che ti consente di automatizzare e scalare più facilmente il tuo processo di gestione della configurazione.

Questo consente anche di accedere alle istanze tramite permessi IAM, quindi è molto **utile per privesc e pivoting**.

> [!WARNING]
> Per **abilitare os-config in un intero progetto o in un'istanza** devi semplicemente impostare la chiave **metadata** **`enable-oslogin`** su **`true`** al livello desiderato.\
> Inoltre, puoi impostare la metadata **`enable-oslogin-2fa`** su **`true`** per abilitare il 2fa.
>
> Quando lo abiliti durante la creazione di un'istanza, le chiavi di metadata verranno impostate automaticamente.

Ulteriori informazioni su **2fa in OS-config**, **si applica solo se l'utente è un utente**, se è un SA (come il compute SA) non richiederà nulla di extra.

### Enumeration
```bash
gcloud compute os-config patch-deployments list
gcloud compute os-config patch-deployments describe <patch-deployment>

gcloud compute os-config patch-jobs list
gcloud compute os-config patch-jobs describe <patch-job>
```
## Immagini

### Immagini personalizzate

**Le immagini di calcolo personalizzate possono contenere dettagli sensibili** o altre configurazioni vulnerabili che puoi sfruttare.

Quando viene creata un'immagine, puoi scegliere **3 tipi di crittografia**: Utilizzando **la chiave gestita da Google** (predefinita), una **chiave da KMS** o una **chiave grezza** fornita dal cliente.

#### Enumerazione

Puoi interrogare l'elenco delle immagini non standard in un progetto con il seguente comando:
```bash
gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
Puoi quindi [**esportare**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **i dischi virtuali** da qualsiasi immagine in più formati. Il seguente comando esporterebbe l'immagine `test-image` in formato qcow2, permettendoti di scaricare il file e costruire una VM localmente per ulteriori indagini:
```bash
gcloud compute images export --image test-image \
--export-format qcow2 --destination-uri [BUCKET]

# Execute container inside a docker
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh
```
#### Escalation dei privilegi

Controlla la sezione sull'escalation dei privilegi delle Compute Instances.

### Modelli di Istanza Personalizzati

Un [**modello di istanza**](https://cloud.google.com/compute/docs/instance-templates/) **definisce le proprietà dell'istanza** per aiutare a distribuire configurazioni coerenti. Questi possono contenere gli stessi tipi di dati sensibili dei metadati personalizzati di un'istanza in esecuzione. Puoi utilizzare i seguenti comandi per indagare:
```bash
# List the available templates
gcloud compute instance-templates list

# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]
```
Potrebbe essere interessante sapere quale disco stanno utilizzando le nuove immagini, ma questi modelli di solito non avranno informazioni sensibili.

## Snapshots

I **snapshot sono backup dei dischi**. Nota che questo non è lo stesso che clonare un disco (un'altra funzionalità disponibile).\
Lo **snapshot** utilizzerà la **stessa crittografia del disco** da cui è stato preso.

### Enumeration
```bash
gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>
```
### Escalation dei privilegi

Controlla la sezione sull'escalation dei privilegi delle Compute Instances.

## Riferimenti

- [https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching)

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