楊家
(廣東省貿(mào)易職業(yè)技術(shù)學(xué)校,廣東 廣州 510507)
CSRF原理以及防護(hù)措施
(廣東省貿(mào)易職業(yè)技術(shù)學(xué)校,廣東 廣州 510507)
CSRF依賴HTTP請(qǐng)求無(wú)狀態(tài)的特性,借助帶有強(qiáng)制被攻擊者瀏覽器提交請(qǐng)求的HTML,從而達(dá)到攻擊的目的。CSRF很難被捕捉,危害極大。本文將深入研究CSRF的工作原理以及有效的防護(hù)措施,努力把CSRF危害程度降到最低。
CSRF;捕捉;欺騙;防護(hù);攻擊
1.1 認(rèn)識(shí)CSRF
我們平時(shí)都是通過(guò)打開瀏覽器來(lái)登錄相關(guān)網(wǎng)站,網(wǎng)站通過(guò)索取登錄證書、設(shè)置cookies等方式,來(lái)為每個(gè)瀏覽器建立特定的上下文環(huán)境,也就是數(shù)據(jù)包的IP地址、標(biāo)頭、cookies,以及請(qǐng)求的鏈接等等。CSRF正是通過(guò)操縱瀏覽器對(duì)某個(gè)網(wǎng)站發(fā)出請(qǐng)求,而這種請(qǐng)求是在被攻擊者和網(wǎng)站關(guān)系的上下文中進(jìn)行的,但對(duì)于目標(biāo)網(wǎng)站而言并沒有收到任何來(lái)自攻擊者的數(shù)據(jù)包。
用簡(jiǎn)單的話來(lái)講,CSRF攻擊迫使被攻擊者的瀏覽器發(fā)出請(qǐng)求,被攻擊者對(duì)此毫無(wú)所知,因此也無(wú)需被攻擊者親自發(fā)出請(qǐng)求。瀏覽器時(shí)時(shí)刻刻都在做用戶不了解或是未批準(zhǔn)的請(qǐng)求,如:圖片、框架、腳本標(biāo)簽等等。CSRF的關(guān)鍵在于找到某個(gè)鏈接,當(dāng)請(qǐng)求該鏈接時(shí),會(huì)給被攻擊者帶來(lái)?yè)p失,如被攻擊者的賬戶被泄露、所有的郵件都被轉(zhuǎn)發(fā)到攻擊者的郵箱等,這些都是用戶難以接受的。
1.2 CSRF與釣魚攻擊的異同
CSRF不等同與釣魚攻擊,兩者之間有一點(diǎn)微妙但卻重要的差別:釣魚攻擊需要操縱用戶,讓用戶親自從瀏覽器提交一個(gè)請(qǐng)求;CSRF是用戶正常瀏覽頁(yè)面時(shí),迫使瀏覽器提交請(qǐng)求,攻擊者并沒有真正獲得瀏覽器的遠(yuǎn)程控制權(quán),但對(duì)用戶瀏覽器做了一些用戶注意不到的事情。我們可以看看以下代碼:
〈iframe src=”http://web.site/frame/html”〉
〈img src=”http://pictures.site/somecute”〉
〈script src=”http://rsources.site/browser”〉
這些都是自動(dòng)發(fā)出請(qǐng)求的元素類型,事實(shí)上,Web頁(yè)面包含數(shù)十甚至數(shù)百個(gè)在渲染頁(yè)面時(shí)需要獲取的資源,對(duì)于哪些域或哪些主機(jī)來(lái)加載這些資源(如圖片、樣式表單、JS代碼、HTML)并沒有限制,出于性能優(yōu)化方面的考慮,網(wǎng)站通常會(huì)把諸如圖片等靜態(tài)內(nèi)容放在內(nèi)容分發(fā)網(wǎng)絡(luò)上,其域名和訪問者在瀏覽器導(dǎo)航欄中看到的域名完全不同。
1.3 CSRF攻擊的方法
1.3.1 標(biāo)簽欺騙
(1)Image欺騙
首先,攻擊者將數(shù)個(gè)〈img〉標(biāo)簽布置在盡可能多的網(wǎng)站中,標(biāo)簽的src屬性包含了一個(gè)可疑的鏈接,在耐心的等待后,成功將被攻擊者誘騙到了一個(gè)包含著上述〈img〉標(biāo)簽的網(wǎng)站。同時(shí),攻擊者可以使用CSS屬性隱藏頁(yè)面中的屬性,使被攻擊者無(wú)法看到它,即使被攻擊者很小心,也不會(huì)注意到這個(gè)被更改的image元素。
(2)表單欺騙
在進(jìn)行網(wǎng)站搜索時(shí),被攻擊者都會(huì)在某個(gè)表單字段中輸入搜索項(xiàng),點(diǎn)擊“搜索”,然后查看結(jié)果,這實(shí)際上是迫使被攻擊者的瀏覽器發(fā)出一個(gè)等效于提交搜索表單的請(qǐng)求,而且攻擊者將一個(gè)特定的搜索項(xiàng)預(yù)置到表單中,并迫使被攻擊者的瀏覽器提交它。因?yàn)楸韱文J(rèn)的method屬性是GET而不是POST之后,這更容易完成了。換句話說(shuō),搜索項(xiàng)是鏈接的查詢字符串的一部分。
1.3.2 應(yīng)用程序觸發(fā)
偽造的請(qǐng)求不僅僅需要散布于頁(yè)面中并等待WEB瀏覽器的訪問,很多嵌入了WEB內(nèi)容或能感知WEB的應(yīng)用程序可以直接向目標(biāo)網(wǎng)站發(fā)送請(qǐng)求,而不需要打開瀏覽器。諸如Microsoft office文檔、PDF文檔、FaLSH視頻等等很多程序都能生成HTTP請(qǐng)求。如果文檔或應(yīng)用程序使用操作系統(tǒng)默認(rèn)瀏覽器提交請(qǐng)求,那么它代表了一種向被攻擊者傳送偽造請(qǐng)求的有效攻擊。如果瀏覽器被用來(lái)發(fā)送請(qǐng)求,無(wú)論是作為嵌入式對(duì)象或是通過(guò)aPI調(diào)用方式,該請(qǐng)求都很有可能包括了用戶對(duì)目標(biāo)網(wǎng)站的安全上下文。作為用戶,需要將任何支持WEB的文檔和應(yīng)用程序都看作是WEB瀏覽器的擴(kuò)展,但是它們可能與CSRF有關(guān)。
CSRF中“跨站請(qǐng)求”僅僅描述了WEB瀏覽器正常的、預(yù)期的行為,“偽造”才是漏洞,而且不會(huì)觸發(fā)入侵檢測(cè)系統(tǒng)、WEB應(yīng)用程序防火墻或其他安全警告。也正因?yàn)槿绱?,這種攻擊很難被捕捉。
跨站請(qǐng)求偽造的解決方案既涉及WEB應(yīng)用程序,也涉及WEB瀏覽器。如何對(duì)網(wǎng)站輸入進(jìn)行過(guò)濾,對(duì)HTML注入攻擊免疫,找到應(yīng)對(duì)措施,并且進(jìn)行部署,是我們對(duì)CSRF攻擊防疫的主要工作內(nèi)容,下面簡(jiǎn)單介紹幾種有效的CSRF防護(hù)措施。
2.1 創(chuàng)建新的Origin請(qǐng)求標(biāo)頭
HTTP標(biāo)頭和WEB安全具有復(fù)雜的關(guān)系,請(qǐng)求的標(biāo)頭很容易被篡改,從而成為跨站腳本攻擊、SQL注入攻擊、依賴于標(biāo)頭值攻擊等攻擊的一種途徑。為了抵御CSRF攻擊,創(chuàng)建新的Origin請(qǐng)求標(biāo)頭,是降低被攻擊風(fēng)險(xiǎn)的有效方法之一。
Origin在初始化時(shí)包含協(xié)議、主機(jī)號(hào)、端口號(hào)等信息,建立在安全性較高的瀏覽器上,它的值由瀏覽器設(shè)置,不會(huì)被HTML、JavaScript或其他插件修改。
支持HTML5的瀏覽器使用Origin標(biāo)頭來(lái)明確XMLHttpRequest對(duì)象發(fā)起的請(qǐng)求來(lái)自何處。
Origin標(biāo)頭可以判斷是否信任來(lái)自不同域的請(qǐng)求。瀏覽器一般允許來(lái)自不同域的請(qǐng)求,但同源策略隔離了應(yīng)有的響應(yīng),不能跨域訪問資源。因此,當(dāng)內(nèi)容允許“跨域”或是在不同域之間共享時(shí),Origin標(biāo)頭的引入使得瀏覽器和網(wǎng)站能夠達(dá)成一致。
CSRF攻擊的一個(gè)特性就是偽造請(qǐng)求從一個(gè)不同于目標(biāo)網(wǎng)站的域發(fā)起,以下就是一個(gè)針對(duì)“密碼重置”功能的CSRF攻擊:
〈html〉〈body〉
〈script〉
Var xhr=new XMLHttpRequest();
Xhr.open(“post”,”http://api.web.site/resetpassword”);
Xhr.setrequestheader(“content-type,””application/x-www
form-urlencoded”);
Xhr.send(“notify=1&email=attacker@anon.email”);
〈/script〉
〈/body〉
〈/html〉
當(dāng)瀏覽器訪問鏈接的時(shí)候,在沒有用戶介入的情況下生成了一條XHR請(qǐng)求,在下面捕捉的數(shù)據(jù)包中,Origin的值是請(qǐng)求標(biāo)頭的一部分。
POST http://api.web.site/resetpassword HTTP/1.1
Host:web.site
User-agent:mozilla/5.0 gecko/20100101 firefox/8.0.1
Referer:http://trigger.site/csrf
Content-length:34
Content-type:text/plain;charset=utr-8
Origin:http://trigger.site
Notify=1&email=attacker@anon.email
可以看到由于域http://trigger.site與http://api.web.site不一致,因此可以被當(dāng)作潛在的CSRF攻擊被忽略掉。
2.2 分配偽隨機(jī)數(shù)令牌
第一種防護(hù)措施是為認(rèn)證用戶分配一個(gè)臨時(shí)的偽隨機(jī)數(shù)令牌。令牌的值僅WEB應(yīng)用程序和用戶的WEB瀏覽器知道。當(dāng)WEB應(yīng)用程序接收到請(qǐng)求時(shí),首先驗(yàn)證令牌的值是否正確。如果值和用戶當(dāng)前會(huì)話預(yù)期的值不符,那么請(qǐng)求就會(huì)被拒絕。
〈form〉
〈input type=hidden name=” csrf” value=”
87ad89sdf78adf8sdf888sdf887”〉
〈/form〉
這種令牌必須是短暫而且不可預(yù)測(cè)的,對(duì)于每個(gè)敏感的狀態(tài)轉(zhuǎn)換,都應(yīng)該更新令牌,目標(biāo)是將特定動(dòng)作聯(lián)系到特定的用戶。不可預(yù)測(cè)的令牌能夠阻止攻擊者偽造請(qǐng)求,因?yàn)樗麄儾恢勒_的值。
2.3 對(duì)cookie進(jìn)行鏡像
Web應(yīng)用程序的會(huì)話cookie已經(jīng)使用了偽隨機(jī)數(shù)。無(wú)論是編程語(yǔ)言提供的或是自定義的會(huì)話,都包含秘密令牌作為必要的屬性,這樣,cookie的值就是保護(hù)表單很理想的備選方案。同時(shí)還減輕了應(yīng)用程序?yàn)槊總€(gè)請(qǐng)求記錄附加值的壓力,應(yīng)用程序只需要比較用戶的cookie值和表單提交的令牌值。這種應(yīng)對(duì)措施是在隱藏的表單字段中放置了會(huì)話cookie的一份拷貝,服務(wù)器只需要簡(jiǎn)單地驗(yàn)證請(qǐng)求會(huì)話的cookie,對(duì)比表單提供的值,兩者是否匹配。這樣的話,攻擊者不得不破解會(huì)話cookie,來(lái)創(chuàng)建有效的令牌。但是同源策略阻止某一個(gè)“域”的網(wǎng)站讀取其他域的cookie,不能訪問cookie值,攻擊者就無(wú)法偽造合法的請(qǐng)求。
2.4 改變?yōu)g覽習(xí)慣
其實(shí),有一種非常簡(jiǎn)單的CSRF防御手段:改變?yōu)g覽習(xí)慣。如每次僅瀏覽一個(gè)網(wǎng)站,不使用多個(gè)瀏覽器窗口或是多個(gè)標(biāo)簽頁(yè);當(dāng)結(jié)束對(duì)某個(gè)網(wǎng)站的訪問時(shí),使用其注銷功能而不是簡(jiǎn)單地關(guān)掉瀏覽器或是跳轉(zhuǎn)到下一個(gè)網(wǎng)站;不使用任何網(wǎng)站提供的“收藏我”或是其他自動(dòng)登錄特性。這些或許是有效的防御措施,但這樣的習(xí)慣會(huì)給我們帶來(lái)許多不便與不適。
CSRF的出現(xiàn)既存在于HTTP本身,也存在于瀏覽器解釋HTML的方式,現(xiàn)在aPI的發(fā)展導(dǎo)致了CSRF更容易被攻擊;CSRF攻擊很難被檢測(cè),因?yàn)樗鼈儽瓤缯灸_本攻擊或SQL注入攻擊更具危害性,只要攻擊者能從中獲取相應(yīng)的利益,這種威脅就會(huì)長(zhǎng)期存在。這就需要我們工作中不斷去探索,努力去研究應(yīng)對(duì)措施,把CSRF危害程度降到最低。
[1]鄧吉,柳靖著.黑客攻防實(shí)戰(zhàn)詳解(第一版)[M].北京:電子工業(yè)出版社,2012.
[2]Stallings,w.網(wǎng)絡(luò)安全基礎(chǔ)應(yīng)用與標(biāo)準(zhǔn)(第一版)[M].北京:清華大學(xué)出版社,2007.
[3]Kevin D.Mitnick;William L.Simon.入侵的藝術(shù)(第二版)[M].北京:清華大學(xué)出版社,2009.
[4]肖遙.網(wǎng)站入侵與腳本攻防修煉(第二版)[M].北京:電子工業(yè)出版社,2009.
[5]吳灝.網(wǎng)絡(luò)攻防技術(shù)(第一版)[M].北京:機(jī)械工業(yè)出版社,2009.
The Principle of CSRF and Protective Measures
Yang Jiaying
(Guangdong Trade Vocational Technical School,Guangzhou 510507,Guangdong)
CSRF relies on HTTP stateless request,uses HTML to force the attracted browser to submit the request,so as to achieve the attack purpose.CSRF is hard to be found and has great harm.This paper deeply studies the principle of CSRF and the protective measures,strives to minimize the CSRF damage.
Cross-Site Request Forgery;catch;cheating;protection;attack
TP393.08
a
1008-6609(2016)03-0081-03
楊家,,男,廣東湛江人,大學(xué)本科,講師,研究方向:網(wǎng)頁(yè)美工設(shè)計(jì),網(wǎng)頁(yè)制作,網(wǎng)站分析,計(jì)算機(jī)網(wǎng)絡(luò)管理與工程設(shè)計(jì)。