如下图:△带参数启动pdfsvr.exe文件
(4)IMAGEFILE1552052资源对应文件"net.dat",是一个加密的二进制文件。还原后就是安装包中最关键的病毒下载器程序。"net.dat "被安装程序"calsp_820.exe"或者"pdfsvr.exe"在内存解密后执行病毒代码,完成后续的"Kuzzle"下载和安装流程。解密后的net.dat文件全程不落地,只在内存中出现,通过调试手段保存后的文件,信息如下图:△net.dat文件
3.病毒下载器加载流程分析 云记事本安装包"calsp_820.exe"和龙易PDF升级维护服务程序"pdfsvr.exe"使用相同的解密Key"0x3B",还原同为0x270的ShellCode代码,解密后的ShellCode代码完全相同,主要负责在内存中加载、解密病毒释放器释放的"net.dat"文件,调用解密后的PE入口点。还原ShellCode的代码如下:△相同的ShellCode代码
内存中的ShellCode负责加载和解密"net.dat"文件的代码如下:
△加载和解密"net.dat"文件
最终在内存中执行病毒下载器入口代码。
4.病毒感染过程分析
在net.dat中存放的病毒代码运行后,会继续解密并加载执行upd.dat中存放的病毒代码。upd.dat中代码会将vayout.fxb(64位为vaystd.fxb)中的数据进行解密,之后调用DeviceIoControl(ControlCode为0x88860018)将解密后的数据发送给带有北信源签名的BulkEncX.sys驱动(64位为BulkEncX64.sys)进行处理。BulkEncX.sys驱动签名信息,如下图所示:
BulkEncX驱动签名信息△注册病毒驱动并向BulkEncX驱动发送加密数据
△upd.dat代码将vayout.fxb数据解密后发送给BulkEncX驱动
在BulkEncX.sys驱动中表面上包含了大量的常用哈希算法,但是算法实现的代码中却包含有病毒加载代码。如下图所示:△BulkEncX.sys驱动中代码
在驱动逻辑中我们找到了ControlCode为0x88860018的执行逻辑,如上图红框所示。被标出的函数,表面上看是对传入的数据计算SHA1,但是在SHA1算法中还包含有对加密PE数据进行加载执行的代码。如下图所示:△BulkEncX.sys驱动隐藏在SHA1中的病毒代码
如上图所示,在病毒模块解密加载函数上下全都是计算SHA1的算法代码,再加上BulkEncx.sys驱动带有北信源签名,所以其病毒逻辑更难以被安全研究人员发现。解密加载病毒模块函数逻辑,如下图所示:△解密加载病毒模块函数
virus_shell_code中存放的是异或0x3b后的镜像解密加载代码,经过解密之后我们可以看到其病毒模块加载逻辑。如下图所示:△解密后的virus_shell_code代码
通过上述病毒逻辑,最终用于加载感染VBR的病毒驱动。该病毒驱动中会通过hook NtShutdown函数(32位)和设置关机回调(64位)在关机时调用感染VBR代码。除了关机时会对VBR进行感染外,病毒还有一个内核线程,在该线程启动15分钟之后也会对VBR进行感染。VBR感染代码如下图所示:△Hook NtShutdown函数代码
△病毒感染VBR的内核线程
病毒会将原始的VBR记录在%system32%winsxs.ttf中。感染VBR相关代码,如下图所示:△备份原始VBR并拷贝病毒VBR数据
△将原始VBR数据写入在winsxs.ttf文件中
△VBR感染代码
VBR被感染后,进行重启MBR也会被感染。值得我们关注的是,在带有北信源签名的驱动文件BulkEncX.sys中都存在被加密virus_shell_code部分,且其解密逻辑附近代码与带有"南京鸿思信息技术有限公司"签名的pdfsvr.exe文件相同。如下图所示:△virus_shell_code部分解密逻辑代码
除解密virus_shell_code附近代码外,解密出的virus_shell_code代码中所使用的PE映像解密算法及密钥也完全相同。如下图所示:△BulkEncX.sys和pdfsvr.exe中解密密钥和算法对比
除上述两个PE文件外,病毒感染时所使用的大部分PE文件中也包含如上图所示代码且密钥完全相同。我们以病毒释放器("云记事本"安装包)和net.dat病毒下载器进行举例,如下图所示:△病毒释放器("云记事本"安装包)和net.dat病毒下载器解密代码对比
上述多个关键病毒文件中的解密密钥和解密算法完全相同,据此我们可以推测, BulkEncX.sys驱动所使用的北信源签名可能为病毒作者盗用。三、中毒后现象 病毒为了保护自己的MBR和VBR代码不被安全软件检测到,还会修改Disk.sys的IRP读写操作,当任意程序试图读取MBR或者VBR时,都会返回没有被病毒修改的原始MBR和VBR。△修改Disk.sys的IRP读写操作
系统启动后,病毒会通过注册进程通知和映像通知,在浏览器启动时向浏览器中注入一个病毒动态库文件,下文简称Injector.dll。火绒剑检测"内核通知"如下图所示:△内核通知
如果是Win7以上系统,最终要劫持到的网址保存在系统盘符下"ProgramDataSoftSecuritysnock.cfg"文件中,其中deliver 为加密后的网址,解密方法为每个字节加0xfc,保留一字节大小,snock.cfg文件内容如下图所示:
△snock.cfg文件
Injector.dll注入到浏览器后,会判断当前浏览器是否在要劫持的浏览器列表中,代码如下图所示:
△判断浏览器
如果浏览器满足病毒配置中对应规则,病毒则会添加浏览器收藏夹和劫持浏览器首页。然后解密ProgramDataSoftSecurityrpl.cfg文件,里面存放了病毒劫持浏览器的列表、规则还有所有会被替换的网址,如下图所示(因为配置文件过长,所以中间有省略)。Injector.dll支持三种首页劫持逻辑,详见下文分析。△rpl.cfg配置文件
完整的浏览器劫持列表,如下图所示:
△浏览器劫持列表
配置中包含的正则匹配网址方法:
△正则匹配网址
完整的劫持网址如下图所示:△劫持网址列表
1.首页劫持逻辑 该病毒会通过以下两种方式劫持浏览器首页:(1)如果浏览器为傲游浏览器、qq浏览器和猎豹浏览器,病毒会判断当前浏览器的父进程是否是explorer.exe,如果是则会重新启动一个参数为要劫持网址的浏览器,并结束当前浏览器 。(2)其他浏览器,病毒会直接修改浏览器的启动参数为要劫持到的网址。 被劫持到的网址为上文中介绍的从配置文件snock.cfg,中解密出来的网址 zk.8*****.com,最终导航站会跳转到www.hao123.com/?tn=9******1_hao_pg。2.添加浏览器收藏夹 该病毒还会根据配置文件中的数据添加浏览器收藏夹,如下图所示:
△要添加的收藏夹信息
(1)对于Chrome内核的浏览器,如:Chrome、360极速浏览器、qq浏览器等,病毒会通过修改浏览器收藏夹数据库文件实现添加收藏夹。
(2)IE浏览器会在收藏夹目录创建url快捷方式。
3.劫持WSPStartup函数,替换302重定向应答包
Injector.dll动态库在浏览器进程启动时Hook系统文件Mswsock.dll的WSPStartup函数,如下图:△Hook WSPStartup函数
在WSPStartup的Hook函数中修改WSPPROC_TABLE表中对应的函数,用来劫持浏览器的网络访问动作,如下图所示:
△修改WSPPROC_TABLE表中对应的函数
通过代码分析我们发现病毒在WSPSend 函数中,判断是否是hao123导航,如果是则会在WSPRecv 中替换为302跳转,但在我们实际测试中,这个功能暂时不生效。
四、附录
SoftSecurity目录下文件及对应功能:
MsOffice目录下文件及对应功能:
文中涉及样本SHA256: