Akhil-1527/aws-iam-privesc-finder
GitHub: Akhil-1527/aws-iam-privesc-finder
一款专注于静态分析 AWS IAM 策略的 Python 工具,用于在红队评估和安全审查中发现已知的权限提升路径。
Stars: 0 | Forks: 0
# aws-iam-privesc-finder

一个 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, 云基础设施安全, 云安全监控, 协议分析, 反取证, 威胁检测, 安全评估, 无后门, 权限提升, 目标导入, 身份与访问管理, 逆向工具, 静态分析