cyber-defence-campus/mole

GitHub: cyber-defence-campus/mole

Mole 是一个 Binary Ninja 插件,通过静态反向切片识别二进制文件中的有价值执行路径,辅助漏洞挖掘和分析。

Stars: 77 | Forks: 3

[![发布版本](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/97631f1913081837.svg)](https://github.com/pdamian/mole/actions/workflows/release.yml) [![版本号](https://img.shields.io/github/v/release/cyber-defence-campus/mole)](https://img.shields.io/github/v/release/cyber-defence-campus/mole) # Mole

Mole Logo

**_Mole_** 是一个 *Binary Ninja* 插件,旨在识别二进制文件中**有价值的执行路径**。它利用 *Binary Ninja* 的 [*中层中间语言* (*MLIL*)](https://docs.binary.ninja/dev/bnil-mlil.html) 中的*静态单赋值* (*SSA*) 形式,对变量执行**反向切片**,以此作为**静态污点分析**的基础。 在 *Mole* 中,**路径**指的是数据在定义的源点和汇点之间的流向。何为“有价值”的路径取决于分析目标。例如,在寻找**漏洞**时,可能会寻找不可信输入(源点)以潜在危险方式影响敏感操作(汇点)的路径。 以下列表概述了 *Mole* 当前的部分**功能**: - **运行模式**:*Mole* 可以在 *Binary Ninja* 的图形界面内运行,也可以在无头模式下运行。无头模式特别适用于对大量二进制文件进行脚本化分析。相反,在图形界面内使用 *Mole* 则适合对检测到的路径进行深入调查。 - **路径识别**: - **配置**:*Mole* 允许用户通过 Binary Ninja 的界面或配置文件来定义源点和汇点函数(参见 [使用说明](./docs/02-Usage.md#source-and-sink-functions))。这提供了根据具体使用场景灵活选择源点和汇点的能力。 - **探索**:为了更好地理解一条路径并检查其特征,可以打印或在 *Binary Ninja* 内视觉高亮显示路径上的所有指令。此外,可以并排显示两条路径进行比较,以快速识别差异。与指令类似,一条路径的函数调用序列也可以被打印或可视化为图形。 - **分组**:为便于识别相似路径,*Mole* 支持多种分组策略。目前,路径可以基于匹配的源点和汇点函数进行分组,或者按相同的调用序列分组。可以轻松添加新的自定义分组策略来扩展和定制此功能(参见 [自定义](./docs/03-Customization.md#path-grouping-strategy))。 - **持久化**:发现的路径可以添加注释以增加清晰度,或在被认为不相关时删除。为了保存分析进度,路径可以直接保存到目标二进制文件的数据库(*Binary Ninja* 的 `.bndb` 格式)。路径也可以被导出,例如,当在文件系统中对多个二进制文件执行无头分析时,允许后续导入已识别的路径以便在 *Binary Ninja* 内进行更方便的探索。 - **AI 辅助路径分析**:*Mole* 可以通过 *OpenAI API* 与本地或远程的*大型语言模型* (*LLMs*) 进行交互(参见 [使用说明](./docs/02-Usage.md#ai-analysis-mode))。这些模型用于分析已识别的路径,并推理给定路径是否对应于一个可利用的漏洞。*LLM* 会尝试对漏洞进行分类并分配严重性等级,这有助于分析师确定哪些路径值得进一步调查。*Mole* 提供了一组基本工具,供 *LLM* 用于请求关于被分析二进制文件的额外信息。 - **跨过程变量切片**:*Mole* 支持跨函数边界切片 *MLIL 变量* —— 这是一项颇具挑战性的任务。例如,静态确定一个函数的有效调用者通常很困难,甚至是不可能的。因此,实现的是一种近似方法。虽然并非完美,但在广泛的实用场景中表现良好。 - **基本指针分析**:*Mole* 目前实现了一种简化的策略来跟踪指针使用。与跨过程切片类似,这种方法是一种简化,存在固有的局限性(例如,它无法跟踪全局变量)。尽管如此,它在许多实际案例中表现良好,并计划在未来版本中进行改进。 ## 使用示例 观看 *Mole* 在揭示 [CVE-2021-4045](https://www.hacefresko.com/posts/tp-link-tapo-c200-unauthenticated-rce) 过程中的表现,这是一个 *TP-Link Tapo C200* IP 摄像头中的未经认证的命令注入漏洞(**点击下方图片在 YouTube 上观看**): [![Mole 使用示例](https://img.youtube.com/vi/jCn7ePhjYNk/maxresdefault.jpg)](https://www.youtube.com/watch?v=jCn7ePhjYNk) ## 文档 1. [安装说明](./docs/01-Installation.md) 2. [使用说明](./docs/02-Usage.md) 3. [自定义](./docs/03-Customization.md) ## 贡献或分享您的经验 *Mole* 目前仍处于**开发中**。如果您遇到错误、有一个能有效揭示误报或漏报的有用新单元测试,或者对新功能有建议,请考虑提交 issue 或通过 pull request 进行贡献。另请注意,当前的[单元测试](./test/src/)迄今为止仅在 `linux-x86_64` 和 `linux-armv7` 二进制文件上验证过。 如果您有有趣的**成功案例** —— 例如借助 *Mole* 发现了漏洞 —— 我们很乐意听到!请随时与我们分享您的经验。 ## 贡献者 - [Damian Pfammatter](https://github.com/pdamian),[Cyber-Defence Campus (armasuisse S+T)](https://www.cydcampus.admin.ch/en) - [Daniel Hulliger](https://github.com/dhulliger),[Cyber-Defence Campus (armasuisse S+T)](https://www.cydcampus.admin.ch/en) - [Sergio Paganoni](https://github.com/wizche)
标签:Binary Ninja, MLIL, Petitpotam, SSA, TLS抓取, UI模式, 二进制分析, 二进制安全, 云安全监控, 云安全运维, 云资产清单, 向后切片, 情报收集, 执行路径, 插件, 无头模式, 源与汇, 漏洞研究, 脚本化分析, 自动化分析, 跨站脚本, 路径配置, 软件安全, 逆向工具, 逆向工程, 静态分析, 静态单赋值