一、概述

近日,火绒安全团队截获恶性病毒"Kuzzle",该病毒感染电脑后会劫持浏览器首页牟利,同时接受病毒作者的远程指令进行其他破坏活动。"Kuzzle"拥有非常高的技术水平,采用多种手段躲避安全软件的查杀,甚至盗用知名安全厂商的产品数字签名,利用安全软件的"白名单"的信任机制来躲避查杀。更严重的是,用户即使重装系统也难以清除该病毒,使用户电脑长期处于被犯罪团伙的控制之下。
据火绒安全团队分析,"Kuzzle"通过下载站的高速下载器推广传播,下载器会默认下载携带病毒的"云记事本"程序。电脑感染病毒后,浏览器首页会被劫持,谷歌、火狐、360等多款主流浏览器都会被修改为hao123导航站。
火绒安全团队通过技术溯源发现,"Kuzzle"采用多种技术手段躲避安全软件的查杀,其中就包括盗用知名安全厂商北信源公司的数字签名。当安全软件检测到该数字签名时,会将其误认为是北信源产品,自动放过病毒,不进行查杀。由于现在行业内的安全软件大多过度倚重白名单技术,病毒通过"盗用文件签名",即可将攻破这些安全软件的信任漏洞,轻松攻入电脑。
"Kuzzle"通过篡改电脑系统中的主引导记录(MBR)和卷引导记录(VBR),在不修复主引导区情况下,用户即使重装系统也无法根除。火绒工程师表示,近几年,通过MBR、VBR感染进行深度技术对抗的病毒和流氓软件逐渐增多,流氓软件已完全病毒化,越来越多的使用病毒技术,其手段强劲、性质恶劣,对用户的危害甚至超过传统病毒。目前,"火绒安全软件"已升级病毒库,率先拦截、查杀"Kuzzle"病毒。对于已经感染该病毒的非火绒用户,可以下载使用"火绒专杀工具"彻底查杀该病毒。

二、"Kuzzle"通过下载器感染用户计算机MBR和VBR

Bootkit病毒"Kuzzle"伪装成正规软件"云记事本",利用国内几大知名下载站的高速下载器进行推广传播。"Kuzzle"使用两个有效数字签名应用和驱动程序,利用"白名单信任漏洞"躲避安全软件防御,加载病毒代码。"Kuzzle"病毒作者利用两个有效签名制作了"Kuzzle"病毒的加载模块。
被利用的两个有效数字签名分别是"BeijingVRVSoftwareCorporationLimited."和"南京鸿思信息技术有限公司"。通过分析我们认为,这两个有效签名的程序并不是传统的"白文件利用"。而且我们怀疑北信源的有效数字签名被黑客窃取或通过其它方式泄露,具体论证详见下文分析。
在病毒分析过程中,我们发现该病毒有很强的隐蔽性,除签名程序的版权信息伪装和正常程序无异,病毒作者甚至还模拟了正常软件应有的功能、并将恶意代码暗藏其中,如果不是详细分析很难察觉签名模块中包含的病毒功能。
"云记事本"利用有效数字签名的程序,内存加载病毒下载器和病毒安装器的攻击流程是通用的,病毒作者可以通过调整云控代码,下发任意功能模块到用户电脑执行任意恶意行为。目前我们看到的是通过云控代码,感染用户计算机的MBR和VBR,主要行为是篡改浏览器主页、劫持导航网站到"https://www.hao123.com/?tn=9******1_hao_pg"。
"Kuzzle"的"Bootkit"模块感染模块兼容XP、Win7、Win10等主流操作系统,通过感染计算机MBR和VBR驻留在用户系统中,还通过Hook磁盘读写钩子对抗杀软查杀。另外,即使用户察觉浏览器异常,重装系统也无法彻底清除"Kuzzle"。
"Kuzzle"隐蔽性比之前的被曝光的"暗云"和"异鬼"等Bootkit更强,病毒用到的全部数据文件都加密存放在用户硬盘,只有在病毒运行时才会在内存解密后加载,整个攻击流程病毒文件全程不落地。火绒安全实验室发现近期感染MBR、VBR技术病毒和流氓软件呈逐渐增多的趋势,而且下载站已经成为流氓软件和病毒的重要传播渠道。
"Kuzzle"病毒完整的攻击流程如下图所示:

1

"Kuzzle"病毒的攻击流程

1.通过下载器推广"Kuzzle"

火绒安全实验室发现,某款"高速下载器"推广程序中包含恶性Bootkit病毒"Kuzzle"。该病毒"伪装"成名为"云记事本"的正常应用。为了达到欺骗效果,安装后的"云记事本"还提供文本编辑功能,如果用户直接启动"云记事本"安装程序,则不会下载执行病毒代码。

2

下载器推广病毒"云记事本"

但是使用"高速下载器"在后台安装时,"下载器"会根据网络上配置的文件"kpazq5.ini"为"云记事本"安装程序添加安装参数"-silent"。

3

配置文件

"云记事本"安装程序会判断启动参数。安装程序根据该标志位执行不同流程,如果使用参数"-silent"启动,就会执行病毒下载和安装流程,如下图所示:

4

病毒安装流程

安装程序在执行病毒下载流程时,会检测用户计算机是否包含"ksafesvc.exe"和"baidusdsvc.exe"两个进程,如果存在任意一个进程,安装程序就会设置标志位"g_bflags"(如下图所示)。该标志位决定安装包释放的"病毒下载器"文件"net.dat",是由"云记事本"安装包加载,还是由另一个带有有效数字签名"pdfsvr.exe"程序加载,这样做的目的是为了利用这些安全软件的"白名单信任漏洞"。

5

检测金山和百度

"pdfsvr.exe"的有效数字签名如下图所示:

6

2.安装包分析

"云记事本"安装程序"calsp_820.exe"是一个病毒释放器,程序包含四个类型为IMAGEFILE的资源文件,如下图:

7

calsp_820.exe资源文件

这些资源文件和病毒释放器释放的文件对应关系如下表,后文会对文件有详细分析。
8资源文件说明

病毒释放器"calsp_820.exe"在释放以上资源时才会还原原始资源文件头4个字节,如下图:

9
病毒释放器中不同资源文件的详细分析:
1.IMAGEFILE\144\2052资源对应文件setup.dat,该文件还原之后是Notepad2CN的cab自解压包

10
2.IMAGEFILE\145\2052资源对应文件upsoar.ini文件,是"云记事本"的配置文件。
3.IMAGEFILE\151\2052资源对应文件pdfsvr.exe,"pdfsvr.exe"有"南京鸿思信息技术有限公司"的有效数字签名,详细信息描述为"龙易PDF升级维护服务",但是在网络中我们找不到该程序相关信息。

安装包启动检测到系统存在ksafesvc.exe和baidusdsvc.exe这两个进程后,才会释放"pdfsvr.exe",并且使用"/service"参数执行。如下图:

11
4.IMAGEFILE\155\2052资源对应文件"net.dat",是一个加密的二进制文件。还原后就是安装包中最关键的病毒下载器程序。"net.dat"被安装程序"calsp_820.exe"或者"pdfsvr.exe"在内存解密后执行病毒代码,完成后续的"Kuzzle"下载和安装流程。解密后的net.dat文件全程不落地,只在内存中出现,通过调试手段保存后的文件,信息如下图:

12

3.病毒下载器加载流程分析

 

云记事本安装包"calsp_820.exe"和龙易PDF升级维护服务程序"pdfsvr.exe"使用相同的解密Key"0x3B",还原同为0x270的ShellCode代码,解密后的ShellCode代码完全相同,主要负责在内存中加载、解密病毒释放器释放的"net.dat"文件,调用解密后的PE入口点。还原ShellCode的代码如下:

13

相同的ShellCode代码

内存中的ShellCode负责加载和解密"net.dat"文件的代码如下:

14
最终在内存中执行病毒下载器入口代码。

4.病毒感染过程分析

在net.dat中存放的病毒代码运行后,会继续解密并加载执行upd.dat中存放的病毒代码。upd.dat中代码会将vayout.fxb(64位为vaystd.fxb)中的数据进行解密,之后调用DeviceIoControl(ControlCode为0x88860018)将解密后的数据发送给带有北信源签名的BulkEncX.sys驱动(64位为BulkEncX64.sys)进行处理。代码如下图所示:

15 注册病毒驱动并想BulkEncX驱动发送加密数据

注册病毒驱动并向BulkEncX驱动发送加密数据

16 upd.dat代码将vayout.fxb数据解密后发送给BulkEncX驱动

upd.dat代码将vayout.fxb数据解密后发送给BulkEncX驱动,在BulkEncX.sys驱动中表面上包含了大量的常用哈希算法,但是算法实现的代码中却包含有病毒加载代码。如下图所示:

17 BulkEncX.sys驱动中代码

BulkEncX.sys驱动中代码

在驱动逻辑中我们找到了ControlCode为0x88860018的执行逻辑,如上图红框所示。被标出的函数,表面上看是对传入的数据计算SHA1,但是在SHA1算法中还包含有对加密PE数据进行加载执行的代码。如下图所示:

18 BulkEncX.sys驱动隐藏在sha1中的病毒代码

BulkEncX.sys驱动隐藏在SHA1中的病毒代码

如上图所示,在病毒模块解密加载函数上下全都是计算SHA1的算法代码,再加上BulkEncx.sys驱动带有北信源签名,所以其病毒逻辑更难以被安全研究人员发现。解密加载病毒模块函数逻辑,如下图所示:

19 病毒模块加密加载函数

解密加载病毒模块函数

virus_shell_code中存放的是异或0x3b后的镜像解密加载代码,经过解密之后我们可以看到其病毒模块加载逻辑。如下图所示:

20 解密后的virus_shell_code代码
通过上述病毒逻辑,最终用于加载感染VBR的病毒驱动。该病毒驱动中会通过hookNtShutdown函数(32位)和设置关机回调(64位)在关机时调用感染VBR代码。除了关机时会对VBR进行感染外,病毒还有一个内核线程,在该线程启动15分钟之后也会对VBR进行感染。VBR感染代码如下图所示:

21 Hook NtShutdown函数代码

HookNtShutdown函数代码

22 病毒感染VBR的内核线程

病毒感染VBR的内核线程

病毒会将原始的VBR记录在%system32%\winsxs.ttf中。感染VBR相关代码,如下图所示:

23 备份原始VBR并拷贝病毒VBR数据

备份原始VBR并拷贝病毒VBR数据

24 将原始VBR数据写入在winsxs.ttf文件中

将原始VBR数据写入在winsxs.ttf文件中

25 VBR感染代码
VBR被感染后,进行重启MBR也会被感染。值得我们关注的是,在带有北信源签名的驱动文件BulkEncX.sys中都存在被加密virus_shell_code部分,且其解密逻辑附近代码与带有"南京鸿思信息技术有限公司"签名的pdfsvr.exe文件相同。如下图所示:

26 virus_shell_code部分解密逻辑代码
除解密virus_shell_code附近代码外,解密出的virus_shell_code代码中所使用的PE映像解密算法及密钥也完全相同。如下图所示:

27 BulkEncX.sys和pdfsvr.exe中解密密钥和算法对比

BulkEncX.sys和pdfsvr.exe中解密密钥和算法对比。除上述两个PE文件外,病毒感染时所使用的大部分PE文件中也包含如上图所示代码且密钥完全相同。我们以病毒释放器("云记事本"安装包)和net.dat病毒下载器进行举例,如下图所示:

28

病毒释放器("云记事本"安装包)和net.dat病毒下载器解密代码对比
上述多个关键病毒文件中的解密密钥和解密算法完全相同,据此我们可以推测,BulkEncX.sys驱动所使用的北信源签名可能为病毒作者盗用。

三、中毒后现象

病毒为了保护自己的MBR和VBR代码不被安全软件检测到,还会修改Disk.sys的IRP读写操作,当任意程序试图读取MBR或者VBR时,都会返回没有被病毒修改的原始MBR和VBR。

29

修改Disk.sys的IRP读写操作

系统启动后,病毒会通过注册进程通知和映像通知,在浏览器启动时向浏览器中注入一个病毒动态库文件,下文简称Injector.dll。火绒剑检测"内核通知"如下图所示:

30

内核通知

如果是Win7以上系统,最终要劫持到的网址保存在系统盘符下"\ProgramData\SoftSecurity\snock.cfg"文件中,其中deliver为加密后的网址,解密方法为每个字节加0xfc,保留一字节大小,snock.cfg文件内容如下图所示:

31
Injector.dll注入到浏览器后,会判断当前浏览器是否在要劫持的浏览器列表中,代码如下图所示:

32

判断浏览器

如果浏览器满足病毒配置中对应规则,病毒则会添加浏览器收藏夹和劫持浏览器首页。然后解密ProgramData\SoftSecurity\rpl.cfg文件,里面存放了病毒劫持浏览器的列表、规则还有所有会被替换的网址,如下图所示(因为配置文件过长,所以中间有省略)。Injector.dll支持三种首页劫持逻辑,详见下文分析。

33
完整的浏览器劫持列表,如下图所示:

34

浏览器劫持列表

配置中包含的正则匹配网址方法:

35

正则匹配网址

完整的劫持网址如下图所示:

36

劫持网址列表

 

1.首页劫持逻辑
该病毒会通过以下两种方式劫持浏览器首页:
1.如果浏览器为傲游浏览器、qq浏览器和猎豹浏览器,病毒会判断当前浏览器的父进程是否是explorer.exe,如果是则会重新启动一个参数为要劫持网址的浏览器,并结束当前浏览器。
2.其他浏览器,病毒会直接修改浏览器的启动参数为要劫持到的网址。
被劫持到的网址为上文中介绍的从配置文件snock.cfg,中解密出来的网址zk.8*****.com,最终导航站会跳转到www.hao123.com/?tn=9******1_hao_pg。
3.添加浏览器收藏夹
该病毒还会根据配置文件中的数据添加浏览器收藏夹,如下图所示:

37

要添加的收藏夹信息
1、对于Chrome内核的浏览器,如:Chrome、360极速浏览器、qq浏览器等,病毒会通过修改浏览器收藏夹数据库文件实现添加收藏夹。
2、IE浏览器会在收藏夹目录创建url快捷方式。
3.劫持WSPStartup函数,替换302重定向应答包
Injector.dll动态库在浏览器进程启动时Hook系统文件Mswsock.dll的WSPStartup函数,如下图:

38

在WSPStartup的Hook函数中修改WSPPROC_TABLE表中对应的函数,用来劫持浏览器的网络访问动作,如下图所示:

39

修改WSPPROC_TABLE表中对应的函数

通过代码分析我们发现病毒在WSPSend函数中,判断是否是hao123导航,如果是则会在WSPRecv中替换为302跳转,但在我们实际测试中,这个功能暂时不生效。

四、附录

SoftSecurity目录下文件及对应功能:

40

MsOffice目录下文件及对应功能:

41

文中涉及样本SHA256:

42

【本文《恶性病毒Kuzzle"攻破"安全厂商白名单 用户重装系统也难以清除》由火绒安全实验室入驻安全脉搏账号发布、w2n1ck编辑,转载注明来源安全脉搏

源链接

Hacking more

...