# GCP - Compute Instances

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

## Osnovne Informacije

Google Cloud Compute Instances su **prilagodljive virtuelne mašine na Google-ovoj cloud infrastrukturi**, koje nude skalabilnu i na zahtev dostupnu računalnu snagu za širok spektar aplikacija. Pružaju funkcije kao što su globalna implementacija, trajno skladištenje, fleksibilni izbor operativnih sistema i snažne integracije umrežavanja i bezbednosti, što ih čini svestranom opcijom za hostovanje veb sajtova, obradu podataka i efikasno pokretanje aplikacija u cloudu.

### Povjerljiva VM

Povjerljive VM koriste **bezbednosne funkcije zasnovane na hardveru** koje nude najnovije generacije AMD EPYC procesora, koje uključuju enkripciju memorije i sigurnu enkriptu virtualizaciju. Ove funkcije omogućavaju VM-u da zaštiti podatke koji se obrađuju i skladište unutar njega čak i od host operativnog sistema i hipervizora.

Da bi se pokrenula Povjerljiva VM, možda će biti potrebno da **promenite** stvari kao što su **tip** **mašine**, mrežni **interfejs**, **slika pokretačkog diska**.

### Disk i Enkripcija Diska

Moguće je **izabrati disk** koji će se koristiti ili **napraviti novi**. Ako izaberete novi, možete:

- Izabrati **veličinu** diska
- Izabrati **OS**
- Naznačiti da želite da se **disk obriše kada se instanca obriše**
- **Enkripcija**: Po **default-u** će se koristiti **Google upravljani ključ**, ali možete i **izabrati ključ iz KMS** ili naznačiti **sirovi ključ koji će se koristiti**.

### Implementacija Kontejnera

Moguće je implementirati **kontejner** unutar virtuelne mašine.\
Moguće je konfigurisati **sliku** koja će se koristiti, postaviti **komandu** koja će se izvršiti unutar, **argumente**, montirati **volumen** i **env varijable** (osetljive informacije?) i konfigurisati nekoliko opcija za ovaj kontejner kao što su izvršavanje kao **privilegovan**, stdin i pseudo TTY.

### Servisni Nalog

Po default-u, koristiće se **Compute Engine default servisni nalog**. Email ovog SA je kao: `<proj-num>-compute@developer.gserviceaccount.com`\
Ovaj servisni nalog ima **Editor ulogu nad celim projektom (visoke privilegije).**

A **default pristupni opsezi** su sledeći:

- **https://www.googleapis.com/auth/devstorage.read\_only** -- Pristup za čitanje ka bucket-ima :)
- [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)

Međutim, moguće je **dodeliti `cloud-platform` jednim klikom** ili odrediti **prilagođene**.

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

### Firewall

Moguće je dozvoliti HTTP i HTTPS saobraćaj.

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

### Mreža

- **IP Preusmeravanje**: Moguće je **omogućiti IP preusmeravanje** prilikom kreiranja instance.
- **Hostname**: Moguće je dati instanci trajni hostname.
- **Interfejs**: Moguće je dodati mrežni interfejs.

### Dodatna Bezbednost

Ove opcije će **povećati bezbednost** VM-a i preporučuju se:

- **Sigurno pokretanje:** Sigurno pokretanje pomaže u zaštiti vaših VM instanci od malvera na nivou pokretanja i kernel nivoa i rootkit-a.
- **Omogućiti vTPM:** Virtuelni Trusted Platform Module (vTPM) validira integritet vašeg gostujućeg VM-a pre pokretanja i tokom pokretanja, i nudi generisanje i zaštitu ključeva.
- **Nadzor integriteta:** Nadzor integriteta vam omogućava da pratite i verifikujete integritet pokretanja vaših zaštićenih VM instanci koristeći Stackdriver izveštaje. Zahteva da vTPM bude omogućen.

### Pristup VM-u

Uobičajen način za omogućavanje pristupa VM-u je **dozvoljavanje određenih SSH javnih ključeva** za pristup VM-u.\
Međutim, takođe je moguće **omogućiti pristup VM-u putem `os-config` servisa koristeći IAM**. Štaviše, moguće je omogućiti 2FA za pristup VM-u koristeći ovaj servis.\
Kada je ovaj **servis** **omogućen**, pristup putem **SSH ključeva je onemogućen.**

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

### Metapodaci

Moguće je definisati **automatizaciju** (userdata u AWS) koja su **shell komande** koje će se izvršavati svaki put kada se mašina uključi ili ponovo pokrene.

Takođe je moguće **dodati dodatne metapodatke ključ-vrednost** koji će biti dostupni sa metapodatkovnog krajnjeg tačke. Ove informacije se obično koriste za varijable okruženja i skripte za pokretanje/gašenje. Ovo se može dobiti koristeći **`describe` metodu** iz komande u sekciji enumeracije, ali se takođe može preuzeti iznutra instance pristupajući metapodatkovnom kraju.
```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"
```
Pored toga, **auth token za priloženi servisni nalog** i **opšte informacije** o instanci, mreži i projektu će takođe biti dostupne sa **metadata endpoint**. Za više informacija pogledajte:

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

### Enkripcija

Google-om upravljani ključ za enkripciju se koristi po default-u, ali se može konfigurisati ključ za enkripciju koji upravlja kupac (CMEK). Takođe možete konfigurisati šta da radite kada se korišćeni CMEK opozove: Noting ili isključite VM.

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

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