AWS - KMS Enum

支持 HackTricks

KMS - 密钥管理服务

AWS 密钥管理服务 (AWS KMS) 被呈现为一种托管服务,简化了用户 创建和管理客户主密钥 (CMK) 的过程。这些 CMK 在用户数据的加密中至关重要。AWS KMS 的一个显著特点是 CMK 主要 由硬件安全模块 (HSM) 保护,增强了加密密钥的保护。

KMS 使用 对称加密。这用于 加密静态信息(例如,在 S3 内部)。如果您需要 加密传输中的信息,则需要使用类似 TLS 的东西。

KMS 是一种 区域特定服务

亚马逊的管理员无法访问您的密钥。他们无法恢复您的密钥,也不会帮助您加密您的密钥。AWS 仅管理操作系统及其底层应用程序,管理我们的加密密钥及其使用方式由我们自己负责。

客户主密钥 (CMK):可以加密最大 4KB 的数据。它们通常用于创建、加密和解密 DEK(数据加密密钥)。然后使用 DEK 来加密数据。

客户主密钥 (CMK) 是 AWS KMS 中主密钥的逻辑表示。除了主密钥的标识符和其他元数据(包括创建日期、描述和密钥状态)外,CMK 包含用于加密和解密数据的密钥材料。当您创建 CMK 时,默认情况下,AWS KMS 会为该 CMK 生成密钥材料。但是,您可以选择创建没有密钥材料的 CMK,然后将自己的密钥材料导入该 CMK。

主密钥有两种类型:

  • AWS 管理的 CMK:由其他服务用于加密数据。它由在区域中创建它的服务使用。它们在您首次在该服务中实现加密时创建。每 3 年轮换一次,无法更改。

  • 客户管理的 CMK:灵活性、轮换、可配置的访问和密钥策略。启用和禁用密钥。

信封加密 在密钥管理服务 (KMS) 的上下文中:两级层次系统,用于 使用数据密钥加密数据,然后使用主密钥加密数据密钥

密钥策略

这些定义了 谁可以使用和访问 KMS 中的密钥

默认情况下:

  • 它赋予 拥有 KMS 密钥的 AWS 账户对 KMS 密钥的完全访问权限

与其他 AWS 资源策略不同,AWS KMS 密钥策略不会自动授予账户或其任何用户权限。要授予账户管理员权限,密钥策略必须包含提供此权限的明确声明,如下所示。

  • 如果不允许账户("AWS": "arn:aws:iam::111122223333:root"),IAM 权限将无效。

  • 允许账户使用 IAM 策略 允许访问 KMS 密钥,除了密钥策略之外。

没有此权限,允许访问密钥的 IAM 策略将无效,尽管拒绝访问密钥的 IAM 策略仍然有效。

  • 通过向账户管理员(包括无法删除的账户根用户)授予访问控制权限,降低密钥变得不可管理的风险

默认策略 示例:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

如果账户被允许"arn:aws:iam::111122223333:root"),则该账户的主体仍然需要IAM权限才能使用KMS密钥。然而,如果某个角色的ARN密钥策略被特别允许,则该角色不需要IAM权限

策略详情

策略的属性:

  • 基于JSON的文档

  • 资源 --> 受影响的资源(可以是"*")

  • 操作 --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ...(权限)

  • 效果 --> 允许/拒绝

  • 主体 --> 受影响的arn

  • 条件(可选) --> 授予权限的条件

授权:

  • 允许将您的权限委托给您AWS账户内的另一个AWS主体。您需要使用AWS KMS API创建它们。可以指明CMK标识符、受赠主体和所需的操作级别(解密、加密、生成数据密钥...)

  • 授权创建后,会发出GrantToken和GrantID

访问

  • 通过密钥策略 -- 如果存在此策略,则优先于IAM策略

  • 通过IAM策略

  • 通过授权

密钥管理员

默认的密钥管理员:

  • 有权管理KMS,但无权加密或解密数据

  • 只有IAM用户和角色可以添加到密钥管理员列表中(不包括组)

  • 如果使用外部CMK,密钥管理员有权限导入密钥材料

CMK的轮换

  • 同一密钥放置的时间越长,使用该密钥加密的数据就越多,如果该密钥被泄露,则数据的风险范围就越大。此外,密钥活动的时间越长,被泄露的概率就越高。

  • KMS每365天轮换客户密钥(或者您可以在任何时候手动执行此过程),AWS管理的密钥每3年轮换一次,且此时间无法更改。

  • 旧密钥被保留以解密在轮换之前加密的数据

  • 在泄露的情况下,轮换密钥不会消除威胁,因为仍然可以解密所有使用被泄露密钥加密的数据。然而,新数据将使用新密钥加密

  • 如果CMK处于禁用待删除状态,KMS将不执行密钥轮换,直到CMK被重新启用或删除被取消。

手动轮换

  • 需要创建一个新CMK,然后创建一个新的CMK-ID,因此您需要更新任何应用程序引用新的CMK-ID。

  • 为了简化此过程,您可以使用别名引用密钥ID,然后只需更新别名所指向的密钥。

  • 您需要保留旧密钥以解密使用其加密的旧文件

您可以从您的本地密钥基础设施导入密钥。

其他相关KMS信息

KMS按每月从所有服务接收的加密/解密请求数量定价。

KMS与CloudTrail有完整的审计和合规集成;这是您可以审计在KMS上执行的所有更改的地方。

使用KMS策略,您可以执行以下操作:

  • 限制谁可以创建数据密钥以及哪些服务可以使用这些密钥

  • 限制系统访问仅加密、仅解密或两者都可以

  • 定义使系统能够跨区域访问密钥(尽管不推荐,因为托管KMS的区域发生故障将影响其他区域系统的可用性)。

您不能在区域之间同步或移动/复制密钥;您只能定义规则以允许跨区域访问。

枚举

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

Privesc

Post Exploitation

Persistence

References

支持 HackTricks

Last updated