為了減少WEB響應(yīng)時(shí)延并減小WEB服務(wù)器負(fù)擔(dān),現(xiàn)在WEB緩存技術(shù)已經(jīng)用的非常普遍了,除了專(zhuān)門(mén)的CDN,負(fù)載均衡以及反向代理現(xiàn)在也會(huì)緩存一部分的網(wǎng)頁(yè)內(nèi)容。這里我要介紹一種WEB緩存欺騙攻擊技術(shù),這種攻擊技術(shù)針對(duì)Paypal有成功的攻擊案例。
背景原理
先簡(jiǎn)單介紹一下WEB緩存技術(shù),它主要是緩存一些靜態(tài)的,公開(kāi)的文件,如CSS文件,JS文件,圖片等。緩存分兩類(lèi),一類(lèi)是本地緩存,通過(guò)在瀏覽器上緩存實(shí)現(xiàn),緩存之后通過(guò)F5刷新是不會(huì)重新獲取已緩存文件的,通過(guò)Ctrl +F5強(qiáng)制刷新才會(huì)重新獲取。另一類(lèi)是在服務(wù)端實(shí)現(xiàn),也就是在CDN、負(fù)載均衡、反向代理(后面統(tǒng)稱(chēng)緩存服務(wù)器)上實(shí)現(xiàn),這次介紹的攻擊技術(shù)就是針對(duì)這一種緩存。服務(wù)端的緩存原理是:客戶(hù)端請(qǐng)求一個(gè)靜態(tài)文件,如果緩存服務(wù)器沒(méi)有緩存過(guò)這個(gè)文件,就會(huì)像WEB服務(wù)器請(qǐng)求,獲取到靜態(tài)文件返回給客戶(hù)端,同時(shí)將這個(gè)文件緩存下來(lái),下次再遇到同樣的請(qǐng)求時(shí)就直接返回,直到這個(gè)緩存文件過(guò)期。
接下來(lái)講一下WEB服務(wù)器解析的問(wèn)題。假設(shè)客戶(hù)端請(qǐng)求http://www.example.com/home.php/nonexistent.css 這個(gè)URL,其中home.php是真實(shí)存在的,而nonexistent.css不存在,那WEB服務(wù)器會(huì)怎么處理呢?針對(duì)這種情況的處理跟WEB服務(wù)器用的技術(shù)以及配置相關(guān),有的會(huì)返回404 not found,有的會(huì)返回200 OK,然后把home.php返回回來(lái)。如果服務(wù)器返回200 OK就要注意了,這時(shí)緩存服務(wù)器拿到的請(qǐng)求是http://www.example.com/home.php/nonexistent.css,是一個(gè)靜態(tài)頁(yè)面,而WEB服務(wù)器返回給緩存服務(wù)器的結(jié)果是http://www.example.com/home.php,不是一個(gè)靜態(tài)頁(yè)面,但是緩存服務(wù)器并不知道。
攻擊方法
根據(jù)上面的背景原理介紹,攻擊方法也很容易總結(jié)出來(lái)了:
1.攻擊者引誘已登錄的用戶(hù)(受害者)訪問(wèn)https://www.bank.com/account.do/logo.png
2.受害者請(qǐng)求https://www.bank.com/account.do/logo.png
3.緩存服務(wù)器接收到請(qǐng)求,沒(méi)查到這個(gè)頁(yè)面,于是向WEB服務(wù)器請(qǐng)求
4.WEB服務(wù)器返回https://www.bank.com/account.do,狀態(tài)碼是200 OK
5.緩存服務(wù)器收到結(jié)果,由于狀態(tài)碼是200 OK,會(huì)認(rèn)為URL保持不變,然后由于這個(gè)URL以.png結(jié)尾,認(rèn)為它是一個(gè)靜態(tài)文件,于是會(huì)緩存這個(gè)文件
6.受害者得到正常結(jié)果
7.攻擊者訪問(wèn)https://www.bank.com/account.do/logo.png,請(qǐng)求到達(dá)緩存服務(wù)器,緩存服務(wù)器直接返回受害者的緩存賬戶(hù)頁(yè)面給攻擊者,攻擊完成。
這里有一個(gè)問(wèn)題,就是HTTP header里面有一個(gè)Cache-Control,用于指示是否要緩存該頁(yè)面,但是很多情況下,緩存服務(wù)器是不看這個(gè)的,直接根據(jù)文件后綴判斷。
這種攻擊的結(jié)果就是將受害者的個(gè)人頁(yè)面變?yōu)榱艘粋(gè)緩存在服務(wù)器上,可以公開(kāi)訪問(wèn)的頁(yè)面。這個(gè)頁(yè)面可能包含受害者敏感信息,如銀行卡號(hào),也可能有這個(gè)受害者的會(huì)話標(biāo)識(shí)、密保問(wèn)題答案、CSRF token等,有可能讓攻擊者獲取到受害者賬號(hào)的控制權(quán)。
攻擊成功的條件
我們?cè)賮?lái)梳理一下這個(gè)攻擊的條件:
1.WEB服務(wù)器會(huì)將類(lèi)似http://www.example.com/home.php/nonexistent.css這種頁(yè)面解析為home.php
2.緩存服務(wù)器會(huì)無(wú)視http header,只根據(jù)文件后綴來(lái)判斷是否緩存該文件
3.受害者訪問(wèn)該頁(yè)面時(shí)必須已登錄
那么,那些組件滿足這些條件呢?(以下具體的配置請(qǐng)參見(jiàn)文末所附鏈接)
符合條件1的WEB服務(wù)器有:
l 原生的PHP
l 通常配置下的基于python的WEB框架Django
l 某些配置下的ASP.NET
符合條件2的緩存服務(wù)器有:
l 某些配置下的Nginx
l 某些配置下的Cloudflare
l 某些配置下的IIS ARR
從這個(gè)總結(jié)可以看出,多數(shù)情況下這個(gè)是可以通過(guò)配置避免的,所以有些人認(rèn)為這不算是個(gè)漏洞,所以也并沒(méi)有什么補(bǔ)丁來(lái)解決這個(gè)問(wèn)題,估計(jì)這個(gè)問(wèn)題在很多地方都存在。
防御建議
根據(jù)觸發(fā)條件我們給出的修改建議如下:
1.配置緩存服務(wù)器根據(jù)http header來(lái)判斷是否緩存頁(yè)面;
2.將所有靜態(tài)文件放在指定的目錄,只緩存這個(gè)目錄里的文件;
3.配置WEB服務(wù)器在解析類(lèi)似http://www.example.com/home.php/nonexistent.css 這種頁(yè)面時(shí)返回404或者302。
原文信息
本文根據(jù)Omer Gil的文章翻譯而成。他創(chuàng)新地顛覆了WEB緩存欺騙利用方式,通過(guò)控制 Web 緩存可以保存其它用戶(hù)的敏感數(shù)據(jù),并成功在 Paypal 中實(shí)現(xiàn)了攻擊復(fù)現(xiàn)。從 Omer Gil 的演講和報(bào)告中可以看到,Web 緩存欺騙是一項(xiàng)厲害且有想像力的技術(shù),這種技術(shù)可以在多種主要的緩存機(jī)制中利用實(shí)現(xiàn),為未來(lái)的深入研究提供一個(gè)很好的基礎(chǔ)平臺(tái)。
隨著應(yīng)用程序安全性的不斷成熟,尋找真正的新技術(shù)變得越來(lái)越難,所以在不斷的演化過(guò)程中,能看到這種可證實(shí)的安全隱患,非常令人耳目一新。因此,這種攻擊技術(shù)被評(píng)為2017十大WEB黑客技術(shù)榜單的第二名。
|