搜尋此網誌

2010年7月6日 星期二

[技術分享] Clickjacking

前一陣子在一次偶然的機會中,被一位高手問到 (應該說是考到) 什麼是 Clickjacking,又要怎麼防備?老實說,雖然 Clickjacking 這個手法剛被提出時我就注意到相關的新聞,但是當時尚未公布實際的手法,再加上 Clickjacking 一直不像 SQL Injection、XSS 這些手法這麼普及 (OWASP Top 10 還排不上),所以後來我就一直沒有動力去研究 Clickjacking 這個手法。因此,只記得當時我真的是比穿黑衣還掉了滿身的頭皮屑還糗。不過話說回來,學習永遠不嫌晚,所以我趕緊惡補了一下,並透過這篇文章跟各位分享一下 Clickjacking 這個很危險卻還沒有被廣泛應用的攻擊手法。

Clickjacking,簡單來說就是將使用者在瀏覽網頁的點擊動作進行綁架,讓點擊動作產生非使用者所預期的行為。Clickjacking 最初公布的 例子,也是最著名的例子,就是利用隱形頁框 (invisible iframe) 的方式,讓受害者在不知不覺中”自己”修改 Flash 的安全設定,以利駭客可以遠端控制受害者電腦的攝影機與麥克風,進而進行遠端的監聽/監視。目前常見的資料將 Clickjacing 分為 frame-based clickjacking (又稱為 UI readressing) 與 plugin-based clickjacking 兩大類,但是在阿碼外傳上的 範例 使用修改 onclick 事件處理程序的方式,也可算是另外一種實現的手法。

針對 Clickjacking 的應付之道,可以從伺服器端與用戶端兩方面來談。在伺服器端比較常見的就是使用稱之為 framekiller 的 javascript 程式碼或使用 X-FRAME-OPTIONS 這個專門為了解決 Clickjacking 而新增的 HTTP 回應表頭。 雖然 X-FRAME-OPTIONS 在 Clickjacking 被發表沒多久後就由微軟所提出,但是因為這個機制需要瀏覽器的支援,所以初期多以 framekiller 這類技術為主。framekiller 比較大的限制就是需要 javascript 的執行能力,一旦使用者關閉 javascript 的執行功能時,framekiller 就無用武之地了。或許一般使用者不太會自行關閉 javascript 的執行功能,但是更大的問題在於 IE 可以透過 <IFRAME SECURITY=restricted> 的宣告方式將 javascript 的執行能力加以關閉,也就是說駭客並不需要透過使用者就可以輕易的關閉網頁執行 javascript 的能力。好在經過將近兩年的時間,目前大多數瀏覽器的最新版本都已經支援 X-FRAME-OPTIONS 表頭,唯一的例外是 Firefox…如果你不確定你的瀏覽器是否支援 X-FRAME-OPTIONS 表頭,你可以連到這個 網頁 進行測試,”正確”的結果應該是三個有紅色字樣描述的 iframe 頁框才有顯示資料,其他頁框則為空白。這樣聽起來,Clickjacking 目前似乎是不用太擔心才對,但是事實卻不是如此。根據一份由 Stanford University 與 Carnegie Mellon University 所公布的 研究 顯示,目前大部分網站對於 Clickjacking 的防護依舊存在著明顯的問題。除此之外,上述的作法只能防範 frame-based clickjacking,對於應付 plugin-based clickjacking 並沒有任何的幫助。

前面我提到 Firefox 目前依舊不支援 X-FRAME-OPTIONS 這個表頭,但是 Firefox 的愛用者可別千萬因此而感到失望,反而應該更為高興才是。因為目前客戶端的防範機制中,最為有名且免費的工具就是 NoScript,而它是 Firefox 的 Add-on。NoScript 除了支援 X-FRAME-OPTIONS 外,也可以自動偵測網頁是否存在 framekiller 程式碼並據此限制網頁是否可以被包含在 iframe 當中,因此即使在關閉 javascript 執行能力的情況下依舊可以提供防護。事實上,NoScript 雖然名稱叫做 NoScript,它也確實可以關閉 javascript 的執行能力,但是 NoScript 並不是依靠關閉 javascript 執行能力來防範 Clickjacking 的攻擊。即使在 javascript 可以執行的情況下,NoScript 依舊可以提供 Clickjacking 的防護,也就是說 NoScript 對於 Clickingjacking 的防護跟網頁是否能夠執行 javascript 是沒有關係的。這對不想關閉 javascript 執行能力的使用者來說 (應該大多數使用者都不想關閉 javascript) ,確實是一大好消息。如 NoScript 這類客戶端的防護機制,除了不需仰賴伺服器端的 (程式) 修改就可以運作外,更大的好處是可以同時防護 frame-based clickjacking 與 plugin-based clickjacking。NoScript 最大的問題在於僅作用於 Firefox,使用其他瀏覽器的使用者就必須另尋付費軟體來提供類似的防護了。

 

相關連結:

About