伴随着放开二胎政策的实施,在16年到来之际又一条重磅消息随之而来,国家将取消晚婚假。消息一出就一直备受大家的关注,新闻、政府文件也成为了大家获取第一手消息的主要途径。最近发现,有一类感染型病毒正借此机会大肆传播。
详细分析:
下图展示了病毒的整个执行过程:
首先病毒伪装成文档的图标,命名为晚婚假取消最新解读,诱骗用户点击。
当用户点击后,弹出了一个关于晚婚假被取消的文章,用户认为这就是一个普通文档。
但随即也运行了病毒程序,修改了IE,随即感染了系统文件。我们上传到哈勃,可以看到详细的分析。
在哈勃的分析结果中,得知病毒释放了可执行文件。
通过WriteFile的参数,看一下写入的内容。看到创建的文件是一个可执行文件。
创建文件完成后,程序执行到0×450741。此时ebx的值为E043A159.
查看[ebx+20016835]处存放的内容,恰好是CreateProcess加载到内存中后的地址0x7C80236B.
再看一下第二个参数的内容,位于地址0×00450795处。
这样就将whjmgr.exe运行起来了。此时也看到桌面多出了一个新的文件。
whjmgr.exe程序主要任务是将恶意代码注入到IE进程,借IE来运行恶意代码,避免查杀。但所用手法并不是常见的注入手段。下面进行详细的分析。
whjmgr.exe运行后首先会查找IEXPLORE.EXE文件所在的位置,执行到0x0040127E时,由下图看到ebp的值是0012F7E4。[ebp+8]处指向的内容0041C70C,而此处存放的正是iexplore.exe文件的路径,这样就调用CreateProcess创建了IE进程。
此时,病毒已经将ZwWriteVirtualMemory进行了hook,所以当CreateProcess函数内部调用到此函数时,会跳转到用户空间的代码处0x00402C31,也是hook函数的起始地址。
在hook函数中调用多次WriteProcessMemory,将恶意代码写入到IE进程中,第一次写入的是一个dll,写在了IE进程中内存地址为0×020010000处。
后面几次WriteProcessMemory写入的内容是跳转指令,最终会跳转到DllEntrypoint。最后一次WriteProcessMemory是修改IE进程的EntryPoint处的代码,这样IE运行后,就可以来到恶意程序的入口处执行代码。
修改以后,IE入口处的代码变为
注入IE进程也就完成了。
从整个过程来看,病毒利用hook ZwWriteVirtualMemory函数,在CreateProcess过程中,顺带也把IE进程的内存进行了修改,修改结束后,系统自动执行了IE进程。并不是通常用挂起方式创建进程,修改内存后,再自己调用ResumeThread。所以注入方式比较新颖。
IE运行后,经过几次跳转,会执行到之前写入dll的入口处DllEntryPoint,代码会访问2001AEACh和2001AEB0h两个地方,如果是感染IE跳转来的,那么这两个值在之前会被写入数据,如果是通过加载器加载的dll,执行到这里就会失败。也算是一种对抗逆向的手段。
随后,恶意代码会遍历系统文件夹下的文件,并对文件类型进行判断。
此时edi指向的PE文件头,+98h处是PE 数据目录成员的第五个元素Security Table,所指向的是文件签名信息的附加数据。所以如果是签名的文件,病毒也会放弃感染。
紧接着,会修改PE文件头,设置了VirtualAddress,PointerToRawData,VirtualSize,SizeOfData等,并命名为.text。
调用WriteFile将附加数据写到文件尾部,再调用CheckSumMappedFile函数,重新计算映像校验和,并修改。
最后设置EntryPoint,0×14000正是新增区块的VirtualAddress。
完成了整个感染的过程。被感染的文件成为了新的母体。
病毒样本采用了多种对抗调试的手法,除了上文中提到的,还包括检查关键API开头字节是否为Int 3指令,如果是则会修改,以防下断点进行调试。