快捷搜索:  2100  tagid=19377  tagid=19374  创意文化园  test  as  tagid=19387  tagid=19363

usdt无需实名买入卖出(www.caibao.it):使用Speakeasy仿真框架模拟内核模式Rootkit

USDT自动充值接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

2020年8月,我们公布了一篇博客文章,主要内容是若何使用Speakeasy仿真框架来仿真用户模式的恶意软件,例如shellcode,下面就是那篇文章。

https://github.com/fireeye/speakeasy
https://www.fireeye.com/blog/threat-research/2020/08/emulation-of-malicious-shellcode-with-speakeasy.html

除了用户模式仿真之外,Speakeasy还支持内核模式Windows二进制文件的仿真。当恶意软件作者使用内核模式恶意软件时,通常会接纳装备驱动程序的形式,其最终目的是完全熏染受熏染的系统。该恶意软件通常不与硬件交互,而是行使内核模式完全损坏系统并保持隐藏状态。

0x01 动态剖析内核Rookit的挑战

理想情形下,可以使用反汇编工具之类的工具静态地逆向内核模式样本。然则,二进制程序和用户模式样本一样会混淆内核恶意软件。另外,静态剖析通常是昂贵且费时的。若是我们的目的是自动剖析统一恶意软件家族的许多变体,则可以动态剖析恶意驱动程序样本。

与用户模式样本相比,对内核模式恶意软件的动态剖析可能会涉及更多难点手艺。为了调试内核恶意软件,需要建立适当的环境。这通常涉及将两个自力的虚拟机设置为调试器和被调试器。然后可以将该恶意软件作为内核服务加载,其中可以使用WinDbg之类的工具远程调试驱动程序。

存在一些使用Hook或其他监控手艺的沙箱应用程序,但通常以用户模式应用程序为目的。对于内核模式代码具有类似的沙箱监控事情,将需要深入的系统级Hook,这可能会对系统发生很大的影响。

0x02 驱动程序仿真

对于恶意驱动程序,仿真已被证实是一种有用的剖析手艺。不需要自定义设置,而且可以大规模模拟驱动程序。此外,与沙盒环境相比,最大的代码笼罩局限更容易实现。通常,rootkit可能会通过I / O请求数据包(IRP)处置程序(或其他回调函数)执行恶意功效。在通俗的Windows系统上,当其他应用程序或装备向驱动程序发送输入/输出请求时,将执行这些例程。这包罗一些常见义务,例如读取,写入或将装备I / O控制(IOCTL)发送给驱动程序以执行某种类型的功效。

使用仿真手艺,可以使用IRP数据包直接挪用这些入口点,以便在rootkit中发现尽可能多的功效。正如我们在第一篇Speakeasy博客文章中所讨论的,在发现其他入口点时会对其举行仿真。驱动程序的DriverMain入口点卖力初始化函数分配表,该表被挪用以处置I / O请求。在主入口点完成后,Speakeasy将实验通过提供虚拟IRP来仿真这些功效。此外,顺序模拟所有建立的系统线程或事情项,以获取尽可能多的代码笼罩率。

0x03 模拟内核模式Rootkit

在此博客文章中,我们将剖析Speakeasy在模拟一个公然名为Winnti的真实内核模式Rootkit中的情形。只管该样本被发现已经很久了,但照样选择了它,由于它实现了一些经典的rootkit功效。这篇文章的目的不是讨论恶意软件自己的剖析,由于它已经过时了。相反,我们将专注于对Rootkit的仿真。

我们将剖析的Winnti示例信息如下:

SHA256 hash:c465238c9da9c5ea5994fe9faf1b5835767210132db0ce9a79cb1195851a36fb

原始文件名Ltcprelay.sys。

对于本文的大部门内容,我们将检查Speakeasy天生的仿真讲述。注重:由于内核补丁程序珍爱(PatchGuard)可以防止对要害内核数据结构举行修改,因此该32位rootkit所接纳的许多手艺在现代64位版本的Windows上将不起作用。

首先,我们将使Speakeasy使用图1所示的下令行来模拟内核驱动程序。我们使用Speakeasy建立一个完整的内存转储(使用“ -d”参数),以便以后可以获取内存。我们提供了内存跟踪参数(“ -m”),它将纪录恶意软件执行的所有内存读取和写入操作。这对于检测钩子和直接内核工具操作(DKOM)很有用。

图1:用于模拟恶意驱动程序的下令

然后,Speakeasy将最先模拟恶意软件的DriverEntry功效。驱动程序的入口点卖力设置被动回调例程,这些例程将为用户模式I / O请求以及用于装备添加,删除和卸载的回调提供服务。查看恶意软件的DriverEntry函数的仿真讲述(在JSON讲述中以“ entry_point”的“ ep_type”标识),解释该恶意软件找到了Windows内核的基址。该恶意软件通过使用ZwQuerySystemInformation API来查找所有内核模块的基址,然后查找“ ntoskrnl.exe”来实现此目的。然后,该恶意软件会手动找到PsCreateSystemThread API的地址。然后,它用于启动系统线程以执行其现实功效。图2显示了从恶意软件中挪用的API

图2:tcprelay.sys入口点中的要害函数

0x04 隐藏驱动程序工具

该恶意软件会在执行其主系统线程之前实验隐藏自身。恶意软件首先在其自己的DRIVER_OBJECT结构中查找“ DriverSection”字段。该字段包罗一个包罗所有已加载内核模块的链接列表,恶意软件实验将自身作废链接以从列出已加载驱动程序的API中隐藏。在图3所示的Speakeasy讲述中的“ mem_access”字段中,我们可以看到在驱动程序段自己之前和之后两次写入内存,这会将自身从链接列表中删除。

图3:示意tcprelay.sys恶意软件的内存写入事宜,实验将自身断开链接以隐藏

当在运行时建立线程或其他动态入口点时,框架将追随它们举行仿真。在这种情形下,恶意软件会建立一个系统线程,而Speakeasy会自动对其举行仿真。

转到新建立的线程(由“ system_thread”的“ ep_type”标识),我们可以看到恶意软件最先了其真正的功效。该恶意软件首先枚举主机上所有正在运行的历程,然后查找services.exe义务管理器历程。主要的是要注重,返回到仿真样本的流程清单可以通过运行时提供的JSON设置文件举行设置。有关这些设置选项的更多信息,请参见我们的GitHub存储库上的Speakeasy README 。

https://github.com/fireeye/speakeasy

此可设置历程清单的示例如图4所示。

图4:提供给Speakeasy的流程列表设置字段

0x05 Rootkit通过APC转入用户模式

,

Usdt第三方支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

一旦恶意软件找到了services.exe历程,它将附加到其历程上下文并最先检查用户模式内存,以便找到导出的用户模式函数的地址。恶意软件会这样做,以便以后可以将编码的内存驻留DLL注入services.exe历程。图5显示了rootkit用于挪用其用户模式导出的API。

图5:tcprelay.sys rootkit用于挪用其用户模式植入的导出日志API

解决了导出的功效后,rootkit准备注入用户模式DLL组件。接下来,恶意软件手动将内存中的DLL复制到services.exe历程地址空间中。这些内存写事宜被捕捉并显示在图6中。

 图6:将用户模式植入复制到services.exe时捕捉的内存写入事宜

Rootkit用于执行用户模式代码的常见手艺涉及一种称为“异步历程挪用(APC)”的Windows功效。APC是在提供的线程的上下文中异步执行的功效。使用APC可使内核模式应用程序将代码排队以在线程的用户模式上下文中运行。恶意软件通常希望注入用户模式,由于Windows内的许多常用功效(例如网络通信)可以更容易地接见。

为了使APC排队以用户模式启动,恶意软件必须将线程定位为“可更改”状态。当线程将其执行量交予内核线程调剂程序并通知内核它们能够分配APC时,它们被称为可警报的。恶意软件在services.exe历程中搜索线程,一旦检测到可忠告的线程,它将为DLL分配内存以注入,然后将APC排队执行。

Speakeasy模拟此历程中涉及的所有内核结构,特别是为Windows系统上的每个线程分配的执行线程工具(ETHREAD)结构。恶意软件可能会实验遍历这个不透明的结构,以识别何时设置了线程的警报标志(并因此确定了APC的有用候选工具)。图7显示了Winnti恶意软件在services.exe历程中手动剖析ETHREAD结构以确认它可发出警报时纪录的内存读取事宜。在撰写本文时,默认情形下,仿真器中的所有线程都将自己示意为可警报。

 图7:tcprelay.sys恶意软件确认线程可警报时纪录的事宜

接下来,恶意软件可以使用此线程工具执行所需的任何用户模式代码。未纪录的函数KeInitializeApc和KeInsertQueueApc将划分初始化并执行用户模式APC。图8显示了恶意软件用来将用户模式模块注入services.exe历程的API集。该恶意软件执行一个shellcode作为APC的目的,然后将为注入的DLL执行一个加载程序。所有这些都可以从内存转储包中恢复并在以后举行剖析。

图8:tcprelay.sys rootkit用于通过APC进入用户模式的日志API

0x06 Hook内核组件用于网络隐藏

注入用户模式后,内核组件将实验安装网络混淆钩子(大概是隐藏用户模式Rootkit)。Speakeasy跟踪并符号仿真空间中的所有内存,在内核模式仿真的上下文中,这包罗所有内核工具(例如,驱动程序和装备工具,以及内核模块自己)。观察到恶意软件将其用户模式植入后,我们立刻看到它最先实验Hook内核组件,在静态剖析历程中已确认将其用于网络隐藏。

仿真讲述的内存接见部门显示,恶意软件修改了netio.sys驱动程序,特别是在名为NsiEnumerateObjectsAllParametersEx的导出函数中的代码。当系统上的用户运行“ netstat”下令时,最终会挪用此功效,而且恶意软件可能会hook此功效,以隐藏受熏染系统上的已毗邻网络端口。此内联Hook由图9中捕捉的事宜标识。

图9:恶意软件设置的内联函数Hook隐藏网络毗邻

此外,恶意软件还会hook Tcpip驱动程序工具,以完成其他网络隐藏。详细而言,该恶意软件将Tcpip驱动程序的IRP_MJ_DEVICE_CONTROL处置程序Hook。查询流动毗邻时,用户模式代码可能会将IOCTL代码发送给此函数。通过查找对要害内核工具的内存写入,可以使用Speakeasy轻松识别这种钩子,如图10所示。

图10:用于 hook Tcpip网络驱动程序的内存写入事宜

0x07 Hook系统服务描述符表

最后,rootkit将实验使用系统服务描述符表(SSDT)的近乎古老的手艺来隐藏自身。Speakeasy分配了伪造的SSDT,以便恶意软件可以与其举行交互。SSDT是一个函数表,可将内核函数公然给用户模式代码。图11中的事宜解释,在运行时修改了SSDT结构。

图11:Speakeasy检测到的SSDTHook

若是我们查看IDA Pro中的恶意软件,则可以确认该恶意软件已修补了ZtQueryDirectoryFile和ZwEnumerateKey API API的SSDT条目,这些API用来将自己隐藏在文件系统和注册表剖析之外。SSDT补丁函数如图12所示。

图12:IDA Pro中显示的文件隐藏SSDT 补丁函数

设置完这些Hook之后,系统线程将退出。

0x08 从dump文件中获取用户模式Rootkit

现在我们已经知道了驱动程序在系统上隐藏自身的方式,可以使用Speakeasy建立的内存转储来获取前面讨论的注入的DLL。打开我们在仿真时建立的zip文件,我们可以找到图6中引用的内存标签。我们迅速确认该内存块具有有用的PE标头,并成功地将其加载到IDA Pro中,如图13所示。

图13:从Speakeasy内存转储中恢复的注入用户模式DLL

0x09 剖析总结

在此博客文章中,我们讨论了Speakeasy若何有用地从内核模式二进制文件自动识别rootkit流动。Speakeasy可用于快速分类内核二进制文件,否则这些二进制文件可能难以动态剖析。有关更多信息和代码文件,请转到我们的GitHub存储库。

https://github.com/fireeye/speakeasy
本文翻译自:https://www.fireeye.com/blog/threat-research/2021/01/emulation-of-kernel-mode-rootkits-with-speakeasy.html:
发表评论
sunbet声明:该文看法仅代表作者自己,与本平台无关。请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

您可能还会对下面的文章感兴趣: