在當(dāng)今全球網(wǎng)絡(luò)中,CDN服務(wù)扮演著很重要的角色,它的緩存系統(tǒng)可以極大緩解原網(wǎng)站的壓力,并給訪問(wèn)者提供更好的網(wǎng)絡(luò)體驗(yàn)。
但近期,有安全研究人員發(fā)現(xiàn)了一種針對(duì)CDN緩存功能的DoS攻擊——CPDoS,它有多種變體,不過(guò)基本都是通過(guò)惡意的HTTP請(qǐng)求頭來(lái)實(shí)現(xiàn)。在攻擊成功后,用戶就無(wú)法正常訪問(wèn)那些使用了CDN的網(wǎng)站。
通過(guò)緩存服務(wù)器進(jìn)行DoS
CPDoS瞄準(zhǔn)了CDN中的緩存系統(tǒng),它會(huì)向目標(biāo)網(wǎng)站發(fā)送一個(gè)包含惡意請(qǐng)求頭的HTTP請(qǐng)求,CDN接受到請(qǐng)求后便會(huì)直接轉(zhuǎn)發(fā)給原網(wǎng)站,并把原網(wǎng)站的響應(yīng)緩存起來(lái)。由于惡意請(qǐng)求頭的存在,原網(wǎng)站的響應(yīng)往往是異常的,但這并不影響CDN對(duì)這種異常響應(yīng)進(jìn)行緩存,這就導(dǎo)致其他用戶在訪問(wèn)同一個(gè)頁(yè)面時(shí)會(huì)直接看到緩存中的異常響應(yīng)。這就是CPDoS攻擊。
攻擊的變種
來(lái)自科隆應(yīng)用科學(xué)大學(xué)和德國(guó)漢堡大學(xué)的Hoai Viet Nguyen、Luigi Lo Iacono和Hannes Federrath展示了CPDoS攻擊的三種變體:
- HTTP Header Oversize (HHO)
- HTTP me ta Character (HMC)
- HTTP Method Override (HMO)
在HHO類型的CPDoS攻擊中,攻擊者主要利用服務(wù)器對(duì)HTTP請(qǐng)求頭大小的限制來(lái)發(fā)起攻擊。
如果CDN所轉(zhuǎn)發(fā)的HTTP請(qǐng)求頭大于原服務(wù)器定義的尺寸,則攻擊者可以通過(guò)發(fā)送包含多個(gè)巨大請(qǐng)求頭的請(qǐng)求來(lái)發(fā)動(dòng)攻擊。
例如在下圖,CDN轉(zhuǎn)發(fā)一個(gè)具有多個(gè)請(qǐng)求頭的HTTP請(qǐng)求,原服務(wù)器被成功阻塞,返回一個(gè)400 Bad request
錯(cuò)誤頁(yè)面,被緩存系統(tǒng)所存儲(chǔ)。
為了更好地說(shuō)明這個(gè)場(chǎng)景,研究人員還制作了一個(gè)視頻,針對(duì)一個(gè)托管在Amazon CloudFront上的應(yīng)用發(fā)起測(cè)試。
- https://vimeo.com/368153261
第二種HMC類型的CPDoS攻擊,是利用某些特殊字符來(lái)使服務(wù)器發(fā)生異常,例如\n
、\r
、\a
等。當(dāng)把這些字符塞入請(qǐng)求頭時(shí),服務(wù)器也有可能發(fā)生異常,返回錯(cuò)誤頁(yè)面。接著被CDN緩存,影響正常用戶的訪問(wèn)。
而第三種HMO類型的CPDoS攻擊,是通過(guò)注入和原始請(qǐng)求不同的請(qǐng)求類型來(lái)轉(zhuǎn)換請(qǐng)求類型,使服務(wù)器無(wú)法處理請(qǐng)求,從而返回異常結(jié)果。這主要基于原服務(wù)器的安全策略,有些服務(wù)器并不支持請(qǐng)求類型轉(zhuǎn)換。
在上圖中,GET請(qǐng)求被轉(zhuǎn)換為POST請(qǐng)求,而原服務(wù)器又無(wú)法處理該頁(yè)面的POST請(qǐng)求,最終返回異常頁(yè)面。
在錯(cuò)誤頁(yè)面被緩存后,正常用戶對(duì)于目標(biāo)頁(yè)面的GET請(qǐng)求都出現(xiàn)異常。
研究人員也使用了Postman來(lái)演示了這種功能。
- https://vimeo.com/368153252
影響
CDN服務(wù)器往往會(huì)影響一大片區(qū)域(甚至跨國(guó)),而CPDoS攻擊所生成的錯(cuò)誤頁(yè)面也往往會(huì)影響多個(gè)緩存服務(wù)器。
當(dāng)然,研究人員發(fā)現(xiàn)并不是所有的邊緣服務(wù)器都受到這種攻擊的影響,一些用戶仍然可收到來(lái)自原網(wǎng)站的正常頁(yè)面。
在整個(gè)測(cè)試中,研究人員使用了TurboBytes Pulse(全局DNS、HTTP和traceroute測(cè)試工具)和一個(gè)網(wǎng)站速度測(cè)試服務(wù)來(lái)統(tǒng)計(jì)結(jié)果。
最后發(fā)現(xiàn)來(lái)自德國(guó)(法蘭克福)的針對(duì)科隆目標(biāo)的CPDoS攻擊影響了歐洲和亞洲部分地區(qū)的CDN服務(wù)器。
解決方法
要防御這種攻擊,對(duì)于CDN來(lái)說(shuō),就最簡(jiǎn)單的方法就是只緩存404
,405
,410
,501
之類的常見的,符合標(biāo)準(zhǔn)的錯(cuò)誤頁(yè)面。
當(dāng)然,這也需要網(wǎng)站開發(fā)人員的配合,切勿把所有錯(cuò)誤都?xì)w類為同一個(gè)錯(cuò)誤代碼和頁(yè)面。
此外還可以在WAF之類的安全設(shè)備上加強(qiáng)防御,阻止惡意內(nèi)容的通過(guò)。
CDN現(xiàn)狀
從這三位研究人員進(jìn)行的測(cè)試來(lái)看,亞馬遜的CloudFront CDN似乎是最容易受到CPDoS攻擊的。
在研究人員測(cè)試的25種相關(guān)服務(wù)和產(chǎn)品中,只有3種不受CPDoS攻擊影響:Apache TS、谷歌云存儲(chǔ)和Squid。
微軟在6月份更新了IIS服務(wù),并發(fā)布了關(guān)于該漏洞的詳細(xì)信息(CVE-2019-0941)。Play framework也在版本1.5.3和1.4.6中針對(duì)HMO攻擊進(jìn)行了修復(fù)。
但并不是所有供應(yīng)商的反應(yīng)都很迅速,F(xiàn)lask的開發(fā)者就一直無(wú)回復(fù)。
亞馬遜的安全團(tuán)隊(duì)也承認(rèn)了CloudFront確實(shí)易受該攻擊影響,并在默認(rèn)情況下禁止緩存400 Bad Request
錯(cuò)誤頁(yè)面。
Hoai Viet Nguyen、Luigi Lo Iacono和Hannes Federrath也在一篇題為Your Cache Has Fallen: Cache-Poisoned Denial-of-Service Attack的文章中詳細(xì)介紹了該攻擊。
他們也將在11月14日倫敦舉行的第26屆ACM計(jì)算機(jī)與通信安全(CCS)會(huì)議上發(fā)布報(bào)告。