# 黑暗幽灵（DCM）木马详细分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-04-13T01:14:00Z
Canonical: https://wepostx.com/topics/193

> 乌云历史资料归档
>
> **原始作者：** 腾讯电脑管家
> **原始编号：** superkieran-wooyundrops:1146
> **原始发布时间：** 2016-04-13 09:14
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 背景

只要插上网线或连上WIFI，无需任何操作，不一会儿电脑就被木马感染了，这可能吗？近期，腾讯反病毒实验室拦截到一个“黑暗幽灵”木马的新变种，该木马功能强大，行为诡异，本文将对其进行详细分析，以下是该木马的主要特点：

- 木马功能强大，主要以信息情报收集为主，能够监控监听大量的聊天软件，收集网络访问记录、监控Gmail、截取屏幕、监控麦克风和摄像头等。

- 木马对抗性强，能够绕过几乎全部的安全软件主动防御，重点对抗国内安全软件，能够调用安全软件自身的接口将木马加入白名单，作者投入了大量的精力逆向研究安全软件。

- 木马感染方式特别，通过网络劫持进行感染，主要劫持主流软件的自动更新程序，当这些软件联网下载更新程序时在网络上用木马替换，导致用户无感中毒。

- 木马通讯方式特别，木马将数据封装成固定包头的DNS协议包，发送到大型网站来实现数据传输，此方法可以绕过几乎全部的防火墙，但是黑客要截取这些数据，必须在数据包的必经之路上进行嗅探拦截，结合木马的感染方式，可以推测出在受害者网络链路上存在劫持。

- 木马攻击范围较小，针对性强，且持续时间长达数年，符合APT攻击的特性。

# 0x01 木马行为概述

### 1.1 来源与传播途径
经过对大量受感染用户的分析，我们发现该木马来源于不安全的网络，无任何系统漏洞的机器只要连接到这些网络后，在一段时间后会感染木马，经分析发现木马主要通过在网络上劫持替换大量软件的自动更新程序进而感染电脑。当安装在电脑上的软件进行自动更新时，更新包被替换成木马，导致电脑被入侵。木马传播示意图如图1所示。

![原文图片](/media/2016/06/42260cb6d71adea706103d58abe3917e)
 图1. 木马主要传播途径示意图

### 1.2 木马安装流程
木马运行后会判断本机安装的安全软件，会检测多达43款安全相关软件，当检测到不同的安全软件后，执行不同的安装方式，以实现绕过安全软件的检测和拦截。经分析发现该木马主要有三种不同的安装方式，木马最终安装启动的方式为将核心dll释放到explorer同目录下，对其进行dll劫持启动。如图2中三种颜色分别代表三种不同的安装方式，经测试该木马能够绕过当前绝大部分安全软件的防御和拦截最终成功安装。

![原文图片](/media/2016/06/f4e86abe809a76335dfa43b8d69ecfaa)
 图2. 木马安装流程示意图

### 1.3木马功能分解
该木马主要功能是窃取计算机各种信息，通过插件监控监听各种常用聊天软件的语音文字聊天信息，接受指令进行简单的远程操控，将自动化收集到的各种信息文件打包发送。如图3所示为木马功能一览。

![原文图片](/media/2016/06/4978ec0c9fcafe1ce6fd3f76dd1cffc9)
 图3. 木马功能一览

### 1.4 木马网络通信
该木马的网络通信方式与木马的传播方式相呼应，木马将收集到的各种信息打包成文件，随后将其加密并封装成DNS请求包，并将这些数据包发送到国内几大知名网站服务器。这样的通讯方式可以绕过几乎所有的防火墙、入侵检测产品，然而黑客如何取得这些数据包从而获得窃取的数据呢？经分析发现其封装的DNS数据包都有着相同且固定的数据包头，因此我们推测黑客会在数据包必经之路上对数据包进行拦截转发到黑客服务器，从而获得收集到的信息，如图4所示为推测出的木马通讯数据包投递流程。

![原文图片](/media/2016/06/16e38d47632fd2093461ae8e579c57db)
 图4.木马网络通讯方式推测

# 0x02 木马详细分析

## 2.1 安装释放

### 2.1.1母体结构
该木马的母体程序为一个exe可执行文件，通过网络劫持正常软件的更新程序而被下载执行，该文件中包含5个资源文件，均为简单加密的PE文件，其中141为x86版核心dll、142为lsp劫持dll、146为x64版核心dll、150为白加黑黑文件，151为白加黑白文件，以下将详细分析。

![原文图片](/media/2016/06/d2ce2281ca8ede364cbe9880ea592195)
 图5. 母体资源信息

### 2.1.2 适应多种系统，不同系统不同行为
判断操作系统版本，设置全局变量，随后将根据该全局变了进行大量的不同操作。

![原文图片](/media/2016/06/ea10533bd612bc5455afd7cf1142db58)
 图6. 判断操作系统版本并设置标志

### 2.1.3 利用系统漏洞提权
判断当前系统是否为vista、win7等，如果是则检测当前进程是否具有管理员权限，如果没有该木马会尝试通过CVE-2011-1249将自身提升为管理员权限。该漏洞影响xp、vista、win7等多种版本操作系统。

![原文图片](/media/2016/06/06d27aa7999c823b46cd68fcd4c1a34f)
 图7. 木马利用CVE-2011-1249漏洞提权

### 2.1.4 对explorer进行dll劫持
通过注册表检测本机安装的安全软件，当目标系统没有安装安全软件时，木马将根据操作系统释放劫持dll到%windir%目录下对explorer进行劫持启动，在xp等系统下木马释放ntshrui.dll、在win7等系统释放msls32.dll，在win8等系统释放AduioSes.dll。随后启动一个新的explorer进程加载核心dll开始工作，此为第一种安装方式。

![原文图片](/media/2016/06/d95ed5fa06699d71e86bccb8fd671364)
 图8. 木马通过释放dll到explorer同目录进行劫持启动

### 2.2 对抗安全软件

### 2.2.1 暂存核心文件
如果检测到趋势等国际安全软件而又未检测到国内主流安全软件时，木马会将核心dll释放到%CommonProgramfiles%的一个子目录下，暂时存放。

![原文图片](/media/2016/06/abd9730a3f581d59ec864b127acf1826)
 图9. 暂时存放核心dll

### 2.2.2 释放dll并安装lsp
同时释放lsp劫持dll，并添加lsp，通过lsp，该dll可以注入到所有具有网络连接的进程中。在注入的进程中进行dll文件的移动，从而绕过安全软件，此为第二种安装方式。

![原文图片](/media/2016/06/bc2d07a3aa3cb64f61c40ed6e9a142e2)
 图10. 释放lsp劫持dll

![原文图片](/media/2016/06/2dfb7226f2509f528e2ce83401045b78)
 图11. 安装lsp

### 2.2.3 释放白加黑对抗杀软
当存在国内主流安全软件时，木马为了绕过针对lsp安装的拦截使用了白加黑技术

![原文图片](/media/2016/06/cf717098cd081e7d725e6f2df63640c9)
 图12. 木马释放白加黑两个文件，准备绕过主防

### 2.2.4 通过白加黑安装lsp过主防
木马通过白加黑技术，并加以一系列复杂技巧绕过主动防御实现安装lsp，经测试大部分安全软件的主动防御均被绕过。

![原文图片](/media/2016/06/eee8822a43511c24f0f34183bd0362a6)
 图13. 通过白加黑绕过主防安装lsp

### 2.2.5 绕过杀软对explorer进行dll劫持
安装lsp后，相关dll便以lsp劫持的方式插入到所有联网进程中，包括svchost、浏览器、聊天软件、安全软件等。Dll加载后首先判断当前进程，符合条件则将之前备份的核心dll移动到%windir%目录进行劫持（重启后移动）。此为第三种安装方式。

![原文图片](/media/2016/06/6238176b171b68fa2a2f4e88e77a68ce)
 图14. 将核心dll移动到%windir%目录进行劫持

### 2.2.6 加载核心dll
随后木马判断自身是否位于ie、svchost、杀软等进程，以进行不同的行为，同时尝试直接加载核心dll（如果没加载，劫持需要等系统重启后核心dll才会被加载）

![原文图片](/media/2016/06/7381167d52f8a6c14f997bae1994f4dc)
 图15. 根据当前进程名决定是否立即加载核心dll

### 2.2.7 恶意操作杀软白名单，免杀
木马判断自身是否位于各种安全软件进程中，如果是则调用安全软件自身接口进行白名单添加，会将所有木马文件路劲添加到杀软白名单中。经测试，涉及到的安全软件均能正常添加白名单。

![原文图片](/media/2016/06/c6771423c0adc02c009a2d1321b2435a)
 图16. 某安全软件白名单添加相关代码

### 2.2.8 lsp阻止安全软件联网，阻断云查
通过lsp过滤函数对WSPSend、WSPSendTo函数进行过滤，当判断发包者是安全软件进程则直接关闭连接，阻止联网，阻断云查

![原文图片](/media/2016/06/521c046738b875ec072f8bd37b6a103d)
 图17. 阻止安全软件联网云查

### 2.3 信息收集

### 2.3.1 收集网卡信息
收集的网卡信息包括网卡型号、网卡mac、网关ip、网关mac等

![原文图片](/media/2016/06/bf632b590357ab014b7c092df1406749)
 图18. 通过发送arp包获取网关mac地址

### 2.3.2 收集系统安装的软件列表
木马通过注册表Uninstall获取计算机安装的软件列表信息，将获取的信息异或0x87后写入到C:\WINDOWS\Temp\{E53B9A13-F4C6-4d78-9755-65C029E88F02}\soft.prog文件中，以下获取的信息无特殊说明都位于该目录下

![原文图片](/media/2016/06/28edf3addf47e8fa6885e9b70bbcf41d)
 图19. 获取安装软件列表

### 2.3.3 截屏
获取当前屏幕快照，zip压缩后保存为time().v文件

![原文图片](/media/2016/06/46a58007cf0187c1ac8c31572bb5321d)
 图20. 获取屏幕快照

### 2.3.4 收集磁盘文件目录
获取磁盘驱动器信息，包括全盘所有文件路径，获取后zip压缩到drive.d文件中

![原文图片](/media/2016/06/8c47bbdcf88683ec973c6d830a40cffa)
 图21.获取磁盘文件信息

### 2.3.5 收集IE历史记录
通过com获取浏览器历史记录信息，存储到ie.his

![原文图片](/media/2016/06/15ed5eb2bcbebc3ff99cd3bc19396b77)
 图22. 获取浏览器访问记录

### 2.3.6 收集设备信息
遍历系统设备，判断是否有笔记本电源适配器、摄像头、麦克风三种设备，将结果加密写入到time().hd文件中。

![原文图片](/media/2016/06/531a32a691bb67a757184fe9be18ecac)
 图23.遍历系统设备

![原文图片](/media/2016/06/001f119ff76c8798db96567035c10af9)
 图24. 判断是否有指定设备

### 2.3.7 针对浏览器进行键盘记录
安装WH_GETMESSAGE全局钩子，安装后理论上所有具有消息循环的进程均会加载此dll，并调用钩子函数，在钩子回调中，判断当前进程是否是Iexplorer.exe、360se.exe、SogouExplorer.exe三种浏览器进程，如果是则进行键盘记录，记录的包括按键信息、窗口标题，通过imm32.dll该方法还可以记录中文输入，记录到的信息存为（日期+时间）.k文件。

![原文图片](/media/2016/06/60d96369c48c038f4818b6b8dbab1035)
 图25. 安装钩子

![原文图片](/media/2016/06/ec1ff2a473ba0597ae00ca8540d7e87b)
 图26. 只记录指定浏览器进程的键盘输入

### 2.3.8 收集gmail信息
在记录键盘时，当判断以上浏览器窗口中含有Gmail字符时，会启动一个线程专门收集Gmail信息，会加载相关插件，尝试通过Imap协议下载服务器上的所有文件

![原文图片](/media/2016/06/287134ef95398174bb47dfa4fe5438bf)
 图27. 判断是否正在登录gmail

![原文图片](/media/2016/06/940c4b6ca06efcd8137d038378c4aa6d)
 图28. 通过插件尝试通过IMAP协议收集数据

### 2.3.8 加载插件收集各种IM相关信息
通过进程名判断skype.exe、cc.exe、raidcall.exe、yy.exe、aliim.exe等即时聊天、语音聊天软件，加载相关插件对此类聊天软件进行监听监控。

![原文图片](/media/2016/06/ed72b3fd31e8dfacd28986f51378a7ca)
 图29. 根据im软件进程名加载相关插件

![原文图片](/media/2016/06/b4a4c14b661aa40bcc433c0111164c74)
 图30. 通过插件的接口可猜测相关插件主要用于监控聊天信息

![原文图片](/media/2016/06/80960bdab146bfd4016cc1c387a63f20)
 图31. 木马针对所有常见通讯软件均做了监控

### 2.4、网络通讯

### 2.4.1通讯协议
此木马最诡异的地方的通讯方式，该木马没有C&C服务器，所有的数据均伪装成DNS包发送到www.baidu.com、www.sina.com、www.163.com域名所在服务器的53端口或者8000端口。黑客要想获取这些数据包，必须在数据包从本地计算机到这些网站服务器的必经之路上进行劫持嗅探。

![原文图片](/media/2016/06/ce8a7934bfebd76c6d76882e76b87070)
 图32. 木马的数据包均发送到www.sina.com等服务器上

![原文图片](/media/2016/06/b66b79f95b18b9d2037b0371c04ae367)
 图33. 木马使用udp协议通讯，目标端口为53或者8000

![原文图片](/media/2016/06/5437fa26de46cae89e2bb571c01c04bd)
 图34. 木马伪装成DNS协议数据包，每个包都有固定的包头作为标记

![原文图片](/media/2016/06/5d6d97852d3efb4a85b920ee6d1ebd92)
 图35.嵌入到DNS协议中的木马数据，及时专业的网络管理员，也难发现异常

### 2.4.2 自动上传收集到的文件
所有木马自动收集的文件，木马插件生成的文件都会被定时打包编号并发送出去

![原文图片](/media/2016/06/ed4bbca581f2c24993ecf59af257f0a2)
 图36. 定时读取相关文件，打包编号发送出去，发送成功后会删除先关文件

### 2.4.2 远程控制
木马还会绑定本地一个udp端口，并不断尝试收取指令，进行远程控制，主要的远程控制功能包括cmdshell、文件管理、插件管理等。

![原文图片](/media/2016/06/5c805d983643420cae680367098f4fb8)
 图37.绑定本地一个udp端口

![原文图片](/media/2016/06/74388bd137075f055f33774ea45d8a1f)
 图38. 不断尝试收取控制指令

![原文图片](/media/2016/06/915e6186bf5492c7526c70061a057cfe)
 图39. 远控功能

# 0x03 木马信息

### 3.1安全软件
木马检测多大43款安全软件，涵盖了多内全部的安全产品及国外较有名的安全产品，从安全软件来看，该木马主要针对国内用户

![原文图片](/media/2016/06/e3d60181809baea18a7a6e6aa832f513)
 图50. 木马检测的安全软件列表

### 3.2 其它信息
从木马的互斥体、调试信息等可看出DCM应该是该木马的代号，但是什么的缩写的？这个还真猜不出来

![原文图片](/media/2016/06/71135bff48a61ac9f59456507df9a063)
 图51. 木马中的字符串信息

# 0x04 安全建议

软件厂商：下载更新程序尽量使用https等安全加密的通讯协议，对下载回来的文件在加载运行前一定要做签名校验。
用户：尽量不要使用安全性未知的网络上网，如公共WIFI、酒店网络等，如果怀疑自己的网络有问题，及时与运营商反应。此外安装安全软件可在一定程度上防御此类攻击，目前管家已率先查杀该木马及其变种。

## Replies
