1. 程式人生 > >CSRF攻擊的原理及防範

CSRF攻擊的原理及防範

 1、引言

跨站點請求偽造(Cross—Site Request Forgery).以下簡稱CSRF。是一種廣泛存在的網站漏洞。Gmail、YouTube等著名網站都有過CSRF漏洞.甚至包括“ING DIRECT”這樣的莢國第四大儲蓄銀行的金融機構網站。2009年3月著名網路安全機構SANS與MITRE結合來自全球超過30個軟體工作者及安全專家,將CSRF列為最危險的25個程式設計錯誤之一。

2、現有的Web安全缺陷

2.1 Web安全策略

與CSRF有關的主要有三個Web安全策略:同源策略、Cookie安全策略和Flash安全策略。

2.1.1同源策略

同源指的是:同協議,同域名和同埠。同源策略,簡單地說就是要求動態內容(例如,JavaScript或者VBScript)只能讀取或者修改與之同源的那些HTTP應答和Cookie.而不能讀取來自不同源的內容。瀏覽器的同源策路限制了指令碼只能訪問同源下的資源。

同源策略僅僅阻止了指令碼讀取來自其他站點的內容.但是卻沒有防止指令碼向其他站點發出請求。因為CSRF攻擊是由於某些請求被髮出,而引起在伺服器端執行了某些動作所引起的,所以同源策略無法防止CSRF攻擊。

2.1.2 Cookie安全策略

RFC2109定義了Cookie的安全策略。伺服器設定Cookie值併為Cookie設定安全屬性。Cookie的安全屬性包括了Domain、Path、Secure、Expires、MaxAge和HttpOnly等。Cookie安全策略類似於同源策略並且要比同源策略更安全一些,但是利用指令碼,可以把Cookie的安全級別降低.甚至Cookie的path屬性可以被完全繞過。如果一位攻擊者可以突破或繞過兩源策略的話,就可以通過DOM的變數document.cookie輕鬆讀取Cookie。

2.1.3 Flash安全策略

預設時,Flash的安全策略與同源策略非常類似,來自於某個域的Flash應用只可以讀取來自該域的響應。但是Flash的安全策略並不被同源策略限制.Adobe公司定義了F1ash的跨域策略,該策略通常定義在一個名為crossdomain.xml的策略檔案中。該檔案定義了哪些域可以和當前域通訊。錯誤的配置檔案可能導致兀ash突破同源策略。導致受到迸一步的攻擊。安全研究人員曾經對500個頂級網站進行了分析.發現其中有143個站點使用了crossdomain.xml策略檔案。而在這143個站點中。又有47個站點對來自第三方站點的連線完全接受,這可能導致CSRF漏洞。

2.2 Web認證方式和瀏覽器的安全缺陷

現在的Web應用程式幾乎都是使用Cookie來識別使用者身份以及儲存會話狀態。瀏覽器在最初加入Cookie功能時並沒有考慮安全因素。假設一個網站使用了Cookie,當一個使用者完成身份驗證之後.瀏覽器得到一個標識使用者身份的Cookie,只要不退出或關閉瀏覽器。以後訪問相同網站下的頁面的時候,對每一個請求瀏覽器都會“智慧”地主動附帶上該網站的Cookie來標識自己,使用者不需要重新認證就可以被網站識別。當第三方WEB頁面產生了指向當前網站域下的請求時,該請求也會帶上當前網站的Cookie。這種認證方式,稱之為隱式認證。

不同瀏覽器對於Cookie的處理不盡相同,Internet Explorer預設阻止向第三方傳送當前的Cookie(見213節),而Firefox和Chrome則預設沒有限制。

現在很多使用者上網使用多視窗或多標籤頁瀏覽器,例如傲遊、Firefox、Opera等。這些瀏覽器在方便使用者的同時也增大了風險,因為它們只有一個程序執行,Cookie在各個窗121或標籤頁之問是共享的。

除了Cookie認證方式之外,其他Web認證機制也面臨同樣的問題。比如HTTP基本認證,使用者通過認證後。瀏覽器仍會“智慧”地把使用者名稱和口令附加到之後第三方發給站點的請求中。即使網站使用了安全套接字(SSL)來加密連線.瀏覽器也會”智慧“地自動把SSL認證資訊加到第三方發給站點的請求中。

2.3 P3P的副作用

Internet Explorer在處理Cookie時,還遵守P3P(Platform forPrivaey Preferenees)規範。P3P是W3C制定的一項關於Cookie的隱私保護標準,要求網站向用戶表明它對使用者隱私的處理。比如將收集哪些資訊。資訊做何用途等。如果該站點的資訊收集行為同用戶設定的標準相符,則兩者之聞關於個人隱私資訊的協定就可以自動地締結,而使用者可毫無阻礙地瀏覽該站點;如果不符,瀏覽器會提醒使用者,由使用者決定是否對自己制定的個人隱私策略作出修改以進入該網站,雙方最終通過一個雙向的選擇達成使用者個人隱私策略。

P3P策略產生了一個副作用:如果一個網站設定了有效的P3P策略,Internet Explorer允許第三方到它的Web請求自動帶上Cookie。網站可能遭到CSRF攻擊;如果一個網站沒有設定P3P策略或者P3P策略無效,第三方到它的Web請求不會帶有該網站的Cookie,反而免受CSRF攻擊
3、CSRF攻擊的原理

網站是通過隱式認證認證使用者時,只要不關閉瀏覽器或者退出,以後訪問相同網站時,瀏覽器會自動在請求中附帶上認證資訊。如果瀏覽器被其它網頁控制請求了這個網站的URL,可能會執行一些使用者不希望的功能。

下面用例子來說明:

假設某個網站(example.com)儲存了使用者的電子郵件地址資訊.並且通過這個郵箱地址實現密碼恢復等功能。網站僅採用了Cookie的隱式認證方式來驗證使用者.使用者在驗證登入後可以用如下這個URL來更改自己的郵件地址設定:http://www.91ri.org /setemail=郵件地址

那麼攻擊者只要建立一個HTML頁面包含以下程式碼:

< IMG src=“ http://www.91ri.org /setemail = 新郵件地址”>

當已經登入過example.com的使用者訪問這個頁面的時候,瀏覽器就會向example.com發出請求改變使用者的郵箱地址。

對於所有使用隱式的認證方式並且沒有采取針對CSRF攻擊的自我保護措施的網站,幾乎都可能存在CSRF漏洞。

4、CSRF與XSS比較

Cross—Site Scripting Cxssl允許攻擊者將惡意程式碼注入到受害網站的網頁上,其他使用者在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及客戶端指令碼語言。

CSRF與之相比區別在於:XSS攻擊需要藉助指令碼語言,CSRF攻擊則未必需要指令碼語言:XSS需要受害站點接受使用者輸人來儲存惡意程式碼。而CSRF攻擊可能從第三方網站發起;XSS產生的主要原因是對使用者輸入沒有正確過濾.CSRF產生的主要原因是採用了隱式的認證方式。如果一個網站存在XSS漏洞。那麼它很大可能也存在CSRF漏洞。即使一個網站能夠完美地坊御XsS漏洞,卻未必能夠防禦CSRF。


另外,CSRF與XSS也不是截然分開的,一個攻擊可能既是CSRF攻擊。又是XSS攻擊。

5.防範CSRF攻擊

為了防範CSRF攻擊,理論上可以要求對每個傳送至該站點的請求都要顯式的認證來消除威脅。比如重新輸入使用者名稱和口令。但實際上這會導致嚴重的易用性問題。所以,提出的防範措施既要易於實行,又不能改變現有的Web程式模式和使用者習慣,不能顯著降低使用者體驗。

5.1伺服器端的防範措施

(1)對於網站所有接受使用者輸入的內容進行嚴格的過濾。這條措施不止針對CSRF漏洞,而主要是減少XSS漏洞的可能性。而一個有XSS漏洞的網站,很難保證它對CSRF是安全的。這條措施是其它安全措施的基礎。

(2)GET方法只用於從伺服器端讀取資料,POST方法用於向伺服器端提交或者修改資料。僅使用POST方法提交和修改資料不能防範CSRF攻擊,但是會增加攻擊的難度。避免攻擊者簡單地使用< IMG >等標籤就能通過GET方法進行CSRF攻擊。

同時,這樣做也符合RFC2616推薦的Web規範。

(3)在所有POST方法提交的資料中提供一個不可預測的引數,比如一個隨機數。或者一個根據時間計算的HASH值。並且在Cookie中也同樣儲存這個引數。把這個引數嵌入標籤儲存在FORM表單中,當瀏覽器提交POST請求到伺服器端時.從POST資料中取出這個引數並且和Cook.ie中的值做比較,如果兩個值相等則認為請求有效,不相等則拒絕。根據同源策略和Cookie的安全策略,第三方網頁是無法取得Cookie中的引數值的.所以它不能構造出相同隨機引數的POST請求。

另外,為了保證一個使用者同時開啟多個表單頁面。所有頁面都能正常工作,在一次會話的有效期內。只使用同一個隨機引數。也就是說,在會話初始化的時候生成一個隨機引數,在以後的頁面和Cookie中,都使用這個引數。直到會話結束,新的會話開始時,才生成新的引數,否則會只有使用者最後一次開啟的頁面才能正常提交POST請求.多標籤或多視窗瀏覽器會不能正常工作。

(4)在關鍵的伺服器端遠端呼叫動作之前,增加人機互動環節。例如CAPTCHA人機區分識別程式㈣(典型應用如圖片驗證碼)。

(5)利用Cookie安全策略中的安全屬性,但是不要完全依賴Cookie安全策略中的安全屬性,只信任同源策略,並圍繞同源策略來打造Web應用程式的安全性。

(6)正確配置網站針對Flash的跨域策略檔案。嚴格限制跨域、跨站的請求。

5.2客戶端的防範措施

(1)保持瀏覽器更新,尤其是安全補丁,包括瀏覽器的Flash外掛等的更新。同時也要留意作業系統、防毒、防火牆等軟體的更新。

(2)訪問敏感網站(比如信用卡、網上銀行等)後,主動清理歷史記錄、cookie記錄、表單記錄、密碼記錄,並重啟瀏覽器才訪問其他網站。不要在訪問敏感網站的同時上其它網站。

(3)推薦使用某些帶有“隱私瀏覽”功能的瀏覽器,比如Safail。“隱私瀏覽”功能可以讓使用者在上網時不會留下任何痕跡。瀏覽器不會儲存Cookie和其它任何資料.從而CSRF也拿不到有用的資訊。IE 8把它叫做“InPfivate瀏覽”,Chrome稱作“Incognito模式”。