gpamarthy/domino
GitHub: gpamarthy/domino
AWS 攻击链证明工具,通过构建权限图定位可串联的多步骤权限提升路径。
Stars: 0 | Forks: 0
# 多米诺
AWS 攻击链证明工具。获取 IAM 快照(或实时凭证),构建主体与资源的有向图,然后在服务边界之间查找多步骤权限提升路径。核心思想是:Prowler/ScoutSuite 会告诉你 200 个独立的配置错误,而 Domino 会告诉你其中哪 5 个可以串联成实际的账户接管。
## 安装
```
pip install .
```
开发环境:
```
pip install -e '.[dev]'
```
需要 Python 3.10+。
## 快速开始
**演示模式**(内置测试快照,无需 AWS 凭证):
```
$ domino --demo
```
```
domino found 3 exploit chains
# Score Tactic Chain Target
1 10.0 PassRole+Lambda user/dev-user role/admin-lambda-role
Escalation →[Create+PassRole]→
role/admin-lambda-role
2 10.0 PassRole+Lambda user/dev-user role/admin-role
Escalation →[Create+PassRole]→
role/admin-role
3 8.8 Role Assumption user/dev-user →[AssumeRole]→ role/admin-role
Chain role/staging-role
→[AssumeRole]→ role/admin-role
```
**使用 AWS 配置文件进行实时采集**:
```
domino --profile prod -s arn:aws:iam::123456789012:user/dev
```
**从 JSON 快照读取,带详细树形输出与 JSON 导出**:
```
domino --snapshot ./recon.json -v --json-out chains.json
```
## 工作原理
Domino 构建一个 `networkx.MultiDiGraph`,节点包括 IAM 用户、角色、S3 存储桶、EC2 实例与 Lambda 函数。边表示一个资源对另一个资源可执行的动作。
**边类型:**
| 边 | 含义 | 权重 |
|----|------|------|
| `assume_role` | STS AssumeRole | 1(容易) |
| `pass_role` | iam:PassRole 权限 | 2(中等) |
| `uses_role` | 结构性:资源以此角色运行 | 0 |
| `s3_trigger` | S3 事件通知触发 Lambda | 1 |
| `imds_creds` | EC2 实例元数据凭证窃取 | 1 |
| `create` | 创建资源并传递角色(例如创建具有管理员角色的 Lambda) | 2 |
| `iam_escalate` | 通过 IAM 策略操作自我提升管理员权限 | 1 |
| `lambda_hijack` | 更新现有 Lambda 代码以窃取其执行角色 | 2 |
构建完图后,它会找出从起始主体到“有趣”目标(管理员角色、可自我提升的主体)的所有路径,并与 12 种内置攻击战术进行匹配:
- **PassRole + Lambda 提升**——创建具有特权角色的 Lambda
- **通过 S3 的混淆代理(Confused Deputy)**——Capital One 模式:S3 通知 -> Lambda -> 角色
- **角色假设链**——通过 2 个或更多角色假设跳转
- **EC2 IMDS 凭证窃取**——从实例元数据窃取凭证
- **PassRole + EC2/Glue/CloudFormation/SageMaker/CodeBuild**——创建具有特权角色的资源
- **IAM 策略自我提升**——附加或放置策略以授予自身管理员权限
- **Lambda 代码劫持**——覆盖现有 Lambda 以窃取其角色
- **直接 IAM 操作**——单跳直达管理员
每条链会根据战术严重性、跳转次数、边权重以及目标是否为管理员角色进行评分(0–10)。
## 不做什么
- **仅单区域。**使用 `--region` 选择区域;不构建跨区域图。
- **不评估 SCP 或拒绝策略。**如果 SCP 阻止 `sts:AssumeRole`,Domino 无法感知。它只读取允许策略。
- **资源策略支持有限。**解析 S3 存储桶策略(用于公开访问检测与混淆代理链),但 Lambda 资源策略、KMS 授权尚未建模。
- **评分基于经验。**权重与乘数系统可用,但尚未在大量真实环境验证。
- **不支持 Organizations。**仅支持单账户。
- **实时采集需要广泛读取权限。**调用 `iam:Get*`、`iam:List*`、`s3:ListAllMyBuckets`、`ec2:Describe*`、`lambda:List*`、`lambda:GetFunction`。
## 存在的原因
每个 AWS 安全扫描器都会孤立地发现配置错误:“这个角色拥有 `*` 权限”、“那个用户可以传递角色”。这些信息有用,但无法回答关键问题:攻击者能否将这些错误串联起来真正获取管理员权限?Domino 构建图并证明可行的攻击链。取代对 200 个发现逐条分析,你只需关注那 5 条真正构成攻击路径的关联。
标签:AssumeRole, AWS, DPI, EC2, IaC, IAM, Lambda, PassRole, Privilege Escalation, Prowler, Python, S3, ScoutSuite, SEO, 关键词, 协议分析, 反取证, 多步骤攻击, 安全评估, 攻击链, 无后门, 权限提升, 权限滥用, 结构化查询, 网络图, 自动化安全, 跨服务攻击, 路径搜索, 逆向工具