关于 performing-cloud-penetration-testing-with-pacu
面向获授权的 AWS 安全测试人员,指导使用 Pacu 开展云渗透测试。内容涵盖 IAM 枚举、权限提升、数据访问、横向移动及检测验证,并强调授权范围与清理。
主要功能
- 01枚举 IAM 用户、角色与策略
- 02扫描权限提升路径
- 03评估数据访问与横向移动
- 04检查 GuardDuty 检测结果
适用场景
- 01验证 IAM 权限配置
- 02模拟凭证泄露后的影响
- 03开展 AWS 红队演练
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-cloud-penetration-testing-with-pacu安装后在 Claude Code 中输入/performing-cloud-penetration-testing-with-pacu确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 Pacu 进行云渗透测试
何时使用
- 在对 AWS 环境进行授权渗透测试时
- 在验证 IAM 策略、SCP 和权限边界的有效性时
- 在评估一组已泄露 AWS 凭证的影响范围时
- 在测试 GuardDuty、Security Hub 和自定义告警的检测能力时
- 在针对 AWS 云基础设施构建红队演练时
请勿使用于对任何 AWS 账户的未授权测试、对 AWS 基础设施本身的测试(由责任共担模型覆盖)、未经 AWS 批准的 DDoS 或流量攻击,或未经明确授权和 breakglass 流程的生产账户测试。
前提条件
- 来自 AWS 账户所有者的书面授权,且已定义范围和交战规则
- 已安装 Pacu v1.5+(
pip install pacu) - 具有有限初始权限的测试 AWS 凭证(模拟凭证泄露场景)
- 已启用 CloudTrail 日志记录,以捕获所有 Pacu 活动供事后审查
- 已启用 GuardDuty,以验证对 Pacu 活动的检测
- 已记录紧急联系人和回滚流程
工作流
步骤 1:初始化 Pacu 会话并配置凭证
使用测试凭证设置 Pacu 会话,并定义交战范围。
# Install Pacu
pip install pacu
# Start Pacu
pacu
# Create a new session for the engagement
Pacu > set_keys --key-alias pentest-target
# Enter Access Key ID: AKIA...
# Enter Secret Access Key: ...
# Verify identity
Pacu > whoami
# Review available modules
Pacu > list
Pacu > search iam
Pacu > search ec2
Pacu > search s3
步骤 2:枚举 IAM 配置
运行 IAM 枚举模块,以映射用户、角色、策略和组成员关系。
# Comprehensive IAM enumeration
Pacu > run iam__enum_users_roles_policies_groups
# Enumerate detailed permissions for the current principal
Pacu > run iam__enum_permissions
# Enumerate account authorization details (requires iam:GetAccountAuthorizationDetails)
Pacu > run iam__get_credential_report
# Enumerate role trust policies for cross-account access
Pacu > run iam__enum_roles
# Check current session data
Pacu > data iam
步骤 3:扫描权限提升路径
使用 Pacu 的权限提升扫描器,识别所有可利用的提升向量。
# Run the privilege escalation scanner
Pacu > run iam__privesc_scan
# The scanner tests for 21+ escalation methods:
# Method 1: iam:CreatePolicyVersion
# Method 2: iam:SetDefaultPolicyVersion
# Method 3: iam:PassRole + ec2:RunInstances
# Method 4: iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
# Method 5: iam:PassRole + lambda:CreateFunction + lambda:CreateEventSourceMapping
# Method 6: iam:PassRole + glue:CreateDevEndpoint
# Method 7: iam:PassRole + cloudformation:CreateStack
# Method 8: iam:PassRole + datapipeline:CreatePipeline
# Method 9: iam:CreateAccessKey
# Method 10: iam:CreateLoginProfile
# Method 11: iam:UpdateLoginProfile
# Method 12: iam:AttachUserPolicy
# Method 13: iam:AttachGroupPolicy
# Method 14: iam:AttachRolePolicy
# Method 15: iam:PutUserPolicy
# Method 16: iam:PutGroupPolicy
# Method 17: iam:PutRolePolicy
# Method 18: iam:AddUserToGroup
# Method 19: iam:UpdateAssumeRolePolicy
# Method 20: sts:AssumeRole
# Method 21: lambda:UpdateFunctionCode
# If escalation paths found, attempt exploitation
Pacu > run iam__privesc_scan --escalate
步骤 4:枚举并测试数据访问
发现可访问的数据存储,包括 S3、DynamoDB、RDS 和 Secrets Manager。
# Enumerate S3 buckets
Pacu > run s3__bucket_finder
# Download S3 bucket data for analysis
Pacu > run s3__download_bucket --bucket target-bucket --dl-names
# Enumerate EC2 instances and extract user data
Pacu > run ec2__enum
Pacu > run ec2__download_userdata
# Enumerate Lambda functions and check for secrets in environment variables
Pacu > run lambda__enum
# Enumerate Secrets Manager
Pacu > run secretsmanager__enum
# Enumerate SSM parameters (often contain secrets)
Pacu > run ssm__download_parameters
# Check for exposed EBS snapshots
Pacu > run ebs__enum_snapshots_unauth
步骤 5:测试横向移动和持久化
评估跨账户访问、服务利用和持久化机制。
# Test cross-account role assumption
Pacu > run sts__assume_role --role-arn arn:aws:iam::TARGET:role/CrossAccountRole
# Enumerate Lambda for code execution opportunities
Pacu > run lambda__enum
# If lambda:UpdateFunctionCode permission exists, could inject code
# Test EC2 instance connect for lateral movement
Pacu > run ec2__enum
# Check for instances with instance profiles that have broader permissions
# Check for CodeBuild projects (potential credential access)
Pacu > run codebuild__enum
# Enumerate ECS/Fargate for container-based lateral movement
Pacu > run ecs__enum
# Export all discovered data
Pacu > data all
步骤 6:验证检测并生成报告
审查安全控制是否检测到测试活动,并汇总发现。
# Check GuardDuty findings generated during testing
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
# Check Security Hub findings
aws securityhub get-findings \
--filters '{
"CreatedAt": [{"Start": "ENGAGEMENT_START_ISO", "End": "ENGAGEMENT_END_ISO"}]
}'
# Export Pacu session data for reporting
Pacu > export_keys --all
Pacu > data all > pacu-session-export.json
# Clean up any test artifacts created during assessment
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 利用框架,为授权渗透测试提供模块化攻击能力 |
| 权限提升扫描 | 对 IAM 策略的自动化分析,以识别将权限从有限访问提升至管理控制的已知方法 |
| iam:PassRole | 关键的 IAM 操作,允许主体将角色分配给 AWS 服务,从而通过 Lambda、EC2 或 Glue 实现间接权限提升 |
| 跨账户角色代入 | 通过信任策略配置,使用 sts:AssumeRole 在另一个 AWS 账户中获取临时凭证 |
| 交战规则 | 定义渗透测试交战范围、方法、时间和边界的书面协议 |
| 后利用 | 在初始访问后执行的活动,用于展示影响,包括数据访问、横向移动和建立持久化 |
工具与系统
- 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 Penetration Test Report (Pacu)
=====================================
Target Account: 123456789012
Engagement Period: 2026-02-20 to 2026-02-23
Starting Credentials: Developer role (read-only S3, Lambda invoke)
Authorization: Signed ROE document #PT-2026-015
ATTACK PATH SUMMARY:
Starting access: S3 read-only, Lambda invoke
Maximum access achieved: AdministratorAccess (full account compromise)
Time to admin: 47 minutes
Detection by GuardDuty: Yes (after 12 minutes)
Detection by Security Hub: Yes (after 18 minutes)
SOC response time: 45 minutes (missed the escalation window)
PACU MODULES EXECUTED:
iam__enum_users_roles_policies_groups: SUCCESS
iam__enum_permissions: SUCCESS
iam__privesc_scan: 3 escalation paths found
s3__download_bucket: 4 buckets accessed
lambda__enum: 12 functions enumerated
secretsmanager__enum: 8 secrets retrieved
ESCALATION PATHS EXPLOITED:
[1] iam:PassRole + lambda:CreateFunction -> AdminRole (CRITICAL)
[2] sts:AssumeRole -> CrossAccountProdRole (HIGH)
[3] iam:CreatePolicyVersion on dev-policy (CRITICAL)
DATA ACCESSED:
S3 objects downloaded: 1,247 files (2.3 GB)
Secrets Manager values: 8 secrets including DB credentials
SSM parameters: 23 parameters including API keys
DETECTION RESULTS:
GuardDuty findings generated: 7
Security Hub findings: 12
Custom CloudWatch alarms triggered: 3
SOC acknowledged: Yes (45 min response)
RECOMMENDATIONS:
1. Apply permission boundaries to all developer roles
2. Remove iam:PassRole from non-admin principals
3. Reduce SOC response time to < 15 minutes for IAM escalation alerts
4. Implement SCP blocking iam:CreatePolicyVersion in non-admin OUs
评论
支持 Markdown