解開Twitter的Don't Click攻擊的神秘面紗
原創(chuàng)一、跨站請求偽造還是點擊劫持
遭到Don't Click攻擊(準(zhǔn)確來說,它應(yīng)該算是一個惡作劇,因為它沒有對用戶造成實質(zhì)性的危害。)黑手的用戶將向Twitter張貼下列消息:
Don't Click: http://tinyurl.com/amgzs6
下面是當(dāng)時的用戶截圖:
![]() |
圖1 |
這看起來好像是一個CSRF攻擊,但是當(dāng)您查看發(fā)動攻擊的頁面的源文件后,就會發(fā)現(xiàn)根本不是這么回事。這個病毒性的Twitter惡作劇用來騙您在Twitter張貼回復(fù)的技術(shù)并不是跨站請求偽造,而是另一種高超的技巧:點擊劫持技術(shù)。所有這一切根本就不使用JavaScript代碼(當(dāng)然跨站請求偽造也可以不用腳本),只用了寥寥幾行CSS代碼就搞定了。
二、深入解析Don't Click攻擊
在攻擊頁面中,含有一個IFrame,用以加載Twitter,并且?guī)в惺孪忍詈玫南ⅲ?/P>
實際上,Twitter本身在您單擊“reply”按鈕的時候,它就在回復(fù)的開頭處預(yù)填了內(nèi)容。所以說,該攻擊使用的策略,與Twitter是一脈相承的。在Iframe之后是一個按鈕:
這可是一個巧妙的騙局,它利用了點擊劫持技術(shù):當(dāng)您單擊這個按鈕的時候,實際上是在Twitter上提交一個表單。但是,它是如何完成的?這可要歸功于CSS了。仔細(xì)看一下這里的CSS:
注意IFrame和按鈕的位置,Twitter的(位于IFrame中的)更新按鈕恰好放在了該頁面的正常按鈕的上面;并且這里通過CSS使這個IFRAME變得完全透明,所以您根本就看不到它。所以,用戶將看到如下的景象:
![]() |
圖2 |
俗話說,耳聽為虛,眼見為實——真是這樣嗎?很遺憾,有時候眼睛也會欺騙我們,因為它看不到透明的東西。為了弄清真相,我們調(diào)節(jié)內(nèi)嵌框架的透明度,這下您就會明白是怎么回事了,如圖:
![]() |
圖3 |
好了,現(xiàn)在真相大白了:當(dāng)您覺得正在點擊(IFrame下面的)普通按鈕的時候,實際上卻在單擊(普通按鈕上面那個透明的)Twitter的“Update”按鈕。假如用戶已經(jīng)登錄到Twitter,那么用戶就會立即向Twitter張貼表單輸入框中的內(nèi)容。拜Twitter的?Status= URL功能所賜,攻擊者可以輕松貼上下列消息,因為該功能允許Twitter預(yù)裝一則消息:
Don’t Click: http://tinyurl.com/amgzs6
在TinyURL的幫助下,可以對攻擊頁面的URL做些必要的處理,以便誘騙您的跟蹤者來進(jìn)一步傳播此“攻擊”,事實證明這是十分有效的。
三、示例演示
為了更好地進(jìn)行說明,我們用一個示例攻擊頁面進(jìn)行演示。注意,為了讓讀者看到事實真相,我們的例子中沒有將opacity設(shè)為0,因此如果在加載頁面時您仔細(xì)觀察的話,將會看到“Don't Click”按鈕在后臺先于Twitter之前加載的,之后還會看到Twitter的更新按鈕又被“繪制”到了“Don't Click”按鈕之上。也就是說,最后Twitter的更新按鈕把“Don't Click”按鈕完全蓋住了。代碼如下:
現(xiàn)在,當(dāng)讀者使用上面的代碼做實驗時,已經(jīng)看不到Twitter的“update”按鈕了,因為Twitter已經(jīng)修復(fù)了這個嚴(yán)重的安全漏洞。但是我們可以看到有一個不透明的方塊蓋住了先出現(xiàn)的“Don't Click”按鈕。好了,現(xiàn)在介紹一下該漏洞是如何被修復(fù)的。
四、漏洞的修復(fù)
Twitter.com已經(jīng)修補了該漏洞,做法是在它被加載到一個IFRAME的時候,利用一些JavaScript進(jìn)行相應(yīng)的檢查:
if (window.top !== window.self) {
window.top.location.href = window.self.location.href; }
所以,現(xiàn)在當(dāng)我們試圖將Twitter加載到一個IFRAME中的時候,會發(fā)現(xiàn)瀏覽器被自動重定向到Twitter,這樣的話,攻擊頁面就不能得逞了。
五、小結(jié)
本文對上周Twitter暴露了一個重大安全漏洞,即Don't Click攻擊進(jìn)行了全面深入的介紹。我們首先介紹了Don't Click攻擊的實質(zhì),即點擊劫持,并介紹了該技術(shù)的具體實現(xiàn)代碼。為了讓讀者有一個感性的認(rèn)識,我們還提供了一個示例攻擊頁面,最后介紹了漏洞的修補技術(shù)。
【51CTO.COM 獨家特稿,轉(zhuǎn)載請注明出處及作者!】
【編輯推薦】