IE8與點(diǎn)擊綁架和CSRF的攻防戰(zhàn)
原創(chuàng)【51CTO.com 獨(dú)家特稿】近些年來,Web安全威脅日益嚴(yán)重,跨站腳本攻擊、跨站請(qǐng)求偽造攻擊、點(diǎn)擊劫持攻擊等,層出不窮。我們知道,web安全與瀏覽器 密切相關(guān),因?yàn)闉g覽器是web應(yīng)用的執(zhí)行環(huán)境,就像桌面應(yīng)用程序跟操作系統(tǒng)的關(guān)系相仿。
那么,IE8能否為我們的Web安全帶來一縷清風(fēng)嗎?
一、Web安全形勢(shì)日益嚴(yán)峻
據(jù)微軟稱,IE8在開發(fā)過程中就考慮到了已有的和正在浮現(xiàn)的各種Web威脅。
在各種Web應(yīng)用程序安全性漏洞中,最陰險(xiǎn)的漏洞之一 稱為跨站請(qǐng)求偽造(CSRF),人們將其稱為Web漏洞中“沉睡的巨人”,并且這種漏洞修補(bǔ)起來也頗為不易。瀏覽器安全模型的設(shè)計(jì)思想是允許多個(gè)網(wǎng)站同時(shí)交互、站點(diǎn)之間可以無縫瀏覽,而CSRF攻擊恰恰就是利用了這一點(diǎn)。
隨著個(gè)人數(shù)據(jù)等有價(jià)值的信息不斷從最終用戶的PC向流行的Web應(yīng)用程序遷移,CSRF及其他Web 應(yīng)用程序漏洞將日益受到人們的關(guān)注。
二、XDomainRequest對(duì)象應(yīng)運(yùn)而生
為了抵抗CSRF攻擊,IE8引入了一個(gè)XDomainRequest對(duì)象,它在允許以服務(wù)器權(quán)限跨域通信的同時(shí)還包含一些防御CSRF攻擊的特殊 限制。最終用戶可以通過在不使用web應(yīng)用的時(shí)候退出敏感的網(wǎng)站以及使用InPrivate Browsing會(huì)話瀏覽頁面來減輕CSRF攻擊的影 響,因?yàn)镮nPrivate會(huì)話會(huì)清空Cookie,所以無法通過CSRF攻擊來替換緩存的Cookie。
然而,Web應(yīng)用程序本身必須設(shè)計(jì)成能夠防御CSRF攻擊。設(shè)計(jì)良好的Web應(yīng)用程序經(jīng)常通過挑戰(zhàn)/令牌或者類似的策略來檢查非受害 者用戶本意發(fā)出的惡意請(qǐng)求來自我保護(hù)。遺憾的是,挑戰(zhàn)/令牌和類似的策略本身卻受到某些漏洞的影響,其中第一種漏洞是跨站 點(diǎn)腳本攻擊(XSS)。如果一個(gè)由令牌保護(hù)的Web應(yīng)用程序包含一個(gè)跨站點(diǎn)腳本攻擊安全漏洞,那么它很可能會(huì)由于安全令牌失竊而導(dǎo)致CSRF攻擊。
幸運(yùn)的是,IE8包含一個(gè)XSS過濾器和一些其他功能,可以幫助抵御XSS攻擊,從而降低令牌失竊的幾率。除此之外,還可以利用點(diǎn)擊劫持來協(xié)助實(shí)施CSRF攻擊。點(diǎn)擊劫持可以使用戶在不知不覺中單擊一個(gè)模糊的或者隱藏的web元素,從 而導(dǎo)致非本意的處理。一次成功的點(diǎn)擊劫持攻擊可以輕易化解通過使用戶確認(rèn)其交易的CSRF保護(hù)措施。
舉例來說,如果一個(gè)網(wǎng)絡(luò)商 店使用Cookie來進(jìn)行身份驗(yàn)證,并提供了一鍵購(gòu)買服務(wù)。 IE8顯示一個(gè)模擬的web購(gòu)物站點(diǎn),下面是其中一張膝上型計(jì)算機(jī)的圖片:
![]() |
圖1 |
![]() |
圖2 |
![]() |
圖3 |
上面是一個(gè)惡意的頁面,顯示的文本表明用戶已經(jīng)購(gòu)買了一個(gè)膝上型計(jì)算機(jī)。 當(dāng)然,這里只是一個(gè)非常簡(jiǎn)單的點(diǎn)擊劫持攻擊,但是比這復(fù)雜的點(diǎn)擊劫持攻擊也是存在的。
為了緩解點(diǎn)擊劫持之痛,人們提出了許多方法,但是它們必須在兼容性和用戶體驗(yàn)?zāi)壳白鲆恍┱壑?,或者需要?duì)現(xiàn)有標(biāo)準(zhǔn)作重大修 改。目前,使用最廣泛也是最簡(jiǎn)單的抵御點(diǎn)擊劫持攻擊的方案稱為frame busting技術(shù),它能防止有弱點(diǎn)的頁面被框架化,例如防 止頁面被iframe引用。遺憾的是,frame-busting機(jī)制通常需要用到腳本,但是我們知道繞過腳本不是不可能的。
三、X-FRAME-OPTIONS如何抗擊點(diǎn)擊綁架
點(diǎn)擊綁架漏洞是由Jeremiah Grossman及Robert Hansen在去年9月首度揭露,該漏洞可讓駭客仿造合法網(wǎng)頁,并將偽造的透明網(wǎng)頁 覆蓋于合法網(wǎng)頁之上,因此使用者以為是在合法網(wǎng)頁上的鼠標(biāo)點(diǎn)擊,實(shí)際上是觸發(fā)了惡意網(wǎng)頁的指令。
如果攻擊者偽造的是網(wǎng)絡(luò)銀 行網(wǎng)頁,那么使用者也許只是按了某一個(gè)網(wǎng)頁鏈接,卻可能是將錢轉(zhuǎn)到陌生的帳戶中,黑客也可通過此漏洞讓使用者下載惡意程序 或是執(zhí)行任何功能。 IE8引入了一種防止頁面被框架化的機(jī)制來降低點(diǎn)擊劫持所帶來的危害。
Web開發(fā)人員可以為返回的HTML頁面添加一個(gè)名為的HTTP應(yīng) 答頭,以規(guī)定該頁面是否可以被嵌入在iframe里面。如果X-FRAME-OPTIONS的值為DENY,那么IE8就不允許該頁面包含在一個(gè)框架中 。如果其值為SAMEORIGIN,那么只有在頂級(jí)瀏覽內(nèi)容與包含X-FRAME-OPTIONS的內(nèi)容不同源時(shí),IE才會(huì)阻止該頁面。
舉例來說,如果http://shop.example.com/confirm.asp包含一個(gè)DENY偽指令,那么該頁面就無法放入一個(gè)子框架中,無論父框架位于何處。相 反,如果X-FRAME-OPTIONS偽指令的值為SAMEORIGIN,那么該頁面就可以放入到任何來自http://shop.example.com的頁面的框架中。
當(dāng)X-FRAME-OPTIONS阻止顯示某頁面時(shí),瀏覽器會(huì)彈出一個(gè)本地錯(cuò)誤頁面,說明有關(guān)限制,并提供一個(gè)鏈接,該鏈接將在一個(gè)新的 窗口中打開框架。當(dāng)在一個(gè)新的窗口中顯示,而非在子框架中顯示的話,那么頁面內(nèi)容也就無法為點(diǎn)擊劫持所用了。
![]() |
圖4 |
上面是一個(gè)惡意的頁面,然而,這時(shí)候僅僅展示了貓圖片,來自實(shí)際的webshop的訂單按鈕卻沒有顯示出來。其中的錯(cuò)誤信息指示 ,內(nèi)容無法在框架中顯示。
通過使用X-FRAME-OPTIONS偽指令,Web開發(fā)人員可以立即幫助IE8用戶減輕來自各種Web 應(yīng)用程序攻擊的威脅。當(dāng)然,我們希望其 它瀏覽器也能實(shí)現(xiàn)這種X-FRAME-OPTIONS偽指令,因?yàn)樽鳛橐环N防御點(diǎn)擊劫持的手段,它相對(duì)易于部署,并且兼容性也很好。
四、Web安全任重而道遠(yuǎn)
雖然微軟宣稱修補(bǔ)了點(diǎn)擊劫持漏洞,但這不是立竿見影的方法,因?yàn)樗缶W(wǎng)站及Web開發(fā)人員的配合,而不是直接保護(hù)web用戶的 安全。此外,要想讓所有網(wǎng)站都采用微軟的機(jī)制,可能還要有很長(zhǎng)的路要走。還有,微軟提供的解決方案是非跨平臺(tái)的,也就是說 ,只對(duì)IE8有效。目前出爐的另一個(gè)解決方案為針對(duì)Mozilla Firefox設(shè)計(jì)的NoScript外掛程序,該程序可關(guān)閉腳本功能并阻擋利用 框架的攻擊。
【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】
【編輯推薦】