1. 程式人生 > >新型Web攻擊技術——Web快取欺騙

新型Web攻擊技術——Web快取欺騙

Web快取欺騙是一種新的Web攻擊向量,這種攻擊技術的出現使得多種Web快取技術和框架面臨風險。

Web快取和伺服器反應的一點介紹

很多網站通常都傾向於使用web快取功能(例如通過CDN,負載均衡器或簡單的反向代理)。使用Web快取功能的目的很簡單:儲存那些經常檢索的檔案,以減少Web伺服器響應的延遲。

讓我們來看一個網路快取的例子。網站http://www.example.com通過配置了反向代理作為Web快取。儲存在伺服器上並需要返回使用者個人內容(如http://www.example.com/home.php)的動態網頁必須要按不同的使用者動態的建立,因為每個使用者的資料是不同的。這種資料,或至少其個性化的這一部分,是不會被快取的。

更合理及常見的快取內容都是靜態或公共檔案:樣式表(css),指令碼(js),文字檔案(txt),影象(png,bmp,gif) 等,在大多數人的正常意識中,這些檔案通常不會包含使用者的任何敏感資訊。此外,在那些關於Web快取配置的各種最佳實踐的文章中,都會這樣說:“建議快取所有公開的靜態檔案並忽略其HTTP快取頭資訊”。

2.網路快取欺騙攻擊依賴於瀏覽器和網路伺服器的反應,與RPO攻擊很相似,下面兩篇文章對RPO攻擊做了一些解釋。

http://www.thespanner.co.uk/2014/03/21/rpo/ http://blog.innerht.ml/rpo-gadgets/

那麼訪問了像http://www.example.com/home.php/non-existent.css這樣的網址時會發生什麼?(譯者注:也就是在

http://www.example.com/home.php後面加上快取的檔案型別,檔名可以是不存在的)

瀏覽器會發出對該網址的GET請求。有趣的是伺服器的反應 —— 伺服器會如何解釋請求的URL?根據伺服器的Web快取技術和配置(對於不同的伺服器,URL的結構可能略有不同),伺服器返回了http://www.example.com/home.php的內容。是的,瀏覽器位址列的網址仍然為http://www.example.com/home.php/non-existent.css。HTTP標頭資訊與直接訪問http://www.example.com/home.php的標頭資訊相同:快取標頭資訊和內容型別相同(在這種情況下為text / html)。

如果我們訪問http://www.example.com/home.php/non-existent.css,會發生什麼情況,注意,在代理伺服器上已經設定了對靜態檔案進行網路快取。伺服器會忽略此類檔案的快取頭?讓我們來分析一下這個過程:

1. 瀏覽器請求http://www.example.com/home.php/non-existent.css。 2. 伺服器返回http://www.example.com/home.php的內容,很可能使用了標識不快取此頁面的HTTP快取標頭。 3. 通過代理伺服器響應該請求。 4. 代理伺服器發現該檔案的副檔名是css。 5. 在快取目錄下,代理伺服器會建立一個名為home.php的目錄,並快取冒名頂替的“CSS”檔案(不存在的css檔案)。

Oh!

1.jpg

漏洞利用

如果攻擊者誘騙已登入的使用者訪問http://www.example.com/home.php/logo.png,則該網頁(包含使用者個人資訊的網頁)將被快取到快取伺服器上,因此這些被快取的個人資訊就可以公開訪問。 如果響應的HTTP主體資訊中包含(由於某種原因)了會話識別符號,安全密保問題或CSRF令牌,則可能變得更糟。 在這種時候,所有的攻擊者都會自己訪問快取頁面然後公開這些被快取的使用者隱私資料。

11.png

一件有趣兒的小事

通常,不需要進行身份驗證即可訪問網站快取的公共靜態檔案。因此,快取的檔案是公共的且可訪問的 ——不需要身份驗證。

條件

因此,基本上,需要兩個條件來確認網站是否存在此漏洞:

1. Web快取功能是通過判斷Web應用程式URL檔案的副檔名來決定是否進行快取記憶體,而且忽略了HTTP中的任何快取頭標識資訊。 2. 訪問http://www.example.com/home.php/non-existent.css等網頁時,網路伺服器將返回“home.php”的網址的內容。

緩解措施

1.  將快取檔案的快取機制配置為僅當快取檔案的HTTP快取標頭允許時才進行快取。這是解決這個問題的根本的解決辦法。

2.  如果快取元件提供Content-Type選項的話,請將快取元件配置為按檔案的內容型別進行快取。

3.  配置Web伺服器,以便對於像http://www.example.com/home.php/non-existent.css之類的頁面,Web伺服器不會返回帶有 “home.php” 的URL的內容。相反的,伺服器應該用404或302來響應這些URL的請求。

PayPal 網站中的Web快取欺騙——漏洞披露

PayPal很容易受到網路快取欺騙攻擊。目前該漏洞現已修復,並已公開披露。

利用此漏洞可能洩漏的使用者資訊:

使用者的名字和姓氏 賬戶餘額 最後四個信用卡數字 交易資料 護照號碼 電子郵件地址 家庭地址 電話號碼 漏洞頁面中包含的任何其他資訊

一些漏洞頁面的示例:

https://www.paypal.com/myaccount/home/attack.css https://www.paypal.com/myaccount/settings/notifications/attack.css https://history.paypal.com/cgi-bin/webscr/attack.css?cmd=_history-details

下面是可用於在PayPal網站上快取頁面的各種靜態副檔名(超過40個):

aif,aiff,au,avi,bin,bmp,cab,carb,cct,cdf,class,css,doc,dcr,dtd,gcf,gff,gif,grv,hdml,hqx,ico,ini,jpeg,jpg, js,mov,mp3,nc,pct,ppc,pws,swa,swf,txt,vbs,w32,wav,wbmp,wml,wmlc,wmls,wmlsc,xsd,zip

快取過期

我測試了快取檔案過期的時間。看起來,在被訪問一次(第一次)後,檔案被快取大約5個小時。如果在該期間再次訪問,則會延長過期時間。很明顯,這麼長的時間段足以讓攻擊者在快取檔案過期之前“捕獲”到快取檔案,並且通過不斷地監視此URL,獲取他可以在建立快取檔案時要公開的使用者隱私資訊。

Demo視訊

在我報告了此漏洞後,PayPal獎勵了我3,000美刀,;)。

通過Web快取欺騙技術劫持使用者

我在其他應用程式中也發現了此漏洞,不過不幸的是,由於一些原因,我不能向公眾公開(更糟的是,還有一些不錯的Demo視訊)。在這些應用程式中,可以完全控制應用程式的使用者。這完全是有可能的,因為恢復使用者密碼的會話ID或安全密保問題的答案包含在了易受攻擊的網頁的HTML程式碼中。非常感謝Sagi Cohen的幫助。

IIS演示視訊

在下面的視訊中,網站託管在了IIS負載均衡器後面的兩個Web伺服器上,並安裝了應用程式請求路由(ARR)。

成功登入的使用者將被重定向到“welcome.php”的頁面,其中包含其個人資訊內容。負載均衡器配置為對所有的CSS檔案進行快取,並忽略這類檔案的HTTP快取頭。

已登入的使用者在訪問http://www.sampleapp.com/welcome.php/stylesheet.css時,IIS負載均衡器會將“welcome.php”頁面引用為一個目錄,並在快取目錄中建立它,然後快取“welcome.php”的內容,其中包含了使用者的隱私內容資訊,快取的檔名為'stylesheet.css'。

IIS上的Web快取欺騙攻擊Demo視訊: