刺球网络安全社区

 找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

搜索
查看: 2077|回复: 0

百度旗下网站暗藏恶意代码——劫持用户电脑疯狂“收割”流量

[复制链接]

 成长值: 216044

新浪微博达人勋

  • TA的每日心情

    2019-8-22 09:24
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    1134

    主题

    1717

    帖子

    37万

    积分

    管理员

    技术指数:★★★★★

    Rank: 9Rank: 9Rank: 9

    积分
    376203

    社区QQ达人最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    QQ
    发表于 2017-3-2 05:54:55 | 显示全部楼层 |阅读模式
    本分析报告pdf版本下载:http://t.cn/RitHJky

    一、概述
    经火绒安全实验室截获、分析、追踪并验证,当用户从百度旗下的http://www.skycn.net/http://soft.hao123.com/这两个网站下载任何软件时,都会被植入恶意代码。该恶意代码进入电脑后,会通过加载驱动等各种手段防止被卸载,进而长期潜伏,并随时可以被“云端”远程操控,用来劫持导航站、电商网站、广告联盟等各种流量。
    火绒实验室近期接到数名电脑浏览器被劫持的用户求助,在分析被感染电脑时,提取到多个和流量劫持相关的可疑文件:HSoftDoloEx.exe 、bime.dll 、MsVwmlbkgn.sys、LcScience.sys、WaNdFilter.sys,这些可疑文件均包含百度签名。
    这些包含恶意代码的可疑文件,被定位到一个名叫nvMultitask.exe的释放器上,当用户在http://www.skycn.net/http://soft.hao123.com/这两个下载站下载任何软件时,都会被捆绑下载该释放器,进而向用户电脑植入这些可疑文件。需要强调的是,下载器运行后会立即在后台静默释放和执行释放器nvMultitask.exe,植入恶意代码,即使用户不做任何操作直接关闭下载器,恶意代码也会被植入。
    根据分析和溯源,最迟到2016年9月,这些恶意代码即被制作完成。而操纵流量劫持的“远程开关”于近期被开启,被感染的电脑会被按照区域和时段等条件,或者是随机地被“选择”出来,进行流量劫持——安全业界称之为“云控劫持”。




    图 1、下载器向用户计算机植入恶意代码

    被植入的恶意代码没有正常的用户卸载功能,也没有常规启动项,电脑每次开机时都会启动和更新恶意代码,恶意代码接收C&C服务器指令,行为受云端控制,并且会通过加载驱动,保护相关的注册表和文件不被删除。
    因此,这些植入恶意代码的用户电脑成为长期被远程控制的“肉鸡”。
    该恶意代码被远程启动后,会劫持各种互联网流量,用户的浏览器、首页、导航站都会被劫持,将流量输送给hao123导航站。同时,还会篡改电商网站、网站联盟广告等链接,用以获取这些网站的流量收入分成(详情在本报告第二章)。

    综上所述,该恶意代码本身以及通过下载器植入用户电脑的行为,同时符合安全行业通行的若干个恶意代码定义标准,因此,火绒将这一恶意代码家族命名为“Rogue/NetReaper”(中文名:流量收割者)。升级到“火绒安全软件”最新版本,即可全面查杀、清除该类恶意代码。 %E5%9B%BE2-300x193.jpg

    图2、火绒安全软件检测结果
    火绒安全软件4.0下载地址:
    http://www.huorong.cn/downv4.html
    火绒专杀工具下载地址:
    http://huorong.cn/download/tools/hrkill-v1.0.0.10.exe

    二、主要劫持行为描述
    用户在这两个下载站下载软件后,电脑即被植入“Rogue/NetReaper”恶意代码,在长期的潜伏期过程中,电脑可能发生如下流量劫持情况(按地域和时间等因素云控劫持,或者随机劫持):
    1.导航站劫持:当用户访问其他导航站时,会被劫持到百度hao123导航站。
    包括360、QQ、2345、搜狗、猎豹、114la、瑞星……等导航站都会被劫持,劫持后的hao123网址带有百度联盟的推广计费名。



    图3、常见导航站被直接为hao123
    2.首页劫持:把用户电脑首页修改为hao123导航站。
    使用IE浏览器的用户,其首页被修改为hao123导航站,并通过百度联盟计费名统计流量。
    3.浏览器劫持:360浏览器替换成IE浏览器或者假IE浏览器。
    当发现用户使用360安全浏览器或360极速浏览器时,默认浏览器被修改为IE浏览器,或者修改为假IE浏览器,以躲避安全软件的浏览器保护。无论 怎样,被替换后首页都会变成hao123导航站,并通过百度联盟计费名统计流量。
    4.网盟广告劫持:将百度网盟其他渠道计费名换成渠道商猎豹(金山毒霸)。
           百度网盟有许多渠道商,这些渠道商都将流量售卖给百度网盟,这个劫持行为是将其他渠道商的推广计费名换成金山的,这样的话,本来应该属于其他渠道的百度网盟推广费用,就被猎豹获得,猎豹再向恶意代码制作者分钱。


    图 4、替换百度网盟广告

    5.电商流量劫持:使用IE浏览器访问京东等电商网站时,先跳转到电商导流网站站,然后再跳转回该电商网站。

    先跳转到电商导流网站妖猴网(http://www.xmonkey.com),再返回原购物网站之后,电商网站链接就加上了妖猴网的计费名,电商网站就会按照流量向妖猴网支付推广费用,妖猴网再向恶意代码制作者分钱。


    图 5、访问电商网站时会跳转到电商导流网站


    三、概要分析
    执行任意从http://soft.hao123.com下载到的下载器,不需要进行任何操作,恶意代码就会植入用户计算机。使用火绒剑可以监控植入恶意代码的整个过程,如下图:


    图 6、恶意代码首次植入用户计算机流程

    恶意代码首次植入用户计算机流程:

    1.下载器执行释放的nvMultitask.exe。目前下载器包含的nvMultitask.exe是0.2.0.1版本,该版本仅会在用户计算机上植入部分恶意代码,如下:
           a)        3.2.0.1版的HSoftDoloEx.exe
           b)        1.7.0.1版的bime.dll
           c)        0.4.0.130 版的LcScience.sys
           d)        0.5.30.70 版的WaNdFilter.sys
           e)        1.0.0.1020版的npjuziplugin.dll


    2.植入恶意代码成功后nvMultitask.exe使用命令行参数“-inject=install”执行HSoftDoloEx.exe

    3.启动的HSoftDoloEx.exe链接C&C服务器(http://update.123juzi.net/update.php)进行更新,更新的恶意组件将在下次计算机启动后被激活
    每次计算机重启,恶意代码都会启动和检查更新:
    经过几次更新之后,nvMultitask.exe的会升级到当前最新版本3.2.0.4,后续分析将会以这个版本展开。


    最新版本的恶意组件在用户每次开机后都会执行以下流程:
    1.LcScience.sys注册进程和映像加载回调将bime.dll分别注入services.exe、explorer.exe、iexplore.exe和其他第三方浏览器进程。
    2.注入services.exe中的bime.dll负责启动HSoftDoloEx.exe
    1)HSoftDoloEx.exe链接C&C服务器(http://update.123juzi.net/update.php)检测更新。
    2)HSoftDoloEx.exe链接C&C服务器(http://update.qyllq.com/getupfs2.php),获取流量劫持指令。(后续章节进行详细分析)
    3.注入explorer.exe中的bime.dll负责在执行5分钟后链接C&C服务器(http://update.123juzi.net/ccl.php)下载并加载恶意代码svcprotect.dat到explorer.exe。
    4.svcprotect.dat(1.0.0.11)加载后释放两个全新的流量劫持模块:
    1)5.0.0.1版的iexplorer_helper.dat
    2)1.5.9.1098版的iexplore.exe


    图 7、恶意代码植入用户计算机流程

    1.5.9.1098版的iexplore.exe是一个伪装系统名称的假IE浏览器,我们把这个文件上传到VirusTotal后发现,很多安全软件检测此文件是病毒,如图:



    图 8、Virustotal检测的结果


    图 9、恶意代码包含百度签名



    最终在用户计算机中所有包含恶意代码的文件如下:
    安装目录
    安装文件
    %HOMEPATH%  \AppData\Roaming\HSoftDoloEx
    x86、x64
    HSoftDoloEx.exe(3.2.0.4)
    x86
    bime.dll(1.7.0.5)
    x64
    bime64.dll(1.7.0.5)
    %Drivers%
    x86
    LcScience.sys(0.4.0.130)
    WaNdFilter.sys(0.5.30.70)
    MsVwmlbkgn.sys(0.6.60.70)
    x64
    LcScience64.sys(0.4.0.130)
    WaNdFilter64.sys(0.5.30.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    %HOMEPATH%\AppData\Local\Internet  Explorer
    x86、x64
    iexplorer_helper.dat(5.0.0.1)
    %HOMEPATH%\AppData\Local\ProgramData
    x86
    svcprotect_32_1.0.0.11.dat(1.0.0.11)
    x64
    svcprotect_64_1.0.0.11.dat(1.0.0.11)
    %HOMEPATH%\AppData\Roaming\{E233850D-5D6E-48E3-98B5-8049F7E9FC68}
    x86、x64
    iexplore.exe(1.5.9.1098)
    %HOMEPATH%  \AppData\LocalLow\JuziPlugin\1.0.0.1020
    x86、x64
    npjuziplugin.dll(1.0.0.1020)


    四、详细分析

    1.        启动、保护和更新模块分析

    1.1        启动

    恶意代码有两个重要的启动模块HSoftDoloEx.exe和bime.dll。这两个文件是整组恶意代码的关键项,驱动文件LcScience.sys负责每次开机启动它们。

    LcScience.sys(0.4.0.130)注册映像加载通知,排队一个工作例程,如下图:


    图 10、排队注入例程

    该工作例程会判断启动进程是否需要注入,完整的注入列表如下:
    Services.exe、Explorer.exe、Iexplorer.exe、360se.exe、Maxthon.exe、
    iexplore.exe、liebao.exe、2345Explorer.exe、QQBrowser.exe、360chrome.exe和sogouexplorer.exe


    如果满足注入条件,就会注入bime.dll(1.7.0.5)到指定进程。LcScience.sys实现了两种注入方式:一种通过patch系统动态库ntdll.dll的入口将动态库bime.dll注入到制定进程;另一种则是通过patch系统动态库ntdll.dll的NtTestAlert函数实现注入bime.dll到指定进程,相关代码如下图:


    图 11、选择注入方式

    bime.dll(1.7.0.5)注入到services.exe、explorer.exe、iexplorer.exe和其他浏览器进程后,会根据宿主进程名称不同,会执行不一样的流程。

    注入到services.exe系统进程bime.dll,在系统开机运行services.exe后,以"-inject=start"参数执行HSoftDoloEx.exe。在explorer.exe中的bime.dll(1.7.0.5)也会随着“桌面”程序的启动,一同被激活。bime.dll还会随着用户启动的浏览器一并启动,如下图:


    图 12、恶意代码启动流程图

    1.2        保护

    WaNdFilter.sys(0.5.30.70)同LcScience.sys(0.4.0.130)都使用了注册表回调保护自己的注册表启动项不被删除,除此以外WaNdFilter.sys(0.5.30.70)还有两个保护点,如下图所示:


    图 13、文件保护逻辑

    图中标明file_needs_protect_1 函数负责保护“WaNdFilter.sys”、“LcScience.sys”和“MsVwmlbkgn.sys”这几个文件不被删除,标明file_needs_protect_2 函数会阻止特定进程不能访问恶意代码指定的文件列表。

    WaNdFilter.sys阻止的特定进程如下表:

    NSoftMgr.exe、360Tray.exe、360Safe.exe、360DeskAna.exe、
    QQPCSoftCmd.exe、QMAutoClean.exe、QQPCMgr.exe、QQPCSoftMgr.exe、QQPCRTP.exe


    恶意代码指定的文件列表的在我们的实验环境中并未得到。

    1.3        更新

    不同版本nvMultitask.exe释放的恶意代码在功能上存在差异。本文分析的是当前最新版本3.2.0.4。每次计算机重启恶意代码都会执行更新,升级到最新版本需要经过以下流程。

    1)开机后执行HSoftDoloEx.exe,HSoftDoloEx.exe会向服务器http://update.123juzi.net/update.php发送升级请求,每次请求返回的都不是最新版本,一般来说从下载器自带的0.2.0.1版本需要至少重启三次计算机 ,才可以更新到3.2.0.4版本。


    图 14、恶意代码释放器升级流程


    2)除了HSoftDoloEx.exe会向服务器发送请求更新以外,3.2.0.4版的nvMultitask.exe中包含的1.7.0.5版的bime.dll ,会在注入系统进程Explorer.exe之后,也会向服务器http://update.123juzi.net/ccl.php发送请求。

    3)请求得到的数据是一段Base64编码后的字符串,解码后可以得到win_32_1.0.0.11.dat的下载地址后开始下载。这是一个新出现的恶意代码。

    4)win_32_1.0.0.11.dat是加密的32位版本的svcprotect.dat(1.0.0.11)。

    5)bime.dll解密后调用svcprotect.dat名为“Run”的导出函数,释放恶意代码“iexplorer_helper.dat” (5.0.0.1)

    6)svcprotect.dat还会检查当前系统中是否存在“C:\ProgramData\userdata\data.dat”这个文件,如果不存在或者该文件最后写入时间距今相差30天以上,svcprotect.dat就会在“%HOMEPATH%\AppData\Roaming\{E233850D-5D6E-48E3-98B5-8049F7E9FC68}”目录中释放假iexplore.exe(1.5.9.1098)。“C:\ProgramData\userdata\data.dat”是一个0字节文件,会在svcprotect.dat第一次释放iexplore.exe后被svcprotect.dat创建。

    svcprotect.dat释放的文件都包含在它的PE资源中,如图:


    图 15、svcprotect.dat中包含的二进制资源

    FILE_0068_0804对应iexplore.exe(1.5.9.1098),FILE_0069_0804对应iexplorer_helper.dat(5.0.0.1)。至此所有恶意代码已经全部植入用户计算机了。

    如果升级服务器不返回请求数据(此处由云端控制),也可以在安装了nvMultitask.exe 0.2.0.1版本计算机上,直接运行nvMultitask_3.2.0.4.exe的安装包(MD5: 4bf77866e8a851a2fa7d4088b85be126),同样会更新到最新版的恶意代码。但是会缺少两个关键组件iexplorer_helper.dat(5.0.0.1)和svcprotect.dat(1.0.0.11)。


    HSoftDoloEx.exe和C&C服务器通信的请求升级流程如下表:

    图 16、HsoftDoloEx和C&C服务通信流程


    图 17、C&C服务器返回的base64解码后数据

    2.        用户态流量劫持模块

    bime.dll会被注入到explorer.exe进程,在其等待5分钟之后会加载恶意模块svcprotect.dat。svcprotect.dat会释放另一个恶意模块iexplorer_helper.dat和一个假iexplore.exe,二者分别实现不同流量劫持功能:

    1)针对用户浏览器首页的劫持:

    在Explorer.exe中的svcprotect.dat Hook了的CreateProcessW劫持浏览器首页流量,此外svcprotect.dat还会直接启动假iexplore.exe替换用户运行的浏览器完成首页劫持。

    2)针对用户访问购物网站做流量劫持:

    svcprotect.dat释放的出来的iexplorer_helper.dat会针对系统IE浏览器劫持某购物网站流量。


    负责用户态流量劫持的模块列表:
    劫持模块
    %HOMEPATH%\AppData\Roaming\HSoftDoloEx
    bime.dll
    %HOMEPATH%\AppData\Local\Internet Explorer
    iexplorer_helper.dat
    %HOMEPATH%\AppData\Roaming\{E233850D-5D6E-48E3-98B5-8049F7E9FC68}
    iexplore.exe


    负责用户态流量劫持的C&C服务器:
    C&C服务器
    http://update.123juzi.net/getupfs2.php
    http://update.qyllq.net/test_json.php
    http://api.qyllq.com/url_loc.php
    http://update.qyllq.com/tnpp.php


    2.1        svcprotect.dat劫持模块分析

    加载到explorer.exe中的svcprotect.dat会向服务器http://update.123juzi.net/getupfs2.php发送请求获取控制指令。

    svcprotect.dat和C&C服务器通信流程如下表:

    图 18、svcprotect.dat和C&C服务器通信流程


    图 19、解码服务器返回的数据为二进制格式


    图 20、通过XOR 0x29得到的JSON格式的控制指令


    图 21、控制指令的完整列表

    通过C&C服务器得到的JSON各键名含义:
    字段
    字段含义
    browser
    被劫持的浏览器进程名
    action
    进程启动方式
    数值为800:快捷方式启动
    数值为400:快捷方式添加参数启动
    数值为1:直接由explorer启动(如Ctrl+R启动)
    home
    劫持网址
    juzi
    是否将进程替换为假IE
    per
    劫持概率
    perie
    将进程替换为系统IE的概率


    svcprotect.dat根据接收到的云控指令,判断用户启动的浏览器是否匹配劫持条件,如果匹配则会选择对应的劫持方法。其流量劫持的手法一共分为三种:
    1)将用户启动的浏览器劫持为假IE:
    在用户双击浏览器快捷方式(包括带网址参数和不带网址参数两种)或者通过explorer直接启动浏览器时(当前只劫持通过“Win+R”方式启动的浏览器,直接启动浏览器的可执行文件不会被劫持),只要配置文件中对应的概率命中,就会将当前启动浏览器替换为假IE。当然这样的劫持手法过于明显,很容易引起用户警觉,所以劫持为假IE的概率很低。
    图 22、假IE访问其默认首页

    2)劫持浏览器的命令行启动参数:

    在用户启动无命令行参数的浏览器快捷方式时,如果配置文件中对应的概率命中,则会添加带有自己计费号的百度搜索网址参数,如果启动的浏览器是系统IE,劫持网址就是带有计费号的hao123链接。针对360安全浏览器和360极速浏览器这种当启动参数为其他导航站时,就会跳转到http://hao.360.cn的浏览器,劫持网址就是带有计费号的百度搜索链接。

    图 23、劫持浏览器参数

    3)将启动的第三方浏览器替换为系统IE:

    用户双击浏览器快捷方式(包括带网址参数和不带网址参数两种)或者通过explorer.exe直接启动时,如果“per”键值中的概率没有命中,则会继续使用“perie”键值中的概率进行第二次随机。如果命中第三方浏览器替换为系统IE。这种手法主要用于当第三方浏览器启动参数为hao123导航时,为了保住这些流量不会因为使用其他第三方浏览器而跳转到其他导航站(如:http://hao.360.cn),所以将第三方浏览器替换为系统IE,从而保护其固有流量。

    图 24、劫持逻辑流程图

    svcprotect.dat 释放的假IE

    因为当360安全浏览器和360极速浏览器的启动参数为http://www.hao123.com时,会默认打开http://hao.360.cn,所以为了更加彻底地劫持流量,svcprotect.dat中的恶意代码会将这两款浏览器替换为假IE,从而达到其劫持目的。除了启动后会默认打开hao123导航外,当假IE的启动参数为百度搜索时,其实际使用的计费号依然为自己的计费号(如下图,在访问网址时我们可以看到上述网址在浏览器标题栏中一闪而过)。


    图 25、假IE访问百度搜索

    2.2        iexplorer_helper.dat劫持模块分析

    注入浏览器的bime.dll会加载iexplorer_helper.dat组件,调用iexplorer_helper.dat动态库的"Run"导出函数后执行以下操作:

    1)启动rundll32.exe,加载iexplorer_helper.dat,调用参数为Init

    图 26、rundll32.exe启动的iexplorer_helper.dat

    2)向C&C服务器发送获取控制指令,一共发送三个请求:

    a)请求http://update.qyllq.net/test_json.php获取的云控指令,我们命名为hijack_cmd1。

    b)请求http://api.qyllq.com/url_loc.php获取云控指令,我们命名为hijack_cmd2。

    c)请求http://update.qyllq.com/tnpp.php获取云控指令,我们命名为hijack_cmd3。

    图 27、iexplorer_helper.dat和C&C服务器通信

    iexplorer_helper.dat和C&C服务器通信流程如下表:

    图 28、iexplorer_helper.dat和C&C服务器通信流程


    图 29、解码服务器返回的数据为二进制格式


    图 30、通过XOR 0x9C得到的JSON格式的控制指令


    图 31、控制指令的完整列表

    图 32、iexplorer_helper.dat和C&C服务器通信流程


    图 33、解码服务器返回的数据为二进制格式


    图 34、通过XOR 0x9C得到的JSON格式的控制指令


    图 35、控制指令的完整列表


    图 36、iexplorer_helper.dat和C&C服务器通信流程


    图 37、通过XOR 0x9C得到的JSON格式的控制指令

    hijack_cmd3没有请求后没有得到对应数据,但是会保存从服务器请求到的base64编码指令到%HOMEPATH%\AppData\Local\ProgramData\iehlp.dat。其余两组的指令保存在内存没有在本地保存,对应的含义如下:
           通过C&C服务器得到hijack_cmd1的JSON各键名含义:
    字段
    字段含义
    id
    编号
    urlsrc
    原访问网址
    urldst
    劫持网址
    rand
    劫持概率
    times
    每日劫持次数
    elapse
    劫持间隔时间
    mode
    未知(现配置文件中所有mode键值都为8)


    通过C&C服务器得到hijack_cmd2的JSON各键名含义:
    字段
    字段含义
    id
    编号
    urlsrc
    原访问网址
    urldst
    劫持网址
    rand
    劫持概率
    times
    每日劫持次数
    elapse
    劫持间隔时间
    mode
    未知(现配置文件中所有mode键值都为8)
    referer
    未见使用
    city
    未见使用


    每个浏览器都会加载中iexplorer_helper.dat启动rundll32.exe执行iexplorer_helper.dat的Init函数。但是如果启动的进程是iexplorer.exe。注入iexplorer_helper.dat会和rundll32.exe进程通信,将IE地址栏的访问地址劫持交给rundll32.exe进行分析,如果满足劫持条件跳转网址发送给iexplorer。进行劫持。


    图 38、进程通讯流程图


    图 39、劫持jd.com添加推广号

    3)内核态流量劫持模块

    HSoftDoloEx.exe接收C&C服务器云控指令发送给MsVwmlbkgn.sys进行HTTP收发包的流量劫持。从C&C服务器接收到的云控指令包含了普通导航站的劫持和百度网盟广告的劫持。

    在x64系统zethelpEx64.exe(3.2.0.3)负责发送云控指令给MsVwmlbkgn.sys。

    内核态负责流量劫持的模块列表:
    劫持模块
    %HOMEPATH%\AppData\Roaming\HSoftDoloEx
    HSoftDoloEx.exe
    zethelpEx64.exe
    %drivers%
    MsVwmlbkgn.sys


    内核态负责流量劫持的云控指令文件:
    云控指令文件
    %HOMEPATH%\AppData\Roaming  \Internet Explorer
    cfg.dat
    iecompa.dat
    iecompb.dat
    内核态负责流量劫持的C&C服务器指令接口:

    C&C服务器指令接口
    http://update.qyllq.com/getupfs2.php


    3.1        云控指令获取

    HSoftDoloEx.exe连接C&C服务器(http://update.qyllq.net)得到的加密的云控指令,解密后通过API函数DeviceIoControl,发送给设备“\\.\{D87A9329-ED85-49C3-A8D2-534474363333}”对应的驱动程序”MsVwmlbkgn.sys“。

    HSoftDoloEx.exe通过C&C服务器获取运控制令流程:

    图 40、HSoftDoloEx.exe和C&C服务器通信流程

    请求格式如下:
    字段
    说明
    update.qyllq.com/getupfs2.php
    C&C服务器地址
    app=3.2.0.4
    HSoftDoloEx的版本号
    cfg=
    本机保存指令的版本号,在文件cfg.dat文件中说明,为空就是本机还没有保存指令
    os=3
    操作系统的版本
    [1]  WindowsXP、WinServer2003
    [2]  WinServer2008
    [3]  Windows7
    [4]  Windows8
    [5]  Windows10
    safe=0
    [0]  没有安装安全软件
    [1]  360安全卫士、360杀毒
    [2]  腾讯电脑管家
    [4]  百度卫士、百度杀毒
    [8]  金山毒霸
    如果安装多款安全软件就将数字相加,例如同时安装了360、腾讯电脑管家、和百度杀毒,safe就等于7。


    3.2        云控指令解密

    从C&C服务器返回的http:\\d.qyllq.net\DB\iecomv2.7z"下载地址是一个压缩文件。HSoftDoloEx.exe下载后解压文件到%HOMEPATH%\AppData\Roaming \Internet Explorer目录,一共三个文件分别是cfg.dat、iecompa.dat和iecompb.dat。

    除cfg.dat是明文保存云控指令版本外。其余的iecompa.dat和iecompb.dat都是加密过的二进制数据。

    iecompa.dat(后文简称指令A)和iecompb.dat(后文简称指令B)的格式如下:

    图 41、iecompa.dat XOR 0xB5后得到的控制指令


    图 42、iecompb.dat XOR 0xB5后得到的控制指令

    图中前0x16个字节中蓝色框中内容和版本相关,绿色是指令长度,黄色是校验和。在0x16字节后面的数据XOR 0xB5,就可以得到为被加密的具体指令。

    指令A(iecompa.dat)

    图 43、控制指令的完整列表(指令A)

    指令B(iecompb.dat)

    图 44、控制指令的完整列表(指令B)

    获取云控指令后的HSoftDoloEx.exe使用DeviceIoControl函数和MsVwmlbkgn.sys进行通信。一共有三组控制码(HSoftDoloEx.exe版本3.2.0.4,MsVwmlbkgn.sys版本0.6.60.70),分别是:

    a)222000 发送指令A的内容给MsVwmlbkgn.sys

    b)222004 发送指令B的内容给MsVwmlbkgn.sys

    c)222008 控制流量劫持功能的开关

    目前3.2.0.4版HSoftDoloEx.exe还没有使用222008这个控制码, 因为在0.6.60.70版本的MsVwmlbkg.sys中,流量劫持功能默认为开。

    “指令A”和“指令B” 分工合作, 在指令A中不同的劫持类型对应指令B给出不同处理劫持方案,根据具体的劫持内容可以分为三种情况,不同的劫持方案在下文会有详细分析:


    图 45、劫持指令说明
    3.3        劫持流程

    MsVwmlbkgn.sys是一个WFP驱动程序,该驱动会向WFP FWPM_LAYER_STREAM_V4和FWPM_LAYER_STREAM_V6注册Callout(我们标记为wfp_classify_callout)来分别过滤IPv4和IPv6的TCP数据流:


    图 46、注册IPv4和IPv6数据流过滤Callout


    wfp_classify_callout中会调用http_hijack函数对TCP发送和接收的数据进行协议分析并按照一定的逻辑进行劫持:


    图 47、wfp_classify_callout函数

    http_hijack函数中,根据HSoftDoloEx.exe接收C&C服务器云控指令对收发数据有选择地进行劫持,具体劫持流程如下:


    图 48、内核态劫持流程图

    3.3.1        发包流程

    MsVwmlbkgn有一个全局开关决定是开启劫持功能,这个全局开关在MsVwmlbkgn中由控制码222008进行控制(70版本默认是打开的,上层没有对应控制的流程)。

    除了全局开关以外,MsVwmlbkgn还会根据请求包中“Host”字段的网址,在C&C服务器给出的指令中查找,根据指令有不同的处理方式,C&C给出的指令包含:需要劫持的网站、劫持概率、使用何种方式劫持和浏览器名称。


    图 49、发包流程判断逻辑1

    如果请求的URL在C&C服务器返回的劫持列表中,接下来驱动还会对当前发起进程进行判断,最后再计算C&C服务器返回的对当前URL的劫持概率。


    图 50、发包流程判断逻辑2

    如果上述判断逻辑均通过,则会根据C&C服务器返回的针对当前请求URL的劫持类型,有选择地分别执行两类劫持逻辑:

    标记为“2”的劫持方式:

    首先将要劫持到的目标URL保存在redir_url。接下来,将当前HTTP Flow的句柄保存在flowHandle_lo/hi,在收包劫持流程中做判断使用。


    图 51、保存收包劫持所需数据


    MsVwmlbkgn会保留请求包中原始”Host“地址,在地址前添加“http://”子串后进行base64编码,在编码后的字符串前添加"&s=",构成一个新的字符串,结果保存在url_from_http_get_request。恶意代码制造者会通过该字符串统计截取流量的来源。

    以“http://hao.qq.com/ ”为例,转换后”&s=aHR0cDovL2hhby5xcS5jb20vIA==“,保存该字符串在对应的应答包中使用,用于服务器后台统计。


    图 52、分析HTTP发送请求完整URL


    图 53、拼接劫持来源统计信息

    标记为“8”的劫持方式:

    如果是方式“8”直接添加插入一个请求数据包,在”Host“地址后面修改推广号,具体实现在construct_send_hijack_packet中完成。


    图 54、发包劫持流程

    3.3.2        收包流程

    如果当前HTTP Flow为发包时记录下的需要被劫持的Flow (flowHandle_lo/hi与当前句柄相同),则表示这个收到的HTTP数据是需要被劫持的。这时,则会在应答流程中插入一个302重定向应答包,并将重定向地址指向redir_url,且将劫持来源统计信息(url_from_http_get_request)同时拼接到重定向URL中。


    图 55、收包劫持流程


    图 56、拼接302重定向应答包

    以用户访问“http://hao.qq.com/ ”为例,经过内核态劫持后,真正的访问链接就变成了“https://www.hao123.com/?tn=70000 ... 2hhby5xcS5jb20vIA==

    3.3.3        百度网盟广告劫持

    通过云控指令一节中可以看到,指令A中劫持的网站列表中绝大多数都是导航站,但是最后两个却是百度网盟的广告js脚本,劫持关系如下表:

    劫持源URL
    劫持目标URL
    http://cpro.baidustatic.com/cpro/ui/c.js
    http://update.qyllq.net/r.php?c=30&v=3
    http://cpro.baidu.com/cpro/ui/c.js
    http://update.qyllq.net/r.php?c=31&v=3


    用户访问有投放百度广告的网站时,恶意代码会劫持百度广告,具体流程如下:

    1)http://cpro.baidustatic.com/cpro/ui/c.jshttp://cpro.baidu.com/cpro/ui/c.js是用于展示从百度网盟获取广告的js脚本。

    2)访问带有百度广告脚本的网站时,步骤1的“c.js”脚本被劫持替换成http://update.qyllq.net/r.php?c=30&v=3http://update.qyllq.net/r.php?c=31&v=3

    3)步骤2的PHP页面会继续跳转到http://xz.mascldl.com/ifr/c3w.js,得到”c3w.js”脚本。

    4)继续跳转到http://xz.mascldl.com/ifr/cw3.js,得到”cw3.js”脚本。

    5)”cw3.js”脚本就是最终得到负责劫持的百度网盟广告的js脚本。


    图 57、百度网盟广告劫持流程图

    “cw3.js”脚本劫持百度网盟广告的流程如下:

    1)首先拼接劫持到的目的网址,这些网址都是跳转链接:

    http://yu.xrtotel.com/cl/u63990/200x200.html
    http://yu.xrtotel.com/cl/u63990/250x250.html
    http://yu.xrtotel.com/cl/u63990/300x250.html
    http://yu.xrtotel.com/cl/u63990/336x280.html
    http://yu.xrtotel.com/cl/u63990/580x90.html
    http://yu.xrtotel.com/cl/u63990/640x60.html
    http://yu.xrtotel.com/cl/u63990/728x90.html
    http://yu.xrtotel.com/cl/u63990/960x90.html

    跳转后的广告页面为带有计费号的“http://duba.com/union2.html“:

    图 58、劫持后的广告链接

    2)查找页面中的iframe标签,判断链接是否是”pos.baidu.com”并且不是”duba”:

    for (var M = 0; M < H.length; M++) {
         var D = H[M].id;
        if  (D == null || D == "undefined" || D.indexOf("iframe") !==  0) {
             continue
        }
        if  (H[M].src.indexOf("pos.baidu.com") != 7 ||  H[M].src.indexOf("duba") > 0) {
             continue
        }
         F(H[M], H[M].offsetWidth, H[M].offsetHeight)
    }


    3)如果条件匹配,判断第一步准备的广告有没有大小合适的,找到合适大小则将原始链接保存下来:

    function F(U, d, T){   if (t.length == 0) {       return    }   for (var s in t) {       if (t[0] == U.offsetWidth &&t[1] == U.offsetHeight) {           G.push(U)       }    }}


    4)  然后判断当前网站链接是否在它的放过列表中
    function e() {    var d = [".hao123.co", ".3567.com",  ".www2345.com",".www9991.com", ".365wz.net",  ".2345.net", ".2345.org",".77816.com",  ".365wz.com",".hao184.com", ".d1wz.com", ".to128.com", ".42.62.30.178",".42.62.30.180", ".2345soso.com", ".2345kankan.com",  ".ku118.com",".hh361.com", ".v2233.com", ".ie567.com", ".2345ii.com", ".kuku2.com",  ".yes115.com",".kabasiji.com", ".5599.net",  ".te99.com",".duote.com.cn", ".duote.net",  ".51ct.cn",".zhangyu.com", ".537.com", ".cc62.com", ".cn220.com",".k986.com", ".555k.net", ".wzeh.com",".yl234.com", ".2345download.com", ".g3456.com",".duote.com", ".duote.cn", ".9991.com", ".50bang.org",  ".2345.com.cn",".duote.org", ".haozip.com",  ".2345.com", ".2345.cn",".tt5000.com", ".4585.com", ".728.com",".game56.com", ".fa3000.com", ".yy5000.com",".777ge.com", ".hao774.com"];    var T = location.hostname;    for (var s = 0; s < d.length; s++) {        if (T.indexOf(d) > 0) {            return true        }    }    var U = ["hao123.co", "3567.com",  "www2345.com","www9991.com", "365wz.net", "2345.net", "2345.org", "77816.com",  "365wz.com","hao184.com", "d1wz.com", "to128.com", "42.62.30.178","42.62.30.180", "2345soso.com", "2345kankan.com","ku118.com", "hh361.com", "v2233.com","ie567.com", "2345ii.com", "kuku2.com","yes115.com", "kabasiji.com", "5599.net","te99.com", "duote.com.cn", "duote.net", "51ct.cn",  "zhangyu.com", "537.com","cc62.com", "cn220.com", "k986.com", "555k.net",  "wzeh.com", "yl234.com","2345download.com", "g3456.com",  "duote.com", "duote.cn","9991.com", "50bang.org", "2345.com.cn","duote.org", "haozip.com", "2345.com", "2345.cn",  "tt5000.com", "4585.com","728.com", "game56.com", "fa3000.com", "yy5000.com",  "777ge.com","hao774.com"];    for (var s = 0; s < U.length; s++) {        if (T == U) {            return true        }    }    return false}

    5) 如果不在放过列表中,”cw3.js”劫持时用第一步中保存跳转链接替换原始的广告链接,达到劫持百度网盟广告的目的:

    d.addChildAdTask = function() {
         d.CurrentDisplayAd = d.OldAd.cloneNode(true);
         d.CurrentDisplayAd.setAttribute("src", d.AdSrc);
        if  (d.OldAd == null) {
             return
        }
         var i = q(d.OldAd);
        if  (i) {
             d.CurrentDisplayAd.style.display = "none";
             d.ParentContainer.appendChild(d.CurrentDisplayAd);
             setTimeout(function() {
                 d.removeFadeOut(d.OldAd)
             }, 3000)
        }  else {
             d.OldAd.setAttribute("src", d.AdSrc)
        }
    };


    图 59、cw3.js劫持流程

    五、附录

    1.        恶意代码攻击时间线

    图 60、时间线

    签名时间
    恶意代码释放器版本
    释放器中包含的恶意代码
    功能简述
    第一版
    2016-09-28
    nvMultitask.exe(0.2.0.1)
    最初版本
    软件站下载包内置
    HSoftDoloEx.exe(3.2.0.1)
    bime.dll(1.7.0.1)
    bime64.dll(1.7.0.1)
    LcScience.sys(0.4.0.130)
    LcScience64.sys(0.4.0.130)
    WaNdFilter.sys(0.5.30.70)
    WaNdFilter64.sys(0.5.30.70)
    npjuziplugin.dll(1.0.0.1020)
    这个版本包含保护驱动,但是没有相应的流量截取功能
    第二版
    2016-11-25
    nvMultitask.exe(3.2.0.2)
    MsVwmlbkgn.sys(0.6.60.66)
    MsVwmlbkgn64.sys(0.6.60.66)
    HSoftDoloEx.exe(3.2.0.2)
    bime.dll(1.7.0.2)
    bime64.dll(1.7.0.2)
    首次加入流量截取驱动MsVwmlbkgn[64].sys,版本0.6.60.66。HSoftDoloEx.exe连接http://update.qyllq.net/ntdl.php下载JOSN格式的控制信息,通过ioctrl号222000h发送给驱动
    第三版
    2017-01-03
    nvMultitask.exe(3.2.0.3)
    zethelpEx64.exe(3.2.0.3)
    HSoftDoloEx.exe(3.2.0.3)
    MsVwmlbkgn.sys(0.6.60.68)
    MsVwmlbkgn64.sys(0.6.60.68)
    HSoftDoloEx放弃http://update.qyllq.net/ntdl.php服务器,改用http://update.qyllq.com/getupfs2.php获取云控指令。新增的zethelpEx64.exe只有64位版,版本号3.2.0.3,负责在x64位系统下和驱动MsVwmlbkgn.sys通信。0.6.60.68版本的MsVwmlbkgn.sys增加了两组新的控制码。
    第四版
    2017-01-18
    nvMultitask.exe(3.2.0.4)
    HSoftDoloEx.exe(3.2.0.4)
    MsVwmlbkgn.sys(0.6.60.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    bime.dll(1.7.0.5)
    bime64.dll(1.7.0.5)
    更新的MsVwmlbkgn.sys版本0.6.60.70和旧版本68相比,修改了HTTP劫持和HTTP302头拼接的相关函数。1.7.0.5版本的bime.dll下载新组件svcprotect.dat,svcprotect.dat释放iexplore.exe(1.5.9.1098)和iexplorer_helper.dat(5.0.0.1)两个恶意组件

         另外,火绒安全实验室还在http://dl.123juzi.net服务器上发现其他版本的恶意代码释放器,但是在实验室环境中并没有发现这些释放器何时被使用。


    签名时间
    恶意代码释放器版本
    释放器中包含的恶意代码
    2016-10-31
    nvMultitask.exe(4.2.0.1)
    nvSoftHelpEx.exe(4.2.0.1)
    2016-11-14
    nvMultitask.exe(4.2.0.2)
    nvSoftHelpEx.exe(4.2.0.2)
    bime.dlll(1.7.0.2)
    bime64.dlll(1.7.0.2)
    2017-01-19
    nvMultitask.exe(4.2.0.4)
    HSoftDoloEx.exe(4.2.0.4)
    MsVwmlbkgn.sys(0.6.60.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    zethelpEx64.exe(3.2.0.3)
    bime.dll(1.7.0.5)
    bime64.dll(1.7.0.5)
    2017-01-19
    nvMultitask.exe(6.2.0.4)
    QyNthxlnsxy.exe(6.2.0.4)
    MsVwmlbkgn.sys(0.6.60.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    zethelpEx64.exe(3.2.0.3)
    bime.dll(1.7.0.5)
    bime64.dll(1.7.0.5)
    2017-1-19
    nvMultitask.exe(8.2.0.4)
    ASoftDevHe.exe(8.2.0.4)
    MsVwmlbkgn.sys(0.6.60.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    zethelpEx64.exe(3.2.0.3)
    bime.dlll(1.7.0.5)
    bime64.dlll(1.7.0.5)
    2017-1-19
    nvMultitask.exe(9.2.0.4)
    PjczMqnopyx.exe(9.2.0.4)
    MsVwmlbkgn.sys(0.6.60.70)
    MsVwmlbkgn64.sys(0.6.60.70)
    zethelpEx64.exe(3.2.0.3)
    bime.dlll(1.7.0.5)
    bime64.dlll(1.7.0.5)


    2.        全部样本HASH和C&C服务器指令接口
    2.1        样本HASH
    文件名
    签名日期
    SHA1
    bime.dll(1.7.0.1)
    2016-09-28
    4eedbccd08fd01008befb696221bec98a385f5c6
    bime.dll(1.7.0.2)
    2016-11-04
    b5c4ad0d7ddb85ebb837544f09a2f3bb45edaef8
    bime.dll(1.7.0.5)
    2017-01-18
    060aff4551d0577cc89fdcfa2b5d308c9314371b
    bime64.dll(1.7.0.1)
    2016-09-28
    f7cfd2d0749b9e95a4980ed1062ef99d1ab7c731
    bime64.dll(1.7.0.2)
    2016-11-04
    7d1028635e0d337acb86db6c56c0b73b5b36ec8b
    bime64.dll(1.7.0.5)
    2017-01-18
    b769c3bbc65fb3c1cd04bc6f5824e1be4464d87d
    LcScience.sys(0.4.0.130)
    2016-09-28
    c4856ae2cc30bee437ad46dce69b22227aa6323b
    LcScience64.sys(0.4.0.130)
    2016-09-28
    2dc6ca6975acd6b28ae658a21dabe8e0d6634273
    WaNdFilter.sys(5.30.70)
    2016-09-28
    7f3219d2b0edb6499e679507bac348d4200c2f0a
    WaNdFilter64.sys(5.30.70)
    2016-09-28
    f1f0dda83814fc082ff072937c3efafe2d2670c7
    nvMultitask.exe(0.2.0.1)
    2016-09-28
    2dcc278369563870712c2fa1ecd35907cc4bb8aa
    nvMultitask.exe(3.2.0.2)
    2016-11-25
    d2e712fd1d20445b4bb1b279f79e8914b9eb2de9
    nvMultitask.exe(3.2.0.3)
    2017-01-03
    ee136bbb979311c918fbd435d56cbbf096cab2d8
    nvMultitask.exe(3.2.0.4)
    2017-01-18
    c9499909d8b60934ed03f3675af2acd2cd4bcac3
    nvMultitask.exe(4.2.0.1)
    2016-10-31
    c00d956c96ec3c1ba2e946e305d9216a43d0c25d
    nvMultitask.exe(4.2.0.2)
    2016-11-04
    3ba67878986dd0e4c49b55af2456a6759c937c77
    nvMultitask.exe(4.2.0.4)
    2017-01-19
    2dc86b959799ae101b8fed077164927884d04473
    nvMultitask.exe(6.2.0.4)
    2017-01-19
    99cc8d92322f34e1a399345b9bb95a9a681d611a
    nvMultitask.exe(8.2.0.4)
    2017-01-19
    31a1db3189decd02e7359f6b0dd7822f9cbdbe54
    nvMultitask.exe(9.2.0.4)
    2017-01-19
    8996b2d74e005c2e3ae2ff509a64c219a07c430c
    HSoftDoloEx.exe(3.2.0.1)
    2016-09-28
    6a0eaf027efa32b5b0a6ab1219c6f9d592652f97
    HSoftDoloEx.exe(3.2.0.2)
    2016-11-25
    9952bfb13643894f6190075c4776095a3240c423
    HSoftDoloEx.exe(3.2.0.3)
    2017-01-03
    ca14a69ebfe8bc18d8cda40cbf762c27cc7f58d6
    HSoftDoloEx.exe(3.2.0.4)
    2017-01-18
    660a464ccbe823a19c9cfde548f934464b8c6a41
    nvSoftHelpEx.exe(4.2.0.1)
    2016-10-28
    179130056ee004500d8e508509b85f9a6b2ebfe0
    nvSoftHelpEx.exe(4.2.0.2)
    2016-11-04
    bf92d23cfa6e941181880a06c6735e8d2a84a0c2
    nvSoftHelpEx.exe(4.2.0.4)
    2017-01-19
    4b764c612ee3a0d773eff51012403b01bb183158
    QyNthxlnsxy.exe(6.2.0.4)
    2017-01-19
    840b51615c16e908ac1dd7a71ef9ff0d72042fcf
    ASoftDevHe.exe(8.2.0.4)
    2017-01-19
    f89f0d96475ba95197dbb4c1d7449793c941b19a
    PjczMqnopyx.exe(9.2.0.4)
    2017-01-19
    9584cc3b35cad7a2d0b16e89cae27ae440d71475
    zethelpEx64.exe(4.2.0.4)
    2017-01-03
    c68380c65e25e2f906a0928022f9b9d3511dd28e
    MsVwmlbkgn.sys(0.6.60.66)
    2016-11-25
    5832935e3d08b40a730b11d3263606a485802048
    MsVwmlbkgn.sys(0.6.60.68)
    2017-01-03
    8032e9ec79546d7fb875227fa984860ce432ce34
    MsVwmlbkgn.sys(0.6.60.70)
    2017-01-18
    804ddba4d498a087c3153c4d0a668d230a2a9ecc
    MsVwmlbkgn64.sys(0.6.60.66)
    2016-11-25
    98526463435f47b66212176a1d921a05cf7e2fb7
    MsVwmlbkgn64.sys(0.6.60.68)
    2017-01-03
    c38df45eef5b3a9081dfbd7cd2c7d3cac2cfea92
    MsVwmlbkgn64.sys(0.6.60.70)
    2017-01-18
    a71f16958f37a860968f8f92db391691758b48e4
    iexplorer_helper.dat  (5.0.0.1)
    2017-01-20
    5f336d5aad078c1f8e4313e8bddc4bb2960cc8db
    npjuziplugin.dll  (1.0.0.1018)
    2016-03-17
    286c0828918daa85b19f2d4ca18eda1db8a926ab
    npjuziplugin.dll  (1.0.0.1020)
    2016-08-18
    4fc5607bcfb608b7a64fb2b515f1f955fb178957
    svcprotect_32_1.0.0.9.dat
    2017-01-10
    96b93e21622da2a0e73d0bee061a810094bb5669
    svcprotect_32_1.0.0.11.dat
    2017-01-23
    853a6dfb0aa1e30f871f87d13719e82fab6987cf
    svcprotect_64_1.0.0.9.dat
    2017-01-10
    02a4468b263e341b63f3cb709fe4f5f1115db53a
    svcprotect_64_1.0.0.11.dat
    2017-01-23
    e9a62a8e198268de04a3378803f19d0b8213f497


    2.2        C&C服务器指令接口
    C&C服务器指令接口
    描述
    http://update.123juzi.net/update.php
    恶意代码更新(nvMultitask.exe)
    http://update.123juzi.net/ccl.php
    恶意代码更新(svcprotect.dat)
    http://update.123juzi.net/getupfs2.php
    用户级劫持控制指令(svcprotect.dat)
    http://update.qyllq.net/test_json.php
    用户级劫持控制指令1(iexplorer_helper.dat)
    http://api.qyllq.com/url_loc.php
    用户级劫持控制指令2(iexplorer_helper.dat)
    http://update.qyllq.com/tnpp.php
    用户级劫持控制指令3(iexplorer_helper.dat)
    http://update.qyllq.net/ntdl.php
    旧版内核级劫持控制指令
    http://update.qyllq.com/getupfs2.php







    楼主热帖
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
     
     
    技术支持
    点击这里给我发消息
    在线客服
    点击这里给我发消息
    点击这里给我发消息
    刺球网安群①:
    刺球网安社区交流群①
    在线时间:
    8:30-21:00
     

    刺球网安 渝公网安备 50011402500080号 ( 渝ICP备15001097号-1 )申请友链|小黑屋| 刺球网络安全社区

    GMT, 2019-11-11 22:55 , Processed in 0.400038 second(s), 49 queries , Gzip On.

    Powered by 刺球网安

    © 2014-2025

    快速回复 返回顶部 返回列表