# GCP - KMS Enum

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

## KMS

Il [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) funge da archiviazione sicura per le **chiavi crittografiche**, essenziali per operazioni come **la crittografia e la decrittografia dei dati sensibili**. Queste chiavi sono organizzate all'interno di anelli di chiavi, consentendo una gestione strutturata. Inoltre, il controllo degli accessi può essere configurato in modo meticoloso, sia a livello di singola chiave che per l'intero anello di chiavi, garantendo che i permessi siano precisamente allineati con i requisiti di sicurezza.

Gli anelli di chiavi KMS sono **creati per impostazione predefinita come globali**, il che significa che le chiavi all'interno di quell'anello di chiavi sono accessibili da qualsiasi regione. Tuttavia, è possibile creare anelli di chiavi specifici in **regioni specifiche**.

### Livello di Protezione delle Chiavi

- **Chiavi software**: Le chiavi software sono **create e gestite interamente da KMS in software**. Queste chiavi **non sono protette da alcun modulo di sicurezza hardware (HSM)** e possono essere utilizzate per **test e sviluppo**. Le chiavi software **non sono raccomandate per l'uso in produzione** perché offrono bassa sicurezza e sono suscettibili ad attacchi.
- **Chiavi ospitate nel cloud**: Le chiavi ospitate nel cloud sono **create e gestite da KMS** nel cloud utilizzando un'infrastruttura altamente disponibile e affidabile. Queste chiavi sono **protette da HSM**, ma gli HSM **non sono dedicati a un cliente specifico**. Le chiavi ospitate nel cloud sono adatte per la maggior parte dei casi d'uso in produzione.
- **Chiavi esterne**: Le chiavi esterne sono **create e gestite al di fuori di KMS**, e vengono importate in KMS per l'uso in operazioni crittografiche. Le chiavi esterne **possono essere memorizzate in un modulo di sicurezza hardware (HSM) o in una libreria software, a seconda delle preferenze del cliente**.

### Scopi delle Chiavi

- **Crittografia/decrittografia simmetrica**: Utilizzata per **crittografare e decrittografare i dati utilizzando una singola chiave per entrambe le operazioni**. Le chiavi simmetriche sono veloci ed efficienti per crittografare e decrittografare grandi volumi di dati.
- **Supportato**: [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)
- **Firma asimmetrica**: Utilizzata per comunicazioni sicure tra due parti senza condividere la chiave. Le chiavi asimmetriche vengono fornite in coppia, consistenti in una **chiave pubblica e una chiave privata**. La chiave pubblica è condivisa con altri, mentre la chiave privata è mantenuta segreta.
- **Supportato:** [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)
- **Decrittografia asimmetrica**: Utilizzata per verificare l'autenticità di un messaggio o di dati. Una firma digitale viene creata utilizzando una chiave privata e può essere verificata utilizzando la corrispondente chiave pubblica.
- **Supportato:** [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)
- **Firma MAC**: Utilizzata per garantire **l'integrità e l'autenticità dei dati creando un codice di autenticazione del messaggio (MAC) utilizzando una chiave segreta**. L'HMAC è comunemente utilizzato per l'autenticazione dei messaggi nei protocolli di rete e nelle applicazioni software.
- **Supportato:** [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)

### Periodo di Rotazione & Periodo Programmato per la Distruzione

Per **impostazione predefinita**, ogni **90 giorni**, ma può essere **facilmente** e **completamente personalizzato.**

Il periodo "Programmato per la distruzione" è il **tempo trascorso da quando l'utente richiede la cancellazione della chiave** fino a quando la chiave è **cancellata**. Non può essere modificato dopo la creazione della chiave (impostazione predefinita 1 giorno).

### Versione Primaria

Ogni chiave KMS può avere diverse versioni, una di esse deve essere quella **predefinita**, questa sarà quella utilizzata quando **non viene specificata una versione durante l'interazione con la chiave KMS**.

### Enumerazione

Avendo **permessi per elencare le chiavi**, ecco come puoi accedervi:
```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
```
### Escalation dei privilegi

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

### Post Sfruttamento

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

## Riferimenti

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