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