cmu-sei/kaiju
GitHub: cmu-sei/kaiju
CERT Kaiju 是 Ghidra 的二进制分析扩展插件,提供函数哈希、YARA 规则生成、控制流符号执行分析等恶意软件逆向工程能力。
Stars: 136 | Forks: 39



# CERT Kaiju GHIDRA 二进制分析框架
CERT Kaiju 是用于 [Ghidra](https://ghidra-sre.org) 的二进制分析工具集。
这是 [CERT Pharos 二进制分析框架][pharos] 部分功能的 Ghidra/Java 实现,特别是函数哈希和恶意软件分析工具,但预计随着时间的推移会增加新的工具和功能。
作为一个新的项目,此实现尚未与基于 ROSE 的原始 C++ 实现完全对齐;然而,转向 Java 和 Ghidra 实际上启用了原始框架中不可用的一些新功能——特别是改进了对非 x86 架构的处理。由于框架和工具正在进行重大的重构,而且转向 Java 和 Ghidra 带来了与 C++ 实现不同的能力,因此决定采用新的品牌命名,以便在讨论不同的工具和能力时减少对实现的混淆。
我们在不久的将来的计划是同时维护原有的 Pharos 框架以及 Kaiju,因为两者都可以提供独特的特性和功能。
告诫:作为一个原型,在评估此插件创建的函数哈希时可能会出现许多问题。例如,与 Pharos 实现不同,Kaiju 的函数哈希模块会为非常小的函数(例如,只有像 RET 这样的单条指令的函数)创建哈希,从而导致更多非预期的冲突)。因此,此插件的分析结果可能与 Pharos fn2hash 有所不同。
## 安装
我们提供 [预构建的 Kaiju 包][prebuilts]。只需下载与您的 Ghidra 版本对应的 ZIP 文件,并按照下面的说明进行安装。建议通过 Ghidra 的图形界面进行安装,但也可以手动解压到相应的目录来安装。
CERT Kaiju 需要以下运行时依赖:
- [Ghidra](https://ghidra-sre.org) 10.3.x, 10.4.x, 11.0.x, 11.1.x, 11.2.x, 11.3.x, 11.4.x, 12.0.x
- JDK 21(旧版 Ghidra 发行版则使用 17)
- [Z3](https://github.com/Z3Prover/z3),包括 Z3 Java bindings .jar
Z3 作为预构建包的一部分已预编译提供,您也可以自行构建 Z3 或使用您 Linux 发行版的软件包。
### 图形化安装
启动 Ghidra,在起始窗口中,从菜单中选择:`File > Install Extension`。点击扩展窗口顶部的加号,在文件浏览器中导航并选择 .zip 文件,然后点击 OK。扩展将被安装,窗口中扩展名称旁边会出现一个复选框,提示您它已安装并准备就绪。
界面会要求您重启 Ghidra 以开始使用该扩展。只需重启,然后 Kaiju 的额外功能将可用于交互式使用或在脚本中使用。
某些功能可能需要启用 Kaiju 插件。为此,打开 Code Browser,然后导航到菜单 `File > Configure`。在弹出的窗口中,点击 "CERT Kaiju" 类别图标下方的 `Configure` 链接。弹窗将显示所有可公开获得的已发布 Kaiju 插件。勾选您希望激活的任何插件,然后点击 OK。您现在将可以访问交互式插件功能。
如果插件启用后没有立即可见,您可以在 Code Browser 的 `Window` 菜单下找到该插件。
未来工具的实验性 "alpha" 版本可能会在 "Experimental" 类别中提供,如果您希望测试它们的话。但是,这些插件绝对是实验性的,不受支持,不建议用于生产环境。不过我们非常欢迎早期的反馈!
### 手动安装
像 Kaiju 这样的 Ghidra 扩展也可以通过将扩展内容解压到 Ghidra 安装的适当目录来手动安装。有关更多信息,请参阅 [Ghidra 安装指南](https://ghidra-sre.org/InstallationGuide.html#Extensions)。
### 自行构建
您也可以直接从源代码构建 Kaiju 扩展。
请参阅 Kaiju 源代码顶级目录中包含的 `INSTALL.md` 文件。
## 使用
Kaiju 的工具既可以通过交互式图形方式使用,也可以通过更适合批处理作业的 "headless" 模式使用。根据工具的性质,某些工具可能仅适用于图形界面或 headless 使用。
### 交互式图形界面
Kaiju 利用 Java Swing 和 Ghidra 的插件架构在 Ghidra 内部创建了一个交互式图形界面 (GUI)。
Kaiju 的大部分工具实际上是分析插件,当选择 "Auto Analysis" 选项时会自动运行,无论是在导入新的可执行文件进行反汇编时,还是直接从代码浏览器窗口选择 `Analysis > Auto Analyze...` 时。您会看到几个 CERT 分析插件在 Auto Analyze 工具中默认被选中,但您可以根据需要启用/禁用任何插件。
但是,必须先运行分析工具,各种 GUI 工具才能工作。在某些极端情况下,甚至可能有助于运行两次 Auto Analysis,以确保生成所有元数据以创建正确的分区和反汇编信息,这反过来会影响哈希结果。
分析器在 Ghidra 的分析阶段自动运行,包括:
- **DisasmImprovements** = 相比标准的 Ghidra 分区,改进了反汇编的函数分区。
- **Fn2Hash** = 计算程序中所有函数的函数哈希,并用于为程序生成 YARA 签名。
GUI 工具包括:
- **GhiHorn** = 一个利用 Z3 计算控制流图中的路径和可达性的插件。
- 从 Ghidra 的 CodeBrowser 中选择 `Kaiju > GhiHorn` 来访问此工具。您也可以通过按 `CTRL-G` 来启动该插件。
- **Function Hash Viewer** = 一个插件,显示程序中函数的交互列表以及多种类型的哈希。分析人员可以使用此工具将程序中的一个或多个函数导出为 YARA 签名。
- 如果该工具尚未可见,请从菜单中选择 `Window > CERT Kaiju Function Hash Viewer` 以开始使用此工具。将出现一个新窗口,显示哈希表和其他数据。窗口顶部的按钮可以刷新表格或将数据导出到文件或 YARA 签名。此窗口也可以停靠在主 Ghidra CodeBrowser 中,以便与其他插件一起更轻松地使用。在使用该工具时,可以在 Ghidra 的 `Help > Contents` 菜单中找到更详细的使用文档。
- **OOAnalyzer JSON Importer** = 一个插件,可以加载、解析 Pharos 生成的 OOAnalyzer 结果,并将其应用于 Ghidra 项目中面向对象的 C++ 可执行文件。启动时,该插件将提示用户输入由 OOAnalyzer 生成的 JSON 输出文件,其中包含有关恢复的 C++ 类的信息。加载 JSON 文件后,OOAnalyzer 发现的已恢复 C++ 数据类型和符号将在 Ghidra Code Browser 中更新。该插件的设计和实现细节在我们的 SEI 博客文章题为 [Using OOAnalyzer to Reverse Engineer Object Oriented Code with Ghidra][ooanalyzer-blog] 中进行了描述。
- 从菜单中选择 `Kaiju > OOAnalyzer Importer` 以开始使用此工具。一个简单的对话框弹出窗口会要求您找到您希望导入的 JSON 文件。在使用该工具时,可以在 Ghidra 的 `Help > Contents` 菜单中找到更详细的使用文档。
### 命令行 "Headless" 模式
Ghidra 还支持 "headless" 模式,允许在某些情况下在不使用交互式 GUI 的情况下运行工具。因此,这些命令可用于脚本编写和大量文件的 "batch mode" 作业。
Headless 工具很大程度上依赖于 Ghidra 的 GhidraScript 功能。
Headless 工具包括:
- **fn2hash** = 自动在给定程序上运行 Fn2Hash 并将所有哈希导出到指定的 CSV 文件
- **fn2yara** = 自动在给定程序上运行 Fn2Hash 并将所有哈希数据作为 YARA 签名导出到指定的文件
- **fnxrefs** = 分析程序并根据入口点地址导出在数据或程序其他部分具有交叉引用的函数列表
我们包含了一个名为 `kaijuRun` 的简单 shell 启动脚本,用于在简单场景下运行这些 headless 命令,例如输出单个可执行文件中每个函数的函数哈希。
假设设置了 `GHIDRA_INSTALL_DIR` 变量,例如,可以按如下方式在单个可执行文件上运行启动脚本:
```
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun fn2hash example.exe
```
此命令会将结果输出到自动命名的文件 `example.exe.Hashes.csv` 中。
运行以下命令可获得 `kaijuRun` 脚本的基本帮助:
```
$GHIDRA_INSTALL_DIR/Ghidra/Extensions/kaiju/kaijuRun --help
```
请参阅存储库中的 `docs/HeadlessKaiju.md` 文件,以获取有关使用此模式和 `kaijuRun` 启动脚本脚本的更多信息。
### 更多文档和帮助
我们提供更全面的文档和帮助,格式有两种。
请参阅 `docs/` 目录,获取所有 Kaiju 工具和组件的 Markdown 格式文档和帮助。这些文档易于维护和编辑,甚至可以从命令行阅读。
或者,您可以在 Ghidra 的内置帮助系统中找到相同的文档。要访问这些帮助文档,从 Ghidra 菜单中,转到 `Help > Contents`,然后从帮助窗口左侧的树形导航中选择 `CERT Kaiju`。
请注意,Ghidra 帮助文档与 `docs/` 目录中的 Markdown 文件内容完全相同;多亏了一个树内 gradle 插件,gradle 会在构建过程中自动解析 Markdown 并导出为 Ghidra HTML。这使得维护更加简单(只需在一个地方更新文档,而不是两个),并保持两者同步。
所有新文档都应添加到 `docs/` 目录中。
## 许可
本软件由卡内基梅隆大学软件工程研究所根据简化版 BSD 风格许可证授权。
请在存储库根目录的 `LICENSE.md` 文件中查找此许可证的完整详细信息,以及本项目中所使用的依赖项的许可条款。
CERT Kaiju 徽标基于由 Cameron Spahn 创作的 [艺术作品][logo],最初根据 [知识共享署名-相同方式共享 4.0 国际许可协议][logo-license] 的条款发布。
标签:CERT, DAST, DNS解析, Ghidra, JS文件枚举, TLS抓取, 二进制分析, 云安全运维, 云资产清单, 函数哈希, 后台面板检测, 域名枚举, 开源项目, 恶意软件分析, 情报收集, 浏览器安全, 漏洞研究, 网络安全, 自动化分析, 跨站脚本, 软件安全, 逆向工程, 隐私保护