浅谈JavaScript DDOS 攻击原理与防御

前言
DDoS(又名"分布式拒绝服务")攻击历史由来已久,但却被黑客广泛应用。我们可以这样定义典型的DDoS攻击:攻击者指使大量主机向服务器发送数据,直到超出处理能力进而无暇处理正常用户的合法请求,最终导致用户无法正常访问网站。
近年来,DDoS攻击手段已日趋多元化——攻击者通过各种奇技淫巧诱使不知情主机参加攻击。比如,[注1]历史上数据量最大(超过400Gbps)的DDoS攻击就是通过[注2]NTP反射完成的。时至今日,我们已经发现一个令人不安的趋势:攻击者通过恶意的JavaScript诱使不知情的网站用户参加DDoS攻击。NTP反射或[注3]DNS反射可造成的最大损失是由未经防护的服务器数量决定的。一般损失会随着给服务器打补丁而降低,最大的攻击力度也受限于这些服务器的出站能力。不过,JavaScript DDoS却能利用任何安装了网页浏览器的主机都参与攻击,换句话说,其潜在的攻击能力是无限大的。
这篇文章中,我们将从"攻"和"防"两方面与您一同梳理JavaScript DDoS:
- 攻击:攻击者如何通过恶意地址、服务器劫持、中间人等手段来实施DDoS攻击。
- 防御:网站如何使用HTTPS和SRI(Subresource Integrity)等手段来避免攻击。
JavaScript DDOS 攻击原理
绝大多数网站交互是由JavaScript实现的。网站的交互一般通过以下2种方法实现:
- 直接在HTML中添加JavaScript;
- 引用外部资源(<script src="##">)从而使浏览器获取src指向的代码并运行。
"异步加载内容"技术是使Web2.0时代爆发的关键因素之一。由于新内容的加载可以完全脱离传统的打开链接或加载页面的方式,网页交互形式也显得愈加丰富。但事有两面,JavaScript的HTTP(S)请求使网站交互更加有趣的同时,也使浏览器更容易变成攻击者的武器。
举个例子,下面的脚本可以不断向受害网站发送请求:
1
2
3
4
5
6
7
8
|
function imgflood() { var TARGET = 'victim-website.com' var URI = '/index.php?' var pic = new Image() var rand = Math.floor(Math.random() * 1000) } setInterval(imgflood, 10) |
这段恶意脚本会在网页上以每秒100次的频率不断的创建图片标签,这些图片地址都是指向到受害者的网站。因此,访问该页面的人都会在不知情的情况下参与这次攻击。由于访问者浏览器发送的消息是合法的HTTP请求,[注4]我们将其称为"应用层攻击"。不同于传统的NTP/DNS反射攻击(仅仅是堵塞数据传输通道),应用层攻击将使网站服务器在持续无意义的数据处理中耗尽资源并最终无力响应正常请求。
如前所述,如果攻击者建立一个包含恶意JS代码网页的站点,那么该站点的访问者将成为DDoS攻击的参与者。由此推导:该网页的访问量越大,DDoS的流量也越大。然而,由于一般情况下该网页的访问量有限,因此DDoS攻击破坏力也有限。那么,要想实施一次真正"给力"的DDoS攻击,还需要动动脑筋。
利用第三方JavaScript文件
众所周知,很多网站都会使用通用的JavaScript库。也有相当多网站为了节省带宽或提高体验,直接引用网络中的第三方的JavaScript库。据统计,[注5]2014年世界上约30%的网站使用jQuery(一种非常流行的JavaScript库)。其他被广泛使用的JS包括但不限于Facebook SDK和Google Analytics。
如果一个网站包含指向第三方JS文件的脚本标签,那么所有访问者将下载并执行这段脚本。可以想象,如果攻击者能够攻破含有主流JS文件的服务器,并添加一段DDoS代码,所有网站访问者将成为DDoS的攻击者之一。
2014年9月,[注6]RiskIQ曾报道"引用外部jQuery的网站可被黑客利用",而攻击者可以用恶意代码替代正常代码。由此可见,攻击者给数以万计的网站插入恶意JS代码将不再只是一个理论说法。
什么是SRI?
第三方资源被利用已是司空见惯的问题了。如果脚本已经被黑客篡改,在HTTP中没有任何机制可使网站屏蔽其运行。为了解决这个问题,W3C提出了一个新概念——SRI(Subresource Integrity)。SRI允许网站告知浏览器,仅在脚本完全符合预期时才运行它。
引用外部链接的代码如下:
1
|
|
在引入SRI概念之前,无论文件内容是什么,浏览器都将下载并运行该.js文件。如果有人将文件篡改为恶意代码,浏览器依然会毫不犹豫的运行脚本。引入SRI的概念后,你可以这样告诉浏览器:仅运行符合你预期的脚本。哈希加密可以方便地唯一辨识一段数据,因此我们可以通过哈希加密方法实现SRI——文件以其独一无二的哈希值作为指纹。你可以将脚本的可靠版本的哈希值记录在"integrity"属性中。下载该脚本后,浏览器将立即计算该脚本的哈希值并与脚本"integrity"属性标签中的哈希值作比较。如果二者不吻合,那么可以确定脚本已被篡改过,则浏览器就不会运行它。
1
2
|
<script src= "https://code.jquery.com/jquery-1.10.2.min.js" integrity= "sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg=" crossorigin= "anonymous" > |
如上引入SRI标签可以保护网站访问者不受被篡改的第三方JS主机影响。计算哈希值是一个简单、一次性的工作。[注7]而且甚至已有专门的网站可以为您计算哈希值。更新:为确保浏览器正确执行同源策略及防止跨站脚本攻击(XSS),脚本的crossorigin属性和CORS(Cross-Origin Resource Sharing)头文件一般都会做SRI。目前SRI还未被浏览器广泛支持,但Chrome和Firefox都已将其列入开发计划中。由于服务器攻击很容易被发现并修复,因此攻击者已经转而使用其他方法插入恶意JS代码。最新的方法就是:[注8]中间人攻击。
中间人攻击
从web服务器出发,一个网站要遍历网络,经过若干跳才能到达你的浏览器。这个过程中任何一跳的主机都有可能被各种方法修改数据,比如篡改HTML或JavaScript的内容。如果在网络通信过程中,主机执行恶意行为,比如在网页中插入恶意JS代码,我们就将其称为"中间人攻击"。在信息传输过程中,修改网站内容是ISP(网络服务提供商)和WiFi服务商惯用的盈利手段。
例如:一些酒店网络、移动网络就会插入广告或其他跟踪cookie到用户浏览的网站中。合法的业务一般不会给网站插入恶意攻击代码,但是这并不代表因特网上的其他人没有能力这样做。如果攻击者能获得类似ISP的网络位置特权,比如网络互联和交换节点,攻击者就可以给经过的网站插入JS。而如果这段JS中含有DDoS脚本,所有网站访问者将成为DDoS参与者。这会发生在任何穿过"流氓网络"的网站身上。
更糟糕的是,如果访问第三方JavaScript文件的路径也经过了攻击者网络,那么参与攻击的浏览器数量将急剧增加。
加密是能够完全防止类似代码注入的技术之一。使用HTTPS,浏览器与web服务器间之间的所有通信将被加密并授权,防止中间人修改代码。如果你的网站完全使用HTTPS,不仅能够防止ISP和WiFi服务商插入广告或追踪cookie,而且关键能够防止你的网站被JavaScript攻击所利用。
JavaScript DDOS攻击已成为日趋严重的互联网安全问题之一。黑客随时可能发起JavaScript DDoS攻击,欢迎各位厂商/白帽子多多发文交流:)
英文原文出自:https://blog.cloudflare.com/an-introduction-to-javascript-based-ddos/
参考资料
[注1]https://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack/
[注2]https://blog.cloudflare.com/understanding-and-mitigating-ntp-based-ddos-attacks/
[注3]https://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack/
[注4]https://blog.cloudflare.com/saturday-night-fever-layer-7-attacks-against/
[注5]http://blog.jquery.com/2014/01/13/the-state-of-jquery-2014/
[注6]http://www.riskiq.com/blog/business#/post/jquerycom-malware-attack-puts-privileged-enterprise-it-accounts-at-risk
[注7]https://srihash.org/
[注8]https://blog.cloudflare.com/introducing-strict-ssl-protecting-against-a-man-in-the-middle-attack-on-origin-traffic/
From:sobug https://sobug.com/article/detail/22
浅谈JavaScript DDOS 攻击原理与防御的更多相关文章
- 浅谈JS DDoS攻击原理与防御
分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意 ...
- 常见DDOS攻击原理和防御
常见的DDOS攻击主要分为流量型攻击和cc攻击: 流量型攻击主要通过发送大量的非法报文侵占正常业务带宽 包括SYN Flood/ SYN-ACK Flood /ACK Flood/ FIN/RST F ...
- 浅谈JavaScript的闭包原理
在一般的教程里,都谈到子作用域可以访问到父级作用域,进而访问到父级作用域中的变量,具体是如何实现的,就不得不提及到函数堆栈和执行上下文. 举个例子,一个简单的闭包: 首先,我们可以知道,examp ...
- 浅谈JavaScript预编译原理
这两天又把js的基础重新复习了一下,很多不懂得还是得回归基础,大家都知道js是解释性语言,就是编译一行执行一行,但是在执行的之前,系统会做一些工作: 1,语法分析: 2,预编译: 3,解释执行. 语法 ...
- JavaScript实现DDoS攻击原理,以及保护措施。
DDos介绍 最普遍的攻击是对网站进行分布式拒绝服务(DDoS)攻击.在一个典型的DDoS攻击中,攻击者通过发送大量的数据到服务器,占用服务资源.从而达到阻止其他用户的访问. 如果黑客使用JavaSc ...
- 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用
浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...
- ref:浅谈XXE漏洞攻击与防御
ref:https://thief.one/2017/06/20/1/ 浅谈XXE漏洞攻击与防御 发表于 2017-06-20 | 分类于 web安全 | 热度 3189 ℃ 你会挽着我 ...
- 敌情篇 ——DDoS攻击原理
敌情篇 ——DDoS攻击原理 DDoS攻击基础 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是 ...
- 浅谈局域网ARP攻击的危害及防范方法(图)
浅谈局域网ARP攻击的危害及防范方法(图) 作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-03-03 自 去年5月份开始出现的校内局域网频繁掉线等问题,对正常的教育教 ...
随机推荐
- maven测试时中文乱码问题解决方法
pom.xml增加-Dfile.encoding=UTF-8配置,如下: <plugin> <!--升级到新版本解决控制台乱码问题--> <groupId>org. ...
- BZOJ5418 NOI2018屠龙勇士(excrt)
显然multiset求出每次用哪把剑.注意到除了p=1的情况,其他数据都保证了ai<pi,于是先特判一下p=1.比较坑的是还可能存在ai=pi,稍微考虑一下. 剩下的部分即解bix≡ai(mod ...
- sqlbulkcopy 批量更新 数据库
转载: http://blog.csdn.net/wangzh300/article/details/7382506 private static void DataTableToSQLServer( ...
- 【刷题】清橙 A1339 JZPLCM(顾昱洲)
试题来源 2012中国国家集训队命题答辩 问题描述 给定一长度为n的正整数序列a,有q次询问,每次询问一段区间内所有数的lcm(即最小公倍数).由于答案可能很大,输出答案模1000000007. 输入 ...
- Spring点滴十:Spring自动装配(Autowire)
在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...
- 【BZOJ1024】[SCOI2009]生日快乐(搜索)
[BZOJ1024][SCOI2009]生日快乐(搜索) 题面 BZOJ 洛谷 题解 看到这个数据范围就感觉是爆搜.我们爆搜左右分成多少块,这样子左右的面积已知,再枚举一下横着切还是竖着切,这样子就可 ...
- 【枚举Day1】20170529-2枚举算法专题练习 题目
20170529-2枚举算法专题练习 题解: http://www.cnblogs.com/ljc20020730/p/6918360.html 青岛二中日期 序号 题目名称 输入文件名 输出文件名 ...
- Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)
# 安装rinetd wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz& ...
- [SCOI2014]方伯伯的商场之旅
Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...
- GROUP BY和 HAVING 及 统计函数 执行顺序等
[我理解:where是对最外层结果进行条件筛选,而having是对分组时分组中的数据进行 组内条件筛选,注意:只能进行筛选,不能进行统计或计算,所有统计或计算都要放在最外层的select 后面,无论是 ...