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, 关键词, 协议分析, 反取证, 多步骤攻击, 安全评估, 攻击链, 无后门, 权限提升, 权限滥用, 结构化查询, 网络图, 自动化安全, 跨服务攻击, 路径搜索, 逆向工具