一、概述
“暗云”系列Bootkit木马是迄今为止最复杂的木马之一,从2015年至今,已感染数以百万的计算机。暗云木马使用了很多复杂的、新颖的技术来实现长期潜伏。暗云木马感染磁盘主引导区(MBR),中毒用户可以使用腾讯电脑管家的急救箱进行处理。
近日,腾讯御见威胁情报中心发现暗云系列Bootkit木马又出现多个新变种,其中新发现的变种1会在内核层联网tj.tagcbm1t.com下载shellcode解密执行,其技术手段和暗云Ⅲ较为接近,故将其命名归类为暗云Ⅲ v3.0。
新发现的变种2会向应用层插入apc并连接C2服务器upax.ximics.com,下载payload解密执行,其技术手段和暗云I代较为接近,故将其命名归类为暗云I v2.0。
暗云系列木马变种的最终载荷不尽相同,不同的病毒运营团伙会有不同的赢利模式,其行为取决于木马连接C2服务器下载的ShellCode。腾讯御见威胁情报中心监测到暗云系列木马几乎涉猎所有病毒木马黑色产业赢利模型:从锁定主页、劫持流量、弹出广告、推广软件、安装挖矿木马、发起DDoS攻击,几乎无恶不作。
暗云系列Bootkit木马版本对比如下:
暗云系列发现时间及主要特性
腾讯安图高级威胁溯源系统可查询暗云系列木马的家族图谱
二、暗云系列木马新变种详细分析
暗云系列木马新变种 ,1扇区为劫持后的MBR引导代码,2扇区为原始MBR的备份,3-63扇区为加密的payload ,其感染后的扇区布局如下
感染暗云之后磁盘引导扇区内容被改写
2.1 MBR引导代码劫持分析
MBR引导代码被劫持阶段的执行流程如下:
-
BIOS完成自检和硬件检测后,将安装有操作系统的磁盘的第一个扇区的内容读到内存的0000:7C00处执行,由于MBR引导代码已经被劫持修改,病毒代码获得执行
-
7C00处病毒代码主要功能是将3-63扇区的加密payload读取到内存解密并执行,payload会被拷贝到内存8F00:0000处
-
8F00:0000处代码获得执行后,会劫持系统中断表hook int15中断,劫持后的int15中断例程地址被修改为8F00:247
-
读取第二扇区备份的原始MBR到内存地址0000:7c00处继续执行原始的MBR
被劫持后的MBR引导代码
被劫持后的int15 系统中断例程地址
跳转到原始MBR继续执行
2.2 INT 15中断例程劫持分析
INT 15中断被调用后木马获得了执行机会,在int15 中断例程劫持中其主要功能是根据特征码搜索引导启动文件,根据不同的系统版本hook不同的地方,具体执行流程如下:
-
搜索特征码E9D501EB0490000000528BC30E076633来判断是否是引导启动文件(注:引导启动文件在系统盘根目录下,vista之前是ntldr,Vista之后是bootmgr,引导文件前16字节为该特征码),如果匹配上则继续执行下一步搜索,否则结束;
-
搜索到引导启动文件特征码后,继续搜索特征码665266556633ED666A20665366CB66(注:该特征为bootmgr文件偏移0xA8c处的代码),如果搜索到后会在此偏移处开始patch bootmgr,被patch后会跳转到8F51B处执行,如果搜索不到则继续执行下一步搜索;
-
搜索特征码FF73F883E103F3A4E88BF085F6741F(注:该特征码为ntldr文件内的代码特征),搜索到则进行patch。
搜索bootmgr特征码
搜索ntldr模块内特征码
bootmgr被patch后的代码对比
2.3 保护模式patch代码分析
木马对不同的操作系统进行兼容处理,vista之前patch bootmgr ,之后patch ntldr,下面以patch bootmgr为例进行分析。
通过上文分析,bootmgr加载执行到偏移0xA8c处后木马再次得到执行机会,此时会跳转到8F51b处执行。这时已经由16位实模式转到保护模式执行。其执行流程如下:
-
通过代码特征搜索bootmgr!Archx86TransferTo32BitApplicationAsm和bootmgr!Archx86TransferTo64BitApplicationAsm,搜索到则进行相应的patch(注:对x86和x64做兼容处理,分别对应32位系统和64位系统中bootmgr到winload.exe的跳转)
-
通过代码特征566A1041554BCBC3搜索OslArchTransferToKernel,搜索到则进行相应的patch, 该函数被patch后会跳转到8F7A5处执行(注:在BootMgr.exe加载Winload.exe时pathc OslArchTransferToKernel,为hook ntoskrnl.exe做准备)
-
hook ntoskrnl的导出函数ZwCreateSection,该函数被hook后会跳转到8440ed00处执行,其主要功能是调用PsSetCreateThreadNotifyRoutine注册一个线程创建的回调例程(注:该回调例程完成了木马主要的恶意功能)
通过代码特征进行搜索
OslArchTransferToKernel被patch后
ZwCreateSection被patch后
2.4 线程创建回调例程分析
木马调用PsSetCreateThreadNotifyRoutine注册一个线程创建的回调例程,该回调例程完成了木马主要的恶意功能。包括保护前62扇区数据, 联网拉取shellcode等。
由于这次发现的暗云系列木马变种从MBR感染代码到hook winload, 到hook nt内核,其过程基本一致, 主要差别是在注册创建线程回调例程后,其回调例程内的恶意代码不一致,下面再简单分析其回调例程。
2.4.1 暗云Ⅲ v3.0
暗云III v3.0其线程回调例程执行流程如下:
-
调用RtlInitUnicodeString初始化csrss.exe;
-
查找进程csrss.exe,检测到csrss.exe后则继续下一步;
-
感染MBR,并保护1到62扇区的数据,如果试图读前62扇区的数据则会返回正常的数据,如果试图写前62扇区的数据则返回写入的数据进行欺骗,实际没有被写入;
-
调用CreateSystemThread创建系统线程,该线程函数主要完成了shellcode下载执行等功能,下载地址为tj.tagcbm1t.com,目前该域名已经失活,不排除后期重新活跃,可拉取任意功能恶意代码进行执行
线程创建回调例程
系统线程函数完成shellcode下载执行等功能
2.4.2 暗云I v2.0
暗云I v2.0其线程创建回调例程执行流程如下:
-
调用RtlInitUnicodeString初始化svchost.exe,查找进程svchost.exe, 如果找到则设置标志位为1;
-
查询到svchost.exe后向其中插入APC,该APC的功能是下载addata64.db/addata64.db对应的文件并解密执行, 这部分行为和暗云I 差别不大,详细的分析可参考附录中暗云的分析。
目前域名已失活,url地址为:
https://upax.ximics.com/update/addata.db
https://upax.ximics.com/update/addata64.db
线程创建回调例程
联网拉取payload
插入apc
三、安全建议
-
暗云系列木马主要是通过外挂、第三方流氓软件、软件下载器、破解工具、盗版软件等进行传播,建议用户到官网下载或者通过电脑管家的软件管理功能下载应用,避免从高风险的网站下载安装软件。
-
已经中毒的用户可用管家急救箱进行查杀,下载地址:https://dlied6.qq.com/invc/xfspeed/qqpcmgr/other/SystemAidBoxPro.zip
急救箱查杀图
附录:IOCs
URL:
upax.ximics.com
tj.tagcbm1t.com
https://upax.ximics.com/update/addata.db
https://upax.ximics.com/update/addata64.db
参考链接:
1.暗云Ⅲ BootKit 木马分析
https://www.freebuf.com/articles/system/134017.html
2.暗云”BootKit木马详细技术分析
https://drops.xmd5.com/static/drops/binary-4788.html
3.暗云Ⅱ BootKit 木马分析
https://slab.qq.com/news/kuaixun/1286.html
4.“暗黑流量”超大规模DDoS溯源分析
https://slab.qq.com/news/kuaixun/1286.html