AWS 留后门之 Assume role
AWS 留后门之 Assume role

AWS 留后门之 Assume role

攻击场景

云平台渗透中很多思路和方法论其实和传统网络如果攻击的方法论有一些相通的地方,当通过 aws aksk 拿到 aws 控制台权限(前面前文章)后,攻击者第一时间不会去翻资料,也是去留一些后门,Assume Role 便是其中一种,对于云上 IAM 的各类角色,很多云安全团队可能一个月都不会去巡检一次,特别是对于小公司更会忽略这些细节,有限的人员带宽更多的是忙于处理日常“救火”的事项。

什么是 AssumeRole

AssumeRole 是 AWS 上的一个访问策略,对于正常业务来说 AssumeRole 用于跨账户访问,例如:当账户 A 需要跨账户访问账户 B 的时候,可使用该服务。但是对于攻击者,这就是一个妥妥的后门服务,比如攻击者拿下了 B 账号的控制台,可通过 Assume 来配置一个策略,让自己的账户可以直接访问 B 账户。

AssumeRole 配置 demo

攻击者自己的账号配置(攻击自己的账号为A账号,被配置后门的账号假设为 B 账号)

IAM的当前账户下添加一个内敛策略

以下为 AssumeRole 策略的 JSON 格式,复制添加到内敛策略中,修改为 B 账号的 ID 和 role,这个 role 符合命名规范就好,后续在 B 账户中需要创建该 role,修改好后点击查看策略再保存

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::B账号:role/B账号中创建的role"
    }
}

B 账号配置(被留后门的账号)

账户 B 的 IAM 角色选项中,点击创建角色,按照下图添加一个来源账户A的ID,相当于账户ID白名单。

下一步是选择权限策略,这个相当于 A 来访问 B,B 账号给予 A 账号的权限是什么

Role 的名称写 A 中创建的时候命名的角色,相当于角色名称白名单

使用 Assume Role

攻击者自己的账号 A 中,账户中右上角点击切换角色

填写 B 账户的 ID 和 Role 名称点击切换,即可通过 AssumeRole 切换过去