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