# GCP - Compute Enum

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

## GCP VPC & Networking

Leer hoe dit werk in:

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

### Enumerasie
```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>
```
Jy kan maklik rekenaarinstansies met oop vuurmuurreëls vind met [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)

## Rekenaarinstansies

Dit is die manier waarop jy **virtuele masjiene binne GCP kan uitvoer.** Kyk na hierdie bladsy vir meer inligting:

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

### Enumerasie
```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>
```
Vir meer inligting oor hoe om **SSH** of **die metadata** van 'n instansie te **wysig om voorregte te verhoog**, kyk na hierdie bladsy:

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

### Voorregverhoging

Op die volgende bladsy kan jy kyk hoe om **rekenaar toestemmings te misbruik om voorregte te verhoog**:

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

### Ongeauthentiseerde Enum

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

### Post Exploitatie

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

### Volharding

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

## Seriële Konsol Logs

Compute Engine Seriële Konsol Logs is 'n kenmerk wat jou toelaat om **die opstart- en bedryfstelsel logs** van jou virtuele masjien instansies te **bekyk en te diagnoseer**.

Seriële Konsol Logs bied 'n **laagvlak siening van die instansie se opstartproses**, insluitend kernboodskappe, init skripte, en ander stelselsgebeurtenisse wat tydens opstart plaasvind. Dit kan nuttig wees vir die ontfouting van opstartprobleme, die identifisering van miskonfigurasies of sagtewarefoute, of die oplos van netwerkverbindingprobleme.

Hierdie logs **kan sensitiewe inligting blootstel** uit die stelsellogs wat 'n laag voorregte gebruiker gewoonlik nie sal sien nie, maar met die toepaslike IAM-toestemmings mag jy in staat wees om dit te lees.

Jy kan die volgende [gcloud-opdrag](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) gebruik om die seriële poortlogs te vra (die vereiste toestemming is `compute.instances.getSerialPortOutput`):
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Startup Scripts output

Dit is moontlik om die **uitset van die opstart-skripte** van die VM wat uitvoer te sien:
```bash
sudo journalctl -u google-startup-scripts.service
```
## OS Konfigurasie Bestuurder

Jy kan die OS konfigurasie bestuur diens gebruik om **te ontplooi, te vra, en konsekwente konfigurasies** (gewens toestand en sagteware) vir jou VM instansie (VM) te onderhou. Op Compute Engine, moet jy [gastebeleide](https://cloud.google.com/compute/docs/os-config-management#guest-policy) gebruik om konsekwente sagteware konfigurasies op 'n VM te handhaaf.

Die OS Konfigurasie bestuur funksie laat jou toe om konfigurasiebeleide te definieer wat spesifiseer watter sagteware pakkette geïnstalleer moet word, watter dienste geaktiveer moet word, en watter lêers of konfigurasies op jou VMs teenwoordig moet wees. Jy kan 'n deklaratiewe benadering gebruik om die sagteware konfigurasie van jou VMs te bestuur, wat jou in staat stel om jou konfigurasie bestuur proses makliker te outomatiseer en te skaal.

Dit laat ook toe om in instansies in te log via IAM toestemmings, so dit is baie **nuttig vir privesc en pivoting**.

> [!WARNING]
> Om **os-config in 'n hele projek of in 'n instansie te aktiveer** hoef jy net die **metadata** sleutel **`enable-oslogin`** op **`true`** op die gewenste vlak in te stel.\
> Boonop kan jy die metadata **`enable-oslogin-2fa`** op **`true`** stel om die 2fa te aktiveer.
>
> Wanneer jy dit aktiveer wanneer jy 'n instansie skep, sal die metadata sleutels outomaties ingestel word.

Meer oor **2fa in OS-config**, **dit geld net as die gebruiker 'n gebruiker is**, as dit 'n SA is (soos die rekenaar SA) sal dit nie enige ekstra vereis nie.

### Enumerasie
```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>
```
## Beelde

### Pasgemaakte Beelde

**Pasgemaakte rekenaarbeelde mag sensitiewe besonderhede** of ander kwesbare konfigurasies bevat wat jy kan benut.

Wanneer 'n beeld geskep word, kan jy **3 tipes versleuteling** kies: Gebruik **Google bestuurde sleutel** (verstek), 'n **sleutel van KMS**, of 'n **rauwe sleutel** gegee deur die kliënt.

#### Enumerasie

Jy kan die lys van nie-standaard beelde in 'n projek met die volgende opdrag opvraag:
```bash
gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
U kan dan [**uitvoer**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **die virtuele skywe** van enige beeld in verskeie formate. Die volgende opdrag sal die beeld `test-image` in qcow2-formaat uitvoer, wat u in staat stel om die lêer af te laai en 'n VM plaaslik te bou vir verdere ondersoek:
```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
```
#### Privilege Escalation

Kyk na die Compute Instances privilege escalation afdeling.

### Custom Instance Templates

'n [**instance template**](https://cloud.google.com/compute/docs/instance-templates/) **definieer instance eienskappe** om te help om konsekwente konfigurasies te ontplooi. Hierdie kan dieselfde tipes sensitiewe data bevat as 'n lopende instance se aangepaste metadata. Jy kan die volgende opdragte gebruik om te ondersoek:
```bash
# List the available templates
gcloud compute instance-templates list

# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]
```
Dit kan interessant wees om te weet watter skyf nuwe beelde gebruik, maar hierdie sjablone sal gewoonlik nie sensitiewe inligting hê nie.

## Snapshot

Die **snapshots is rugsteun van skywe**. Let daarop dat dit nie dieselfde is as om 'n skyf te kloon (nog 'n beskikbare funksie).\
Die **snapshot** sal die **dieselfde versleuteling as die skyf** waarvan dit geneem is, gebruik.

### Enumerasie
```bash
gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>
```
### Privilege Escalation

Kyk na die Compute Instances privilege escalation afdeling.

## References

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