概述

近期,金山毒霸安全实验室通过“捕风”威胁感知系统的监控数据,追踪发现一款名为“心跳助手”的安卓手游模拟器软件暗藏流量暗刷类病毒。比较特别的是,病毒宿主进程被同时嵌入两套流量暗刷插件,经过病毒特征同源性分析,我们确认这两套木马插件分别是”JsCtrl”和”老裁缝”两大暗刷病毒家族的最新变种,正如传说中的”双生花”,一株二艳,并蒂双花,在同一个枝蔓上相生相杀,所以我们将本次爆发传播的流量暗刷木马命名为”双生花”家族。

”双生花”暗刷病毒家族包含的两套插件是完全不同的实现机制,其早期变种的传播也没有太多的交叉点。从我们的监控数据看,其中的”JsCtrl”变种通过JS脚本下载刷量模块到本地内存加载执行,主要针对目标为58同城、百度糯米、百度的广告推广和SEO排名优化;另外一款“老裁缝”变种通过多层的内存模块加载释放后,利用内嵌的浏览器内核和松鼠脚本引擎squirrel来操作加载模拟点击,主要针对目标为爱奇艺、优酷、PPTV等主流视频站点,通过暗刷视频播放量从各大视频平台赚取广告内容分成。

两大暗刷木马家族同时藏身”心跳助手”这款正常软件实现”借尸还魂”,虽然”双生花”暗刷木马的合作传播内幕目前尚不完全清楚,但从某种角度来看,这应该算得上一次变相的软件供应链攻击,从” Putty后门事件”、”XcodeGhost开发工具污染”到”Xshell后门”, 软件供应链攻击案例层出不穷,官方软件是否真的可信,正规软件身份的黑白界限也越来越模糊,以本次”双生花”暗刷病毒家族的传播为例,根据我们的监控数据回溯,本次传播攻击从18年4月初开始出现,早期变种只包含”JsCtrl”变种,到1.1.18版本开始加入”老裁缝”最新变种。凭借正规软件外壳,隐蔽性极强,通过内存加载和脚本机制实现全程无落地文件攻击,在国内多家安全软件的眼皮下,本次”双生花”家族的传播攻击时间跨度已接近半年。

另外,”流量暗刷”这种攻击行为一直都是黑产流量变现的重要渠道手段之一,虚假流量也在互联网的各个行业渠道都能看到身影,对于产品商业、业务安全的毒害影响之重已无需多言。对于产品厂商而言,这样的模拟流量暗刷攻击基本上完整模拟了用户的操作过程,从服务端进行有效鉴定识别非常困难,安全策略会被频繁绕过,从我们的监控数据看,近期针对各大广告平台、资讯平台、视频平台的流量攻击愈发泛滥,我们也非常欢迎爱奇艺、优酷、PPTV、58同城、百度糯米等受影响厂商与我们联系(关注我们的官方微信号” yucunsafe”回复即可),共同解决此类业务安全问题。

1. 主模块分析

病毒模块加载和执行流如下图所示:

1.png

服务进程Xintiao_Service.exe(签名:Beijing Shouyou Duanxiang TechnologyCo., Ltd.;版本号:1.1.18.4486)以参数“daemon=1”启动将下载解密执行JS脚本,通过脚本去下载和执行刷量插件1;以参数“daemon=2”或“module1”启动将下载解密加载刷量插件2(老裁缝变种);

2.png

2. 刷量插件1

1. Xintiao_Service.exe

以参数daemon=1启动将访问链接hxxp://mnq2.xintiao365.com/tj?timestamp=&id=下载加密的JS脚本并解密执行,在脚本中完成后续模块的下载执行;

3.png

脚本引擎通过MSScriptControl.ScriptControl添加对象模型checkstate,使得脚本可以执行自定义的对象方法。

4.png

checkstate的方法定义如下图所示,其中HashCls是调用CalcHash.dll的导出函数CalcHash解密并内存加载PE模块;

5.png

2. JS脚本

整理后的脚本如下:主要功能是检测调试分析进程,检测不到则上报并下载执行刷量插件;

检测checkstate的全局变量xc和xy选择加载test_vmok.dll或者phantomjs.exe;其中phantomjs.exe的下载链接是hxxps://c.wecheng99.com/cfg.db,test_vmok.dll的下载链接是hxxps://c.wecheng99.com/ver_cfg.db;

6.png

下载完成后文件保存到%TEMP%\WinRAR\ac71bf8b-XXX.db(XXX是文件大小);并调用checkstate.HashCls进入CalcHash.dll的导出函数HashCls进行解密加载。

7.png

脚本执行过程中会写如下注册表标记:

[HKCU\Software\Microsoft\kccloud]

start:当前时间

ac71bf8b-XXX.db:”123”

[HKCU\Software\Microsoft\Wisp]

cfg:加密后的URL “hxxp://k.biubiang.com:8124/apifour/getlink”

[HKLM\Software\WinRAR]

state:加密后的URL” hxxps://c.wecheng99.com/phantomjs.js”

3. test_vmok.dll

test_vmok.dll在dllmain中访问链接hxxp://k.biubiang.com:8124/apifour/getlink获取刷量配置,内容和格式如下: 

8.png

其中script是刷量脚本链接,url_list是被刷量的网页链接;通过添加参数host_id=%d可以获取对应的配置。然后下载script脚本文件,访问url_list中的链接并在页面中插入执行script脚本进行刷量。

4. phantomjs.js

phantomjs.exe加载后会读取注册表[HKLM\Software\WinRAR]下的值state,解密得到链接hxxps://c.wecheng99.com/phantomjs.js;然后下载并执行主控脚本; 

9.png

loop函数首先访问hxxp://47.105.34.235:8125/apithird/getlink获取刷量配置json数据,然后解析json并下载刷量脚本;

10.png

getscript()下载刷量脚本并设置定时器checkkeyword,checkkeyword()解析关键词并访问刷量目标页面;

11.png

viewpage先判断TEMP目录下是否存在uag36.dat,不存在则访问链接hxxp://182.92.228.27/cache.php?f=uag下载然后设置定时器viewpage;

12.png

如果存在uag36.dat,则解密该文件得到脚本并执行,内容如下:

13.png

然后调用initpage()加载页面,在onLoadFinished()方法中执行刷量脚本;

14.png

5. 刷量分析

test_vmok的配置链接为hxxp://k.biubiang.com:8124/apifour/getlink,主要刷58同城广告及部分视频广告;phantomjs的配置链接为hxxp://47.105.34.235:8125/apithird/getlink,主要刷58同城、百度糯米、百度的搜索排名优化。

1、通过遍历host_id获得test_vmok所有刷量配置:

0.png

一共37个配置,24个不同的刷量脚本链接,url_list大部分是58同城的广告、部分视频播放页;url_list中的链接通过HTTP302或window.location.href自动重定向到target_url;也有部分单独的广告页,刷量脚本执行时获取跳转链接,跳到目标链接后进行真正的刷量;

1.png

2、通过遍历host_id获得phantomjs所有刷量配置:

2.png

一共67个配置,17个不同的刷量脚本链接,43个不同的url_list;url_list大部分是58同城房产的移动端页面、部分是百度糯米移动端页面;

3、以test_vmok的广告刷量脚本为例:

每个刷量脚本大同小异,前面大部分代码是相同的,如获取环境信息、禁用部分API、解析网页iframe获取链接、点击链接等;

18.png

主函数主要是设置定时器__baseload,执行核心的刷量功能;

19.png

__baseload()解析页面元素,分多个步骤设置定时器模拟点击广告完成刷量;每个步骤的具体行为根据目标网页上要刷的广告制定;

20.png

3. 刷量插件2

1. Xintiao_Service.exe

以参数module1启动将下载hxxp://t.meixinpic.com/cnzz/paras.dat,RC4解密出InProc.dll模块后直接内存加载并调用导出函数Load进入后续流程;

21.png

2. InProc.dll

1、 Load函数先进行反调试检测,通过检测则继续解密和加载内置dll,否则结束:

22.png

A.    调试器检测

存在开关文件C:\Wabjtam_yyyy_mm_dd.ya!则不进行检测,yyyy_mm_dd为日期格式;否则枚举进程检测是否存在如下调试分析进程;

23.png

B.虚拟机检测

1.     通过MAC地址特征判断Vmware虚拟机;

24.png

2.     通过检测进程vmtoolsd.exe或wmacthlp.exe,判断Vmware虚拟机;

C. IP地址地理位置检测:

根据IP地址获取地理位置,判断是否在北京、上海、深圳、珠海四个城市;

26.png

2、 通过反调试检测后,异或0xAB解密内置InProcStub.dll;创建并挂起傀儡进程svchost.exe,注入InProcStub.dll,调用其88号导出函数ForkTask;

27.png

3、 最后创建线程上报数据:

28.png首先访问dh.alyun.cn获取加密的配置链接,解密后如下:

29.png

并将加密的配置链接保存到注册表[HKCU\Software\Microsoft\WindowsScript\Settings\Domains]-[data]下,后续使用该注册表值作为配置链接;

30.png

再查找包含inproc的配置链接,不存在则使用默认链接pz.nidie.net/mm3/up/inproc.php;最后收集本机信息生成如下url上报:

pz.nidie.net/mm3/up/inproc.php?sid=554&d=d940d7b321915b1dc46a69d7b14bafbae611b456678223167a8e0a06ccf6133931c73fa7ca698025aa9e7f6ca60c07f8344b79f90704e7b71ab5d458eee6080709db80a53fcd8dd8f3364f465c8c27;

其中参数d是数据“packid=554&mid=888&sid=88&x64=0&sysver=5.1.2600&mac=00-0C-29-C5-B5-0E&daystat=1”的RC4加密字符串(发送请求加密key= “$GiveMe$”,接收数据解密key=” GiveMe$!”,下同);

3. InProcStub.dll

1、 InProcStub的导出函数ForkTask先解密内置模块innerfunc.dll,通过shellcode加载并调用其888号导出函数QueryFunctions得到接口;

31.png

2、 然后调用接口的第29个函数,流程进入innerfunc.dll;

32.png

4. innerfunc.dll

1、 创建线程,访问链接pz.nidie.net/mm2/up/?sid=554&d=d11780e578d3104d83637f;其中参数d是“x64=0&ver=0”RC4加密后的字符串;返回加密的配置信息,RC4解密后如下(key=” GiveMe$!”):

33.png

2、 解析返回的配置信息,根据系统版本下载对应的远程模块;

3、 RC4解密并加载远程模块remote_stub.dll,并调用其导出函数:

34.png

4、 将下载的加密模块写入注册表[HKLM\Software\Tencent\bugReport\QQ\<packid>]-[cache32]保存,下次先读取注册表数据解密加载,失败再重新下载;

35.png

5. remote_stub.dll

1、 导出函数RemoteModInit首先判断当前进程名是否为explorer.exe、svchost.exe、test_remote_stub.exe;是则创建线程进行后续行为,否则直接返回;

36.png

2、 在线程中访问下面链接获取配置:

pz.nidie.net/mm3/up/modup.php?sid=554&d=d940d7b321915b1dc46a69d7b14bafb2f85afb4133d6384a23d1014499bf1e2e64c67ae5922b9b63fddc273be20102f0680428f20704ecea38fbdb51f3880d6966dc94b839dec4fbbf680b620edd79821db7d8eb417671c27ff8aa0f6739a9ab09d0af;

其中参数d是数据“packid=554&mid=0&sid=0&daystat=0&x64=0&sysver=5.1.2600&mac=00-0C-29-C5-B5-0E&loc=XX省XX市”的RC4加密字符串;

返回配置数据RC4解密后如下:

37.png3、 根据配置下载刷量模块stub和刷量脚本config;并且保存到注册表[HKEY_CURRENT_USER\Software\Tencent\QQ\Mods]下;下次将从注册表中读取,读取失败再重新下载;

38.png4、 stub和config解密后是zip压缩文件,其中stub解压后是刷量模块:autoie32.dll、autoie64.dll;config解压后是.nut格式的脚本文件;

39.png5、 然后加载autoie32.dll,并调用导出函数QueryNotifyInterfaceEx获得接口,最后调用接口执行刷量脚本;

40.png

6. 刷量分析

刷量模块内置完整的浏览器内核并集成松鼠脚本引擎squirrel 3.1版,(一种类似lua的加强版脚本语言,官网www.squirrel-lang.org);通过脚本控制实现网页广告和视频点击刷量;

41.png

各脚本功能说明如下:

脚本文件名 主要功能
2124dh.nut 2124导航刷量
2345.nut 2345导航刷量
cnzz.nut cnzz统计
infostream.nut 知识屋刷量
iqiyisite.nut 爱奇艺视频和广告刷量
pptv.nut pptv剧集视频刷量
pptv_site.nut pptv网站自媒体视频刷量
soulady.nut 搜女郎刷量
youku.nut 优酷视频和广告刷量
inproc.nut 无具体功能
outproc.nut 任务控制脚本
multiproc.nut 多任务控制脚本

脚本实现了网页事件回调函数,通过设置定时器来解析网页元素,获取视频或广告的链接并进行模拟点击访问,实现刷量。

以优酷为例,脚本youku.nut实现了对应的视频刷量机制。针对刷量过程中访问的各页面都定义了单独的类来处理网页事件.

42.png

1、 首先main函数先清除cookies和缓存数据,再新建entrywindow类,调用navigate方法访问URL;

43.png

2、 entrywindow 继承引擎内置浏览器类ieutil.browser,通过重载事件回调捕获网页事件并设置定时器模拟点击行为;当调用navigate加载网页完毕时触发onDocumentComplete或onNavigateComplete事件,设置定时器init;

44.png3、 init定时器方法如下:通过解析网页元素得到视频的URL,并设置线程定时器visitVideo访问视频播放页进行刷量; 

45.png4、 visitVideo定时器方法如下:新建类youkuwin,调用navigate方法访问视频URL;并重复设置visitVideo定时器访问同一个视频直到maxVisit次; 

46.png5、 youkuwin同样继承引擎内置浏览器类ieutil.browser;当网页加载完毕时触发onDocumentComplete或onNavigateComplete事件,设置定时器init模拟点击播放页广告;当触发onNewWindow事件时,调用adwin类navigate方法访问弹窗广告;

47.png6、 定时器init又创建2个定时器scroll和toclose;scroll定时器滚动网页点击播放视频、暂停视频、点击广告完成刷量;toclose则关闭网页结束该视频链接的刷量。

48.png

模拟点击的广告如下:

49.png

7、针对弹窗广告的adwin类和minshowwindow类的实现和上面类似,不再赘述;

其他网站的刷量机制同理,具体实现细节略有不同,也不再赘述。

50.png

7. 刷量链接整理

优酷

叨剧柴可夫(视频播放数:415万,粉丝数:11.4万,视频数:97)

hxxps://i.youku.com/i/UMTY3MzMxMzUwMA==/videos

PPTV

咖妃说娱乐(播放量:3316.8万,粉丝量:1.33万,视频数:72)

hxxp://pgc.pptv.com/upgc/?username=k3CVbpRplmhoY5%2BSZ21jaWlplm9n#video

老烟斗鬼故事hxxp://pgc.pptv.com/upgc/?username=k3CUap1gnG9mZJySZ21ibmpooms%3D#video

叨剧柴可夫

hxxp://pgc.pptv.com/upgc/?username=mm6WbJpik2loYA%3D%3D#video

校长说

hxxp://pgc.pptv.com/upgc/?username=k2iWbZVlmGtoYQ%3D%3D#video

无间密室

hxxp://v.pptv.com/show/pibDNS7MZiaccqqBA.html?rcc_id=2018052032

开封府

hxxp://v.pptv.com/show/t9TPTJ785iaSHBW0.html?&rcc_id=2018072098

爱奇艺

《闺蜜说》第一季

hxxp://www.iqiyi.com/u/1187952588/v

咖妃说娱乐

hxxp://www.iqiyi.com/u/2459940611/v

校长说

hxxp://www.iqiyi.com/u/1458122074/v

蜗牛看西游88

hxxp://www.iqiyi.com/u/1333649153/v

女魔头驾到频道

hxxp://www.iqiyi.com/u/1433074399/v

减脂训练营

hxxp://www.iqiyi.com/u/1446769852/v

快看电影

hxxp://www.iqiyi.com/u/2023137129/v

家有宝宝视频

hxxp://www.iqiyi.com/u/2492080645/v

欢乐上班狗

hxxp://www.iqiyi.com/u/1231160129/v

星云视点

hxxp://www.iqiyi.com/u/1241481140/v

新快看好书

hxxp://www.iqiyi.com/u/1304751490/v

Friday剑玉俱乐部

hxxp://www.iqiyi.com/u/1351112050/v

其他

搜女郎

hxxp://www.soulady.net/

QQ头像

hxxps://www.qqtouxiang.com

知识屋

hxxp://www.zhishiwu.com

2345导航

hxxp://www.2345.com/?39006

2124导航

hxxp://www.2124.cn

cnzz统计:

hxxp://t.meixinpic.com/cnzz/6.html

统计链接:hxxp://www.cnzz.com/stat/website.php?web_id=1260947146

hxxp://t.meixinpic.com/cnzz/3.html

统计链接:hxxp://www.cnzz.com/stat/website.php?web_id=1261868857

 附录IOC:

136A821EDE570CAC1AAA7E0CEC411EB1

0F7F48867EF568A42DDF5AC646B0E157

8076BC98C013F93B1DCA34901DE8D19E

hxxp://mnq2.xintiao365.com/tj?timestamp=&id=

hxxps://c.wecheng99.com/ver_cfg.db

hxxps://c.wecheng99.com/cfg.db

hxxps://c.wecheng99.com/phantomjs.js

hxxp://182.92.228.27/cache.php?f=uag

hxxp://k.biubiang.com:8124/apifour/getlink

hxxp://47.105.34.235:8125/apithird/getlink

hxxp://jp.mm50mm.com/view/mult/view_mybox_wulaiyuan.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/dword/view_detail_vv31.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/detail_china_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_58_detail_kdy07.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_bofeng_ad27.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk_0615ex.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_easy.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_easybu.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_houyi_baofeng_4.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_mybox_wulaiyuan.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye_lowex.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_yuanshi_inetyouxia.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/viewbaofeng_zuoce_0929_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/view_iqiyi.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/view_pt.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_youce.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_zhongbu.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_zuoce.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/view_iqiyi.asp?click_rate=&t=1

hxxp://mob.zkk7.com:8065/ss/cache.php?f=stay20

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv3-high-0505

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-100-fix1-0507-high

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv3-zp-open-fangchan

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix-fuchuang-0511-high-lowjob

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi12

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix1-0519-mid

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix1-0605-ludashi-lowjob

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-0-fix4

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi10

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi15

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi4

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi6

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-100-fix1-0505

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbfuchuang20180814

hxxp://mob.zkk7.com:8065/ss/cache.php?f=hao123tobaiduv1_keycheck_historyfix

hxxp://mob.zkk7.com:8065/ss/cache.php?f=baiduentry

hxxp://gjc.mm50mm.com/inetsvr.php?id=11

hxxp://thd.mm50mm.com/view/loop_read_appexa.aspx

dh.alyun.cn

hxxp://pz.nidie.net/mm/nv/a/

hxxp://pz.nidie.net/mm/up/

hxxp://pz.nidie.net/mm2/up/

hxxp://pz.nidie.net/mm/fd/

hxxp://pz.nidie.net/mm3/up/modup.php

hxxp://pz.nidie.net/mm2/up/modup.php

hxxp://pz.nidie.net/mm/se.php

hxxp://pz.nidie.net/mm/qd/instat.php

hxxp://pz.nidie.net/mm/brushflow/nv/

hxxp://dh.xhongxiu.net/mm/nv/a/

hxxp://stat.ssbutqi.com/s.php

hxxp://inapi.xxwqiq.net/index.php

hxxp://t.meixinpic.com/cnzz/paras.dat

hxxp://dl.nidie.net/mods/autoie/conf/18081001.png

hxxp://aylld.com/dl/mods/autoie/stub/18071801.png

hxxp://aylld.com/dl/rt/18070501/Rt32.gif

hxxp://aylld.com/dl/rt/18070501/Rt64.gif

 *本文作者:渔村安全,转载请注明来自 FreeBuf.COM

概述

近期,金山毒霸安全实验室通过“捕风”威胁感知系统的监控数据,追踪发现一款名为“心跳助手”的安卓手游模拟器软件暗藏流量暗刷类病毒。比较特别的是,病毒宿主进程被同时嵌入两套流量暗刷插件,经过病毒特征同源性分析,我们确认这两套木马插件分别是”JsCtrl”和”老裁缝”两大暗刷病毒家族的最新变种,正如传说中的”双生花”,一株二艳,并蒂双花,在同一个枝蔓上相生相杀,所以我们将本次爆发传播的流量暗刷木马命名为”双生花”家族。

”双生花”暗刷病毒家族包含的两套插件是完全不同的实现机制,其早期变种的传播也没有太多的交叉点。从我们的监控数据看,其中的”JsCtrl”变种通过JS脚本下载刷量模块到本地内存加载执行,主要针对目标为58同城、百度糯米、百度的广告推广和SEO排名优化;另外一款“老裁缝”变种通过多层的内存模块加载释放后,利用内嵌的浏览器内核和松鼠脚本引擎squirrel来操作加载模拟点击,主要针对目标为爱奇艺、优酷、PPTV等主流视频站点,通过暗刷视频播放量从各大视频平台赚取广告内容分成。

两大暗刷木马家族同时藏身”心跳助手”这款正常软件实现”借尸还魂”,虽然”双生花”暗刷木马的合作传播内幕目前尚不完全清楚,但从某种角度来看,这应该算得上一次变相的软件供应链攻击,从” Putty后门事件”、”XcodeGhost开发工具污染”到”Xshell后门”, 软件供应链攻击案例层出不穷,官方软件是否真的可信,正规软件身份的黑白界限也越来越模糊,以本次”双生花”暗刷病毒家族的传播为例,根据我们的监控数据回溯,本次传播攻击从18年4月初开始出现,早期变种只包含”JsCtrl”变种,到1.1.18版本开始加入”老裁缝”最新变种。凭借正规软件外壳,隐蔽性极强,通过内存加载和脚本机制实现全程无落地文件攻击,在国内多家安全软件的眼皮下,本次”双生花”家族的传播攻击时间跨度已接近半年。

另外,”流量暗刷”这种攻击行为一直都是黑产流量变现的重要渠道手段之一,虚假流量也在互联网的各个行业渠道都能看到身影,对于产品商业、业务安全的毒害影响之重已无需多言。对于产品厂商而言,这样的模拟流量暗刷攻击基本上完整模拟了用户的操作过程,从服务端进行有效鉴定识别非常困难,安全策略会被频繁绕过,从我们的监控数据看,近期针对各大广告平台、资讯平台、视频平台的流量攻击愈发泛滥,我们也非常欢迎爱奇艺、优酷、PPTV、58同城、百度糯米等受影响厂商与我们联系(关注我们的官方微信号” yucunsafe”回复即可),共同解决此类业务安全问题。

1. 主模块分析

病毒模块加载和执行流如下图所示:

1.png

服务进程Xintiao_Service.exe(签名:Beijing Shouyou Duanxiang TechnologyCo., Ltd.;版本号:1.1.18.4486)以参数“daemon=1”启动将下载解密执行JS脚本,通过脚本去下载和执行刷量插件1;以参数“daemon=2”或“module1”启动将下载解密加载刷量插件2(老裁缝变种);

2.png

2. 刷量插件1

1. Xintiao_Service.exe

以参数daemon=1启动将访问链接hxxp://mnq2.xintiao365.com/tj?timestamp=&id=下载加密的JS脚本并解密执行,在脚本中完成后续模块的下载执行;

3.png

脚本引擎通过MSScriptControl.ScriptControl添加对象模型checkstate,使得脚本可以执行自定义的对象方法。

4.png

checkstate的方法定义如下图所示,其中HashCls是调用CalcHash.dll的导出函数CalcHash解密并内存加载PE模块;

5.png

2. JS脚本

整理后的脚本如下:主要功能是检测调试分析进程,检测不到则上报并下载执行刷量插件;

检测checkstate的全局变量xc和xy选择加载test_vmok.dll或者phantomjs.exe;其中phantomjs.exe的下载链接是hxxps://c.wecheng99.com/cfg.db,test_vmok.dll的下载链接是hxxps://c.wecheng99.com/ver_cfg.db;

6.png

下载完成后文件保存到%TEMP%\WinRAR\ac71bf8b-XXX.db(XXX是文件大小);并调用checkstate.HashCls进入CalcHash.dll的导出函数HashCls进行解密加载。

7.png

脚本执行过程中会写如下注册表标记:

[HKCU\Software\Microsoft\kccloud]

start:当前时间

ac71bf8b-XXX.db:”123”

[HKCU\Software\Microsoft\Wisp]

cfg:加密后的URL “hxxp://k.biubiang.com:8124/apifour/getlink”

[HKLM\Software\WinRAR]

state:加密后的URL” hxxps://c.wecheng99.com/phantomjs.js”

3. test_vmok.dll

test_vmok.dll在dllmain中访问链接hxxp://k.biubiang.com:8124/apifour/getlink获取刷量配置,内容和格式如下: 

8.png

其中script是刷量脚本链接,url_list是被刷量的网页链接;通过添加参数host_id=%d可以获取对应的配置。然后下载script脚本文件,访问url_list中的链接并在页面中插入执行script脚本进行刷量。

4. phantomjs.js

phantomjs.exe加载后会读取注册表[HKLM\Software\WinRAR]下的值state,解密得到链接hxxps://c.wecheng99.com/phantomjs.js;然后下载并执行主控脚本; 

9.png

loop函数首先访问hxxp://47.105.34.235:8125/apithird/getlink获取刷量配置json数据,然后解析json并下载刷量脚本;

10.png

getscript()下载刷量脚本并设置定时器checkkeyword,checkkeyword()解析关键词并访问刷量目标页面;

11.png

viewpage先判断TEMP目录下是否存在uag36.dat,不存在则访问链接hxxp://182.92.228.27/cache.php?f=uag下载然后设置定时器viewpage;

12.png

如果存在uag36.dat,则解密该文件得到脚本并执行,内容如下:

13.png

然后调用initpage()加载页面,在onLoadFinished()方法中执行刷量脚本;

14.png

5. 刷量分析

test_vmok的配置链接为hxxp://k.biubiang.com:8124/apifour/getlink,主要刷58同城广告及部分视频广告;phantomjs的配置链接为hxxp://47.105.34.235:8125/apithird/getlink,主要刷58同城、百度糯米、百度的搜索排名优化。

1、通过遍历host_id获得test_vmok所有刷量配置:

0.png

一共37个配置,24个不同的刷量脚本链接,url_list大部分是58同城的广告、部分视频播放页;url_list中的链接通过HTTP302或window.location.href自动重定向到target_url;也有部分单独的广告页,刷量脚本执行时获取跳转链接,跳到目标链接后进行真正的刷量;

1.png

2、通过遍历host_id获得phantomjs所有刷量配置:

2.png

一共67个配置,17个不同的刷量脚本链接,43个不同的url_list;url_list大部分是58同城房产的移动端页面、部分是百度糯米移动端页面;

3、以test_vmok的广告刷量脚本为例:

每个刷量脚本大同小异,前面大部分代码是相同的,如获取环境信息、禁用部分API、解析网页iframe获取链接、点击链接等;

18.png

主函数主要是设置定时器__baseload,执行核心的刷量功能;

19.png

__baseload()解析页面元素,分多个步骤设置定时器模拟点击广告完成刷量;每个步骤的具体行为根据目标网页上要刷的广告制定;

20.png

3. 刷量插件2

1. Xintiao_Service.exe

以参数module1启动将下载hxxp://t.meixinpic.com/cnzz/paras.dat,RC4解密出InProc.dll模块后直接内存加载并调用导出函数Load进入后续流程;

21.png

2. InProc.dll

1、 Load函数先进行反调试检测,通过检测则继续解密和加载内置dll,否则结束:

22.png

A.    调试器检测

存在开关文件C:\Wabjtam_yyyy_mm_dd.ya!则不进行检测,yyyy_mm_dd为日期格式;否则枚举进程检测是否存在如下调试分析进程;

23.png

B.虚拟机检测

1.     通过MAC地址特征判断Vmware虚拟机;

24.png

2.     通过检测进程vmtoolsd.exe或wmacthlp.exe,判断Vmware虚拟机;

C. IP地址地理位置检测:

根据IP地址获取地理位置,判断是否在北京、上海、深圳、珠海四个城市;

26.png

2、 通过反调试检测后,异或0xAB解密内置InProcStub.dll;创建并挂起傀儡进程svchost.exe,注入InProcStub.dll,调用其88号导出函数ForkTask;

27.png

3、 最后创建线程上报数据:

28.png首先访问dh.alyun.cn获取加密的配置链接,解密后如下:

29.png

并将加密的配置链接保存到注册表[HKCU\Software\Microsoft\WindowsScript\Settings\Domains]-[data]下,后续使用该注册表值作为配置链接;

30.png

再查找包含inproc的配置链接,不存在则使用默认链接pz.nidie.net/mm3/up/inproc.php;最后收集本机信息生成如下url上报:

pz.nidie.net/mm3/up/inproc.php?sid=554&d=d940d7b321915b1dc46a69d7b14bafbae611b456678223167a8e0a06ccf6133931c73fa7ca698025aa9e7f6ca60c07f8344b79f90704e7b71ab5d458eee6080709db80a53fcd8dd8f3364f465c8c27;

其中参数d是数据“packid=554&mid=888&sid=88&x64=0&sysver=5.1.2600&mac=00-0C-29-C5-B5-0E&daystat=1”的RC4加密字符串(发送请求加密key= “$GiveMe$”,接收数据解密key=” GiveMe$!”,下同);

3. InProcStub.dll

1、 InProcStub的导出函数ForkTask先解密内置模块innerfunc.dll,通过shellcode加载并调用其888号导出函数QueryFunctions得到接口;

31.png

2、 然后调用接口的第29个函数,流程进入innerfunc.dll;

32.png

4. innerfunc.dll

1、 创建线程,访问链接pz.nidie.net/mm2/up/?sid=554&d=d11780e578d3104d83637f;其中参数d是“x64=0&ver=0”RC4加密后的字符串;返回加密的配置信息,RC4解密后如下(key=” GiveMe$!”):

33.png

2、 解析返回的配置信息,根据系统版本下载对应的远程模块;

3、 RC4解密并加载远程模块remote_stub.dll,并调用其导出函数:

34.png

4、 将下载的加密模块写入注册表[HKLM\Software\Tencent\bugReport\QQ\<packid>]-[cache32]保存,下次先读取注册表数据解密加载,失败再重新下载;

35.png

5. remote_stub.dll

1、 导出函数RemoteModInit首先判断当前进程名是否为explorer.exe、svchost.exe、test_remote_stub.exe;是则创建线程进行后续行为,否则直接返回;

36.png

2、 在线程中访问下面链接获取配置:

pz.nidie.net/mm3/up/modup.php?sid=554&d=d940d7b321915b1dc46a69d7b14bafb2f85afb4133d6384a23d1014499bf1e2e64c67ae5922b9b63fddc273be20102f0680428f20704ecea38fbdb51f3880d6966dc94b839dec4fbbf680b620edd79821db7d8eb417671c27ff8aa0f6739a9ab09d0af;

其中参数d是数据“packid=554&mid=0&sid=0&daystat=0&x64=0&sysver=5.1.2600&mac=00-0C-29-C5-B5-0E&loc=XX省XX市”的RC4加密字符串;

返回配置数据RC4解密后如下:

37.png3、 根据配置下载刷量模块stub和刷量脚本config;并且保存到注册表[HKEY_CURRENT_USER\Software\Tencent\QQ\Mods]下;下次将从注册表中读取,读取失败再重新下载;

38.png4、 stub和config解密后是zip压缩文件,其中stub解压后是刷量模块:autoie32.dll、autoie64.dll;config解压后是.nut格式的脚本文件;

39.png5、 然后加载autoie32.dll,并调用导出函数QueryNotifyInterfaceEx获得接口,最后调用接口执行刷量脚本;

40.png

6. 刷量分析

刷量模块内置完整的浏览器内核并集成松鼠脚本引擎squirrel 3.1版,(一种类似lua的加强版脚本语言,官网www.squirrel-lang.org);通过脚本控制实现网页广告和视频点击刷量;

41.png

各脚本功能说明如下:

脚本文件名 主要功能
2124dh.nut 2124导航刷量
2345.nut 2345导航刷量
cnzz.nut cnzz统计
infostream.nut 知识屋刷量
iqiyisite.nut 爱奇艺视频和广告刷量
pptv.nut pptv剧集视频刷量
pptv_site.nut pptv网站自媒体视频刷量
soulady.nut 搜女郎刷量
youku.nut 优酷视频和广告刷量
inproc.nut 无具体功能
outproc.nut 任务控制脚本
multiproc.nut 多任务控制脚本

脚本实现了网页事件回调函数,通过设置定时器来解析网页元素,获取视频或广告的链接并进行模拟点击访问,实现刷量。

以优酷为例,脚本youku.nut实现了对应的视频刷量机制。针对刷量过程中访问的各页面都定义了单独的类来处理网页事件.

42.png

1、 首先main函数先清除cookies和缓存数据,再新建entrywindow类,调用navigate方法访问URL;

43.png

2、 entrywindow 继承引擎内置浏览器类ieutil.browser,通过重载事件回调捕获网页事件并设置定时器模拟点击行为;当调用navigate加载网页完毕时触发onDocumentComplete或onNavigateComplete事件,设置定时器init;

44.png3、 init定时器方法如下:通过解析网页元素得到视频的URL,并设置线程定时器visitVideo访问视频播放页进行刷量; 

45.png4、 visitVideo定时器方法如下:新建类youkuwin,调用navigate方法访问视频URL;并重复设置visitVideo定时器访问同一个视频直到maxVisit次; 

46.png5、 youkuwin同样继承引擎内置浏览器类ieutil.browser;当网页加载完毕时触发onDocumentComplete或onNavigateComplete事件,设置定时器init模拟点击播放页广告;当触发onNewWindow事件时,调用adwin类navigate方法访问弹窗广告;

47.png6、 定时器init又创建2个定时器scroll和toclose;scroll定时器滚动网页点击播放视频、暂停视频、点击广告完成刷量;toclose则关闭网页结束该视频链接的刷量。

48.png

模拟点击的广告如下:

49.png

7、针对弹窗广告的adwin类和minshowwindow类的实现和上面类似,不再赘述;

其他网站的刷量机制同理,具体实现细节略有不同,也不再赘述。

50.png

7. 刷量链接整理

优酷

叨剧柴可夫(视频播放数:415万,粉丝数:11.4万,视频数:97)

hxxps://i.youku.com/i/UMTY3MzMxMzUwMA==/videos

PPTV

咖妃说娱乐(播放量:3316.8万,粉丝量:1.33万,视频数:72)

hxxp://pgc.pptv.com/upgc/?username=k3CVbpRplmhoY5%2BSZ21jaWlplm9n#video

老烟斗鬼故事hxxp://pgc.pptv.com/upgc/?username=k3CUap1gnG9mZJySZ21ibmpooms%3D#video

叨剧柴可夫

hxxp://pgc.pptv.com/upgc/?username=mm6WbJpik2loYA%3D%3D#video

校长说

hxxp://pgc.pptv.com/upgc/?username=k2iWbZVlmGtoYQ%3D%3D#video

无间密室

hxxp://v.pptv.com/show/pibDNS7MZiaccqqBA.html?rcc_id=2018052032

开封府

hxxp://v.pptv.com/show/t9TPTJ785iaSHBW0.html?&rcc_id=2018072098

爱奇艺

《闺蜜说》第一季

hxxp://www.iqiyi.com/u/1187952588/v

咖妃说娱乐

hxxp://www.iqiyi.com/u/2459940611/v

校长说

hxxp://www.iqiyi.com/u/1458122074/v

蜗牛看西游88

hxxp://www.iqiyi.com/u/1333649153/v

女魔头驾到频道

hxxp://www.iqiyi.com/u/1433074399/v

减脂训练营

hxxp://www.iqiyi.com/u/1446769852/v

快看电影

hxxp://www.iqiyi.com/u/2023137129/v

家有宝宝视频

hxxp://www.iqiyi.com/u/2492080645/v

欢乐上班狗

hxxp://www.iqiyi.com/u/1231160129/v

星云视点

hxxp://www.iqiyi.com/u/1241481140/v

新快看好书

hxxp://www.iqiyi.com/u/1304751490/v

Friday剑玉俱乐部

hxxp://www.iqiyi.com/u/1351112050/v

其他

搜女郎

hxxp://www.soulady.net/

QQ头像

hxxps://www.qqtouxiang.com

知识屋

hxxp://www.zhishiwu.com

2345导航

hxxp://www.2345.com/?39006

2124导航

hxxp://www.2124.cn

cnzz统计:

hxxp://t.meixinpic.com/cnzz/6.html

统计链接:hxxp://www.cnzz.com/stat/website.php?web_id=1260947146

hxxp://t.meixinpic.com/cnzz/3.html

统计链接:hxxp://www.cnzz.com/stat/website.php?web_id=1261868857

 附录IOC:

136A821EDE570CAC1AAA7E0CEC411EB1

0F7F48867EF568A42DDF5AC646B0E157

8076BC98C013F93B1DCA34901DE8D19E

hxxp://mnq2.xintiao365.com/tj?timestamp=&id=

hxxps://c.wecheng99.com/ver_cfg.db

hxxps://c.wecheng99.com/cfg.db

hxxps://c.wecheng99.com/phantomjs.js

hxxp://182.92.228.27/cache.php?f=uag

hxxp://k.biubiang.com:8124/apifour/getlink

hxxp://47.105.34.235:8125/apithird/getlink

hxxp://jp.mm50mm.com/view/mult/view_mybox_wulaiyuan.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/dword/view_detail_vv31.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/detail_china_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_58_detail_kdy07.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_bofeng_ad27.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk_0615ex.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_detail_yk_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_easy.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_easybu.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_houyi_baofeng_4.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_mybox_wulaiyuan.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_qiye_lowex.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/view_yuanshi_inetyouxia.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/mult/viewbaofeng_zuoce_0929_low.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/view_iqiyi.asp?click_rate=&t=1

hxxp://mdl.qdd88888.com/view/view_pt.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_youce.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_zhongbu.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/mult/viewbaofeng_zuoce.asp?click_rate=&t=1

hxxp://thd.mm50mm.com/view/view_iqiyi.asp?click_rate=&t=1

hxxp://mob.zkk7.com:8065/ss/cache.php?f=stay20

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv3-high-0505

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-100-fix1-0507-high

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv3-zp-open-fangchan

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix-fuchuang-0511-high-lowjob

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi12

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix1-0519-mid

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbscriptv2-100-fix1-0605-ludashi-lowjob

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-0-fix4

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi10

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi15

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi4

hxxp://mob.zkk7.com:8065/ss/cache.php?f=nuomi6

hxxp://mob.zkk7.com:8065/ss/cache.php?f=58scriptv2-100-fix1-0505

hxxp://mob.zkk7.com:8065/ss/cache.php?f=wbfuchuang20180814

hxxp://mob.zkk7.com:8065/ss/cache.php?f=hao123tobaiduv1_keycheck_historyfix

hxxp://mob.zkk7.com:8065/ss/cache.php?f=baiduentry

hxxp://gjc.mm50mm.com/inetsvr.php?id=11

hxxp://thd.mm50mm.com/view/loop_read_appexa.aspx

dh.alyun.cn

hxxp://pz.nidie.net/mm/nv/a/

hxxp://pz.nidie.net/mm/up/

hxxp://pz.nidie.net/mm2/up/

hxxp://pz.nidie.net/mm/fd/

hxxp://pz.nidie.net/mm3/up/modup.php

hxxp://pz.nidie.net/mm2/up/modup.php

hxxp://pz.nidie.net/mm/se.php

hxxp://pz.nidie.net/mm/qd/instat.php

hxxp://pz.nidie.net/mm/brushflow/nv/

hxxp://dh.xhongxiu.net/mm/nv/a/

hxxp://stat.ssbutqi.com/s.php

hxxp://inapi.xxwqiq.net/index.php

hxxp://t.meixinpic.com/cnzz/paras.dat

hxxp://dl.nidie.net/mods/autoie/conf/18081001.png

hxxp://aylld.com/dl/mods/autoie/stub/18071801.png

hxxp://aylld.com/dl/rt/18070501/Rt32.gif

hxxp://aylld.com/dl/rt/18070501/Rt64.gif

 *本文作者:渔村安全,转载请注明来自 FreeBuf.COM

概述

“Ghost”盗版系统和系统激活工具一直都是国内病毒传播的重要渠道之一,尤其以Rootkit/Bootkit类型的顽固病毒居多,此类病毒安装普遍早于安全软件,大多会通过内核层来隐藏保护自身模块,并凭借植入时机的先手优势和安全杀软进行深层对抗。

近期通过“捕风”威胁感知系统监控,我们发现“贪狼”Rootkit僵尸家族在近2个月开始再次活跃,“贪狼”病毒一直都是盗版系统预装渠道中的活跃家族,早期变种可以追溯到2015年,起初主要用于主页劫持和流量暗刷,从我们的监控记录看,“贪狼”基本上每年都会有一次较大的活跃更新,在17年初曾被安全友商命名为“狼人杀”并分析曝光,短暂潜伏以后在17年9月份又出现过小幅更新,今年6月份开始“贪狼”家族开始再度活跃,除了Http(s)劫持模块不断加强外,开始顺应黑产潮流加入“门罗币”挖矿功能模块,并且在6月4号开始通过更新渠道下发“Hydra”DDOS木马插件,“贪狼”僵尸网络的威胁度和攻击性正在不断加强。

正文

“贪狼”Rootkit病毒主要通过ghost系统等渠道感染用户计算机,通过多种方式隐藏自身、对抗杀软,同时模块众多,功能灵活复杂。不同模块分别实现浏览器劫持、ddos攻击、加密货币挖矿、刷量等功能。根据检测到的感染量估算全国超过50万机器遭到感染。

模块名 主要功能
Platform.dll 功能模块更新、加载等
ConsoleApplication8.dll 门罗币挖矿
HydraClient.dll DDOS攻击
StevenRobot.dll 上报、下拉配置
mLoader.dll 插件加载器
UserFramework.dll 插件核心框架、
KernelManager.dll 插件管理
HSManager.dll 主页劫持
WebBrowser.dll 后台广告刷量
AppManage64.dll 浏览器劫持
SSLHijack1.0.6-win64.dll HTTPS劫持
Hijack.dll 浏览器劫持
KernelHijack.sys 内核劫持模块

各模块通过联网下载到本地执行,被RC4或AES加密;且都有统一的导出名称BsProcessStartup、BsDllStartup、BsCleanup、BsEnvironment;

“贪狼”Rootkit僵尸家族再度活跃

模块被注入到目标进程后直接调用BsProcessStartup或BsDllStartup;BsProcessStartup和BsDllStartup首先确定加载基址,并获取peb、teb相关信息初始化导出结构体BsEnvironment,然后进行重定位修复、导入表初始化、CRT初始化、添加异常处理表等前置工作,最后进入主功能函数。

模块自加载,自初始化流程:

“贪狼”Rootkit僵尸家族再度活跃“贪狼”Rootkit僵尸家族再度活跃

由于模块众多,下面简单分析其中几个模块的主要行为。

核心驱动模块

1、驱动加了VMP壳保护,加载后注册进程回调、映像回调、注册表回调、关机回调,并创建3个内核线程;

2、通过进程回调APC注入内置Platform.dll到lsass.exe,Platform.dll执行真正的病毒行为;

3、映像回调拦截浏览器进程的杀软模块加载;

4、注册表回调保护自身驱动服务项;

5、关机回调回写自身驱动文件和注册表服务项

“贪狼”Rootkit僵尸家族再度活跃

R3层核心框架Platform.dll

该模块是驱动内置的模块,核心功能是加载挖矿模块和下载配置文件并更新其他模块。

1、加载内置的ConsoleApplication8.dll(挖矿模块);

2、挂钩NtQuerySystemInformation(针对taskmgr.exe,进程名过滤);

3、挂钩LdrLoadDll(针对360se.exe、360chrome.exe),过滤杀软的浏览器保护模块

“贪狼”Rootkit僵尸家族再度活跃

4、访问C&C服务器,内置多个备用服务器地址;上传机器信息并下载配置文件,

hxxps://client.115ww.com/api/_mv_bamboo.html?REV=0&RC=0&PID=3&CID=0&UID=0&VER=0&RM=&DMJ=0&DMN=0&DBL=0&UMJ=0&UMN=0&UBL=0&MID=&BW=64&NTMJ=6&NTMN=1&NTBL=7601&NTSPMJ=1&NTSPMN=0&NP=1&MM=2146951168&OSTC=1843198&SVSN=C6BDE606&SVFS=NTFS;

“贪狼”Rootkit僵尸家族再度活跃

配置文件解密后如下:

“贪狼”Rootkit僵尸家族再度活跃

5、根据配置文件进一步下载其他模块并加载执行。

内嵌“门罗币”挖矿模块ConsoleApplication8.dll

pdb路径:

L:\github\ConsoleApplication8\x64\Release\ConsoleApplication8.pdb

1、 ConsoleApplication8.dll内置一个zip文件,包含config.json、start.cmd、xmrig.exe;

2、 查询注册表 [HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\KingsoftInternet Security]的值“UninstallString”,成功则直接返回,不进行挖矿;

“贪狼”Rootkit僵尸家族再度活跃

3、 解压zip文件并加载挖矿模块进行挖矿;

4、 挖矿钱包和矿池地址如下:

“贪狼”Rootkit僵尸家族再度活跃

浏览器劫持模块AppManage.dll

pdb路径:

E:\Code\Ivipm\source\AppManger\AppManger\x64\Release\AppManage.pdb

通过APC方式被注入到进程,如果进程是360se.exe、360chrome.exe,则查找并删除文件sesafe.dll;

“贪狼”Rootkit僵尸家族再度活跃

如果进程是以下杀软进程,则查找并删除文件QMProtect.dll、QMProtect64.dll、QMIESafeDll.dll、QMIESafeDll64.dll;如果进程名包含qqpc则直接退出进程。

“贪狼”Rootkit僵尸家族再度活跃

“贪狼”Rootkit僵尸家族再度活跃

如果进程是explorer.exe,则挂钩CreateProcessInternalW、RtlCreateProcessParameters、ZwCreateUserProcess、RtlCreateProcessParametersEx,对以下浏览器进程的命令行参数进行劫持;

“贪狼”Rootkit僵尸家族再度活跃

“贪狼”Rootkit僵尸家族再度活跃

同时还会向系统添加根证书,用于https劫持:

“贪狼”Rootkit僵尸家族再度活跃

DDOS攻击插件HydraClient.dll

pdb路径:

C:\Users\Lon\source\repos\DDos\x64\Release\HydraClient.pdb

该模块通过APC方式被注入到进程wuauclt.exe,是DDOS攻击模块;CC地址为115.231.219.32;支持常见的DDOS攻击方式。

“贪狼”Rootkit僵尸家族再度活跃

“贪狼”Rootkit僵尸家族再度活跃

“贪狼”Rootkit僵尸家族再度活跃

附录IOC:

MD5

2ECEE431A394538DD8B451B147D684AD

IP

115.231.219.32

URL

hxxps://down.135h.com/save/chilli/DwYQ0YY0x6.jpg

hxxps://down.135h.com/save/chilli/CUYQ0YY0x6.jpg

hxxp://ix.135gg.com/api/_mcv_chillis.html

hxxp://client.135gg.com/api/_msv_software.html

hxxp://client.115ww.com/api/_mv_bamboo.html

hxxp://client.335dh.com/api/_mv_bamboo.html

hxxp://client.115ll.com/api/_mv_bamboo.html

DOMAIN

ix2.135gg.com

ix.135gg.com

ixs.115rr.com

lps.115rr.com

ixs.135h.com

50star.com

tj.16610.com

pp.fatdit.com

www.faafox.com

ix.faafox.com

client.faafox.com

aoyouw.cftmon.com

osipad.fatdit.com

bs.xobvb.com

bs.unaout.com

gang[1|2|3|5|6].info

*本文作者:渔村安全,转载请注明来自 FreeBuf.COM

1.png

前置阅读(上篇):http://www.freebuf.com/articles/network/173400.html

在上篇的分析中,我们分析了“隐蜂”挖矿木马的“Boot劫持”和“内核Rootkit”前两个关键部分,本篇中主要针对Ring3层的挖矿模块工作机制展开剖析。

三、R3挖矿插件阶段

“隐蜂”挖矿木马在R3层的框架设计也是比较复杂的,整个R3层解压后的模块配置文件总数多达30+,同时引入LUA脚本引擎实现更灵活的策略控制,并且在隐蔽性、兼容性等细节处理上也非常完善,所有一切的目的都是为了在隐藏自身的前提下,充分压榨系统的CPU、GPU设备资源用于挖掘“门罗币”。从R3层整体设计上划分,主要包括基础模块“subsystem”、引导模块“ccmain.bin”、外层支持插件包“bsp.lib”以及挖矿插件包“schema.tlb”四大核心部分。

1.    加载R3层基础模块“subsystem”

如前文所述,内核模块在镜像回调函数中将模块“stub.bin”通过APC注入到svchost.exe进程,而“stub.bin”是“隐蜂”R3层插件的初始Loader,它会从最初填充的参数中加载后续核心模块 “subsystem”,在修复重定位和填充IAT后直接跳转到OEP执行。“subsystem”模块负责执行升级LUA脚本并解析加载R3插件MRFS镜像;另外作为基础模块,与前文内核模块“kernel”类似,通过R3层“mpsi.dll”API接口导出核心功能给后续模块使用;除此还会创建Timer定时检测内核映像回调是否被摘除、删除dump文件、挂钩绕过异常内存检测等。

2.png

“subsystem”模块中升级功能由LUA脚本控制完成,“etc/exs.bin”文件是编译后的luac文件,病毒作者修改了头特征字段,并且调整了LUA虚拟机的opcode表顺序防止反编译,从绑定的函数来看,脚本exs.bin功能比较简单,读取“etc/config.js”中的配置,通过伪DGA(结果固定)生成URL直接传参调用。

3.png

最后,“subsystem”模块会读取磁盘数据,解密解压出一个新的“MRFS”镜像文件,负责注入“/bin/i386/ccmain.bin”到系统进程msdtc.exe,进一步引导加载真正的挖矿插件包。镜像文件结构与前文一致,解压结果如下:

4.png

2.    加载挖矿插件包的引导模块“ccmain.bin”

“config.js”配置文件中指明引导模块“cloudcompute.api”,主要负责解析将“/bin/i386/ccmain.bin”模块注入到系统进程。注入方法也比较经典,挂起创建系统进程,映射模块内存到傀儡进程,插入APC指向模块OEP完成注入。比较有特点的是“自动复活”机制,在完成注入以后注册回调函数监控傀儡进程句柄,一旦进程结束会再次触发注入过程,并且这个过程是递归的。该注入流程作为通用模板在后续代码中也会多次用到,细节步骤如下:

5.png

如上图,ccmain.bin模块入口代码修正重定位和IAT后,拷贝Shellcode对傀儡进程入口点Patch,当傀儡进程恢复执行到OEP时再次获取控制权,该模块功能主要负责存储在注册表中插件包的解析和升级,这个插件包是变异的ZIP格式(修改PK头特征),主要包含引导模块、外层支持插件组、挖矿插件组三大部分,随后病毒会加载模块“/bin/i386/Kaga.so”继续引导外层插件和挖矿插件工作。

6.png

3.    外层支持插件包“bsp.lib”

“Kaga.so”模块作为后续模块包的引导模块,负责从支持模块包“bsp.lib”中解压相关模块进行加载, “bsp.lib”采用了另外一种自定义格式,共包含6个核心模块文件(x86/x64)和2个Lua脚本,文件格式和组成细节描述如下:

7.png

“Kaga.so”模块其实是一个引导中转模块,从传参来看主要有7个功能分支,核心是加载或注入“/bin/i386/Akagi.bin”,不同分支往下层传递不同参数,再由“Akagi.bin”根据参数来引导执行挖矿插件包、外围控制脚本等不同分支功能。

8.png

如上图红色标注,主线分支中,“Kaga.so”模块的调用分支参数为3,传递给“Akagi.bin”模块的参数标记为1。“Akagi.bin”是后续挖矿插件的基础调度模块,其核心功能分支如下图:

9.png

从上图可以看出,引导逻辑中最关键的两个分支,一个分支是挖矿插件包“lib/schema.tlb”的引导加载,注入的默认进程为“WmiPrvSE.exe”,这部分的功能逻辑会在下个小节中单独讲解;另一个分支默认情况下注入目标进程为“dllhost.exe”,主要用于执行外层控制脚本”dispatcher.lua”,这个脚本通过注册回调绑定核心模块通知,主要用于外部环境的检测控制,包括常见抓包工具、硬件检测工具、安全软件的监控探测,保证可以随时隐藏自身活动痕迹;并且还会同类相残,针对其他挖矿木马进行对抗屏蔽;除此之外还会监控常见的游戏进程,并针对性调整挖矿的策略配置,在这些细节上的处理调整可以说做到了近乎极致,从中不难看出“隐蜂”木马的隐蔽性和幕后开发团队的专业性。

10.png

除了前面的的两大关键分支,外层支持插件包“bsp.lib”中还有“Amagi.bin”和“Taihou.bin”两个

模块未被提及,“Amagi.bin”是注入母体模块,通过挂钩CsrCreateProcess将“Taihou.bin”注入到

cmd、explorer系统进程或常见的游戏进程中(匹配签名列表),但暂未发现“Amagi.bin”模块被加载调

用;而“Taihou.bin”模块通过LdrRegisterDllNotification注册模块加载通知回调,搜索特征对ntdll.dll、

gdi32.dll、nvapi.dll、nvml.dll等模块中的关键函数调用进行hook,目的用于隐藏挖矿进程对于CPU、

GPU等设备资源的占用情况。未发现实际调用,这部分功能不再过多展开。

11.png

4.    引导加载挖矿插件包“schema.tlb”

最后是最核心的挖矿插件包“schema.tlb”,包含头部引导code和插件包数据两大部分,头部shellcode负责从后续数据中解压出挖矿包核心模块“coredll.bin”,插件包文件镜像格式与前面“bsp.lib”采用的自定义格式一致,包含各类挖矿模块、脚本共计19个文件,目录结构如下:

12.png

从文件构成可以看出这套挖矿插件包的设计比较复杂,限于篇幅就不再过多展开,简单来说,这是一套用于挖取门罗币的插件包,核心架构同时支持CPU和GPU模式,兼容CUDA和OpenGL两大并行计算库。其中核心模块“coredll.bin”负责LUA脚本引擎绑定初始化、挖矿算法核心模块、框架依赖模块加载,检测当前系统的设备环境并开启挖矿核心机制运行。另外还有两个比较关键的LUA脚本文件,其中“config.lua”是挖矿参数配置脚本,主要包括矿池配置、任务默认参数等,可以看到“隐蜂”使用的自建矿池“stratum+tcp://data.supportithelp.com:8080”。

13.png

另外一个LUA脚本“dispatcher.lua” 通过向核心模块注册回调,根据核心模块对显卡设备状态的监控通知去动态调整挖矿策略参数,非常灵活的一种设计。

14.png

尾言

“隐蜂”Bootkit挖矿木马的分析到此就告一段落,分析溯源的过程中我们也充分领略了其幕后开发团伙的专业程度,对我们的安全对抗的改进升级也带来不少启发。专业化、团伙化也是近两年新型木马发展的一个重要趋势,对于安全对抗的双方来讲,这是一种螺旋式上升的过程,Bootkit技术与挖矿木马结合的“隐蜂”只是这条曲线的一个标志节点,虚拟货币的热潮不退,这样的对抗还会不断持续升级下去。

附录(IOC)

样本HASH:

无 (攻击链无落地文件,需要样本的安全厂商或团队可以通过kis_sample#kingsoft.com与我们联系)

升级URL:

sstp://*.gatedailymirror.info/upd.pkg

sstp:// *.redteamshop.info/upd.pkg

sstp:// *.wefoundsome.xyz/upd.pkg

sstp:// *.foundrosysquad.info/upd.pkg

sstp://ask.thesupporthelp.com:443/mlf_plug.zip.sig

注册表:

HKLM\Software\Microsoft\.NETFramework/ RS4

矿池地址:

stratum+tcp://data.supportithelp.com:8080

* 本文作者:渔村安全,转载注明来自FreeBuf.COM

前言:

近两年比特币、以太币、门罗币等数字货币正经历着全球热潮,挖矿类病毒木马的感染量也随着虚拟货币的价格攀升逐步上涨,黑产团伙的商业嗅觉和行动力令人惊叹,类似“CoinHive”这种网页挖矿变现平台层出不穷,数百万级的网站被黑产团伙利用web漏洞植入挖矿代码;在去年我们可以看到各类挖矿木马异常活跃,从利用“永恒之蓝”漏洞传播到服务器、数据库弱口令爆破,从Struts2、Weblogic、Jboss等各大Web框架漏洞到IE/Flash 0day挂马传播,甚至包括被频繁曝光漏洞的路由器、摄像头等嵌入式设备都被黑产团伙盯上,各类挖矿木马可以说一直活跃在全球网络安全攻击事件的最前线;在挖矿暴利的引诱驱使下,之前部分用于传播垃圾邮件、敲诈者的老牌僵尸网络都开始纷纷转型加入挖矿大军,更有甚者,个别传统正牌软件厂商也都开始沉沦堕落,从我们去年挖掘曝光的“看看影音云控挖矿”、“电信天翼客户端挖矿后门”等安全事件中就可以略窥一二,不夸张地说,2017年堪称挖矿类木马病毒的爆发元年。

russia-hacking.jpg

近期我们毒霸安全团队监控到部分用户系统存在疑似挖矿木马活动的威胁线索,经过我们的逐层溯源分析,一个已经成型并走向活跃的Bootkit级挖矿僵尸网络被揭开神秘面纱,Bootkit与挖矿木马的融合也将碰撞出一些不一样的火花。本次捕获的Bootkit样本从框架设计到代码细节处理上都非常完善,在隐蔽性、兼容稳定性、反分析对抗等各方面都达到了一个全新高度,病毒代码的复杂程度、专业程度也为近年所罕见。从样本模块的字符串信息中我们发现该Bootkit的内部项目代号为“Mellifera(蜜蜂)”,所以本次的Bootkit木马被命名为“隐蜂”,概括来说,“隐蜂”Bootkit木马的技术特点主要体现在以下几个方面:

1) 对抗分析检测,隐蔽性很强。在隐蔽性上“隐蜂”Bootkit木马近乎极致,内核模块的挂钩地址都通过NT内核模块代码间隙的Shellcode中转实现隐藏;两套磁盘驱动劫持过滤机制互相守护;通过镜像回调检测pdb、签名特征屏蔽部分安全软件;针对PCHunter、PowerTool等常见的ARK工具,挂钩其核心驱动过滤IRP请求的返回数据,过滤掉自身注册的各类回调地址;在木马的R3层工作模块中,病毒也会通过脚本实时检测当前运行环境,一旦发现ARK工具、抓包软件或者安全软件,甚至是任务管理器,病毒都会立即结束挖矿活动,小心翼翼地躲藏起来;在C&C通信升级方面,采用SSTP加密协议,并且使用DGA动态生成。除了内存中的shellcode几乎没有太多特征线索,即便是专业安全人员,检测分析“隐蜂”Bootkit都是一件很有挑战性的工作。

2) 架构设计灵活,复杂度专业度很高。从我们的分析过程中看,不管是整体框架的设计还是细节处理都非常专业,比如内核模块基础机制设计方面,多种回调接口非常灵活,而且在内核层支持扩展模块的动态加载卸载,方便随时扩充内核功能;还有用于存储病毒模块和配置信息的MRFS自定义文件系统和NE插件格式;再比如R3层集成的LUA脚本机制增加了病毒灵活性,病毒还会根据机器配置和使用场景动态调整挖矿资源占用参数;最直观的感受,我们从“隐蜂”病毒中解压出来的各类内核模块、R3插件以及配置文件多达50+,病毒代码结构的复杂程度可见一斑。

3) 系统兼任稳定性很好。系统兼容性一直都是衡量Bootkit技术的重要指标,完成一款兼容度极高的Bootkit是非常有技术挑战性的一件事情,从我们的分析过程来看,“隐蜂”在系统引导过程中的挂钩时机选择、挂钩点特征搜寻和代码细节处理上都非常完善,支持主流windows操作系统版本,同时兼容X86/X64架构。“隐蜂”Boot劫持代码中也可以看到一些Bootkit前辈的身影,堪称后辈中的集大成者。

从我们的监控数据来看,本次的“隐蜂”Bootkit木马变种从3月初开始测试传播,得益于其强悍的隐蔽性和对抗分析能力,到至今的三个多月都不曾被外界发现曝光。病毒的项目版本号也从0.1迭代至目前的1.x,在经历了几轮网页挂马和流氓捆绑的传播小高峰后,该僵尸网络已经逐渐成形,预估目前全网的感染用户50w+。病毒母体在传播渠道和技术利用上也都非常有特点,通过白利用和系统漏洞组合穿透主流安全软件的防御体系,后续有机会我们会继续展开分享。

顺便说点题外话,“隐蜂”Bootkit木马的攻击活动并不是首次被发现,在2017年活跃过一段时间,早期变种的功能模块相对简单,主要用于劫持浏览器导航主页,友商安全团队曾经捕获到并命名为“隐魂”木马,称之为“史上反侦察力最强木马”,但是比较惋惜的是分析报告中没有任何IOC信息,并且抹去了几乎所有可能被外部溯源分析的特征线索,所以在较长时间内一直没有被外界熟知,我们也是在本文发布前对近两年的Bootkit类木马进行横向对比时意外发现,出于尊重,我们延续传统将此Bootkit变种命名为“隐蜂”。对抗网络黑产任重而道远,单个团队的力量总是有限的,在基础安全情报的开放共享方面,希望我们都可以做地更多一点,否则很多披露报告就失去了它本来的意义。本次发现的“隐蜂”Bootkit样本和相关技术细节会对安全友商开放,可以通过官方邮箱发送邮件和我们联系。最后还要感谢下用户@guying195在分析取证过程中给予的极大支持配合,这样的用户对我们来说也是一种莫大幸运。

正文:

图片1.png

如上图,按照Bootkit类木马传统的“boot+rootkit+plugin”三层架构,我们也会分为3个章节进行讲解,上篇部分主要包含“隐蜂”木马的“Boot劫持”和“内核Rootkit”两个关键部分。成文仓促难免有疏漏之处,欢迎留言指正。

一、 Boot启动劫持阶段

1. MBR引导代码劫持

“隐蜂”bootkit木马对MBR引导代码的感染处理比较有特点,与之前其它MBR类Bootkit不同的是,它通过在正常MBR启动代码基础进行Patch,劫持活动分区表项,打断原本应该跳转到PBR(Partition Boot Record)引导系统启动的正常流程,引导至磁盘末尾的病毒代码上继续执行。

图片2.png

劫持分区表后,病毒从磁盘末尾病毒代码起始处读取1个扇区到0x7C00,校验扇区末尾是否为0xAA55,通过验证则继续下一个步的Loader代码,反之则恢复BP指针,保证系统正常引导启动。

2. BootCode解码与加载布局

如上段所诉,loader代码被拷贝到0x7C00继续执行,这部分loader代码主要负责将磁盘末尾的BootCode代码数据拷贝到内存进行解码、加载布局和参数填充,并且恢复7C00处的MBR引导代码备用。完成这些以后病毒代码流程就进入bootkit经典核心部分,从挂钩INT13中断直到最终注入NT内核。解码和加载布局的这部分代码不涉及技术核心部分,流程略显琐碎,不再赘述细节,关键步骤和内存布局如下图所示:

图片3.png

3. INT13 挂钩

挂钩INT13中断服务是bootkit使用的经典技巧之一,挂钩成功以后可以在PBR读取系统引导程序(NTLDR/BootMgr)时获得一个合适的时机进行特征搜索和Patch。“隐蜂”在这部分的处理上并没有太大差异,如下图:

图片26.png

INT13的挂钩代码中搜索和Patch特征码主要包括以下几点:

1) 搜索特征码“83 C4 02 E9 00 00 E9 FD FF,主要针对XP系统的Ntldr模块,针对此处的Patch主要为了绕过代码完整性校验机制。

2) 搜索特征码 “8B F0 85 F6 74 21/22 80 3D”,主要针对XP系统的OS Loader模块,通过Hook跳转到后续保护模式代码。

3) 搜索特征码 “8A 46 ?? 98 3D 00 00 75 03 E9 03 00 E9 35 00”,主要针对VISTA+版本系统的BootMgr模块,通过Hook跳转到后续保护模式代码。

4. BOOTMGR挂钩

前段中INT13的挂钩代码中针对BootMgr(16位)的Hook对X86和X64做了兼容处理,以Win7 X86系统为例,成功挂钩BootMgr(16位)后效果如下:

图片4.png

BootMgr(16位)的挂钩触发以后,启动流程控制权再次被病毒代码接手,随后从00400000h基址处定位代码段,通过内嵌的微型反汇编引擎对特征码进行递进搜索,继续对BootMgr(32位)的关键位置进行挂钩,首次被挂钩的函数为ImgpLoadPEImage!LdrRelocateImageWithBias特征码搜索过程如下:

图片5.png

病毒代码对LdrRelocateImageWithBias被调用处的call地址进行Patch,将代码流程劫持到9AA7Eh;通过对BootMgr(32位)的模块功能和挂钩点的调用堆栈分析,就不难发现病毒选定此处作为挂钩点的原因:

图片6.png

5. WINLOAD.EXE挂钩

在对winload.exe的挂钩处理上,依旧选用了ImgpLoadPEImage!LdrRelocateImageWithBias这个调用点,特征码搜索过程都是相同的,另外针对winload架构不同分别处理,保证兼容X86和X64系统。通过此处的挂钩,病毒代码在winload.exe加载系统内核ntoskrnl.exe时可以再次截获代码执行权。此处细节不再赘述,如下图:

图片7.png

如上图所示,当winload!LdrRelocateImageWithBias处的挂钩代码被触发时,流程被引导到病毒函数9AA8Ch处,在这里病毒代码进行二次挂钩跳转,挂钩函数保存了当前模块的镜像基址,并通过覆写当前函数栈内容,等winload!LdrRelocateImageWithBias原函数执行完再次获取触发控制,完成调用后hook。

图片8.png

6. ntoskrnl.exe挂钩

上述挂钩点触发以后,病毒代码被引导到9AA9Ah函数处,开始对NT内核模块ntoskrnl.exe进行挂钩。首先恢复winload!LdrRelocateImageWithBias调用返回地址,保证挂钩代码执行完以后返回正常流程;然后病毒代码开始寻找ntoskrnl.exe的INIT区段,然后通过函数交叉引用和指令参数字符串特征定位到IoInitSystem!IopInitializeBootDrivers调用指令地址,在寻找到的区段间隙处拷贝shellcode,最后填充API表、设置参数并挂钩IoInitSystem!IopInitializeBootDrivers调用。细节过程入下图:

图片9.png

当NT内核调用IoInitSystem!IopInitializeBootDrivers时,之前区段缝隙填充的shellcode被触发,这里病毒代码首先将IopInitializeBootDrivers原地址填写到堆栈,保证原函数正常调用;然后关闭写保护恢复该处的挂钩,最后将下一阶段的hook函数地址填写堆栈,这样在BootDrivers初始化完毕以后,再次拿到内核代码控制权,最后填充原函数返回地址,加载执行后续shellcode。过程如下图:

图片10.png

从上图末尾的shellcode开始,病毒代码就开始进入bootkit内核驱动模块的加载过程,这部分代码包括三层的shellcode跳转处理,最终从磁盘末尾的读取后续核心模块的代码数据,解密解压处理后得到自定义文件系统(Mixed ROMFS)镜像,解析出内核loader模块“/bin/i386/bootmgr”(变异PE)装载并执行。限于篇幅这里不再赘述细节,三层shellcode跳转过程描述如下图:

图片11.png

至此“隐蜂”病毒的“Boot启动劫持阶段”结束,病毒代码从MBR劫持一路挂钩跳转直到进入到内核“Rootkit”阶段,后续将开始加载真正的内核模块,完成Ring3插件主模块注入、病毒磁盘数据保护回写以及杀软ARK对抗等操作。

二、 NT内核Rootkit阶段

在前段“Boot启动劫持阶段”结尾,我们提到了病毒代码使用了“Mixed ROMFS”自定义文件系统(以下简称MRFS)来存储配置信息和插件模块,而且插件模块也使用了从PE格式变异而来的NE格式,从这些精心设计的系统格式也可以从侧面窥探出“隐蜂”病毒幕后团伙的专业程度。这两类文件结构对我们后续的分析过程比较重要,在最后的Ring3层工作插件中都会多次使用到,所以在“NT内核Rootkit阶段”真正开始之前,我们先来简单了解下这两种文件格式。

1. 文件系统(Mixed ROMFS)文件结构与NE插件格式

“隐蜂”病毒使用的“MRFS”类似于linux系统下常见的ROMFS等文件系统,但目前没有找到公开资料描述过“MRFS”,所以我们暂时认定“MRFS”是病毒作者自定义的一套文件系统格式。从病毒的文件解析代码中反推出的关键字段和结构如下图:

图片12.png

“MRFS”的文件结构主要包括镜像头、文件信息头和文件数据三大部分,文件信息头是一个层级结构,主要包含了文件路径层级信息和对应文件块偏移信息。这个FS镜像包含了后续所有内核模块、配置信息和注入R3的主模块等文件,文件目录结构解析结果如下:

图片13.png

另外的“NE”模块插件格式相对简单,可以看作一种变异的PE文件格式,病毒作者抹去了PE文件的DOS头和NT头标记、区段名称等信息,进行修复以后即可还原为标准PE文件。在“NE”模块插件的代码入口或者外层调用处,一般通过导入表IAT和重定位表修复填充实现动态加载。

图片14.png

2. “bootmgr”解析加载“kernel”核心模块

“/bin/i386/bootmgr”模块是一个loader模块,主要负责解析加载真正的内核核心模块“/bin/i386/ kernel”,填充重定位表和IAT表完成自加载过程,随后从“MRFS”镜像中解析出kernel文件,进行重定位和导入表处理后直接调用。过程如下图:

图片15.png

3. 核心模块“kernel” 

“kernel”是“隐蜂”病毒Rookit阶段的核心模块,从模块整体的设计架构中,可以看出“隐蜂”病毒作者在Windows内核方面的具备非常丰富的开发经验。病毒作者在“kernel”模块中设计提供了镜像通知回调、磁盘过滤回调,内核扩展模块加载等一系列基础框架机制,并导出相关的服务接口,最终完成病毒磁盘数据回写保护、杀软ARK对抗以及R3插件主模块的注入等关键操作。另外内核扩展插件机制设计也非常灵活,支持动态加载卸载,方便病毒随时扩展升级内核功能。“kernel”模块功能比较复杂,部分接口需要结合调用上下文去分析说明,但核心功能可以总结为以下几个关键点:

1) IoCreateDriver创建自定义的核心驱动对象,符号链接为随机GUID,该驱动对象用于导出内核模块的核心功能给Ring3层进行调用。比较有特点的是,驱动对象的派遣函数其实是代理中转函数,通过维护一个链表对象,指向自定义的控制派遣函数对象,这样的设计可能是为了后期扩展更灵活。这部分的接口功能比较繁杂,后续我们会在R3调用处结合上下文进行说明。

图片16.png

2) PsSetLoadImageNotifyRoutine注册镜像加载通知回调,与普通的镜像回调函数不同的是,病毒将一段shellcode代码拷贝到NT内核模块代码段末尾空隙,由这段shellcode引导真正的回调函数,这样将回调函数地址隐藏到NT内核镜像中;另外此处的回调函数同样是一个代理中转函数,维护一个镜像通知回调函数数组,这样可以在系统原有机制外实现灵活扩展,导出接口给其他内核扩展模块使用;

图片17.png

最后向链表中添加了负责注入Ring3的镜像加载回调函数,在选择合适时机创建WorkerRoutine并通过APC机制注入svchost进程。病毒代码会映射目标地址空间并预加载Loader模块“stub.bin”,填充加载关键参数,包括“subsystem”(核心模块)等,最终将病毒流程引导到Ring3层工作阶段。后续Ring3层的工作模块加载和技术细节我们会在下一章中详细阐述。

图片18.png

3) 另外一个重要功能就是磁盘对象劫持相关对抗机制,主要用于保护病毒MBR和存放病毒代码数据的磁盘扇区,并在关机时机进行回写感染。病毒作者在这里巧妙地设计了两套劫持过滤机制,并且在这两套劫持的派遣函数中互相守护,摘除掉一方的劫持挂钩会被另外一处劫持重新恢复。

图片19.png

一类是“磁盘对象劫持”技术,申请内存构造虚假设备/驱动对象并填充关键字段结构,搜寻磁盘上层设备对象扩展,再将其保存下层对象的成员填充为前面构造的虚假设备对象,这样就可以过滤磁盘驱动发送的所有IRP请求,劫持派遣函数中除了对“IRP_MJ_SCSI”请求进行过滤处理外,还有针对“IRP_MJ_POWER”(关机通知)的处理,这里主要是提供接口给其他内核扩展模块和R3,方便对病毒MBR相关代码进行关机回写;

图片20.png

另外一类,劫持磁盘端口驱动(ATAPI)的“IRP_MJ_SCSI”派遣函数,与镜像加载通知回调的机制类似,这里同样将劫持函数的shellcode头拷贝到NT内核代码段末尾实现隐藏,并且也是通过代理函数中转链表实现灵活扩展。

图片21.png

4) 加载内核扩展模块“guard.kext”和“mprot.kext”完成内核对抗扩展功能。这里需要首先说明的是,在内核扩展模块加载机制中,“kernel”模块导出了一个比较重要的功能扩展接口“mpsi.dll”。这个接口主要封装了前面“kernel”模块实现的镜像回调、磁盘过滤等机制,一共22个导出功能函数,内核扩展模块kext以序号导入的形式引入“mpsi.dll”,在动态加载kext扩展模块处理IAT的时候进行了特殊处理,将所有“mpsi.dll”的导入函数引导到“kernel”模块的一个代理中转函数上。

图片22.png

“guard.kext” 内核扩展模块对应的配置文件为”/etc/register.js”,该模块通过前面“kernel”模块提供的接口注册镜像加载通知回调,对加载的驱动镜像进行PDB名称、数字签名、Hash等特征过滤,满足特征的则patch驱动文件入口点,直接返回错误状态码STATUS_INSUFFICIENT_RESOURCES,实现对抗安全软件与ARK工具类软件。

图片23.png

除了上述直接对抗安全软件和ARK工具驱动加载外,病毒还会对加载镜像的PDB、原始文件名等特征计算Hash匹配,我们分析认为主要是针对主流的ARK工具,病毒会挂钩ARK工具驱动中IofCompleteRequest等关键函数,对ARK工具交互的IRP请求进行过滤,劫持隐藏之前“kernel”模块注册的镜像加载回调和磁盘驱动派遣劫持等函数地址,防止专业安全人员通过PcHunter、PowerTool等常见的ARK工具检测发现异常挂钩。

图片27.png

另外一个关键的内核扩展模块是“mprot.kext”,其对应的配置文件为”/etc/sandbox.js”,该模块主要负责保护病毒MBR和磁盘末尾BootCode,通过“kernel”模块提供的“IRP_MJ_POWER”过滤回调接口注册保护函数,在系统关机时重新检查回写病毒MBR和BootCode。这里病毒注册了两套关机回调函数,一套用于内核扩展自身,一套用于Ring3层触发保护。

图片25.png

上篇的分析到此暂告一段落,下篇中我们会针对Ring3层的挖矿模块工作机制展开分析,敬请期待。

附录(IOC):

升级URL:

sstp://*.gatedailymirror.info/upd.pkg

sstp:// *.redteamshop.info/upd.pkg

sstp:// *.wefoundsome.xyz/upd.pkg

sstp:// *.foundrosysquad.info/upd.pkg

sstp://ask.thesupporthelp.com:443/mlf_plug.zip.sig

矿池地址:

stratum+tcp://data.supportithelp.com:8080

*本文作者:猎豹渔村安全,转载请注明来自FreeBuf.COM

一、前言

在“流量为王”的时代,流量从某种意义上来讲,就意味着金钱。一条依附在流量上的营销产业链条正暗流涌动,他们依靠社交软件这个平台,疯狂加好友、加群,来散播广告、色情、赌博等内容,从而获取流量。

 近日,金山毒霸安全实验室发现新型QQ营销病毒,感染到终端的网民无法退出QQ群,也无法举报群,遇到了堪称史上最为流氓的QQ营销病毒。

 据金山毒霸安全实验室统计,QQ营销病毒传播感染量高达约15W余万台。感染用户电脑后会强行添加QQ好友、QQ群,邀请好友加群并自动发邮件给QQ营销号。加群后,群内管理员会散播淫秽、赌博、诈骗等违法信息。

二、样本分析   

一款史上最流氓的QQ营销病毒

图1:木马传播流程图

1、木马母体分析:

0×1. 母体通过读取资源DT_CONFIG内容,初始化基础参数列表:

自动更新
渠道号 106
关闭拉群
开启调试输出日志
开启测试数据
云端后台分组ID 1
等待延迟执行时间 5分钟

0×2. 生成如下批处理文件,将文件拷贝到临时目录并以_temp_随机名 命名,然后删除自身

move”%s” “%s”

del/q “%s”

del/q “%s”

0×3. 为了保证能正常访问云端后台,作者备选了若干C2地址(如下列表),通过访问如sapi.zj3e.com/connect.txt是否可用,如果当前不存在任何可用后台,直接退出,接下来病毒去访问down.zj3e.com/fim/version.txt进行病毒模块检查更新(截至目前最新版本为1.0.70.41)

木马域名列表
sapi.zj3e.com
sapi.pj5z.com
sapi.wgqsy.com
sapi.cnhmb.com
sapi.bdbd8.com
sapi.pgzs3.com
sapi.xhwzs.com
sapi.97myj.com
sapi.airb2.com

一款史上最流氓的QQ营销病毒

图2:版本检测请求

0×4. 当更新完插件后,开始部署插件模块,病毒从自身的资源中读取DT_DLL 然后在temp目录下释放以security_随机名.dll 的文件。

一款史上最流氓的QQ营销病毒

图3:资源中内嵌PE文件

0×5. 释放完该释放的模块后,母体开始枚举窗口信息查找 TXGuiFoundation 窗口句柄,通过窗口句柄获取进程ID以远程线程的方式注入QQ。

一款史上最流氓的QQ营销病毒

图4:远程线程方式注入QQ

0×6. 将感染者的主机mac地址,渠道版本号,插件版本信息,构造成json格式的字符串。

以RC4 +BASE64的方式加密向远端C&C服务器(sapi.zj3e.com/m.php?encode=加密后的数据)发送终端计算机信息。

一款史上最流氓的QQ营销病毒

图5:上报终端信息

2、security_xxx.dll分析:

该病毒模块主要用于推广QQ好友,QQ群,发邮件给营销类QQ号,通常被推广的QQ号和QQ群多会涉及赌博、淫秽、诈骗、高利贷等内容,病毒为了让利益最大化会利用技术手段禁止用户举报和退群(受感染的终端环境)。禁止退群截图如下所示:

一款史上最流氓的QQ营销病毒

图6:禁止退群

病毒功能列表如下,我们2017.9月份捕获过类似的QQ营销病毒,并对此进行了分析,报告地址:

http://www.freebuf.com/column/148889.html,此篇报告将抽取与以往QQ营销病毒不一样的点进行功能分析

序号 功能
1 强制添加好友
2 自动添加营销群
3 QQ发邮件给营销号
4 禁止举报群
5 禁止退群
6 收集群好友信息
7 邀请他人进营销群
8 获取好友列表

1.自动加群和邀请其他好友加群:

通过云端获取到要加的营销QQ群和营销QQ号后,利用QQ快速登录获取到的当前用户uin、skey和token,登录https://qun.qq.com/member.html获取群数据,接下来请求https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list获取感染者QQ好友列表, http://qun.qq.com/cgi-bin/qun_mgr/add_group_member发送添加群成员数据邀请QQ好友进群(图七),并inline Hook了ShowWinow函数通窗口信息获取函数得到窗体信息,如果是“添加好友窗口”和“添加群窗口”,模拟点击完成自动添加(图九)

一款史上最流氓的QQ营销病毒

图7:邀请加群

一款史上最流氓的QQ营销病毒

图8: 邀请QQ好友进群

 

一款史上最流氓的QQ营销病毒

图9:模拟点击

10_副本.jpg

图10:博彩广告

2.禁止退群:

开发者通过逆向等技术手段得知禁止退群的导出函数,对Common.dll模块中的[email protected]@[email protected]函数进行inlineHook。

11.png

图11:禁止退群HOOK代码

3.禁止举报QQ群:

ShowWindow被inlineHook后判断是否为举报窗口并阻止用户举报。

一款史上最流氓的QQ营销病毒

图12:禁止举报群

三、产业分析

如下图所示,黑色产业链条从整体分工层次上看相对比较清晰,木马作者、分发传播、发布广告构成了黑色产业链的关键环节。

一款史上最流氓的QQ营销病毒

图13:黑色产业链环节流程图

一款史上最流氓的QQ营销病毒

从实际运作来看整个圈子又具有一定程度的复杂性,除了上述几个重要参与角色,每个产业链环节还会有一些其他黑产人员参与其中,比如说卖感染者QQ号码信息等,具有一定技术实力的团伙才是暴利所得者;可能会包揽整个链条的多个甚至是全部环节,其暴利收益自然也是最高的。 

一款史上最流氓的QQ营销病毒

图14:黑产QQ群

四、作者溯源

作者在代码中用了若快打码平台(ruokuai.com),根据留下来的线索,我们发现作者一共使用该平台打码了55W次。从打码平台的登陆IP信息来看,作者是河南新乡人,目前居住在四川,在2013年的时候已经开始学习盗号等技术。

15.png

图15:打码平台

充值纪录:

16.png

图16:充值记录

作者常用登陆IP地址为四川省:

17.png

图17:作者常用登陆IP地址

疑似作者早期已经开始接触盗号等技术:

一款史上最流氓的QQ营销病毒

图18:疑似作者在百度贴吧发贴

作者从2014年开始的登陆IP地址:

一款史上最流氓的QQ营销病毒

图19:2014年开始作者登陆IP地址

疑似作者的QQ 号:

一款史上最流氓的QQ营销病毒

图20:疑似作者QQ号

五、总结

本文从典型样本、黑产链条、追踪等多个方面对“QQ营销病毒”背后的黑色产业链进行了一些剖析总结,可以看出黑产的形成运作是一个复杂交错的产物。我们对它的了解可能还比较片面,其中的”隐秘内幕”也远超这篇文章所能揭露的。金山毒霸安全实验室建议用户做好以下防范措施:安装安全软件,可以有效对推广软件、后门程序、木马等进行全方位查杀,保护系统安全。养成良好上网习惯,不随意点击来历不明的网页链接,远离赌博、色情类网站。

*本文作者:渔村安全,转载请注明来自 FreeBuf.COM

一、前言

在“流量为王”的时代,流量从某种意义上来讲,就意味着金钱。一条依附在流量上的营销产业链条正暗流涌动,他们依靠社交软件这个平台,疯狂加好友、加群,来散播广告、色情、赌博等内容,从而获取流量。

 近日,金山毒霸安全实验室发现新型QQ营销病毒,感染到终端的网民无法退出QQ群,也无法举报群,遇到了堪称史上最为流氓的QQ营销病毒。

 据金山毒霸安全实验室统计,QQ营销病毒传播感染量高达约15W余万台。感染用户电脑后会强行添加QQ好友、QQ群,邀请好友加群并自动发邮件给QQ营销号。加群后,群内管理员会散播淫秽、赌博、诈骗等违法信息。

二、样本分析   

一款史上最流氓的QQ营销病毒

图1:木马传播流程图

1、木马母体分析:

0×1. 母体通过读取资源DT_CONFIG内容,初始化基础参数列表:

自动更新
渠道号 106
关闭拉群
开启调试输出日志
开启测试数据
云端后台分组ID 1
等待延迟执行时间 5分钟

0×2. 生成如下批处理文件,将文件拷贝到临时目录并以_temp_随机名 命名,然后删除自身

move”%s” “%s”

del/q “%s”

del/q “%s”

0×3. 为了保证能正常访问云端后台,作者备选了若干C2地址(如下列表),通过访问如sapi.zj3e.com/connect.txt是否可用,如果当前不存在任何可用后台,直接退出,接下来病毒去访问down.zj3e.com/fim/version.txt进行病毒模块检查更新(截至目前最新版本为1.0.70.41)

木马域名列表
sapi.zj3e.com
sapi.pj5z.com
sapi.wgqsy.com
sapi.cnhmb.com
sapi.bdbd8.com
sapi.pgzs3.com
sapi.xhwzs.com
sapi.97myj.com
sapi.airb2.com

一款史上最流氓的QQ营销病毒

图2:版本检测请求

0×4. 当更新完插件后,开始部署插件模块,病毒从自身的资源中读取DT_DLL 然后在temp目录下释放以security_随机名.dll 的文件。

一款史上最流氓的QQ营销病毒

图3:资源中内嵌PE文件

0×5. 释放完该释放的模块后,母体开始枚举窗口信息查找 TXGuiFoundation 窗口句柄,通过窗口句柄获取进程ID以远程线程的方式注入QQ。

一款史上最流氓的QQ营销病毒

图4:远程线程方式注入QQ

0×6. 将感染者的主机mac地址,渠道版本号,插件版本信息,构造成json格式的字符串。

以RC4 +BASE64的方式加密向远端C&C服务器(sapi.zj3e.com/m.php?encode=加密后的数据)发送终端计算机信息。

一款史上最流氓的QQ营销病毒

图5:上报终端信息

2、security_xxx.dll分析:

该病毒模块主要用于推广QQ好友,QQ群,发邮件给营销类QQ号,通常被推广的QQ号和QQ群多会涉及赌博、淫秽、诈骗、高利贷等内容,病毒为了让利益最大化会利用技术手段禁止用户举报和退群(受感染的终端环境)。禁止退群截图如下所示:

一款史上最流氓的QQ营销病毒

图6:禁止退群

病毒功能列表如下,我们2017.9月份捕获过类似的QQ营销病毒,并对此进行了分析,报告地址:

http://www.freebuf.com/column/148889.html,此篇报告将抽取与以往QQ营销病毒不一样的点进行功能分析

序号 功能
1 强制添加好友
2 自动添加营销群
3 QQ发邮件给营销号
4 禁止举报群
5 禁止退群
6 收集群好友信息
7 邀请他人进营销群
8 获取好友列表

1.自动加群和邀请其他好友加群:

通过云端获取到要加的营销QQ群和营销QQ号后,利用QQ快速登录获取到的当前用户uin、skey和token,登录https://qun.qq.com/member.html获取群数据,接下来请求https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list获取感染者QQ好友列表, http://qun.qq.com/cgi-bin/qun_mgr/add_group_member发送添加群成员数据邀请QQ好友进群(图七),并inline Hook了ShowWinow函数通窗口信息获取函数得到窗体信息,如果是“添加好友窗口”和“添加群窗口”,模拟点击完成自动添加(图九)

一款史上最流氓的QQ营销病毒

图7:邀请加群

一款史上最流氓的QQ营销病毒

图8: 邀请QQ好友进群

 

一款史上最流氓的QQ营销病毒

图9:模拟点击

10_副本.jpg

图10:博彩广告

2.禁止退群:

开发者通过逆向等技术手段得知禁止退群的导出函数,对Common.dll模块中的[email protected]@[email protected]函数进行inlineHook。

11.png

图11:禁止退群HOOK代码

3.禁止举报QQ群:

ShowWindow被inlineHook后判断是否为举报窗口并阻止用户举报。

一款史上最流氓的QQ营销病毒

图12:禁止举报群

三、产业分析

如下图所示,黑色产业链条从整体分工层次上看相对比较清晰,木马作者、分发传播、发布广告构成了黑色产业链的关键环节。

一款史上最流氓的QQ营销病毒

图13:黑色产业链环节流程图

一款史上最流氓的QQ营销病毒

从实际运作来看整个圈子又具有一定程度的复杂性,除了上述几个重要参与角色,每个产业链环节还会有一些其他黑产人员参与其中,比如说卖感染者QQ号码信息等,具有一定技术实力的团伙才是暴利所得者;可能会包揽整个链条的多个甚至是全部环节,其暴利收益自然也是最高的。 

一款史上最流氓的QQ营销病毒

图14:黑产QQ群

四、作者溯源

作者在代码中用了若快打码平台(ruokuai.com),根据留下来的线索,我们发现作者一共使用该平台打码了55W次。从打码平台的登陆IP信息来看,作者是河南新乡人,目前居住在四川,在2013年的时候已经开始学习盗号等技术。

15.png

图15:打码平台

充值纪录:

16.png

图16:充值记录

作者常用登陆IP地址为四川省:

17.png

图17:作者常用登陆IP地址

疑似作者早期已经开始接触盗号等技术:

一款史上最流氓的QQ营销病毒

图18:疑似作者在百度贴吧发贴

作者从2014年开始的登陆IP地址:

一款史上最流氓的QQ营销病毒

图19:2014年开始作者登陆IP地址

疑似作者的QQ 号:

一款史上最流氓的QQ营销病毒

图20:疑似作者QQ号

五、总结

本文从典型样本、黑产链条、追踪等多个方面对“QQ营销病毒”背后的黑色产业链进行了一些剖析总结,可以看出黑产的形成运作是一个复杂交错的产物。我们对它的了解可能还比较片面,其中的”隐秘内幕”也远超这篇文章所能揭露的。金山毒霸安全实验室建议用户做好以下防范措施:安装安全软件,可以有效对推广软件、后门程序、木马等进行全方位查杀,保护系统安全。养成良好上网习惯,不随意点击来历不明的网页链接,远离赌博、色情类网站。

*本文作者:渔村安全,转载请注明来自 FreeBuf.COM

一、前言


在“流量为王”的时代,流量从某种意义上来讲,就意味着金钱。一条依附在流量上的营销产业链条正暗流涌动,他们依靠社交软件这个平台,疯狂加好友、加群,来散播广告、色情、赌博等内容,从而获取流量。

 

近日,金山毒霸安全实验室发现新型QQ营销病毒,感染到终端的网民无法退出QQ群,也无法举报群,遇到了堪称史上最为流氓的QQ营销病毒。

 

据金山毒霸安全实验室统计,QQ营销病毒传播感染量高达约15W余万台。感染用户电脑后会强行添加QQ好友、QQ群,邀请好友加群并自动发邮件给QQ营销号。加群后,群内管理员会散播淫秽、赌博、诈骗等违法信息。

二、样本分析   

1.png

图1:木马传播流程图

1、木马母体分析:

0×1.母体通过读取资源DT_CONFIG内容,初始化基础参数列表:

自动更新
渠道号 106
关闭拉群
开启调试输出日志
开启测试数据
云端后台分组ID 1
等待延迟执行时间 5分钟

 

0×2.生成如下批处理文件,将文件拷贝到临时目录并以_temp_随机名 命名,然后删除自身

move”%s” “%s”

del/q “%s”

del/q “%s”

 

0×3.为了保证能正常访问云端后台,作者备选了若干C2地址(如下列表),通过访问如sapi.zj3e.com/connect.txt是否可用,如果当前不存在任何可用后台,直接退出,接下来病毒去访问down.zj3e.com/fim/version.txt进行病毒模块检查更新(截至目前最新版本为1.0.70.41)

木马域名列表
sapi.zj3e.com
sapi.pj5z.com
sapi.wgqsy.com
sapi.cnhmb.com
sapi.bdbd8.com
sapi.pgzs3.com
sapi.xhwzs.com
sapi.97myj.com
sapi.airb2.com

 

2.png

图2:版本检测请求

 

0×4.当更新完插件后,开始部署插件模块,病毒从自身的资源中读取DT_DLL 然后在temp目录下释放以security_随机名.dll 的文件。

3.png

                            图3:资源中内嵌PE文件

 

0×5.释放完该释放的模块后,母体开始枚举窗口信息查找 TXGuiFoundation 窗口句柄,通过窗口句柄获取进程ID以远程线程的方式注入QQ。

4.png

                   图4:远程线程方式注入QQ

 

0×6.将感染者的主机mac地址,渠道版本号,插件版本信息,构造成json格式的字符串。

以RC4 +BASE64的方式加密向远端C&C服务器(sapi.zj3e.com/m.php?encode=加密后的数据)发送终端计算机信息。

5.png

                  图5:上报终端信息

 

2、security_xxx.dll分析:

该病毒模块主要用于推广QQ好友,QQ群,发邮件给营销类QQ号,通常被推广的QQ号和QQ群多会涉及赌博、淫秽、诈骗、高利贷等内容,病毒为了让利益最大化会利用技术手段禁止用户举报和退群(受感染的终端环境)。禁止退群截图如下所示:

6.png

                            图6:禁止退群

 

病毒功能列表如下,我们2017.9月份捕获过类似的QQ营销病毒,并对此进行了分析,报告地址:

http://www.freebuf.com/column/148889.html,此篇报告将抽取与以往QQ营销病毒不一样的点进行功能分析

序号 功能
1 强制添加好友
2 自动添加营销群
3 QQ发邮件给营销号
4 禁止举报群
5 禁止退群
6 收集群好友信息
7 邀请他人进营销群
8 获取好友列表

 

1.自动加群和邀请其他好友加群:

通过云端获取到要加的营销QQ群和营销QQ号后,利用QQ快速登录获取到的当前用户uin、skey和token,登录https://qun.qq.com/member.html获取群数据,接下来请求https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list获取感染者QQ好友列表, http://qun.qq.com/cgi-bin/qun_mgr/add_group_member发送添加群成员数据邀请QQ好友进群(图七),并inline Hook了ShowWinow函数通窗口信息获取函数得到窗体信息,如果是“添加好友窗口”和“添加群窗口”,模拟点击完成自动添加(图九)

7.png

                            图7:邀请加群

 

8.png

                           图8: 邀请QQ好友进群

 

9.png

                                图9:模拟点击

 

10.png

                                 图10:博彩广告

 

2.禁止退群:

     开发者通过逆向等技术手段得知禁止退群的导出函数,对Common.dll模块中的[email protected]@[email protected]函数进行inlineHook。

11.png

                            图11:禁止退群HOOK代码

 

3.禁止举报QQ群:

ShowWindow被inlineHook后判断是否为举报窗口并阻止用户举报。

12.png

                         图12:禁止举报群

 

三、产业分析


如下图所示,黑色产业链条从整体分工层次上看相对比较清晰,木马作者、分发传播、发布广告构成了黑色产业链的关键环节。

13.png

                             图13:黑色产业链环节流程图

13.5.png

 

从实际运作来看整个圈子又具有一定程度的复杂性,除了上述几个重要参与角色,每个产业链环节还会有一些其他黑产人员参与其中,比如说卖感染者QQ号码信息等,具有一定技术实力的团伙才是暴利所得者;可能会包揽整个链条的多个甚至是全部环节,其暴利收益自然也是最高的。 

14.png

                             图14:黑产QQ群

四、作者溯源

作者在代码中用了若快打码平台(ruokuai.com),根据留下来的线索,我们发现作者一共使用该平台打码了55W次。从打码平台的登陆IP信息来看,作者是河南新乡人,目前居住在四川,在2013年的时候已经开始学习盗号等技术。

15.png

                            图15:打码平台

 

充值纪录:

16.png

                            图16:充值记录

 

作者常用登陆IP地址为四川省:

17.png

                            图17:作者常用登陆IP地址

 

疑似作者早期已经开始接触盗号等技术:

18.png

                         图18:疑似作者在百度贴吧发贴

 

作者从2014年开始的登陆IP地址:

19.png

                       图19:2014年开始作者登陆IP地址

 

疑似作者的QQ 号:

20.png

                        图20:疑似作者QQ号

 

五、总结

本文从典型样本、黑产链条、追踪等多个方面对“QQ营销病毒”背后的黑色产业链进行了一些剖析总结,可以看出黑产的形成运作是一个复杂交错的产物。我们对它的了解可能还比较片面,其中的”隐秘内幕”也远超这篇文章所能揭露的。金山毒霸安全实验室建议用户做好以下防范措施:安装安全软件,可以有效对推广软件、后门程序、木马等进行全方位查杀,保护系统安全。养成良好上网习惯,不随意点击来历不明的网页链接,远离赌博、色情类网站。

一、前言


在“流量为王”的时代,流量从某种意义上来讲,就意味着金钱。一条依附在流量上的营销产业链条正暗流涌动,他们依靠社交软件这个平台,疯狂加好友、加群,来散播广告、色情、赌博等内容,从而获取流量。

 

近日,金山毒霸安全实验室发现新型QQ营销病毒,感染到终端的网民无法退出QQ群,也无法举报群,遇到了堪称史上最为流氓的QQ营销病毒。

 

据金山毒霸安全实验室统计,QQ营销病毒传播感染量高达约15W余台。感染用户电脑后会强行添加QQ好友、QQ群,邀请好友加群并自动发邮件给QQ营销号。加群后,群内管理员会散播淫秽、赌博、诈骗等违法信息。

二、样本分析   

1.png

图1:木马传播流程图

1、木马母体分析:

0×1.母体通过读取资源DT_CONFIG内容,初始化基础参数列表:

自动更新
渠道号 106
关闭拉群
开启调试输出日志
开启测试数据
云端后台分组ID 1
等待延迟执行时间 5分钟

 

0×2.生成如下批处理文件,将文件拷贝到临时目录并以_temp_随机名 命名,然后删除自身

move”%s” “%s”

del/q “%s”

del/q “%s”

 

0×3.为了保证能正常访问云端后台,作者备选了若干C2地址(如下列表),通过访问如sapi.zj3e.com/connect.txt是否可用,如果当前不存在任何可用后台,直接退出,接下来病毒去访问down.zj3e.com/fim/version.txt进行病毒模块检查更新(截至目前最新版本为1.0.70.41)

木马域名列表
sapi.zj3e.com
sapi.pj5z.com
sapi.wgqsy.com
sapi.cnhmb.com
sapi.bdbd8.com
sapi.pgzs3.com
sapi.xhwzs.com
sapi.97myj.com
sapi.airb2.com

 

2.png

图2:版本检测请求

 

0×4.当更新完插件后,开始部署插件模块,病毒从自身的资源中读取DT_DLL 然后在temp目录下释放以security_随机名.dll 的文件。

3.png

                            图3:资源中内嵌PE文件

 

0×5.释放完该释放的模块后,母体开始枚举窗口信息查找 TXGuiFoundation 窗口句柄,通过窗口句柄获取进程ID以远程线程的方式注入QQ。

4.png

                   图4:远程线程方式注入QQ

 

0×6.将感染者的主机mac地址,渠道版本号,插件版本信息,构造成json格式的字符串。

以RC4 +BASE64的方式加密向远端C&C服务器(sapi.zj3e.com/m.php?encode=加密后的数据)发送终端计算机信息。

5.png

                  图5:上报终端信息

 

2、security_xxx.dll分析:

该病毒模块主要用于推广QQ好友,QQ群,发邮件给营销类QQ号,通常被推广的QQ号和QQ群多会涉及赌博、淫秽、诈骗、高利贷等内容,病毒为了让利益最大化会利用技术手段禁止用户举报和退群(受感染的终端环境)。禁止退群截图如下所示:

6.png

                            图6:禁止退群

 

病毒功能列表如下,我们2017.9月份捕获过类似的QQ营销病毒,并对此进行了分析,报告地址:

http://www.freebuf.com/column/148889.html,此篇报告将抽取与以往QQ营销病毒不一样的点进行功能分析

序号 功能
1 强制添加好友
2 自动添加营销群
3 QQ发邮件给营销号
4 禁止举报群
5 禁止退群
6 收集群好友信息
7 邀请他人进营销群
8 获取好友列表

 

1.自动加群和邀请其他好友加群:

通过云端获取到要加的营销QQ群和营销QQ号后,利用QQ快速登录获取到的当前用户uin、skey和token,登录https://qun.qq.com/member.html获取群数据,接下来请求https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list获取感染者QQ好友列表, http://qun.qq.com/cgi-bin/qun_mgr/add_group_member发送添加群成员数据邀请QQ好友进群(图七),并inline Hook了ShowWinow函数通窗口信息获取函数得到窗体信息,如果是“添加好友窗口”和“添加群窗口”,模拟点击完成自动添加(图九)

7.png

                            图7:邀请加群

 

8.png

                           图8: 邀请QQ好友进群

 

9.png

                                图9:模拟点击

 

10_副本.jpg

                                 图10:博彩广告

 

2.禁止退群:

     开发者通过逆向等技术手段得知禁止退群的导出函数,对Common.dll模块中的[email protected]@[email protected]函数进行inlineHook。

11.png

                            图11:禁止退群HOOK代码

 

3.禁止举报QQ群:

ShowWindow被inlineHook后判断是否为举报窗口并阻止用户举报。

12.png

                         图12:禁止举报群

 

三、产业分析


如下图所示,黑色产业链条从整体分工层次上看相对比较清晰,木马作者、分发传播、发布广告构成了黑色产业链的关键环节。

13.png

                             图13:黑色产业链环节流程图

13.5.png

 

从实际运作来看整个圈子又具有一定程度的复杂性,除了上述几个重要参与角色,每个产业链环节还会有一些其他黑产人员参与其中,比如说卖感染者QQ号码信息等,具有一定技术实力的团伙才是暴利所得者;可能会包揽整个链条的多个甚至是全部环节,其暴利收益自然也是最高的。 

14.png

                             图14:黑产QQ群

四、作者溯源

作者在代码中用了若快打码平台(ruokuai.com),根据留下来的线索,我们发现作者一共使用该平台打码了55W次。从打码平台的登陆IP信息来看,作者是河南新乡人,目前居住在四川,在2013年的时候已经开始学习盗号等技术。

15.png

                            图15:打码平台

 

充值纪录:

16.png

                            图16:充值记录

 

作者常用登陆IP地址为四川省:

17.png

                            图17:作者常用登陆IP地址

 

疑似作者早期已经开始接触盗号等技术:

18.png

                         图18:疑似作者在百度贴吧发贴

 

作者从2014年开始的登陆IP地址:

19.png

                       图19:2014年开始作者登陆IP地址

 

疑似作者的QQ 号:

20.png

                        图20:疑似作者QQ号

 

五、总结

本文从典型样本、黑产链条、追踪等多个方面对“QQ营销病毒”背后的黑色产业链进行了一些剖析总结,可以看出黑产的形成运作是一个复杂交错的产物。我们对它的了解可能还比较片面,其中的”隐秘内幕”也远超这篇文章所能揭露的。金山毒霸安全实验室建议用户做好以下防范措施:安装安全软件,可以有效对推广软件、后门程序、木马等进行全方位查杀,保护系统安全。养成良好上网习惯,不随意点击来历不明的网页链接,远离赌博、色情类网站。

一、前言


在“流量为王”的时代,流量从某种意义上来讲,就意味着金钱。一条依附在流量上的营销产业链条正暗流涌动,他们依靠社交软件这个平台,疯狂加好友、加群,来散播广告、色情、赌博等内容,从而获取流量。

 

近日,金山毒霸安全实验室发现新型QQ营销病毒,感染到终端的网民无法退出QQ群,也无法举报群,遇到了堪称史上最为流氓的QQ营销病毒。

 

据金山毒霸安全实验室统计,QQ营销病毒传播感染量高达约15W余台。感染用户电脑后会强行添加QQ好友、QQ群,邀请好友加群并自动发邮件给QQ营销号。加群后,群内管理员会散播淫秽、赌博、诈骗等违法信息。

二、样本分析   

1.png

图1:木马传播流程图

1、木马母体分析:

0×1.母体通过读取资源DT_CONFIG内容,初始化基础参数列表:

自动更新
渠道号 106
关闭拉群
开启调试输出日志
开启测试数据
云端后台分组ID 1
等待延迟执行时间 5分钟

 

0×2.生成如下批处理文件,将文件拷贝到临时目录并以_temp_随机名 命名,然后删除自身

move”%s” “%s”

del/q “%s”

del/q “%s”

 

0×3.为了保证能正常访问云端后台,作者备选了若干C2地址(如下列表),通过访问如sapi.zj3e.com/connect.txt是否可用,如果当前不存在任何可用后台,直接退出,接下来病毒去访问down.zj3e.com/fim/version.txt进行病毒模块检查更新(截至目前最新版本为1.0.70.41)

木马域名列表
sapi.zj3e.com
sapi.pj5z.com
sapi.wgqsy.com
sapi.cnhmb.com
sapi.bdbd8.com
sapi.pgzs3.com
sapi.xhwzs.com
sapi.97myj.com
sapi.airb2.com

 

2.png

图2:版本检测请求

 

0×4.当更新完插件后,开始部署插件模块,病毒从自身的资源中读取DT_DLL 然后在temp目录下释放以security_随机名.dll 的文件。

3.png

                            图3:资源中内嵌PE文件

 

0×5.释放完该释放的模块后,母体开始枚举窗口信息查找 TXGuiFoundation 窗口句柄,通过窗口句柄获取进程ID以远程线程的方式注入QQ。

4.png

                   图4:远程线程方式注入QQ

 

0×6.将感染者的主机mac地址,渠道版本号,插件版本信息,构造成json格式的字符串。

以RC4 +BASE64的方式加密向远端C&C服务器(sapi.zj3e.com/m.php?encode=加密后的数据)发送终端计算机信息。

5.png

                  图5:上报终端信息

 

2、security_xxx.dll分析:

该病毒模块主要用于推广QQ好友,QQ群,发邮件给营销类QQ号,通常被推广的QQ号和QQ群多会涉及赌博、淫秽、诈骗、高利贷等内容,病毒为了让利益最大化会利用技术手段禁止用户举报和退群(受感染的终端环境)。禁止退群截图如下所示:

6.png

                            图6:禁止退群

 

病毒功能列表如下,我们2017.9月份捕获过类似的QQ营销病毒,并对此进行了分析,报告地址:

http://www.freebuf.com/column/148889.html,此篇报告将抽取与以往QQ营销病毒不一样的点进行功能分析

序号 功能
1 强制添加好友
2 自动添加营销群
3 QQ发邮件给营销号
4 禁止举报群
5 禁止退群
6 收集群好友信息
7 邀请他人进营销群
8 获取好友列表

 

1.自动加群和邀请其他好友加群:

通过云端获取到要加的营销QQ群和营销QQ号后,利用QQ快速登录获取到的当前用户uin、skey和token,登录https://qun.qq.com/member.html获取群数据,接下来请求https://qun.qq.com/cgi-bin/qun_mgr/get_friend_list获取感染者QQ好友列表, http://qun.qq.com/cgi-bin/qun_mgr/add_group_member发送添加群成员数据邀请QQ好友进群(图七),并inline Hook了ShowWinow函数通窗口信息获取函数得到窗体信息,如果是“添加好友窗口”和“添加群窗口”,模拟点击完成自动添加(图九)

7.png

                            图7:邀请加群

 

8.png

                           图8: 邀请QQ好友进群

 

9.png

                                图9:模拟点击

 

10_副本.jpg

                                 图10:博彩广告

 

2.禁止退群:

     开发者通过逆向等技术手段得知禁止退群的导出函数,对Common.dll模块中的[email protected]@[email protected]函数进行inlineHook。

11.png

                            图11:禁止退群HOOK代码

 

3.禁止举报QQ群:

ShowWindow被inlineHook后判断是否为举报窗口并阻止用户举报。

12.png

                         图12:禁止举报群

 

三、产业分析


如下图所示,黑色产业链条从整体分工层次上看相对比较清晰,木马作者、分发传播、发布广告构成了黑色产业链的关键环节。

13.png

                             图13:黑色产业链环节流程图

13.5.png

 

从实际运作来看整个圈子又具有一定程度的复杂性,除了上述几个重要参与角色,每个产业链环节还会有一些其他黑产人员参与其中,比如说卖感染者QQ号码信息等,具有一定技术实力的团伙才是暴利所得者;可能会包揽整个链条的多个甚至是全部环节,其暴利收益自然也是最高的。 

14.png

                             图14:黑产QQ群

四、作者溯源

作者在代码中用了若快打码平台(ruokuai.com),根据留下来的线索,我们发现作者一共使用该平台打码了55W次。从打码平台的登陆IP信息来看,作者是河南新乡人,目前居住在四川,在2013年的时候已经开始学习盗号等技术。

15.png

                            图15:打码平台

 

充值纪录:

16.png

                            图16:充值记录

 

作者常用登陆IP地址为四川省:

17.png

                            图17:作者常用登陆IP地址

 

疑似作者早期已经开始接触盗号等技术:

18.png

                         图18:疑似作者在百度贴吧发贴

 

作者从2014年开始的登陆IP地址:

19.png

                       图19:2014年开始作者登陆IP地址

 

疑似作者的QQ 号:

20.png

                        图20:疑似作者QQ号

 

五、总结

本文从典型样本、黑产链条、追踪等多个方面对“QQ营销病毒”背后的黑色产业链进行了一些剖析总结,可以看出黑产的形成运作是一个复杂交错的产物。我们对它的了解可能还比较片面,其中的”隐秘内幕”也远超这篇文章所能揭露的。金山毒霸安全实验室建议用户做好以下防范措施:安装安全软件,可以有效对推广软件、后门程序、木马等进行全方位查杀,保护系统安全。养成良好上网习惯,不随意点击来历不明的网页链接,远离赌博、色情类网站。