AWS - KMS Enum

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

KMS - Servizio di Gestione Chiavi

Il servizio di gestione chiavi di AWS (AWS KMS) è presentato come un servizio gestito, semplificando il processo per gli utenti di creare e gestire chiavi principali dei clienti (CMK). Queste CMK sono fondamentali per la crittografia dei dati dell'utente. Una caratteristica notevole di AWS KMS è che le CMK sono principalmente protette da moduli di sicurezza hardware (HSM), migliorando la protezione delle chiavi di crittografia.

KMS utilizza la crittografia simmetrica. Questa viene utilizzata per crittografare le informazioni a riposo (ad esempio, all'interno di un S3). Se è necessario crittografare le informazioni in transito è necessario utilizzare qualcosa come TLS.

KMS è un servizio specifico della 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 amministra semplicemente il sistema operativo e l'applicazione sottostante, spetta a noi amministrare le nostre chiavi di crittografia e amministrare come vengono utilizzate tali chiavi.

Chiavi Principali dei Clienti (CMK): Possono crittografare dati fino a 4KB di dimensione. Sono tipicamente utilizzate per creare, crittografare e decrittografare i DEK (Data Encryption Keys). Successivamente i DEK vengono utilizzati per crittografare i dati.

Una chiave principale dei clienti (CMK) è una rappresentazione logica di una chiave principale in AWS KMS. Oltre agli identificatori della chiave principale e ad altri metadati, tra cui la data di creazione, la descrizione e lo stato della chiave, una CMK contiene il materiale chiave utilizzato per crittografare e decrittografare i dati. Quando si crea una CMK, per impostazione predefinita, AWS KMS genera il materiale chiave per quella CMK. Tuttavia, è possibile scegliere di creare una CMK senza materiale chiave e quindi importare il proprio materiale chiave in quella CMK.

Ci sono 2 tipi di chiavi principali:

  • CMK gestite da AWS: Utilizzate da altri servizi per crittografare i dati. Sono utilizzate dal servizio che le ha create in una regione. Vengono create la prima volta che si implementa la crittografia in quel servizio. Ruotano ogni 3 anni e non è possibile cambiarle.

  • CMK gestite dal cliente: Flessibilità, rotazione, accesso configurabile e policy chiave. Abilita e disabilita le chiavi.

Crittografia a Busta Chiusa nel contesto del Servizio di Gestione Chiavi (KMS): Sistema a doppio livello per crittografare i dati con una chiave dati e quindi crittografare la chiave dati con la chiave principale.

Policy Chiave

Queste definiscono chi può utilizzare e accedere a una chiave in KMS.

Per impostazione predefinita:

  • Dà all'account AWS che possiede la chiave KMS pieno accesso alla chiave KMS.

A differenza delle altre policy delle risorse AWS, una policy chiave AWS KMS non concede automaticamente il permesso all'account o a uno qualsiasi dei suoi utenti. Per concedere il permesso agli amministratori dell'account, la policy chiave deve includere una dichiarazione esplicita che fornisce questo permesso, come questa.

  • Senza permettere all'account ("AWS": "arn:aws:iam::111122223333:root") le autorizzazioni IAM non funzioneranno.

  • Consente all'account di utilizzare le policy IAM per consentire l'accesso alla chiave KMS, oltre alla policy chiave.

Senza questo permesso, le policy IAM che consentono l'accesso alla chiave sono inefficaci, anche se le policy IAM che negano l'accesso alla chiave sono comunque efficaci.

  • Riduce il rischio che la chiave diventi ingestibile concedendo il permesso di controllo degli accessi agli amministratori dell'account, compreso l'utente root dell'account, che non può essere eliminato.

Esempio di policy predefinita:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

Se l'account è autorizzato ("arn:aws:iam::111122223333:root") un principale dell'account avrà comunque bisogno di autorizzazioni IAM per utilizzare la chiave KMS. Tuttavia, se l'ARN di un ruolo ad esempio è specificamente autorizzato nella Key Policy, quel ruolo non ha bisogno di autorizzazioni IAM.

Dettagli della Policy

Proprietà di una policy:

  • Documento basato su JSON

  • Risorsa --> Risorse interessate (può essere "*")

  • Azione --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (autorizzazioni)

  • Effetto --> Consentire/Negare

  • Principale --> arn interessato

  • Condizioni (opzionale) --> Condizione per concedere le autorizzazioni

Concessioni:

  • Consentono di delegare le tue autorizzazioni a un altro principale AWS all'interno del tuo account AWS. È necessario crearle utilizzando le API AWS KMS. È possibile indicare l'identificatore CMK, il principale beneficiario e il livello di operazione richiesto (Decrypt, Encrypt, GenerateDataKey...)

  • Dopo che la concessione è stata creata, vengono emessi un GrantToken e un GratID

Accesso:

  • Attraverso la key policy -- Se esiste, questa ha precedenza sulla policy IAM

  • Attraverso la policy IAM

  • Attraverso le concessioni

Amministratori delle Chiavi

Amministratori delle chiavi per impostazione predefinita:

  • Hanno 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 il materiale chiave

Rotazione dei CMK

  • Più a lungo la stessa chiave rimane al suo posto, più dati vengono crittografati con quella chiave, e se quella chiave viene compromessa, più ampia è l'area di 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 è possibile eseguire il processo manualmente quando si desidera) e le chiavi gestite da AWS ogni 3 anni e questo tempo non può essere modificato.

  • Le chiavi più vecchie vengono conservate per decrittografare i dati che sono stati crittografati prima della rotazione

  • In caso di violazione, ruotare la chiave non rimuoverà la minaccia in quanto sarà possibile decrittografare tutti i dati crittografati con la chiave compromessa. Tuttavia, i nuovi dati verranno crittografati con la nuova chiave.

  • Se il CMK è nello stato di disabilitato o cancellazione in sospeso, KMS non eseguirà una rotazione della chiave fino a quando il CMK non viene riattivato o la cancellazione viene annullata.

Rotazione manuale

  • Deve essere creata una nuova CMK, quindi, viene creata una nuova CMK-ID, quindi sarà necessario aggiornare qualsiasi applicazione per fare riferimento alla nuova CMK-ID.

  • Per semplificare questo processo è possibile utilizzare alias per fare riferimento a un key-id e quindi aggiornare la chiave a cui l'alias si riferisce.

  • È necessario mantenere le vecchie chiavi per decrittografare i vecchi file crittografati con esse.

È possibile importare chiavi dalla propria infrastruttura chiave on-premises.

Altre informazioni rilevanti su KMS

KMS ha un costo per il numero di richieste di crittografia/decrittografia ricevute da tutti i servizi al mese.

KMS ha una completa integrazione di audit e conformità con CloudTrail; qui è possibile controllare tutte le modifiche effettuate su KMS.

Con la policy KMS è possibile fare quanto segue:

  • Limitare chi può creare chiavi dati e quali servizi hanno accesso per utilizzare queste chiavi

  • Limitare l'accesso dei sistemi a crittografare solo, decrittografare solo o entrambi

  • Definire di abilitare i sistemi ad accedere alle chiavi tra le regioni (anche se non è consigliato poiché un guasto nella regione che ospita KMS influirà sulla disponibilità dei sistemi nelle altre regioni).

Non è possibile sincronizzare o spostare/copiare chiavi tra regioni; è possibile solo definire regole per consentire l'accesso tra le regioni.

Enumerazione

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

Privesc

pageAWS - KMS Privesc

Post Exploitation

pageAWS - KMS Post Exploitation

Persistenza

pageAWS - KMS Persistence

References

Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated