mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 23:39:52 -08:00
160 lines
9.1 KiB
Markdown
160 lines
9.1 KiB
Markdown
# AWS - KMS Enum
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## KMS - Key Management Service
|
|
|
|
AWS Key Management Service (AWS KMS) è presentato come un servizio gestito, semplificando il processo per gli utenti di **creare e gestire le chiavi master dei clienti** (CMK). Queste CMK sono fondamentali per la crittografia dei dati degli utenti. Una caratteristica notevole di AWS KMS è che le CMK sono prevalentemente **protette da moduli di sicurezza hardware** (HSM), migliorando la protezione delle chiavi di crittografia.
|
|
|
|
KMS utilizza **crittografia simmetrica**. Questa viene utilizzata per **crittografare le informazioni a riposo** (ad esempio, all'interno di un S3). Se hai bisogno di **crittografare le informazioni in transito**, devi utilizzare qualcosa come **TLS**.
|
|
|
|
KMS è un **servizio specifico per regione**.
|
|
|
|
**Gli amministratori di Amazon non hanno accesso alle tue chiavi**. Non possono recuperare le tue chiavi e non ti aiutano con la crittografia delle tue chiavi. AWS semplicemente amministra il sistema operativo e l'applicazione sottostante; spetta a noi amministrare le nostre chiavi di crittografia e gestire come vengono utilizzate.
|
|
|
|
**Chiavi Master dei Clienti** (CMK): Possono crittografare dati fino a 4KB di dimensione. Sono tipicamente utilizzate per creare, crittografare e decrittografare le DEK (Data Encryption Keys). Poi le DEK vengono utilizzate per crittografare i dati.
|
|
|
|
Una chiave master dei clienti (CMK) è una rappresentazione logica di una chiave master in AWS KMS. Oltre agli identificatori della chiave master e ad altri metadati, inclusi la data di creazione, la descrizione e lo stato della chiave, una **CMK contiene il materiale della chiave utilizzato per crittografare e decrittografare i dati**. Quando crei una CMK, per impostazione predefinita, AWS KMS genera il materiale della chiave per quella CMK. Tuttavia, puoi scegliere di creare una CMK senza materiale della chiave e poi importare il tuo materiale della chiave in quella CMK.
|
|
|
|
Ci sono 2 tipi di chiavi master:
|
|
|
|
- **CMK gestite da AWS: Utilizzate da altri servizi per crittografare i dati**. Viene utilizzata dal servizio che l'ha creata in una regione. Vengono create la prima volta che implementi la crittografia in quel servizio. Ruotano ogni 3 anni e non è possibile cambiarle.
|
|
- **CMK gestite dal cliente**: Flessibilità, rotazione, accesso configurabile e politica delle chiavi. Abilita e disabilita le chiavi.
|
|
|
|
**Crittografia a Involucro** nel contesto del Key Management Service (KMS): Sistema gerarchico a due livelli per **crittografare i dati con la chiave dei dati e poi crittografare la chiave dei dati con la chiave master**.
|
|
|
|
### Politiche delle Chiavi
|
|
|
|
Queste definiscono **chi può utilizzare e accedere a una chiave in KMS**.
|
|
|
|
Per **impostazione predefinita:**
|
|
|
|
- Fornisce all'**IAM dell'** **account AWS che possiede la chiave KMS accesso** per gestire l'accesso alla chiave KMS tramite IAM.
|
|
|
|
A differenza di altre politiche delle risorse AWS, una **politica della chiave KMS non concede automaticamente permessi a nessuno dei principi dell'account**. Per concedere permessi agli amministratori dell'account, **la politica della chiave deve includere una dichiarazione esplicita** che fornisca questo permesso, come questa.
|
|
|
|
- Senza consentire all'account(`"AWS": "arn:aws:iam::111122223333:root"`) i permessi IAM non funzioneranno.
|
|
|
|
- **Consente all'account di utilizzare le politiche IAM** per consentire l'accesso alla chiave KMS, oltre alla politica della chiave.
|
|
|
|
**Senza questo permesso, le politiche IAM che consentono l'accesso alla chiave sono inefficaci**, sebbene le politiche IAM che negano l'accesso alla chiave siano ancora efficaci.
|
|
|
|
- **Riduce il rischio che la chiave diventi ingovernabile** dando permessi di controllo accesso agli amministratori dell'account, incluso l'utente root dell'account, che non può essere eliminato.
|
|
|
|
**Esempio di politica predefinita**:
|
|
```json
|
|
{
|
|
"Sid": "Enable IAM policies",
|
|
"Effect": "Allow",
|
|
"Principal": {
|
|
"AWS": "arn:aws:iam::111122223333:root"
|
|
},
|
|
"Action": "kms:*",
|
|
"Resource": "*"
|
|
}
|
|
```
|
|
> [!WARNING]
|
|
> Se l'**account è autorizzato** (`"arn:aws:iam::111122223333:root"`), un **principale** dell'account **avrà comunque bisogno di permessi IAM** per utilizzare la chiave KMS. Tuttavia, se l'**ARN** di un ruolo, ad esempio, è **specificamente autorizzato** nella **Politica della Chiave**, quel ruolo **non ha bisogno di permessi IAM**.
|
|
|
|
<details>
|
|
|
|
<summary>Dettagli della Politica</summary>
|
|
|
|
Proprietà di una politica:
|
|
|
|
- Documento basato su JSON
|
|
- Risorsa --> Risorse interessate (può essere "\*")
|
|
- Azione --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (permessi)
|
|
- Effetto --> Consenti/Nega
|
|
- Principale --> arn interessato
|
|
- Condizioni (opzionale) --> Condizione per concedere i permessi
|
|
|
|
Concessioni:
|
|
|
|
- Consente di delegare i propri permessi a un altro principale AWS all'interno del proprio account AWS. È necessario crearli utilizzando le API AWS KMS. Può essere indicato l'identificatore CMK, il principale beneficiario e il livello richiesto di operazione (Decrypt, Encrypt, GenerateDataKey...)
|
|
- Dopo che la concessione è stata creata, vengono emessi un GrantToken e un GrantID
|
|
|
|
**Accesso**:
|
|
|
|
- Tramite **politica della chiave** -- Se esiste, questa ha **precedenza** sulla politica IAM
|
|
- Tramite **politica IAM**
|
|
- Tramite **concessioni**
|
|
|
|
</details>
|
|
|
|
### Amministratori delle Chiavi
|
|
|
|
Amministratore delle chiavi per impostazione predefinita:
|
|
|
|
- Ha accesso per gestire KMS ma non per crittografare o decrittografare dati
|
|
- Solo gli utenti e i ruoli IAM possono essere aggiunti all'elenco degli Amministratori delle Chiavi (non i gruppi)
|
|
- Se viene utilizzato un CMK esterno, gli Amministratori delle Chiavi hanno il permesso di importare materiale di chiave
|
|
|
|
### Rotazione dei CMK
|
|
|
|
- Più a lungo la stessa chiave rimane in uso, più dati vengono crittografati con quella chiave, e se quella chiave viene compromessa, allora l'area di esplosione dei dati è a rischio. Inoltre, più a lungo la chiave è attiva, maggiore è la probabilità che venga compromessa.
|
|
- **KMS ruota le chiavi dei clienti ogni 365 giorni** (o puoi eseguire il processo manualmente quando vuoi) e **le chiavi gestite da AWS ogni 3 anni** e questo tempo non può essere cambiato.
|
|
- **Le chiavi più vecchie vengono mantenute** per decrittografare i dati che sono stati crittografati prima della rotazione
|
|
- In caso di compromissione, ruotare la chiave non rimuoverà la minaccia poiché sarà possibile decrittografare tutti i dati crittografati con la chiave compromessa. Tuttavia, i **nuovi dati saranno crittografati con la nuova chiave**.
|
|
- Se il **CMK** è in stato di **disabilitato** o **in attesa di** **cancellazione**, KMS **non eseguirà una rotazione della chiave** fino a quando il CMK non sarà riattivato o la cancellazione non sarà annullata.
|
|
|
|
#### Rotazione manuale
|
|
|
|
- È necessario **creare un nuovo CMK**, quindi, viene creato un nuovo CMK-ID, quindi dovrai **aggiornare** qualsiasi **applicazione** per **riferirsi** al nuovo CMK-ID.
|
|
- Per semplificare questo processo, puoi **utilizzare alias per riferirti a un key-id** e poi semplicemente aggiornare la chiave a cui l'alias si riferisce.
|
|
- Devi **mantenere le vecchie chiavi per decrittografare i vecchi file** crittografati con essa.
|
|
|
|
Puoi importare chiavi dalla tua infrastruttura di chiavi on-premises.
|
|
|
|
### Altre informazioni rilevanti su KMS
|
|
|
|
KMS è tariffato in base al numero di richieste di crittografia/decrittografia ricevute da tutti i servizi al mese.
|
|
|
|
KMS ha piena audit e compliance **integrazione con CloudTrail**; qui puoi auditare tutte le modifiche effettuate su KMS.
|
|
|
|
Con la politica KMS puoi fare quanto segue:
|
|
|
|
- Limitare chi può creare chiavi dati e quali servizi hanno accesso a utilizzare queste chiavi
|
|
- Limitare l'accesso ai sistemi per crittografare solo, decrittografare solo o entrambi
|
|
- Definire per abilitare i sistemi ad accedere alle chiavi attraverso le regioni (anche se non è raccomandato poiché un guasto nella regione che ospita KMS influenzerà la disponibilità dei sistemi in altre regioni).
|
|
|
|
Non puoi sincronizzare o spostare/copiare chiavi tra regioni; puoi solo definire regole per consentire l'accesso tra le regioni.
|
|
|
|
### Enumerazione
|
|
```bash
|
|
aws kms list-keys
|
|
aws kms list-key-policies --key-id <id>
|
|
aws kms list-grants --key-id <id>
|
|
aws kms describe-key --key-id <id>
|
|
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
|
|
aws kms describe-custom-key-stores
|
|
|
|
# This script enumerates AWS KMS keys across all available regions.
|
|
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
|
|
echo -e "\n### Region: $region ###"; aws kms list-keys --region $region --query "Keys[].KeyId" --output text | tr '\t' '\n';
|
|
done
|
|
```
|
|
### Privesc
|
|
|
|
{{#ref}}
|
|
../aws-privilege-escalation/aws-kms-privesc/README.md
|
|
{{#endref}}
|
|
|
|
### Post Exploitation
|
|
|
|
{{#ref}}
|
|
../aws-post-exploitation/aws-kms-post-exploitation/README.md
|
|
{{#endref}}
|
|
|
|
### Persistence
|
|
|
|
{{#ref}}
|
|
../aws-persistence/aws-kms-persistence/README.md
|
|
{{#endref}}
|
|
|
|
## Riferimenti
|
|
|
|
- [https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|