Hacking-the-Cloud项目解析:AWS IAM用户与角色的未授权枚举技术
前言
在云安全领域,AWS IAM(身份和访问管理)系统的安全性至关重要。本文将深入探讨一种特殊的技术场景:如何在未经授权的情况下枚举其他AWS账户中的IAM用户和角色。这项技术最初由Hacking-the-Cloud项目的研究人员发现并整理,对于云安全研究人员和红队成员具有重要参考价值。
技术原理
这项技术的核心在于利用AWS资源策略(Resource-Based Policies)的验证机制。AWS在设计上允许跨账户的资源访问控制,而这种机制可以被巧妙地用于验证目标账户中特定IAM实体的存在性。
关键概念
- 资源策略:AWS中某些服务(如S3)允许通过策略定义谁可以访问该资源
- 跨账户访问:AWS允许一个账户中的资源被另一个账户中的实体访问
- 策略验证机制:AWS在应用策略时会验证策略中引用的实体是否存在
具体实现方法
方法一:S3存储桶策略验证
- 在自己的AWS账户中创建一个S3存储桶
- 为该存储桶设置策略,指定目标账户中的IAM角色或用户作为主体(Principal)
- 根据AWS API的响应判断实体是否存在:
- 策略设置成功 → 目标实体存在
- 策略设置失败 → 目标实体不存在
示例策略片段:
{
"Principal": {
"AWS": "arn:aws:iam::目标账户ID:role/待验证角色名"
},
"Effect": "Deny",
"Action": "s3:ListBucket"
}
方法二:AssumeRole策略验证
- 修改自己账户中某个角色的信任策略
- 在信任策略中添加目标账户中的角色ARN
- 根据策略更新操作的响应判断目标角色是否存在
方法三:控制台根用户验证
通过AWS登录控制台可以验证特定邮箱是否为某AWS账户的根用户:
- 访问AWS控制台登录页面
- 选择"Root user"选项
- 输入待验证邮箱
- 观察响应:
- 提示输入密码 → 邮箱有效
- 显示错误信息 → 邮箱无效
自动化工具
研究人员开发了多种工具来简化这一过程:
-
quiet-riot:支持大规模枚举的工具,可配置字典进行批量测试
- 支持枚举AWS账户ID、根用户邮箱、IAM角色和用户
- 还能验证Azure AD和Google Workspace的有效邮箱
-
Pacu模块:Rhino Security Labs开发的AWS渗透测试框架中的专用模块
注意事项
- 审计痕迹:这些操作会在自己的账户中生成大量CloudTrail日志(如UpdateAssumeRolePolicy、PutBucketPolicy)
- 低可见性:如需保持低可见性,应使用自己的凭证而非目标账户的凭证
- 服务关联角色:此技术也可用于枚举服务关联角色,从而发现目标账户使用的AWS服务
防御建议
对于AWS账户管理员,可以采取以下防护措施:
- 监控异常的PutBucketPolicy和UpdateAssumeRolePolicy事件
- 限制IAM实体的命名规范,避免使用易猜测的名称
- 定期审计账户中的资源策略
- 为根用户邮箱使用独特、不易猜测的地址
总结
这项技术展示了云环境中看似无害的功能如何被用于数据收集。理解这些技术不仅有助于红队进行更全面的安全评估,也能帮助蓝队更好地防御潜在威胁。Hacking-the-Cloud项目提供的这些研究成果,为云安全领域贡献了宝贵的实战知识。
对于安全研究人员而言,掌握这些技术有助于更全面地评估云环境的安全性,但务必在合法授权的前提下使用这些方法。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考