brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
performing-cloud-penetration-testing对 AWS、Azure 和 GCP 云环境执行授权渗透测试,识别 IAM 错误配置、暴露的存储桶、过度宽松的安全组、 无服务器函数漏洞以及从初始访问到账户沦陷的云特定攻击路径。测试人员使用云原生工具及 Pacu、 ScoutSuite 等专用框架枚举并利用云基础设施。适用于云渗透测试、AWS 安全评估、Azure 渗透测试 或云基础设施安全测试等请求场景。
Independent GitHub snapshot · Automated classification · Original documentation governs
不适用场景:未同时获得云账户所有者书面授权以及遵守云服务商渗透测试政策(AWS 大多数服务无需事先审批;Azure 和 GCP 某些测试类型需提前通知或审批)。
枚举云环境以映射攻击面:
AWS 枚举:
aws sts get-caller-identity — 验证当前身份和账户aws iam list-users — 列出所有 IAM 用户aws iam list-roles — 列出所有 IAM 角色及其信任策略aws s3 ls — 列出所有 S3 存储桶aws ec2 describe-instances --region us-east-1 — 列出 EC2 实例aws lambda list-functions — 列出 Lambda 函数aws rds describe-db-instances — 列出 RDS 数据库run iam__enum_permissions、run iam__enum_users_roles_policies_groupsAzure 枚举:
az account list — 列出订阅az ad user list — 列出 Azure AD 用户az vm list — 列出虚拟机az storage account list — 列出存储账户az keyvault list — 列出密钥保管库az webapp list — 列出 Web 应用程序跨云:
scout aws --profile <profile> 或 scout azure --cliprowler aws测试 IAM 策略的权限提升路径:
AWS IAM 提权:
aws iam get-user-policy、aws iam list-attached-user-policiesiam:CreatePolicyVersion — 创建授予管理员访问权限的新策略版本iam:SetDefaultPolicyVersion — 将旧版、更宽松的策略版本设为默认iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction — 创建带高权限角色的 Lambdaiam:AttachUserPolicy — 为当前用户附加 AdministratorAccess 策略sts:AssumeRole — 若信任策略允许则担任更高权限角色run iam__privesc_scanAzure 身份提权:
az role assignment list --assignee <user>测试云存储服务的数据暴露情况:
aws s3 ls s3://<bucket> --no-sign-requestaws s3api get-bucket-acl --bucket <bucket>aws s3api get-bucket-policy --bucket <bucket>aws s3api list-object-versions --bucket <bucket>测试计算资源的漏洞:
http://169.254.169.254/latest/meta-data/iam/security-credentials/ 以提取 IAM 角色凭据aws lambda get-function --function-name <name>)并检查硬编码凭据、不安全依赖和注入漏洞aws ec2 describe-instance-attribute --instance-id <id> --attribute userData 查找启动脚本中的凭据测试网络控制的错误配置:
| 术语 | 定义 |
|---|---|
| IAM 权限提升 | 利用过度宽松的 IAM 策略将有限访问权限提升至对云账户的管理控制权 |
| 实例元数据服务(IMDS) | 云实例上提供实例配置和 IAM 角色凭据的 HTTP 端点(169.254.169.254),可通过 SSRF 被利用 |
| 角色担任(Assumed Role) | 用户或服务临时担任的 IAM 角色,以获取其权限;受信任策略约束,定义谁可以担任该角色 |
| SCP(服务控制策略) | AWS Organizations 中的组织级策略,为账户设置权限边界,覆盖 IAM 策略 |
| 托管身份(Managed Identity) | Azure 中相当于 AWS IAM 角色的服务机制,为 Azure 资源提供自动凭据管理 |
| 资源策略 | 附加到云资源(S3 存储桶、Lambda 函数、SQS 队列)的访问控制策略,定义跨账户和公共访问 |
背景:一家 SaaS 公司的整个平台部署在 3 个 AWS 账户(生产、预发布、开发)。测试人员获得了开发账户中的只读 IAM 凭据。目标是确定开发账户是否可用于横向移动至生产账户。
方法:
常见陷阱:
## 发现:跨账户角色信任允许从开发账户横向移动至生产账户
**ID**: CLOUD-002
**严重性**: 严重(CVSS 9.6)
**云服务商**: AWS
**受影响账户**: 生产账户(111222333444)
**利用来源**: 开发账户(555666777888)
**描述**:
生产账户 IAM 角色 "ProdDataAccess" 的信任策略允许开发账户中的
Lambda 执行角色 "LambdaDevRole" 担任该角色。这一跨账户信任结合开发者
修改 Lambda 函数代码的能力,创建了一条从开发只读权限到生产数据访问的路径。
**攻击链**:
1. 枚举开发账户中的 Lambda 函数:aws lambda list-functions
2. 确认 LambdaDevRole 拥有 sts:AssumeRole 权限
3. 修改 Lambda 以担任 ProdDataAccess:aws sts assume-role --role-arn arn:aws:iam::111222333444:role/ProdDataAccess
4. 从已担任角色:aws s3 ls s3://prod-customer-data -> 230 万条客户记录
**影响**:
攻击者只需入侵任一开发者凭据,即可在不直接攻击生产账户的情况下
访问生产客户数据(230 万条记录)。
**修复建议**:
1. 将 ProdDataAccess 信任策略限制为仅允许特定生产角色
2. 从 LambdaDevRole 策略中移除 sts:AssumeRole 权限
3. 实施 AWS Organizations SCP,禁止开发账户进行跨账户角色担任
4. 启用 CloudTrail 对跨账户 AssumeRole 事件的告警
5. 使用开发账户无法访问的 KMS 密钥加密 S3 存储桶