CSRF攻擊原理解析|=——————————————————————=|
|=————–=[ CSRF攻擊原理解析 ]=——————=|
|=——————————————————————=|
|=——————-=[ By rayh4c ]=————————=|
|=————-=[
rayh4c@80sec.com ]=——————-=|
|=——————————————————————=|
Author: rayh4c [80sec]
EMail: rayh4c#80sec.com
Site:
http://www.80...com/Date: 2008-9-21
0×00. 前言
在Web程序中普通用戶一般只在Web界面裏完成他想要的操作,Web程序接受的正常客戶端請求一般來自用戶的點擊鏈接和表單提交等行爲,可是惡意攻擊者卻可以依靠腳本和浏覽器的安全缺陷來劫持客戶端會話、僞造客戶端請求。
0×01. CSRF攻擊分類
CSRF是僞造客戶端請求的一種攻擊,CSRF的英文全稱是Cross Site Request Forgery,字面上的意思是跨站點僞造請求。這種攻擊方式是國外的安全人員於2000年提出,國內直到06年初才被關注,早期我們團隊的劍心使用過CSRF攻擊實現了DVBBS後台的SQL注射,同時網上也出現過動易後台管理員添加的CSRF漏洞等,08年CSRF攻擊方式開始在BLOG、SNS等大型社區類網站的腳本蠕蟲中使用。
CSRF的定義是強迫受害者的浏覽器向一個易受攻擊的Web應用程序發送請求,最後達到攻擊者所需要的操作行爲。CSRF漏洞的攻擊一般分爲站內和站外兩種類型:
CSRF站內類型的漏洞在一定程度上是由於程序員濫用$_REQUEST類變量造成的,一些敏感的操作本來是要求用戶從表單提交發起POST請求傳參給程序,但是由於使用了$_REQUEST等變量,程序也接收GET請求傳參,這樣就給攻擊者使用CSRF攻擊創造了條件,一般攻擊者只要把預測好的請求參數放在站內一個貼子或者留言的圖片鏈接裏,受害者浏覽了這樣的頁面就會被強迫發起請求。
CSRF站外類型的漏洞其實就是傳統意義上的外部提交數據問題,一般程序員會考慮給一些留言評論等的表單加上水印以防止SPAM問題,但是爲了用戶的體驗性,一些操作可能沒有做任何限制,所以攻擊者可以先預測好請求的參數,在站外的Web頁面裏編寫javascript腳本僞造文件請求或和自動提交的表單來實現GET、POST請求,用戶在會話狀態下點擊鏈接訪問站外的Web頁面,客戶端就被強迫發起請求。
0×02. 浏覽器的安全缺陷
現在的Web應用程序幾乎都是使用Cookie來識別用戶身份以及保存會話狀態,但是所有的浏覽器在最初加入Cookie功能時並沒有考慮安全因素,從WEB頁面産生的文件請求都會帶上COOKIE,如下圖所示,Web頁面中的一個正常的圖片所産生的請求也會帶上COOKIE:
<img src=”
”>
↓
GET
Cookie: session_id
客戶端 ——————————————————-服務器
浏覽器的這種安全缺陷給CSRF漏洞的攻擊創造了最基本的條件,因爲Web頁面中的任意文件請求都會帶上COOKIE,所以我們將文件地址替換爲一個鏈接的話,用戶訪問Web頁面就相當於會話狀態下自動點擊了鏈接,而且帶有SRC屬性具有文件請求的HTML標簽,如圖片、FLASH、音樂等相關的應用都會産生僞造GET請求的CSRF安全問題。一個web應用程序可能會因爲最基本的渲染頁面的HTML標簽應用,而導致程序裏所有的GET類型傳參都不可靠。
0×03. 浏覽器的會話安全特性
參照Set-Cookie的標準格式,現今浏覽器支持的cookie實際上分爲兩種形式:
Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; HttpOnly]
一種是內存COOKIE,在沒有設定COOKIE值的expires參數,也就是沒有設置COOKIE的失效時間情況下,這個COOKIE在關閉浏覽器後將失效,並且不會保存在本地。另外一種是本地保存COOKIE,也就是設置了expires參數,COOKIE的值指定了失效時間,那麽這個COOKIE會保存在本地,關閉浏覽器後再訪問網站,在COOKIE有效時間內所有的請求都會帶上這個本地保存COOKIE。
Internet Explorer有一個隱私報告功能,其實這是一個安全功能,它會阻擋所有的第三方COOKIE,比如A域Web頁面嵌入了B域的文件,客戶端浏覽器訪問了A域的Web頁面後對B域所發起的文件請求所帶上的COOKIE會被IE攔截。除開文件請求情況,A域的Web頁面如果使用IFRAME幀包含B域的Web頁面,訪問A域的Web頁面後,B域的Web頁面裏的所有請求包括文件請求帶上的COOKIE同樣會被IE攔截。不過Internet Explorer的這個安全功能有兩個特性,一是不會攔截內存COOKIE,二是在網站設置了P3P頭的情況下,會允許跨域訪問COOKIE,隱私報告功能就不會起作用了。
所以在Internet Explorer的這個安全特性的前提下,攻擊者要進行站外的CSRF攻擊使用文件請求來僞造GET請求的話,受害者必須在使用內存COOKIE也就是沒有保存登陸的會話狀態下才可能成功。而Firefox浏覽器並沒有考慮使用這樣的功能,站外的CSRF攻擊完全沒有限制。
0×04. 關於Javascript劫持技術
近年來的web程序頻繁使用Ajax技術,JSON也開始取代XML做爲AJAX的數據傳輸格式,JSON實際上就是一段javascript,大部分都是定義的數組格式。fortify公司的三位安全人員在2007年提出了Javascript劫持技術,這是一種針對JSON動態數據的攻擊方式,實際上這也是一種變相的CSRF攻擊。攻擊者從站外調用一個script標簽包含站內的一個JSON動態數據接口,因爲<script src=”>這種腳本標簽的文件請求會帶上COOKIE,用戶訪問後相當於被迫從站外發起了一個帶有身份認證COOKIE的GET請求,web程序馬上返回了用戶相關的JSON數據,攻擊者就可以取得這些關鍵的JSON數據加以利用,整個過程相當於一個站外類型的CSRF攻擊。
WEB應用中的JSON數據大部分使用在個人資料、好友列表等隱私功能裏,這類數據一般是web蠕蟲最重要的傳播功能所需要的數據,而CSRF攻擊結合Javascript劫持技術完全可以分析這類數據制作自動傳播的web蠕蟲,在一定情況下這種web蠕蟲比網站出現跨站腳本漏洞制作的web蠕蟲更具威脅性,幾乎不受網站架構的限制,因爲攻擊者利用的不是傳統的Web漏洞而是網站自身正常的功能,如果出現這類CSRF蠕蟲,對網站的打擊將是災難性的。
0×05. 安全提醒
各個大型社區類網站必須警惕CSRF攻擊和相關web蠕蟲的爆發,並且針對這類web攻擊制定有效的應急措施。同建議程序員不要濫用$_REQUEST類變量,在必要的情況下給某些敏感的操作加上水印,考慮使用類似DISCUZ論壇的formhash技術提高黑客預測請求參數的難度,注意JSON數據接口的安全問題等。最後希望大家全面的考慮客戶端和服務端整體的安全,注意Internet Explorer等客戶端浏覽器一些安全缺陷和安全特性,防止客戶端程序的安全問題影響整個Web應用程序。
參考:
http://blog.csdn.net/lake2/arch.../2245754.aspxhttp://www.cgisecurity.com/...f-faq.shtmlhttp://www.playhack.n...hp?id=31http://www.fortify.com/servlet/downlo...pt_Hijacking.pdfhttp://www.w3...P3P/本站內容均爲原創,轉載請務必保留署名與鏈接!
CSRF攻擊原理解析:
http://www.80sec.com/...rit.html