Akhil-1527/aws-iam-privesc-finder

GitHub: Akhil-1527/aws-iam-privesc-finder

一款专注于静态分析 AWS IAM 策略的 Python 工具,用于在红队评估和安全审查中发现已知的权限提升路径。

Stars: 0 | Forks: 0

# aws-iam-privesc-finder ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/433aa5d33a232514.svg) 一个 Python CLI 工具,用于分析附加到目标 AWS 用户或角色的 IAM 策略,并在攻击者之前识别已知的**提权路径**。专为授权的红队评估和内部云安全审查而构建。 ## 功能特性 - 开箱即用覆盖 **16 种提权技术**(参见[检测到的技术](#detected-techniques)) - **静态只读分析** — 使用 `arn:aws:iam::aws:policy/ReadOnlyAccess` 凭证即可运行 - 包含 MITRE ATT&CK 映射和修复建议的 **Markdown 和 JSON 报告** - 带有颜色编码风险级别的 **Rich 格式化 CLI 输出** - 用于 CloudTrail 运行时检测的 **Sigma 规则** - **对 CI 友好的退出代码** — 存在发现时退出代码为 `2`,无发现时为 `0` ## 安装 ``` git clone https://github.com/Akhil-1527/aws-iam-privesc-finder.git cd aws-iam-privesc-finder pip install -r requirements.txt pip install -e . ``` 需要 Python 3.10+。 ## 用法 ``` # 使用默认 AWS profile 分析用户 aws-privesc-finder --user alice # 使用特定 profile 分析角色,并写入两种报告格式 aws-privesc-finder \ --profile staging \ --role-arn arn:aws:iam::123456789012:role/DevRole \ --output both \ --output-dir ./reports # 分析用户,仅输出 JSON(通过管道传入您的 SIEM/SOAR) aws-privesc-finder --user bob --output json --no-console > findings.json # 用于调试枚举期间权限问题的 Verbose 模式 aws-privesc-finder --user alice --verbose ``` ### CLI 标志 | 标志 | 描述 | | ---------------- | -------------------------------------------------------------- | | `--profile` | AWS 配置文件名称(默认为环境变量 / 默认配置文件)。 | | `--region` | 区域覆盖(大多数 IAM API 调用是与区域无关的)。 | | `--user` | 要分析的 IAM 用户名。 | | `--role-arn` | 要分析的 IAM 角色 ARN(或角色名称)。 | | `--output` | `console`(默认),`markdown`,`json` 或 `both`。 | | `--output-dir` | 写入报告文件的路径(默认:当前目录)。 | | `--report-name` | 报告文件的基础文件名(默认:`privesc-report`)。 | | `--no-console` | 抑制 Rich 控制台摘要(在通过管道传输 JSON 时很有用)。 | | `--verbose` | 调试级别的日志记录。 | ### 示例输出 ``` ─────────────────── Privesc Finder ─────────────────── AWS IAM Privesc Finder v1.0 Target: arn:aws:iam::123456789012:user/test Policies examined: 3 ────────────────────────────────────────────────────── FINDINGS (2 critical, 1 high) # Risk Technique MITRE Matched Permissions ───────────────────────────────────────────────────────────────────────────────────────────────── 1 CRITICAL iam:CreatePolicyVersion T1078.004 iam:CreatePolicyVersion 2 CRITICAL iam:PassRole + lambda:CreateFunction + T1059 iam:PassRole, lambda:CreateFunction, lambda:InvokeFunction lambda:InvokeFunction 3 HIGH sts:AssumeRole chain T1548.005 sts:AssumeRole [CRITICAL] iam:CreatePolicyVersion Permissions matched: iam:CreatePolicyVersion Remediation: Remove iam:CreatePolicyVersion from this principal, or constrain it with a Resource ARN list and a condition limiting the maximum policy version count. MITRE: T1078.004 ``` ## 检测到的技术 每条规则都记录在 [`docs/techniques.md`](docs/techniques.md) 中。 | # | 技术 | 风险 | MITRE | | - | --------- | ---- | ----- | | 1 | `iam:CreatePolicyVersion` | CRITICAL | T1078.004 | | 2 | `iam:SetDefaultPolicyVersion` | HIGH | T1078.004 | | 3 | `iam:PassRole` + `ec2:RunInstances` | CRITICAL | T1078.004 | | 4 | `iam:PassRole` + `lambda:CreateFunction` + `lambda:InvokeFunction` | CRITICAL | T1059 | | 5 | `iam:PassRole` + `glue:CreateDevEndpoint` | HIGH | T1078.004 | | 6 | `iam:CreateAccessKey` | CRITICAL | T1098.001 | | 7 | `iam:CreateLoginProfile` | CRITICAL | T1098.001 | | 8 | `iam:UpdateLoginProfile` | CRITICAL | T1098.001 | | 9 | `iam:AttachUserPolicy` | CRITICAL | T1098 | | 10 | `iam:AttachRolePolicy` | CRITICAL | T1098 | | 11 | `iam:PutUserPolicy` | CRITICAL | T1098 | | 12 | `iam:AddUserToGroup` | CRITICAL | T1098 | | 13 | `sts:AssumeRole` 链 | HIGH/MEDIUM | T1548.005 | | 14 | `iam:UpdateAssumeRolePolicy` | CRITICAL | T1098 | | 15 | `cloudformation:CreateStack` + `iam:PassRole` | HIGH | T1078.004 | | 16 | `codebuild:CreateProject` + `iam:PassRole` | HIGH | T1059 | ## 检测指南 静态分析告诉你*谁可能*进行提权。将其与 [`detections/sigma/iam_privesc_techniques.yml`](detections/sigma/iam_privesc_techniques.yml) 中的 Sigma 规则结合使用,以便在*运行时尝试*提权时发出警报。 使用 [pySigma](https://github.com/SigmaHQ/pySigma) 转换为你所使用的 SIEM: ``` pip install pysigma pysigma-backend-splunk pysigma-pipeline-aws sigma convert -t splunk -p cloudtrail detections/sigma/iam_privesc_techniques.yml ``` 建议的 CloudTrail 警报: - **`setAsDefault=true` 的 `iam:CreatePolicyVersion`** — 调查每一次出现的情况 - **`requestParameters.userName != userIdentity.userName` 的 `iam:CreateAccessKey`** — 横向移动信号 - **对其他用户的 `iam:UpdateLoginProfile`** — 账户接管模式 - **附加了 `AdministratorAccess` 的 `iam:AttachUserPolicy` / `AttachRolePolicy`** — 提权警报 - **`userIdentity.type=AssumedRole` 再次调用 AssumeRole 的** AssumeRole 链 ## 所需的 IAM 权限 该工具仅执行读取操作 — 绝不会修改状态。建议附加的策略: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:Get*", "iam:List*", "sts:GetCallerIdentity" ], "Resource": "*" } ] } ``` `AccessDenied` 错误会被优雅地处理并在 DEBUG 级别记录日志;缺失的策略只是不会出现在发现结果中。 ## 限制 当前实现仅评估**基于身份的策略**。它尚未建模: - 基于资源的策略(S3 存储桶策略、KMS 密钥策略、Lambda 资源策略等) - 服务控制策略(SCP)或权限边界 - 在 AssumeRole 时传递的会话策略 - 条件键(`aws:RequestTag`、`aws:SourceIp`、MFA 等) - 跨账户信任策略的细微差别(ExternalId 等) 请将一份“干净”的报告视为“没有可静态检测到的基于身份的策略的路径”,而**不是**“该主体在任何条件下都是安全的”。请将其与手动审查和运行时检测相结合。 ## 开发 ``` pip install -e ".[dev]" pytest -v ``` 测试套件包含针对所有 16 条检测规则的正面和负面测试用例,以及枚举器/报告器的单元测试。 ## 参考 - Spencer Gietzen,[AWS IAM 提权 – 方法与缓解](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) (Rhino Security Labs) - [Pacu](https://github.com/RhinoSecurityLabs/pacu) — AWS 渗透测试框架 - [PMapper](https://github.com/nccgroup/PMapper) — 主体映射 IAM 分析器 - [MITRE ATT&CK – 云矩阵](https://attack.mitre.org/matrices/enterprise/cloud/aws/) ## 免责声明 本工具旨在**仅用于授权的安全评估**。在没有明确书面测试许可的情况下,对你不拥有的账户运行它,可能会违反 AWS 可接受使用政策以及适用的法律。作者对滥用不承担任何责任。 ## 许可证 MIT — 参见 [LICENSE](LICENSE)。
标签:AMSI绕过, AWS, Cloudflare, CloudTrail, CSV导出, DPI, IAM, MITRE ATT&CK, Python, Sigma规则, SOAR, 云基础设施安全, 云安全监控, 协议分析, 反取证, 威胁检测, 安全评估, 无后门, 权限提升, 目标导入, 身份与访问管理, 逆向工具, 静态分析