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