淺談基于JavaScript的DDOS攻擊
CloudFlare通過對上百萬個網(wǎng)站進(jìn)行防護(hù),總結(jié)出最古老、最普遍的攻擊非DDoS攻擊莫屬。在傳統(tǒng)的DDoS攻擊中,攻擊者會控制大量的傀儡機(jī),然后向目標(biāo)服務(wù)器發(fā)送大量請求,阻止合法用戶訪問網(wǎng)站。
然而,最近幾年DDoS攻擊技術(shù)不斷推陳出新:攻擊者用一種新型且很有趣的方式欺騙用戶參與到攻擊活動中。去年CloudFlare就見證了一次使用NTP映射的攻擊,可能是DDoS攻擊史上最大的一次攻擊(大于400Gbps)。
今年的DDoS攻擊又出現(xiàn)了一個新的攻擊趨勢:使用惡意的JavaScript欺騙用戶參與DDoS攻擊。
NTP或者DNS映射攻擊造成的后果受到傀儡服務(wù)器數(shù)量的限制,同時攻擊流量也受傀儡服務(wù)器容量的限制。隨著時間的推移,服務(wù)器會不斷的更新補(bǔ)丁,能被攻擊者利用的服務(wù)器數(shù)量也在不斷的減少。而基于JavaScript的DDOS攻擊有一個非比尋常的特點(diǎn):任何有瀏覽器的設(shè)備都可能參與攻擊,其潛在攻擊規(guī)模接近無限。
基于JavaScript的DDOS攻擊原理
現(xiàn)代網(wǎng)站的交互作用大多數(shù)都是采用JavaScript。JavaScript腳本可直接注入HTML中,或者通過[ script src=""] HTML從遠(yuǎn)程服務(wù)器載入。
Web2.0的出現(xiàn)使得網(wǎng)站可以從avaScript中加載不同步的內(nèi)容(content asynchronously)。Web2.0更注重交互性,用戶在發(fā)布內(nèi)容的過程中不僅實(shí)現(xiàn)了與網(wǎng)絡(luò)服務(wù)器之間的交互,也實(shí)現(xiàn)了同一網(wǎng)站不同用戶之間的交互,以及不同網(wǎng)站之間信息的交互。然而從JavaScript中制造出HTTP(S)請求會使瀏覽器使用起來更加的有趣,甚至還可以將瀏覽器變成一種攻擊武器。
例如,下面的腳本(略有修改)就會向受害網(wǎng)站發(fā)送大量的請求:
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)
該腳本會在目標(biāo)網(wǎng)頁上生成一個圖片按鈕,圖片按鈕會指向“victim-website.com” 網(wǎng)站。只要用戶訪問了含有該腳本的網(wǎng)頁,那么他就會成為 “victim-website.com”DDoS攻擊中的一員。瀏覽器發(fā)出的每一個請求都是有效請求,于是該攻擊又變成了Layer 7 攻擊。
百科:應(yīng)用層攻擊
攻擊者發(fā)送大量的數(shù)據(jù)包或利用服務(wù)器應(yīng)用的漏洞等,飽和服務(wù)器的資源,造成DDOS攻擊,該類漏洞往往不需要大量的肉雞。應(yīng)用層DDOS攻擊的列子包括Slowloris、Apache、Windwos、OpenBSD等的漏洞。如ModSecurity 空指針間接引用遠(yuǎn)程拒絕服務(wù)漏洞(CVE-2013-2765),攻擊者可以利用該漏洞使Apache Web服務(wù)器崩潰。
如果攻擊者在一個網(wǎng)站中嵌入了惡意JavaScript腳本,那么該網(wǎng)站的每一個訪客都將成為DDoS攻擊中的一員。網(wǎng)站流量越高就意味著DDoS越嚴(yán)重。
入侵共享JavaScript的第三方服務(wù)器
許多網(wǎng)站使用的都是普通的JavaScript庫,為了節(jié)約帶寬、提升性能,通常還會將JavaScript腳本共享在第三方服務(wù)器上。也就是說如果網(wǎng)站上包含有指向第三方服務(wù)器的腳本標(biāo)簽,就意味著所有訪問該網(wǎng)站的用戶都將自動下載JavaScript腳本,并執(zhí)行。不幸的是,如果攻擊者入侵了該第三方服務(wù)器并在JavaScript腳本中注入了DDoS攻擊代碼,那結(jié)果可想而知了,所有的訪客也將變成DDoS攻擊中的一員。
2014年9月份的時候,jQuery就發(fā)生過這種形式的入侵。#p#
子資源完整性簡介
通過替換第三方服務(wù)器上的JavaScript展開攻擊,這是其實(shí)也是一種比較老的攻擊方式。目前HTTP還沒有相關(guān)的機(jī)制來阻止該腳本的運(yùn)行,但W3C已經(jīng)提出了名叫子資源完整性(SRI)的新功能,使用加密哈希值驗(yàn)證腳本,如果哈希值不匹配瀏覽器可以阻止其運(yùn)行。
例如,如下腳本標(biāo)簽:
- <script src="https://code.jquery.com/jquery-1.10.2.min.js">
瀏覽器會自動下載該.js文件,并且會不分青紅皂白的運(yùn)行它。即使該文件中被攻擊者注入了惡意腳本,瀏覽器也不會識別。然而如果網(wǎng)站發(fā)現(xiàn)了哈希值驗(yàn)證腳本不匹配,子資源完整性(SRI)會告訴瀏覽器不要運(yùn)行該腳本。
- <script src="https://code.jquery.com/jquery-1.10.2.min.js"
- integrity="sha256-C6CB9UYIS9UJeqinPHWTHVqh/E1uhG5Twh+Y5qFQmYg="
- crossorigin="anonymous">
建議網(wǎng)站管理員將添加這一標(biāo)簽添加到服務(wù)器上,用以保護(hù)其用戶不被利用。
目前支持子資源完整性的瀏覽器只有Chrome和Firefox。
中間人攻擊
位于瀏覽器和服務(wù)器間的中間人可以任意修改數(shù)據(jù),包括更改HTML內(nèi)容或者JavaScript腳本。而如果中間人走偏了,做了一些惡意的事情,如向頁面中添加惡意JavaScript并執(zhí)行,那后果一樣很嚴(yán)重 (也就是所謂的中間人攻擊)。
修改傳輸過程中的網(wǎng)站是ISPs和WiFi供應(yīng)商獨(dú)有的技術(shù),但如果攻擊者獲得了這一權(quán)限,他們會將傳輸過程中的腳本替換成惡意JavaScript腳本。更甚的是,如果JavaScript腳本中包含了DDoS腳本,那DDoS攻擊成員將會進(jìn)一步的擴(kuò)大。
情況還可以更糟糕一點(diǎn),如果JavaScript文件的傳輸路徑正好經(jīng)過攻擊者的網(wǎng)絡(luò),那么參與DDoS攻擊的瀏覽器和用戶的數(shù)量將會大的驚人。
總結(jié):防御
基于JavaScript的DDOS攻擊越來越頻發(fā),防御這一攻擊的唯一方式是全面啟用HTTPS。