AWS - STS Enum

支持 HackTricks

STS

AWS Security Token Service (STS) 主要用于颁发 临时、有限权限的凭证。这些凭证可以为 AWS Identity and Access Management (IAM) 用户或已认证用户(联合用户)请求。

鉴于 STS 的目的是 颁发身份冒充的凭证,该服务对于 提升权限和保持持久性 非常有价值,尽管它可能没有广泛的选项。

Assume Role Impersonation

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

对于渗透测试人员或红队成员来说,这种技术对于权限提升非常有用(如这里所述)。然而,值得注意的是,这种技术相当显眼,可能不会让攻击者措手不及。

Assume Role Logic

如果 要假设的角色特定允许一个角色 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>

提权

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

AWS - STS Privesc

后渗透

AWS - STS Post Exploitation

持久化

AWS - STS Persistence

参考资料

支持 HackTricks

Last updated