# GCP - KMS Enum

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

## KMS

Die [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) dien as 'n veilige berging vir **koderingssleutels**, wat noodsaaklik is vir operasies soos **kodering en dekodering van sensitiewe data**. Hierdie sleutels is georganiseer binne sleutelring, wat gestructureerde bestuur moontlik maak. Verder kan toegangbeheer noukeurig gekonfigureer word, hetsy op die individuele sleutelvlak of vir die hele sleutelring, wat verseker dat toestemmings presies ooreenstem met sekuriteitsvereistes.

KMS-sleutelring word **standaard as globaal** geskep, wat beteken dat die sleutels binne daardie sleutelring vanaf enige streek toeganklik is. Dit is egter moontlik om spesifieke sleutelring in **spesifieke streke** te skep.

### Sleutelbeskermingsvlak

- **Sagteware sleutels**: Sagteware sleutels word **heeltemal in sagteware deur KMS geskep en bestuur**. Hierdie sleutels is **nie deur enige hardeware sekuriteitsmodule (HSM) beskerm** nie en kan vir **toetsing en ontwikkelingsdoeleindes** gebruik word. Sagteware sleutels word **nie aanbeveel vir produksie** gebruik nie omdat hulle lae sekuriteit bied en kwesbaar is vir aanvalle.
- **Cloud-gehoste sleutels**: Cloud-gehoste sleutels word **deur KMS in die wolk geskep en bestuur** met 'n hoogs beskikbare en betroubare infrastruktuur. Hierdie sleutels is **deur HSM's beskerm**, maar die HSM's is **nie aan 'n spesifieke klant toegewy** nie. Cloud-gehoste sleutels is geskik vir die meeste produksie-gevalle.
- **Eksterne sleutels**: Eksterne sleutels word **buiten KMS geskep en bestuur**, en word in KMS ingevoer vir gebruik in koderingsoperasies. Eksterne sleutels **kan in 'n hardeware sekuriteitsmodule (HSM) of 'n sagtewarebiblioteek gestoor word, afhangende van die klant se voorkeur**.

### Sleuteldoeleindes

- **Simmetriese kodering/dekodering**: Gebruik om **data te kodering en dekodering met 'n enkele sleutel vir beide operasies**. Simmetriese sleutels is vinnig en doeltreffend vir die kodering en dekodering van groot hoeveelhede data.
- **Gesteun**: [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt)
- **Asimmetriese Handtekening**: Gebruik vir veilige kommunikasie tussen twee partye sonder om die sleutel te deel. Asimmetriese sleutels kom in 'n paar, wat bestaan uit 'n **publieke sleutel en 'n private sleutel**. Die publieke sleutel word met ander gedeel, terwyl die private sleutel geheim gehou word.
- **Gesteun:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Asimmetriese Dekodering**: Gebruik om die egtheid van 'n boodskap of data te verifieer. 'n Digitale handtekening word geskep met 'n private sleutel en kan verifieer word met die ooreenstemmende publieke sleutel.
- **Gesteun:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **MAC Handtekening**: Gebruik om **data-integriteit en egtheid te verseker deur 'n boodskap-authentikasiekode (MAC) te skep met 'n geheime sleutel**. HMAC word algemeen gebruik vir boodskap-authentikasie in netwerkprotokolle en sagtewaretoepassings.
- **Gesteun:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify)

### Rotasieperiode & Geprogrammeer vir vernietigingsperiode

Deur **standaard**, elke **90 dae** maar dit kan **maklik** en **volledig aangepas** word.

Die "Geprogrammeer vir vernietiging" periode is die **tyd sedert die gebruiker vra om die sleutel te verwyder** en totdat die sleutel **verwyder** is. Dit kan nie verander word nadat die sleutel geskep is nie (standaard 1 dag).

### Primêre Weergawe

Elke KMS-sleutel kan verskeie weergawes hê, een van hulle moet die **standaard** een wees, dit sal die een wees wat gebruik word wanneer 'n **weergave nie gespesifiseer word wanneer met die KMS-sleutel geinteraksie word**.

### Enumerasie

As jy **toestemmings het om die sleutels te lys**, is dit hoe jy toegang tot hulle kan kry:
```bash
# List the global keyrings available
gcloud kms keyrings list --location global
gcloud kms keyrings get-iam-policy <KEYRING>

# List the keys inside a keyring
gcloud kms keys list --keyring <KEYRING> --location <global/other_locations>
gcloud kms keys get-iam-policy <KEY>

# Encrypt a file using one of your keys
gcloud kms encrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global

# Decrypt a file using one of your keys
gcloud kms decrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global
```
### Privilege Escalation

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

### Post Exploitation

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

## References

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

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