# GCP - Compute Enum

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

## GCP VPC & Networking

Saznajte kako ovo funkcioniše u:

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

### Enumeration
```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>
```
Lako možete pronaći instance računara sa otvorenim pravilima vatrozida na [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)

## Instance računara

Ovo je način na koji možete **pokrenuti virtuelne mašine unutar GCP.** Pogledajte ovu stranicu za više informacija:

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

### Enumeracija
```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>
```
Za više informacija o tome kako da **SSH** ili **izmenite metapodatke** instance da **povećate privilegije**, proverite ovu stranicu:

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

### Povećanje privilegija

Na sledećoj stranici možete proveriti kako da **zloupotrebite dozvole za računanje da biste povećali privilegije**:

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

### Neautentifikovana enumeracija

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

### Post eksploatacija

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

### Persistencija

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

## Serijski konzolni logovi

Serijski konzolni logovi Compute Engine su funkcija koja vam omogućava da **prikazujete i dijagnostikujete logove pokretanja i operativnog sistema** vaših virtuelnih mašina.

Serijski konzolni logovi pružaju **nizak nivo pregleda procesa pokretanja instance**, uključujući poruke jezgra, init skripte i druge sistemske događaje koji se dešavaju tokom pokretanja. Ovo može biti korisno za otklanjanje grešaka u problemima sa pokretanjem, identifikaciju pogrešnih konfiguracija ili softverskih grešaka, ili rešavanje problema sa mrežnom povezanošću.

Ovi logovi **mogu otkriti osetljive informacije** iz sistemskih logova koje korisnik sa niskim privilegijama obično ne može da vidi, ali uz odgovarajuće IAM dozvole možda ćete moći da ih pročitate.

Možete koristiti sledeću [gcloud komandu](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) da upitite serijske port logove (dozvola koja je potrebna je `compute.instances.getSerialPortOutput`):
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Startup Scripts output

Moguće je videti **izlaz startup skripti** iz VM-a koji se izvršava:
```bash
sudo journalctl -u google-startup-scripts.service
```
## OS Configuration Manager

Možete koristiti uslugu upravljanja konfiguracijom operativnog sistema da **implementirate, pretražujete i održavate dosledne konfiguracije** (željeno stanje i softver) za vašu VM instancu (VM). Na Compute Engine-u, morate koristiti [guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy) da održavate dosledne softverske konfiguracije na VM-u.

Funkcija upravljanja konfiguracijom operativnog sistema vam omogućava da definišete politike konfiguracije koje specificiraju koji softverski paketi treba da budu instalirani, koje usluge treba da budu omogućene i koji fajlovi ili konfiguracije treba da budu prisutni na vašim VM-ovima. Možete koristiti deklarativni pristup za upravljanje softverskom konfiguracijom vaših VM-ova, što vam omogućava da automatizujete i skalirate vaš proces upravljanja konfiguracijom lakše.

Ovo takođe omogućava prijavljivanje u instance putem IAM dozvola, tako da je veoma **korisno za privesc i pivoting**.

> [!WARNING]
> Da biste **omogućili os-config u celom projektu ili u instanci** potrebno je samo da postavite **metadata** ključ **`enable-oslogin`** na **`true`** na željenom nivou.\
> Pored toga, možete postaviti metadata **`enable-oslogin-2fa`** na **`true`** da omogućite 2fa.
>
> Kada to omogućite prilikom kreiranja instance, metadata ključevi će biti automatski postavljeni.

Više o **2fa u OS-config**, **primenjuje se samo ako je korisnik korisnik**, ako je to SA (kao što je compute SA) neće zahtevati ništa dodatno.

### 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>
```
## Slike

### Prilagođene slike

**Prilagođene slike za računare mogu sadržati osetljive detalje** ili druge ranjive konfiguracije koje možete iskoristiti.

Kada se slika kreira, možete odabrati **3 tipa enkripcije**: Korišćenje **Google upravljanog ključa** (podrazumevano), **ključa iz KMS-a**, ili **sirovog ključa** koji daje klijent.

#### Enumeracija

Možete upitati listu nestandardnih slika u projektu sa sledećom komandom:
```bash
gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
Možete zatim [**izvesti**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **virtuelne diskove** iz bilo koje slike u više formata. Sledeća komanda bi izvezla sliku `test-image` u qcow2 formatu, omogućavajući vam da preuzmete datoteku i izgradite VM lokalno za dalju istragu:
```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
```
#### Eskalacija privilegija

Proverite odeljak o eskalaciji privilegija za Compute Instances.

### Prilagođene instance šabloni

An [**instance template**](https://cloud.google.com/compute/docs/instance-templates/) **definiše svojstva instance** kako bi pomogao u implementaciji doslednih konfiguracija. Ovi mogu sadržati iste vrste osetljivih podataka kao i prilagođeni metapodaci aktivne instance. Možete koristiti sledeće komande za istraživanje:
```bash
# List the available templates
gcloud compute instance-templates list

# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]
```
Može biti zanimljivo znati koji disk koriste nove slike, ali ovi šabloni obično neće imati osetljive informacije.

## Snapshots

**Snapshots su rezervne kopije diskova**. Imajte na umu da to nije isto što i kloniranje diska (druga dostupna funkcija).\
**Snapshot** će koristiti **istu enkripciju kao disk** sa kojeg je uzet.

### Enumeration
```bash
gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>
```
### Eskalacija privilegija

Proverite odeljak o eskalaciji privilegija za Compute Instances.

## Reference

- [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}}
