點擊劫持攻擊與防禦技術簡介

引言:
昨天搞google iframe時,接觸到了點擊劫持(clickjacking)的概念。以前看《圖解HTTP》的時候也接觸到了這個概念【大學時候還接觸到SQL注入、XSS跨站腳本攻擊(Cross Site Scripting),跨站請求僞造(Cross-site request forgery,簡稱CSRF或XSRF)等相關概念】。今天查了相關資料,發現一篇好文章,現轉載如下:

點擊劫持是一種比較常見的基於瀏覽器的攻擊,曾一度備受關注的 Facebook ‘likejacking’ 騙局攻擊、Adobe Flash Player 網站漏洞利用、Twitter 的 Don’t click 攻擊等,都利用了點擊劫持技術。可見點擊劫持從未走遠,它可能帶來的安全問題更加不容小覷。

一、 什麼是點擊劫持技術

點擊劫持 (Clickjacking) 技術又稱爲界面僞裝攻擊 (UI redress attack ),是一種視覺上的欺騙手段。攻擊者使用一個或多個透明的 iframe 覆蓋在一個正常的網頁上,然後誘使用戶在該網頁上進行操作,當用戶在不知情的情況下點擊透明的 iframe 頁面時,用戶的操作已經被劫持到攻擊者事先設計好的惡意按鈕或鏈接上。攻擊者既可以通過點擊劫持設計一個獨立的惡意網站,執行釣魚攻擊等;也可以與 XSS 和 CSRF 攻擊相結合,突破傳統的防禦措施,提升漏洞的危害程度。

二、 點擊劫持原理及實例

點擊劫持漏洞 (Clickjacking) 是由網絡安全專家 Robert Hansen 和 Jeremiah Grossman 在 OWASP (Open Web Application Security Project) 會議上提出的,現場還對該漏洞的危害作了演示。第14屆Black Hat大會上,安全專家 Paul Stone 講解了Clickjacking 的拖拽(Drag-and-Drop)技術,這項技術使黑客的攻擊手法更加靈活多變,同時能夠突破許多傳統的安全防禦措施,獲取更多的用戶信息,增加了Clickjacking 漏洞的危害性。
攻擊者在點擊劫持漏洞利用實現過程中使用 iframe 作爲目標網頁載體。iframe 是 HTML 標準中的一個標籤,可以創建包含另外一個頁面的內聯框架,在點擊劫持漏洞利用中主要用來載入目標網頁。點擊劫持典型的攻擊原理示意圖如圖1所示:

 

圖1 點擊劫持原理示意圖

攻擊者實施攻擊的一般步驟是:

  1. 黑客創建一個網頁利用iframe包含目標網站;
    2)隱藏目標網站,使用戶無法察覺到目標網站存在;
    3)構造網頁,誘騙用戶點擊特定按鈕 (圖1中的PLAY!按鈕);
  2. 用戶在不知情的情況下點擊按鈕,觸發執行惡意網頁的命令。

(一)、點擊劫持利用技術

比較重要的點擊劫持漏洞利用技術包括目標網頁隱藏、點擊操作劫持、拖拽技術。
1、目標網頁隱藏技術
目標網頁隱藏技術原理是攻擊者在惡意網站上通過 iframe 載入目標網頁,然並隱藏目標網頁,欺騙用戶點擊隱藏的惡意鏈接。目前主要的網頁隱藏技術有兩種:CSS隱藏技術和雙iframe隱藏技術。
CSS 隱藏技術的原理是利用 CSS 技術控制網頁內容顯示的效果。其中opacity參數表示元素的透明度,取值範圍爲0~1,默認值爲1表示不透明, 取值爲0時元素在網頁中完全透明顯示。當設置目標 iframe 的opacity 屬性小於或等於0.1,用戶就無法看到含惡意代碼的目標網頁。
雙iframe隱藏技術使用內聯框架和外聯框架。內聯框架的主要功能是載入目標網頁,並將目標網頁定位到特定按鈕或者鏈接。外聯框架的主要功能是篩選,只顯示內聯框架中特定的按鈕。
2、點擊操作劫持
在成功隱藏目標網頁後,攻擊者下一個目標是欺騙用戶點擊特定的按鈕,最簡單實用的方法是使用社會工程學。例如,將攻擊按鈕外觀設計成類似QQ消息的提示按鈕,誘使用戶點擊從而觸發攻擊行爲。另外一種思路是使用腳本代碼以及其他技術增加用戶點擊特定按鈕的概率。主要方法如JavaScript實現鼠標跟隨技術、按鍵劫持 (Stroke jacking) 技術等。
3、拖拽(Drag and Drop)技術
主流的瀏覽器都有drag-and-drop API 接口,供網站開發人員創建交互式網頁。但是,這些 API 接口在設計時沒有考慮很多的安全性問題,導致通過拖拽就可以實現跨域操作。利用拖拽技術,攻擊者可以突破很多已有的安全防禦措施,
利用拖拽技術,攻擊者可以輕易將文本注入到目標網頁。在實際實施過程中,攻擊者欺騙用戶選擇輸入框的內容,完成拖拽操作。另外一種方式是,通過瀏覽器的 API 接口將 iframe 中的內容拖拽到目標網頁的 text area 中,攻擊者就可以獲得用戶網頁中存在的敏感信息。

(二)、點擊劫持實例

以下是一個簡單的點擊劫持攻擊實例:
攻擊者構造一個惡意鏈接誘使用戶訪問,若用戶不慎打開了此鏈接,用戶看到的是正常的頁面。此例中製作了一個簡單的“CLICK HERE !”,如圖2所示:

 

圖2 攻擊者構造的惡意網頁(opacity值爲0)

實際上這個頁面是由兩個 iframe 嵌套而成,用戶看到的是一個正常的頁面。實則在其表面,覆蓋了一個惡意鏈接的頁面,click here按鍵的操作也相應的落在了這個惡意的頁面上,對於整個過程,用戶全然不知。
攻擊者是怎樣把這個惡意頁面隱藏起來的呢?這主要是通過設置 CSS 中 div 元素的不透明度來實現的,在 CSS 中聲明 opacity 用來設置一個元素的透明度。現在主流的瀏覽器都支持opacity屬性,取值爲由浮點數字和單位標識符組成,不可爲負。Opacity 取值爲1的元素是完全不透明的,反之取值爲0時爲全透明,即用戶是看不見的。攻擊者正是利用了opacity爲0來隱藏了這個頁面。
接下來,我們不妨把 opacity 值改爲0.5,即設置表面的 iframe 爲半透明,是不是就可以看見攻擊者想要隱藏的那部分內容呢?結果如大家所料,我們就能夠隱約看見被攻擊者隱藏的iframe。如圖3:

 

 

圖3 攻擊者構造的惡意網頁(opacity值爲0.5)
可以看出,在button上面其實覆蓋了一個釣魚網站,在不經意間,用戶就已經落入攻擊者製作的陷阱,被劫持到一個虛假的購物網站中。

三、 點擊劫持與其他漏洞的結合技術

點擊劫持技術如果結合其他漏洞進行攻擊,將突破某些安全措施,實現更大範圍的攻擊。

(一)、結合 CSRF 漏洞

CSRF (Cross-Site Request Forgery CSRF)是指跨站點請求僞造漏洞,目前廣泛使用的CSRF漏洞防禦技術是 token 識別技術。token 是網站給每一次 HTTP 連接分配的隨機數,用來標識不同的用戶身份。對於網站開發人員,最方便實用的方法是將 token 存儲在頁面隱藏的表單中,最終跟隨信息共同提交到服務器端。服務器檢查該參數,判斷用戶身份的真實性。因此成功實施 CSRF 攻擊的關鍵因素是正確獲取 token 值,攻擊者需要將載入目標網頁 iframe 中 token 自動添加到 src 屬性後面。使用HTTP “GET”方法的表單會自動完成上述步驟,實現攻擊WEB應用程序。Twitter 蠕蟲攻擊就是利用點擊劫持漏洞來實現CSRF攻擊。

(二)、結合 XSS 漏洞

Clickjacking 和反射型 XSS (跨站點腳本漏洞) 結合,轉變爲存儲型 XSS 漏洞。反射型 XSS 漏洞最重要的特徵是難於利用。通過 Clickjacking 漏洞,反射型 XSS 可以轉化爲存儲型 XSS 漏洞,只要用戶點擊觸發此漏洞,就可以在用戶瀏覽器上執行任意的JavaScript 代碼,因此具有極大的危害性。

四、 點擊劫持漏洞的防禦

點擊劫持漏洞防禦措施可以從兩個方面考慮:服務器端防禦和客戶端防禦。服務器端防禦主要涉及到用戶身份驗證,客戶端防禦主要涉及到瀏覽器的安全。

(一)、服務器端防禦

服務器端防禦點擊劫持漏洞的思想是結合瀏覽器的安全機制進行防禦,主要的防禦方法介紹如下。
1、 X-FRAME-OPTIONS 機制
在微軟發佈新一代的瀏覽器Internet Explorer 8.0中首次提出全新的安全機制:X-FRAME-OPTIONS。該機制有兩個選項:DENY 和 SAMEORIGIN。DENY表示任何網頁都不能使用 iframe 載入該網頁,SAMEORIGIN表示符合同源策略的網頁可以使用 iframe載入該網頁。如果瀏覽器使用了這個安全機制,在網站發現可疑行爲時,會提示用戶正在瀏覽 網頁存在安全隱患,並建議用戶在新窗口中打開。這樣攻擊者就無法通過 iframe 隱藏目標的網頁。
2、 使用 FrameBusting 代碼
點擊劫持攻擊需要首先將目標網站載入到惡意網站中,使用 iframe 載入網頁是最有效的方法。Web安全研究人員針對 iframe 特性提出 Frame Busting 代碼,使用 JavaScript 腳本阻止惡意網站載入網頁。如果檢測到網頁被非法網頁載入,就執行自動跳轉功能。Frame Busting代碼是一種有效防禦網站被攻擊者惡意載入的方法,網站開發人員使用Frame Busting代碼阻止頁面被非法載入。需要指出的情況是,如果用戶瀏覽器禁用JavaScript腳本,那麼FrameBusting代碼也無法正常運行。所以,該類代碼只能提供部分保障功能。
3、 使用認證碼認證用戶
點擊劫持漏洞通過僞造網站界面進行攻擊,網站開發人員可以通過認證碼識別用戶,確定是用戶發出的點擊命令才執行相應操作。識別用戶的方法中最有效的方法是認證碼認證。例如,在網站上廣泛存在的發帖認證碼,要求用戶輸入圖形中的字符,輸入某些圖形的特徵等。

(二)、客戶端防禦

由於點擊劫持攻擊的代碼在客戶端執行,因此客戶端有很多機制可以防禦此漏洞。
1、 升級瀏覽器
最新版本的瀏覽器提供很多防禦點擊劫持漏洞的安全機制,對於普通的互聯網用戶,經常更新修復瀏覽器的安全漏洞,能夠最有效的防止惡意攻擊。
2、 NoScript 擴展
對於Firefox的用戶,使用 NoScript 擴展能夠在一定程度上檢測和阻止點擊劫持攻擊。利用 NoScript 中 ClearClick 組件能夠檢測和警告潛在的點擊劫持攻擊,自動檢測頁面中可能不安全的頁面。

五、 結束語

互聯網行業的快速發展帶來了越來越多的安全性問題,同時也給用戶數據和信息帶來巨大的威脅。點擊劫持漏洞也會隨着社交網站和移動互聯網的發展,越來越多的被關注,如果利用點擊劫持漏洞與其它已有的 Web 漏洞相結合,會產生更大的危害性,也是需要安全研究人員要進一步研究的問題。

轉載自:攻防:點擊劫持攻擊與防禦技術簡介

六、推薦資料

基於HTML5的Web前端安全性研究

web安全相關書籍:
1、白帽子講Web安全



作者:該帳號已被查封_纔怪
鏈接:https://www.jianshu.com/p/251704d8ff18
來源:簡書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章