老不死病毒之独狼篇:带VMP壳的Rootkit分析

逆向病毒分析 1年前 (2022) admin
719 0 0

老不死病毒之独狼篇:带VMP壳的Rootkit分析



熟悉又恶心的首页劫持
PART 01

01

随着互联网的发展,人们的生活逐渐进入流量经济时代,谁有了流量,谁就掌握了创收的法宝,因此各种吸引眼球,导流的方式应运而生。

其中当然包括一些引流的黑灰产业链,最普遍的引流方式当属浏览器首页劫持——通过带推广id的首页链接,赚取推广费用:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

(某导航网站带推广id的页面截图)

02

为了赚取这部分推广费用,各种“流氓软件”可谓各显神通无所不用其极。

近期奇安信病毒响应中心连续收到多例用户反馈,其涉及到的样本采取了内核Rookit的方式,且为了逃避检测使用了VMP这种强力的壳保护程序锁定首页逻辑。

该病毒中招后现象为:用户在安装某伪装USB3.0兼容驱动后,桌面自动创建多个快捷方式,且在之后每次打开浏览器都会自动访问hao123导航。

然而不要以为加了VPM壳我们就无法分析了!奇安信病毒响应中心对此样本的恶意行为、实现原理做了深入分析,并提供了相应处理措施。



简单的排除法定位锁首页方式
PART 02

01

通常锁首页有如下几种实现方案:

01

修改浏览器的默认主页配置,实现浏览器劫持行为

02

修改桌面快捷方式——即创建或修改浏览器启动快捷方式,拼接浏览器启动参数,实现浏览器劫持行为

03

命令行劫持,即通过hook或进程回调等技术,拼接浏览器启动程序的启动参数,实现浏览器劫持行为

02

通过查看浏览器的主页设置,可以看到当前默认首页应该是微软的网站。因此可以排除上述第一种劫持方式,即通过修改浏览器默认主页配置,从而实现浏览器劫持的方案。

老不死病毒之独狼篇:带VMP壳的Rootkit分析
03

通过查看桌面浏览器快捷方式的属性,我们发现这只是两个普通的网页快捷方式,从而排除该样本采用的是上面提到的第二种实现方案的可能性。

老不死病毒之独狼篇:带VMP壳的Rootkit分析

04

通过使用奇安信终端异常排查工具(QDoctor)查看浏览器启动参数,可以发现浏览器进程启动参数被拼接了指定网页地址的url参数:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

同时通过使用奇安信终端异常排查工具,发现一个可疑驱动,该驱动注册了关机回调,注册表回调,创建进程回调,文件系统通知回调,映像加载回调,以及一些sfilter回调函数:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

通过后续分析可知该驱动即为本次首页被锁定的元凶,此驱动可以被我们的引擎检出,但是是自动机赋予的一个名字,可识别度不高。

由于其感染源是一个伪装成USBKey的程序,因此我们将此Rootkit命名为:USBadGuy(各位看官可能更加熟悉他的另外一个名字:独狼,具体请看下文溯源部分)。

经过分析,我们最终确定了此病毒锁定首页使用的是第三种方式,即命令行劫持;USBadGuy的原理是劫持浏览器的启动过程,在浏览器启动时增加恶意命令行参数以达到锁定首页的目的。

除此之外其为了隐藏自身,还通过设置文件系统过滤驱动、关机回调函数等和安全软件对抗,以达到不被查杀从而持久获利的目的。



样本技术层面深入分析:
PART 03

01

该病毒注册了注册表回调用于隐藏启动项信息,摘掉注册表回调后便可在注册表中查看该驱动的详细信息,我们关心的是其本体文件路径:C:WindowsSystem32driversaekpsz.sys

老不死病毒之独狼篇:带VMP壳的Rootkit分析

然后用IDA反编译该驱动文件,但发现该文件不能被复制,删除,这说明文件被做了驱动保护。通常遇到被保护的文件我们可以删除该驱动注册的启动服务并重启,由于重启后驱动不被加载,因此保护不会生效,就可以正常操作该驱动文件了。

但在本案例中,重启后我们发现驱动仍能正常加载。结合上文中的回调信息,我们合理推测该驱动在关机回调中重新写入了启动服务的注册表项,所以这次我们先删除驱动注册的关机回调,然后删除驱动注册的注册表回调,删除驱动注册驱动服务,重启电脑。

再次重启后,我们发现驱动未能正常启动加载,保护已经去除。此时我们便可以正常操作aekpsz.sys文件了。

如上文所述,该Rootkit是一个加了VmPackage壳的驱动,静态分析其代码无法得出任何有价值的信息,因此需要我们转变思路,制定新的分析方案。

02

我们要重点分析以下几个恶意行为的实现原理:

01

驱动文件保护实现方案

02

驱动持久化实现方案

03

命令行劫持恶意行为实现方案

03

驱动文件保护实现方案:

我们通过windbg的wt命令跟踪驱动的IRP_MJ_CREATE回调函数,查看在打开一个文件时,回调函数会调用哪些内核函数:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

对比查看打开同文件夹下其他驱动文件和被保护驱动文件的调用栈,我们发现在打开被保护驱动文件请求中,并未调用ObpCreateHandle函数。

由此我们得出驱动文件保护实现方案为:在IRP_MJ_CREATE回调函数中(即打开文件句柄请求时),对比待打开文件名是否为恶意驱动释放文件,如果是,则不创建文件句柄,否则正常创建文件句柄并返回。

由于拿不到被保护文件的文件句柄,所以该文件的相关操作都无法完成。

04

驱动持久化实现方案:


Rootkit通常会设置注册表回调CmpCallback,过滤掉自身恶意启动项设置,让用户找不到驱动启动服务,同时将驱动启动方式设置为开机自动启动,从而实现驱动的持久化。

不过在该样本中,显然采取了更顽固的实现方案。通过在样本的关机回调中设置注册表操作相关函数断点然后打印关键参数,我们可以确认该样本在关机回调中调用ZwCreateKey,ZwSetValueKey等函数,更新或创建恶意驱动启动服务。

由此我们得出驱动持久化实现方案为,注册表回调隐藏自启动项,关机前在关机回调中重新写入自启动项,从而对抗普通的Rootkit清除手段,下图为关机回调中调用注册表相关函数恢复启动项的截图:

老不死病毒之独狼篇:带VMP壳的Rootkit分析
05

命令行劫持恶意行为实现方案:


Rootkit通常会设置创建进程回调,并在回调中修改进程创建参数,所以我们通过对比未执行进程创建回调前和执行进程创建回调后进程命令行参数的变化,确认恶意驱动是否在进程创建回调中修改了浏览器启动参数。如图所示:

老不死病毒之独狼篇:带VMP壳的Rootkit分析 老不死病毒之独狼篇:带VMP壳的Rootkit分析


在摘取进程创建回调后浏览器不再被劫持,由此我们得出该恶意驱动是通过设置进程创建回调函数,并在回调函数中拼接浏览器启动参数,从而实现浏览器劫持行为,下图分别为被劫持(左)和恢复正常后的浏览器初始状态(右)截图:

老不死病毒之独狼篇:带VMP壳的Rootkit分析



扩展溯源
PART 04

01

通过搜索驱动程序的签名“上海X联软件技术有限公司”,关联到2.5W个样本,观察这个签名下的样本,绝大部分为病毒文件:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

02

通过此签名,我们关联到了友商的一篇总结性报告(参考1),其行为高度吻合,因此确定本次事件涉及的样本为独狼相关组件。

通过观察关键驱动模块在一年内的传播情况,发现依然有一定传播量,真的是百足之虫死而不僵:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

然而,虽然是3、4年前的样本,目前支持查杀的并不多,再加上驱动模块的保护,其存活能力之强可想而知,因此此病毒有上图的传播战绩也就不足为奇了:

老不死病毒之独狼篇:带VMP壳的Rootkit分析

由于支持检出的厂家不多,且大家也没有在名字上达成共识,因此上文中我们自己给这个Rootkit起了个名字;)



处置建议:
PART 05

01

既然Rootkit模块的原理都搞清楚了,那我们便可以针对性的提供查杀、恢复方案。奇安信顽固病毒查杀工具已经支持对此病毒的查杀与恢复:

老不死病毒之独狼篇:带VMP壳的Rootkit分析



参考:
PART 06

 

1、盘一盘2018年那些难缠的顽固病毒木马


老不死病毒之独狼篇:带VMP壳的Rootkit分析


原文始发于微信公众号(奇安信病毒响应中心):老不死病毒之独狼篇:带VMP壳的Rootkit分析

版权声明:admin 发表于 2022年11月3日 下午7:08。
转载请注明:老不死病毒之独狼篇:带VMP壳的Rootkit分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...