GCP - KMS Enum
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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
KMS
The Cloud Key Management Service 用作 cryptographic keys 的安全存储,这些密钥对于像 encrypting and decrypting sensitive data 这样的操作至关重要。密钥被组织在密钥环(key rings)中,便于结构化管理。此外,访问控制可以精细配置,可以在单个密钥级别或整个密钥环级别设置,确保权限与安全需求精确匹配。
KMS 密钥环默认创建为全局(global),这意味着该密钥环中的密钥可以从任何区域访问。然而,也可以在特定的区域创建特定的密钥环。
Key Protection Level
- Software keys:Software keys 完全由 KMS 以软件方式创建和管理。这些密钥不受任何硬件安全模块 (HSM) 保护,适合用于测试和开发目的。由于安全性较低且容易受到攻击,不建议在生产环境中使用 software keys。
- Cloud-hosted keys:Cloud-hosted keys 在云端由 KMS 创建和管理,依赖高可用且可靠的基础设施。这些密钥受 HSM 保护,但 HSM 并不专属于某一客户。cloud-hosted keys 适用于大多数生产场景。
- External keys:External keys 在 KMS 之外创建和管理,并导入到 KMS 以用于加密操作。external keys 可以根据客户偏好存储在硬件安全模块 (HSM) 或软件库中。
Key Purposes
- Symmetric encryption/decryption:用于使用单个密钥对数据进行加密和解密。对称密钥在对大量数据进行加解密时速度快且高效。
- Supported: cryptoKeys.encrypt, cryptoKeys.decrypt
- Asymmetric Signing:用于双方之间的安全通信而无需共享私钥。非对称密钥成对存在,包含一个 public key 和 private key。public key 可共享,private key 保密。
- Supported: cryptoKeyVersions.asymmetricSign, cryptoKeyVersions.getPublicKey
- Asymmetric Decryption:用于验证消息或数据的真实性。数字签名由 private key 创建,可用相应的 public key 进行验证。
- Supported: cryptoKeyVersions.asymmetricDecrypt, cryptoKeyVersions.getPublicKey
- MAC Signing:用于通过使用 secret key 创建消息认证码 (MAC) 来确保数据完整性和真实性。HMAC 常用于网络协议和软件应用中的消息认证。
- Supported: cryptoKeyVersions.macSign, cryptoKeyVersions.macVerify
Rotation Period & Programmed for destruction period
默认情况下,轮换周期为每 90 天,但可以轻松且完全自定义。
“Programmed for destruction” 期间是指从用户请求删除密钥开始到密钥被删除之间的时间。此设置在密钥创建后不可更改(默认 1 天)。
Primary Version
每个 KMS 密钥可以有多个版本,其中一个必须是 默认 版本,当与 KMS 密钥交互且未指定版本时将使用该默认版本。
CMEK permission model
当 Cloud Storage 中的对象使用 CMEK 加密时,对 KMS 的解密/加密调用由项目的 Cloud Storage service agent(其电子邮件为 service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)执行,而不是由直接读取对象的最终用户执行。
这意味着,要读取由 CMEK 加密的内容:
- 项目的 Cloud Storage service agent 必须对所用的 KMS 密钥具有 KMS 权限(通常为
roles/cloudkms.cryptoKeyEncrypterDecrypter)。 - 用户只需对象读取权限(例如
storage.objects.get)。用户不需要对 KMS 密钥的权限。
因此,要控制使用 KMS 密钥加密的数据访问,需要向项目的 Cloud Storage service agent 添加或移除 KMS 权限。
请注意,在项目级别为 Storage service agent 绑定诸如 roles/cloudkms.cryptoKeyEncrypterDecrypter 的角色,仍然允许对同一项目内的密钥进行解密。
Enumeration
拥有列出密钥的权限时,可以按如下方式访问它们:
# List the global keyrings available
gcloud kms keyrings list --location global
gcloud kms keyrings get-iam-policy <KEYRING>
# List the keys inside a keyring
gcloud kms keys list --keyring <KEYRING> --location <global/other_locations>
gcloud kms keys get-iam-policy <KEY>
# Encrypt a file using one of your keys
gcloud kms encrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global
# Decrypt a file using one of your keys
gcloud kms decrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global
权限提升
后利用
参考资料
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
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

