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