# 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**.
Dettagli della Politica 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**
### 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 aws kms list-grants --key-id aws kms describe-key --key-id aws kms get-key-policy --key-id --policy-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}}