如何在 Linux 内核空间中使用 DynamoRIO 或类似的东西?

逆向工程 工具 动态分析 发电机
2021-07-03 06:24:31

我发现一些大学正在将DynamoRIO(或非常相似的东西)移植到 Linux 内核空间,但代码似乎不可用。是否有我不知道的资源?

这是一个例子。

3个回答

是的,有 DynamoRIO Kernel (DRK),它是由多伦多大学 (U of T) 的 Peter Feiner 创建的 DynamoRIO (DR) 端口。当前DR源树;然而,不包含DRK,尽管存在一个分支。DRK 尚未开源,多伦多大学正在积极使用 DRK 和新的 DBT 框架进行内核 DBT 研究。

如果您正在考虑自己移植它,那么两个主要挑战是:

  • 中断以及它们如何与代码缓存交互。DRK 采取了“直接端口”的方法。例如,DR 使用线程私有代码缓存,DRK 使用 CPU 私有代码缓存。这导致了很多麻烦,包括透明度和中断。
  • 您想要什么级别的透明度。DR 的设计考虑了很多透明度,DRK 信守了这一承诺。到目前为止,我在内核检测方面的经验是,它表现得非常好(除非您关心一小部分设备驱动程序)。可以牺牲几个方面的透明度,但这在一般 DR 框架内更具挑战性。

DynamoRIO Google Code 项目中有一个分支叫做“DRK”commit 1323有日志消息“DRK: DynamoRIO as a Linux kernel module”。应该包含您正在寻找的代码,但因为在我无法保证之前我没有使用过 DynamoRIO。

最近发布了两个新的内核检测系统,其中我是其中一个的创建者:

  1. Granary,主要专注于模块检测。这是我创造的仪器。Granary 在内部使用 DynamoRIO 的一部分,但工作方式却大不相同。Granary 的目标是使开发调试和分析工具变得容易。HotDep'13 中将有一篇关于构建在 Granary 之上的主要内存调试工具的论文。
  2. btkernel,最近发布的完整内核检测系统。您可以在 SOSP'13 中找到有关 btkernel 的论文。