加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

利用Speakeasy仿真执行内核态Rootkits

发布时间:2021-04-12 15:23:51 所属栏目:动态 来源:互联网
导读:可以使用反汇编程序之类的工具对内核模式的样本进行静态分析。但是,二进制加壳程序和用户模式样本一样,容易混淆内核恶意软件。另外,静态分析通常成本较高,且耗费大量时间。如果我们的任务是自动分析同一恶意软件家族的多个变种,那么可以动态分析恶意驱

可以使用反汇编程序之类的工具对内核模式的样本进行静态分析。但是,二进制加壳程序和用户模式样本一样,容易混淆内核恶意软件。另外,静态分析通常成本较高,且耗费大量时间。如果我们的任务是自动分析同一恶意软件家族的多个变种,那么可以动态分析恶意驱动程序样本。

与用户模式样本相比,对内核模式恶意软件的动态分析可能会涉及更多内容。为了调试内核恶意软件,需要创建适当的环境。这个过程通常会涉及到将两个独立的虚拟机设置为调试器和被调试器。然后,可以将该恶意软件作为按需的内核服务进行加载,这里可以使用WinDbg之类的工具远程调试驱动程序。

此外,还存在一些使用挂钩或其他监视技术的沙箱型应用程序,但通常以用户模式应用程序为目标。对于内核模式代码来说,也有类似的沙箱监视工作,会需要用到比较深入的系统级挂钩,这可能会产生很大的噪音。

驱动程序仿真

对于恶意程序来说,仿真是一种有效的分析技术。通过这种方式,我们不需要自定义设置,并且可以大规模模拟驱动程序。此外,与沙箱环境相比,这种方式更容易实现更大的代码覆盖范围。通常,rootkit可能会通过I/O请求数据包(IRP)处理程序(或其他回调)公开恶意功能。在普通的Windows系统上,当其他应用程序或设备向驱动程序发送输入/输出请求时,将会执行这些例程。这里包括一些常见的任务,例如读取、写入或将设备I/O控制(IOCTL)发送给驱动程序以执行某种类型的功能。

使用仿真的方式,可以使用IRP数据包直接调用这些入口点,以便在rootkit中标识尽可能多的功能。正如我们在第一篇Speakeasy文章中所讨论的,在发现其他入口点时会对其进行仿真。驱动程序的DriverMain入口点负责初始化一个函数分配表,该表将被调用以处理I/O请求。在主入口点完成后,Speakeasy将尝试通过提供虚拟IRP来仿真这些函数。此外,按顺序模拟所有创建的系统线程或工作项,以尽可能覆盖更多的代码。

仿真内核模式植入工具

在这篇文章中,我们将展示Speakeasy在仿真真实内核模式植入工具(Winnti)的一个案例。尽管我们之前就使用过这个示例,但在本文中还是选择了它,因为它以比较透明的方式实现了一些经典的rootkit功能。这篇文章并不是对恶意软件本身进行分析,因为恶意软件已经过时了,相反,我们将专注于仿真期间捕获到的事件。

我们所分析的Winnti样本的SHA-256哈希值为c465238c9da9c5ea5994fe9faf1b5835767210132db0ce9a79cb1195851a36fb,其原始文件名为tcprelay.sys。在本文的大部分案例中,我们都将检查Speakeasy生成的仿真报告。注意,由于内核补丁程序保护(PatchGuard)可以防止对关键内核数据结构进行修改,因此这个32位rootkit所采用的许多技术在现代64位版本的Windows上将不起作用。

首先,我们将使用Speakeasy按照下图所示的命令行来仿真内核驱动程序。我们指示Speakeasy创建一个完整的内核转储(使用“-d”标志),以便后续可以获取内存。这里还加上了内存跟踪标志(“-m”),它将记录恶意软件执行的所有内存读取和写入操作。这对于检测挂钩和直接内核对象操纵(DKOM)等非常有帮助。

用于仿真恶意驱动程序的命令行:

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!