明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

解析CSRF攻擊原理

[摘要]=————————&mdash...

=——————————————————————=
=————–=[ CSRF攻擊原理解析 ]=——————=
=——————————————————————=
=——————-=[ By rayh4c ]=————————=
=————-=[ rayh4c@80sec.com ]=——————-=
=——————————————————————=

Author: rayh4c [80sec]
EMail: rayh4c#80sec.com
Site: http://www.80sec.com
Date: 2008-9-21

0×00.前言

在Web程序中普通用戶一般只在Web界面里完成他想要的操作,Web程序接受的正常客戶端請求一般來自用戶的點擊鏈接和表單提交等行為,可是惡意攻擊者卻可以依靠腳本和瀏覽器的安全缺陷來劫持客戶端會話、偽造客戶端請求。

0×01.CSRF攻擊分類

CSRF是偽造客戶端請求的一種攻擊,CSRF的英文全稱是Cross Site Request Forgery,字面上的意思是跨站點偽造請求。這種攻擊方式是國外的安全人員于2000年提出,國內(nèi)直到06年初才被關(guān)注,早期我們團隊的劍心使用過 CSRF攻擊實現(xiàn)了DVBBS后臺的SQL注射,同時網(wǎng)上也出現(xiàn)過動易后臺管理員添加的CSRF漏洞等,08年CSRF攻擊方式開始在BLOG、SNS等 大型社區(qū)類網(wǎng)站的腳本蠕蟲中使用。

CSRF的定義是強迫受害者的瀏覽器向一個易受攻擊的Web應(yīng)用程序發(fā)送請求,最后達到攻擊者所需要的操作行為。CSRF漏洞的攻擊一般分為站內(nèi)和站外兩種類型:

CSRF站內(nèi)類型的漏洞在一定程度上是由于程序員濫用$_REQUEST類變量造成的,一些敏感的操作本來是要求用戶從表單提交發(fā)起POST請求 傳參給程序,但是由于使用了$_REQUEST等變量,程序也接收GET請求傳參,這樣就給攻擊者使用CSRF攻擊創(chuàng)造了條件,一般攻擊者只要把預(yù)測好的 請求參數(shù)放在站內(nèi)一個貼子或者留言的圖片鏈接里,受害者瀏覽了這樣的頁面就會被強迫發(fā)起請求。

CSRF站外類型的漏洞其實就是傳統(tǒng)意義上的外部提交數(shù)據(jù)問題,一般程序員會考慮給一些留言評論等的表單加上水印以防止SPAM問題,但是為了用 戶的體驗性,一些操作可能沒有做任何限制,所以攻擊者可以先預(yù)測好請求的參數(shù),在站外的Web頁面里編寫javascript腳本偽造文件請求或和自動提 交的表單來實現(xiàn)GET、POST請求,用戶在會話狀態(tài)下點擊鏈接訪問站外的Web頁面,客戶端就被強迫發(fā)起請求。

0×02.瀏覽器的安全缺陷

現(xiàn)在的Web應(yīng)用程序幾乎都是使用Cookie來識別用戶身份以及保存會話狀態(tài),但是所有的瀏覽器在最初加入Cookie功能時并沒有考慮安全因 素,從WEB頁面產(chǎn)生的文件請求都會帶上COOKIE,如下圖所示,Web頁面中的一個正常的圖片所產(chǎn)生的請求也會帶上COOKIE:

<img src=”http://website/logo.jpg”>



GET /Article/UploadFiles/200809/20080922055213222.jpg
Cookie: session_id
客戶端 ——————————————————-服務(wù)器

瀏覽器的這種安全缺陷給CSRF漏洞的攻擊創(chuàng)造了最基本的條件,因為Web頁面中的任意文件請求都會帶上COOKIE,所以我們將文件地址替換為 一個鏈接的話,用戶訪問Web頁面就相當(dāng)于會話狀態(tài)下自動點擊了鏈接,而且?guī)в蠸RC屬性具有文件請求的HTML標(biāo)簽,如圖片、FLASH、音樂等相關(guān)的 應(yīng)用都會產(chǎn)生偽造GET請求的CSRF安全問題。一個web應(yīng)用程序可能會因為最基本的渲染頁面的HTML標(biāo)簽應(yīng)用,而導(dǎo)致程序里所有的GET類型傳參都 不可靠。

0×03.瀏覽器的會話安全特性

參照Set-Cookie的標(biāo)準(zhǔn)格式,現(xiàn)今瀏覽器支持的cookie實際上分為兩種形式:

Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; HttpOnly]

一種是內(nèi)存COOKIE,在沒有設(shè)定COOKIE值的expires參數(shù),也就是沒有設(shè)置COOKIE的失效時間情況下,這個COOKIE在關(guān)閉 瀏覽器后將失效,并且不會保存在本地。另外一種是本地保存COOKIE,也就是設(shè)置了expires參數(shù),COOKIE的值指定了失效時間,那么這個 COOKIE會保存在本地,關(guān)閉瀏覽器后再訪問網(wǎng)站,在COOKIE有效時間內(nèi)所有的請求都會帶上這個本地保存COOKIE。

Internet Explorer有一個隱私報告功能,其實這是一個安全功能,它會阻擋所有的第三方COOKIE,比如A域Web頁面嵌入了B域的文件,客戶端瀏覽器訪問 了A域的Web頁面后對B域所發(fā)起的文件請求所帶上的COOKIE會被IE攔截。除開文件請求情況,A域的Web頁面如果使用IFRAME幀包含B域的 Web頁面,訪問A域的Web頁面后,B域的Web頁面里的所有請求包括文件請求帶上的COOKIE同樣會被IE攔截。不過Internet Explorer的這個安全功能有兩個特性,一是不會攔截內(nèi)存COOKIE,二是在網(wǎng)站設(shè)置了P3P頭的情況下,會允許跨域訪問COOKIE,隱私報告功 能就不會起作用了。

所以在Internet Explorer的這個安全特性的前提下,攻擊者要進行站外的CSRF攻擊使用文件請求來偽造GET請求的話,受害者必須在使用內(nèi)存COOKIE也就是沒 有保存登陸的會話狀態(tài)下才可能成功。而Firefox瀏覽器并沒有考慮使用這樣的功能,站外的CSRF攻擊完全沒有限制。

0×04.關(guān)于Javascript劫持技術(shù)

近年來的web程序頻繁使用Ajax技術(shù),JSON也開始取代XML做為AJAX的數(shù)據(jù)傳輸格式,JSON實際上就是一段javascript, 大部分都是定義的數(shù)組格式。fortify公司的三位安全人員在2007年提出了Javascript劫持技術(shù),這是一種針對JSON動態(tài)數(shù)據(jù)的攻擊方 式,實際上這也是一種變相的CSRF攻擊。攻擊者從站外調(diào)用一個script標(biāo)簽包含站內(nèi)的一個JSON動態(tài)數(shù)據(jù)接口,因為<script src=”>這種腳本標(biāo)簽的文件請求會帶上COOKIE,用戶訪問后相當(dāng)于被迫從站外發(fā)起了一個帶有身份認(rèn)證COOKIE的GET請求,web程序 馬上返回了用戶相關(guān)的JSON數(shù)據(jù),攻擊者就可以取得這些關(guān)鍵的JSON數(shù)據(jù)加以利用,整個過程相當(dāng)于一個站外類型的CSRF攻擊。

WEB應(yīng)用中的JSON數(shù)據(jù)大部分使用在個人資料、好友列表等隱私功能里,這類數(shù)據(jù)一般是web蠕蟲最重要的傳播功能所需要的數(shù)據(jù),而CSRF攻 擊結(jié)合Javascript劫持技術(shù)完全可以分析這類數(shù)據(jù)制作自動傳播的web蠕蟲,在一定情況下這種web蠕蟲比網(wǎng)站出現(xiàn)跨站腳本漏洞制作的web蠕蟲 更具威脅性,幾乎不受網(wǎng)站架構(gòu)的限制,因為攻擊者利用的不是傳統(tǒng)的Web漏洞而是網(wǎng)站自身正常的功能,如果出現(xiàn)這類CSRF蠕蟲,對網(wǎng)站的打擊將是災(zāi)難性 的。

0×05.安全提醒

各個大型社區(qū)類網(wǎng)站必須警惕CSRF攻擊和相關(guān)web蠕蟲的爆發(fā),并且針對這類web攻擊制定有效的應(yīng)急措施。同建議程序員不要濫 用$_REQUEST類變量,在必要的情況下給某些敏感的操作加上水印,考慮使用類似DISCUZ論壇的formhash技術(shù)提高黑客預(yù)測請求參數(shù)的難 度,注意JSON數(shù)據(jù)接口的安全問題等。最后希望大家全面的考慮客戶端和服務(wù)端整體的安全,注意Internet Explorer等客戶端瀏覽器一些安全缺陷和安全特性,防止客戶端程序的安全問題影響整個Web應(yīng)用程序。


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費電腦中毒的煩擾。




標(biāo)簽:解析CSRF攻擊原理