Mole 是一个 Binary Ninja 插件,旨在识别二进制文件中的有趣的执行路径。它使用 Binary Ninja 的 Medium Level Intermediate Language (MLIL) 的 Static Single Assignment (SSA) 形式对变量执行逆向切片,为静态污点分析奠定基础。
在 Mole 中,路径是指数据在定义的源(source)与汇(sink)之间的流动。什么构成“有趣”的路径取决于分析目标。例如,在搜索漏洞时,可能会查找不受信任的输入(源)影响敏感操作(汇)且可能造成危险的路径。
以下列表突出显示了 Mole 当前的一些特性:
操作模式:Mole 可以在 Binary Ninja 的用户界面内运行,也可以在无头(headless)模式下运行。无头模式对于跨大量二进制文件的脚本化分析特别有用。相反,在用户界面中使用 Mole 则非常适合深入检查检测到的路径。
路径识别:
.bndb 格式)中。路径也可以导出,例如,在对文件系统上的许多二进制文件进行无头分析时,可以将识别出的路径导出,以便稍后在 Binary Ninja 中导入并更方便地探索。利用 AI 进行路径分析:Mole 可以通过 OpenAI API 与本地或远程的大型语言模型 (LLMs) 交互(见 使用)。这些模型用于分析已识别的路径,并推断给定路径是否对应一个可利用的漏洞。LLM 会尝试对漏洞进行分类并指定严重性级别,这有助于分析师确定哪些路径值得进一步调查。Mole 提供了一套基本的工具,供 LLM 用来请求有关所分析二进制文件的更多信息。
跨过程变量切片:Mole 支持跨函数边界对 MLIL 变量进行切片——这是一项具有多重挑战的任务。例如,静态确定函数的有效调用者通常很困难甚至不可能。因此,所实现的方法是一种近似。虽然不完美,但在广泛的实用场景中表现相当不错。
基础指针分析:Mole 当前实现了一种简化的策略来跟踪指针的使用。与跨过程切片一样,这种方法是一种简化,存在固有局限(例如,无法跟踪全局变量)。尽管如此,它在许多实际情况下表现良好,并计划在未来的版本中加以改进。
观看 Mole 实际展示 CVE-2021-4045 的演示,这是一个 TP-Link Tapo C200 IP 摄像头中的未授权命令注入漏洞(点击下方图片在 YouTube 上观看):
Mole 目前是一个正在进行中的项目。如果您遇到错误、有有用的新单元测试可以突出误报或漏报,或者有新功能的建议,请考虑提交 issue 或通过 pull request 贡献。另请注意,目前的 单元测试 仅在 linux-x86_64 和 linux-armv7 二进制文件上经过验证。
如果您有一个有趣的成功故事——例如借助 Mole 发现了漏洞——我们很乐意倾听!欢迎与我们分享您的经验。