安全路透社
当前位置:安全路透社 > 网络转载 > 正文

深蓝维护通道DBNT,堪称国内网吧版Fireball

*本文原创作者:marssec

Fireball最近火了,这类软件在国内并不稀奇,今天曝一个去年就监测到的网吧行业后门软件, 堪称网吧版Fireball.

软件信息

软件名称:

深蓝维护通道, 官方简称DBNT.

该软件主要用于网吧客户机系统维护 (安装系统补丁,更换壁纸,同步文件), 整体为C/S结构, Server(DBNT.exe/控制台.exe)运行在在网吧内网服务器, Client(DbntCli.EXE)运行在客户端. 对该软件多个不同版本的文件进行对比分析, 发现后门仅存在于8.3.x 以上版本.

后门概要

后门的基础组件为一个下载者DLL,其通过UDP / TCP向云端上报运行终端信息, 云端则会回复配置文件,其中包含压缩包URL, “下载者” 将压缩包下载并解压, 然后加载其中的DLL. 软件大部分功能使用AU3脚本编写, 对其组件之一c_Smss.a3x进行反编译(a3x文件是AU3脚本预编译后的文件) :

 a3x文件是AU3脚本预编译后的文件

 

其代码逻辑为:将打包的下载者StatClient.DLL释放到CurrentDir + “/維护通道/data/c_kernel.dat”,并调用DLLOPEN加载.  (AU3的DLLOPEN即相当于LoadLibrary)

下载者DLL在不同版本安装包中文件名不同, 早期版本释放到 c_kernel.dat, 在官网目前最新版中释放后文件名为StatClient.dll .

该DLL并不直接存在于客户端, 而是被打包在服务端 Data/client/C_Smss.a3x.. 客户端DbntCli.exe启动后连接到服务端下载并加载c_Smss.a3x,  c_Smss.a3x加载DLL,  DllMain触发下载者代码的执行.

c_kernel.dat核心逻辑

获取系统信息: 系统版本, IE版本, MAC, IP,  Flash版本, 以及软件自身版本, 发送到云端Server:

 数据协议头

数据协议头为0×20150801,发送前会将数据包加密,云端服务器域名为center.sLanquan.com, 服务端口为8000 , 目前域名指向: 116.28.63.219.

 协议头

 

发送数据后等待server回复, 如果成功收到配置数据,则执行解密动作

 解密数据

 解密后的配置:

00B5BE88  ......?...<?xml version="1.0" encoding="gb2312"?><r><stat

00B5BEC8 us v ="0"/><urlv="http://gg.icafedh.com/Auxili1.zip"/><ver v ="

00B5BF08 1.0"/></r>.

解析XML, 读取URL:

 解析XML, 读取URL

得到URL后, 会在URL路径后面附加字符串“.crc” , 形成新的URL : http://gg.icafedh.com/Auxili1.zip.crc,然后下载到临时文件. “.Crc”文件本质是个INI, 下载后会读取CRC字段以备校验, 然后再次生成随机文件路径, 开始下载http://gg.icafedh.com/Auxili1.zip.

 生成随机文件路径

 

 生成随机文件路径

生成随机文件路径

 

 生成随机文件路径

 

下载的压缩包解压后:

 下载的压缩包解压后

 

c_kernel.dat会读取config.ini中的 dll_name 或exe_name, 并加载对应的DLL或创建exe. 目前云端server下发的压缩包中只启用了配置文件中的dll_name, 没有启用exe_name.

但从c_kernel.dat的代码中, 可以看出该后门开发时还考虑了下载并创建exe这种需求, 云端只需要在配置文件中加上exe_name, 并打包下发对应的exe即可.

 

 打包下发对应的exe

打包下发对应的exe 

压缩包中的Device.DLL加载后会继续展开其他行为.

分析device.dll

 根据PE里面的信息可知device.dll编译时间为 (GMT: Mon Jul 10 04:08:00 2017).

Device.dll!DllMain创建线程从资源段提取ID为101的DLL资源, 然后内存加载并遍历EAT, 获取内存DLL中AddTask函数地址然后调用.

 获取内存DLL中AddTask函数地址然后调用

资源文件:

 资源文件

        

将DLL提取出来(后文将统称为101.DLL),可以看到101. DLL在编译时的文件名为: SLMem.dll , 不难推测在最初开发时就考虑到了要使用内存加载来增强隐蔽性. 其编译时间为(GMT: Mon Jul 10 04:08:00 2017).

 编译时间

 导出函数101!AddTask主要是创建线程卸载并删除DLL磁盘文件:

 导出函数101!AddTask主要是创建线程卸载并删除DLL磁盘文件

 

也就是说, Device.dll将资源段的101.DLL在内存中加载后, 再调用101!ADDTask来卸载并删除device.dll自身.

101.dll!DLLMain创建线程, 随机延时0 – 200秒, 随后检测”环境”, 检测环境主要是检测系统内是否存在HIPS,系统监控,安全防护类软件.

 随后检测”环境”

被检测的部分软件信息: 

        被检测的部分软件信息

当发现系统内正在运行HIPS/行为监控类软件的时候并不会退出, 而是循环检测, 每次等待6秒, 在100次的时候(即10分钟后),  会内存加载105.DLL,该DLL同样包含在资源段中, 资源ID为105.

105.dll主要是上报数据, 发送的数据包含当前系统内运行的进程列表,MAC,以及”agent”标记”slnew1_000”. 通信协议与c_kernel.dat类似, 只是协议头变为了 0×20161011, 数据同样是加密传送. 

ServerIP地址在105.dll中固定为116.28.63.213, 没有使用域名.

在c_kernel.dat中, 使用的域名是center.sLanquan.com, 对应的IP 116.28.63.219, 两个尾段相近,一个213,一个219. 根据通信协议/加密方式的相似度, 以及IP的相近, 可以推测105.dll与c_kernel.dat后门同为该软件厂商开发.

105.dll上报的数据:

 105.dll上报的数据        

如果系统内不存在HIPS类软件, 符合其”运行环境”要求, 101.dll会加载其资源段ID为107的EXE文件.

其流程主要是创建傀儡svchost,将资源中的107.exe复制到svchost进程空间. 同时还会伪装傀儡svchost的父进程ID.

伪装傀儡svchost的父进程ID

在创建svchost进程时, 首先会遍历系统进程列表, 查找系统内已有的正常svchost.exe,并返回其PID , 该PID将被用于伪装父进程. 伪装后, 使用PCHunter等ARK工具查看傀儡进程的父ID为系统进程, 无法直接看出其与DBNT客户端进程之间的直接关联.  

 在创建svchost进程时, 首先会遍历系统进程列表,

获取伪装进程父ID需要用到的API:

获取伪装进程父ID需要用到的API

调用Openprocess打开刚才找到的svchost进程ID, 得到进程句柄, 后续创建僵尸svchost.exe时, 会将此句柄设置为僵尸进程的父进程句柄, 从而达到伪装父进程目的:

 伪装父进程

 

101.dll将傀儡进程内部”挖空”, 然后将107.exe的代码复制到傀儡进程空间.其实现方式是经典的NtGetContext… – > NtUnmap…  ->NtWriteMemory.. – > NtResumeThread.

  NtUnmap… ->NtWriteMemory.. – > NtResumeThread.” src=”http://image.3001.net/images/20170730/15013785295152.png!small” width=”690″ height=”449″>

        

上述工作完成后, 在任务管理器中查看, 傀儡svchost.exe进程为system用户启动, 父进程ID也是系统自身的svchost服务进程, 命令行也被伪装为 “-knetsvc”.

 命令行也被伪装为 “-knetsvc”.

命令行也被伪装为 “-knetsvc”.

 在XP上, 由于获取不到用于伪装父进程ID的API地址, 代码执行条件不成立, 导致其放弃创建svchost.exe,转而使用下述方法执行107.exe :

首先创建名为”#$%sl_*&d)o&wn()”的共享内存, 再将107.exe资源数据复制到共享内存然后继续提取自身资源段中ID为106的EXE, 将106.EXE释放到同目录下: “维护通道\\DATA\\C_Smss.a3x “  最后调用CreateProcess(,”…c_smss.a3x”,)让106.exe执行起来. 

调用CreateProcess(,”…c_smss.a3x”,)让106.exe执行起来

106.exe任务简单, 其逻辑为: 将共享内存中的数据拷贝到系统临时文件, 然后调用CreateProcess使该进程执行.

 调用CreateProcess使该进程执行

106.exe pdb路径:

106.exe pdb路径

XP和WIN7上两种不同逻辑的最终目的一样, 都是为了使107.exe的代码得到执行.

分析107.exe

107.exe也是个下载者, 内部代码流程依旧与c_kernel.dat高度相似, 会继续向云端server上报客户端系统信息, 并从server端获取xml配置文件.服务器IP变为了:center.2015cn.com/center.2017cn.com/center.2019cn.com.  三个域名均解析到:116.28.63.213 (该IP与105.dll中使用的serverip相同). 107.exe从云端server接收到的配置文件如下:

 107.exe从云端server接收到的配置文件

00D50020 <?xml version="1.0" encoding="gb2312"?><r>..<i n="plug_web" v="

00D50060 http://data.2019cn.com"/>..<i n="server"v="116.28.63.213"/>..<i

00D500A0  n="url"v="http://very.icafedh.com/mysl/myslnew1.zip"/>..</r>..

 

其中包含压缩包URL: http://very.icafedh.com/mysl/myslnew1.zip. 107.exe会使用先前相同的方式下载压缩包 -> 内存加载DLL  -> 删除临时文件. 

  内存加载DLL -> 删除临时文件. ” src=”http://image.3001.net/images/20170730/15013786861316.png!small” width=”690″ height=”400″>

myslnew1.zip 是个加密的压缩包, 其密码为12edsfi2#R@fwe(后续下载的其他压缩包也均带有密码).  这个压缩包在VT上出现过, 但因为带有密码, VT并没有分析出结果.

 

解压后:

        解压后

这些DLL和EXE中包含资源DLL/EXE/SYS,并且资源中的DLL/EXE 同样又包含着其他的资源DLL/EXE/SYS, 这些资源中的资源中的DLL/EXE中, 又包含着下一层资源DLL/EXE/SYS , 在运行时均采用内存加载或傀儡svchost的方式来增强隐蔽性.

 

Run.xml是个配置文件:

<?xml version="1.0"encoding="gb2312" ?>

<r>

<config>

<rt>1</rt>

</config>

<plug>

<p name="taskcall.dll"type="3" param="" />

<p name="NetPack.dll"type="3" param="" />

<p name="back.dll"type="3" param="" />

<p name="dace.dll"type="3" param="" />

</plug>

</r>

其中”<rt>1</rt>”表示运行模式, 如果为1, 则会采用内存加载/傀儡进程方式执行代码,如果为0则会采用常规磁盘文件方式执行.

 不同的DLL/EXE对应着不同的模块, 大多数以”插件”的形式加载, 代码执行也不再依赖DLLMain触发, 而是导出GetPlugProxy接口供其他模块调用, 各模块之间使用共享内存/命名event进行通信/控制运行状态.

 

 导出GetPlugProxy接口

流量劫持模块:

流量劫持主要由三个DLL配合完成: ProtocolFilters.dll , nfapi.dll ,netpack.dll.

1.      ProtocolFilters.dll 负责解析HTTP协议

2.      nfapi.dll 负责与网络过滤驱动通讯

3.      NetPack.dll 则是流量劫持的核心控制模块,其资源中包含两个WFP驱动(X86+X64), 其会释放SYS, 并创建线程与驱动通信.

Netpack.dll在释放驱动文件时会从预置列表中随机选一个作为文件名, 这些预置文件名大多是在系统自带sys文件名的基础上做了少许改变:

 流量劫持

驱动文件:

 驱动文件

 

 驱动文件

 WFP驱动启动后, 调用FwpmBfeStateGet判断BFE引擎状态, 如果为运行状态,则会直接注册相关callout,如果BFE尚未运行, 则会调用FwpmBfeStateSubscribeChanges 注册事件通知, 在合适的时机再注册callout. 

 合适的时机再注册callout

 

Wfp驱动, 以及protocolfiter.dll,nfapi.dll 本身并不包含劫持行为, 只是将R0收集到的网络数据回传到R3, R3 protocolfiter.dll 解析协议, NetPack.dll处理数据(判断是否需要劫持/构造302跳转等), 然后再将数据回传给WFP驱动, 驱动将数据重新注入到网络栈.

NetPack.dll主要根据配置文件劫持URL,配置文件使用先前相同的手段从网络获取(UDP+HTTP), 目前主要有三个配置文件, 两game.dat(new_sf.zip, new_tl.zip), 一个hijack.dat(hijack_test.zip).  压缩包都带有密码, 解压密码Alj231*^D

hijack_test中的配置文件主要劫持了一些游戏注册推广页面:

 劫持了一些游戏注册推广页面

当访问的URL匹配上rule_str时, 将会使用”repl”中的url构造302跳转, 以实现劫持推广ID目的, 并且能够控制劫持频率.

 控制劫持频率

 控制劫持频率

控制劫持频率 

new_sf.zip, new_tl.zip这两个配置文件, 则主要是劫持私服.

 劫持私服

将同行网站随机劫持到http://sss.aiteeth.com/apis.php?s=Redirect/index/pm/<%SRC_URL%>和 http://jiechi.19427.net

 同行网站随机劫持

同行网站随机劫持 

而且该流量劫持模块还具备劫持HTTPS的能力:

其在初始化时会导入一个根证书到系统信任区, 在网络驱动初始化完成后, 该劫持插件则变成中间人的角色, 使用浏览器打开https网站时, 证书均被替换, 甚至包括淘宝, 支付宝, 网银等. 但目前尚未发现其利用这些数据的证据.

 劫持HTTPS

https被劫持后, 访问https站点, 证书均被替换:

支付宝:

 支付宝证书被替换

农业银行网银:

 农行网银证书

中国银行网银:

 中国银行网银

除流量劫持外,还有刷量插件:      

 刷量插件

刷量模块功能主要是创建隐藏窗口, 通过WebBrowser  com接口以及JS控制网页动作.

 创建隐藏窗口

创建隐藏窗口 

刷量模块中包含一个很特别的设计: HOOK窗口+音频 API ,以达到后台隐蔽刷量的效果.

        HOOK窗口+音频 API

HOOK窗口+音频 API

HOOK窗口+音频 API 

并且其会根据系统整体资源状态,刻意控制自身CPU,内存占用, 以及进行”内存优化” , 避免被人察觉. 这个比较有良心.其实主页劫持也比较有良心, 并没有选取”主页”下手.

 内存优化

       

这些模块在运行时大多会使用UDP向云端server请求配置文件, 并且导出GetProxyPlug接口方便调用,可以看出该团队具有自己特有的劫持插件开发规范.

除流量劫持和刷量外, 还包含一些其他模块, 不再一一描述(freebuf编辑器要是能直接复制粘贴图片就好了), 有兴趣的可以自行下载样本分析,发文时相关URL仍然可用, c_kernel.dat固化在其软件安装包里面, 官网可下载.

厂商信息追踪:

查询后门”源头”域名slanquan.com信息:

 查询后门”源头”域名slanquan.com信息

 

注册人邮箱: 521786@qq.com 联系人: xionghua (熊华)

通过该邮箱反查其注册的其他域名:

 通过该邮箱反查其注册的其他域名

其中包括: 1e5.com, 8u5.com , 9u2.com, slanquan.com

除slanquan.com没有任何记录之外, 其他三个网站在搜索引擎均有记录,并且目前仍能打开. 其中9u2.com 的网站是”深蓝云维护”, 即本次分析的软件的云版本网页后台.

 后台 

8U5.COM , 近期似乎搭建过私服:

8U5.COM , 近期似乎搭建过私服

在1e5.com 网站底部, 可以看到其公司名: 深圳市符熊网络科技有限公司 .

 符熊网络科技 

在”天眼查”查询该公司信息:

 天眼查

在法人及股东信息中, 没有出现”熊华”.

但在其网站备案信息中, 发现了一个域名: aidaliang.com 艾达亮

 

 aidaliang.com 艾达亮

aidaliang.com现在是个赌博网站 :

 aidaliang.com现在是个赌博网站 

该域名备案信息:

 该域名备案信息

在”天眼查”以关键字: “深圳  艾达亮  熊华” 搜索:

 在”天眼查”以关键字: “深圳  艾达亮  熊华” 搜索

深圳市艾达亮科技有限公司基本信息:

 深圳市艾达亮科技有限公司基本信息

招聘信息:

 招聘信息

知识产权/商标信息:

 知识产权/商标信息

知识产权/商标信息

知识产权/商标信息

从其申请过的商标信息来看,该公司开发过”助手”, “管家”, “刷机”, “模拟器”类软件, 甚至”安全卫士”, 这些软件没找到下载地址, 无从分析, 如果这些软件中也包含恶意后门代码, 那该团队的运作方式就与Fireball基本一致.

此外, 在该公司著作权信息中, 可以发现本次分析的软件”深蓝维护通道”著作权即在该公司名下:

 深蓝维护通道”著作权即在该公司名下

艾达亮公司的其他相关域名:

 艾达亮公司的其他相关域名

软件官网域名slsup.com备案信息:

 软件官网域名slsup.com备案信息

卢建良应该是软件作者本人. 该软件作者的另一个域名wglm.net :

 该软件作者的另一个域名wglm.net

Wglm.net备案人是徐向红, 此人与软件作者关系不明. 但徐向红同时也是深圳艾达亮公司的股东之一, 占股2%: 

 徐向红同时也是深圳艾达亮公司的股东之一, 占股2%

 

查询域名 icafedh.com的域名信息 (恶意劫持插件压缩包通过该域名传播):

 查询域名 icafedh.com的域名信息

icafedh.com域名下的恶意插件压缩包, 早在去年就在魔盾上出现过分析报告, 并且魔盾当时自动分析的部分行为也与本次分析类似

访问过的网络信息(某些域名与本次分析一致)

 访问过的网络信息

释放的文件也在本次分析中出现:

 释放的文件也在本次分析中出现

关于早期该域名下恶意插件的更多信息, 详见魔盾报告

魔盾分析报告PDF版本:

1.      https://www.maldun.com/filereport/YXNkZmRzZmFkc2Y0NzUwMmRzZmFzZGZhc2Rm/pdf/

2.      https://www.maldun.com/filereport/YXNkZmRzZmFkc2Y0NzUwNGRzZmFzZGZhc2Rm/pdf/ 

批量查询所有相关域名备案信息:

icafedh.com

1e5.com

8u5.com

9u2.com

wglm.net

slsup.com

slywh.cn

haowanmc.com

slanquan.com

aidaliang.com

 批量查询所有相关域名备案信息

 

其中主要有三家公司: 深圳文不加点, 深圳艾达亮 , 深圳符熊网络.  此三家公司主要与两人有关: 熊华, 陈文.  徐向红在艾达亮公司占股2%, 应该是与作者卢建良关系比较亲近的人.

Slsup.com为软件官网, 备案为个人性质, ”深蓝维护通道” 软件著作权则在深圳艾达亮公司名下 , 该公司也多次为”深蓝软件” , “深蓝安全大师“申请过商标.

相关域名多数由熊华注册, 以”QQ 521786 网吧”为关键字在百度搜索:

 相关域名多数由熊华注册, 以”QQ 521786 网吧”为关键字在百度搜索

相关域名多数由熊华注册, 以”QQ 521786 网吧”为关键字在百度搜索

相关域名多数由熊华注册, 以”QQ 521786 网吧”为关键字在百度搜索

 

在本次下发的恶意文件中暂没有发现挖矿模块.

(如果真的几百万终端同时挖矿,有没有一种爽爆的感觉)

本次分析的软件深蓝维护通道,其占有开机启动优先权, 并且使用内存加载/傀儡进程隐藏自身,一旦恶意行为施展完毕, 即使上网用户自行安装杀毒软件,也无法有效查杀及追踪朔源. 并且该后门由云端控制, 如果云端不下发配置文件, 则不会有任何敏感行为, 在客户端进程运行后, 多款杀毒软件也均显示安全.

相关链接:

【更新360公司回应】火球(Fireball)病毒,是老外如临大敌,还是360指鹿为马?

【FB TV】一周「BUF大事件」:《网络安全法》开始施行;首届TCTF线下决赛火热进行;Fireball全球肆虐

Fireball真相:一个菜鸟级流氓软件竟让老外如临大敌

Fireball恶意程序已袭击全球将近2.5亿台PC,背后推手是一家中国电子营销机构

*本文原创作者:marssec

未经允许不得转载:安全路透社 » 深蓝维护通道DBNT,堪称国内网吧版Fireball

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册