AWS - STS Enum

支持 HackTricks

STS

AWS 安全令牌服务 (STS) 主要用于发放 临时、有限权限的凭证。这些凭证可以为 AWS 身份与访问管理 (IAM) 用户或经过身份验证的用户(联合用户)请求。

鉴于 STS 的目的是 发放身份冒充的凭证,该服务对于 提升权限和维持持久性 极为重要,尽管它可能没有广泛的选项。

假设角色冒充

AWS STS 提供的 AssumeRole 操作至关重要,因为它允许一个主体获取另一个主体的凭证,实质上是冒充他们。调用时,它会返回一个访问密钥 ID、一个秘密密钥和一个与指定 ARN 对应的会话令牌。

对于渗透测试者或红队成员来说,这种技术对于权限提升至关重要(如 这里 所述)。然而,值得注意的是,这种技术相当显眼,可能不会让攻击者感到意外。

假设角色逻辑

为了在同一账户中假设角色,如果 要假设的角色特别允许一个角色 ARN,如:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:role/priv-role"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}

角色 priv-role 在这种情况下,不需要特别允许 假设该角色(只要有该允许就足够了)。

然而,如果一个角色允许一个账户假设它,就像在:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}

该角色尝试假设它将需要对该角色的 特定 sts:AssumeRole 权限 以假设它

如果您尝试从 不同账户 假设一个角色,则 被假设的角色必须允许它(指明角色的 ARN外部账户),并且 尝试假设 另一个角色的 角色必须 具有假设它的权限(在这种情况下,即使被假设的角色指定了 ARN,这也不是可选的)。

Enumeration

# Get basic info of the creds
aws sts get-caller-identity
aws sts get-access-key-info --access-key-id <AccessKeyID>

# Get CLI a session token with current creds
## Using CLI creds
## You cannot get session creds using session creds
aws sts get-session-token
## MFA
aws sts get-session-token --serial-number <arn_device> --token-code <otp_code>

Privesc

在以下页面中,您可以查看如何滥用 STS 权限以提升特权

Post Exploitation

Persistence

References

支持 HackTricks

Last updated