點選劫持漏洞
- 什麼是點選劫持?
- 如何構建基本的點選劫持攻擊
- 使用預填表單輸入進行點選劫持
- 幀破壞指令碼
- 將點選劫持與 DOM XSS攻擊相結合
- 多步點選劫持
- 如何防止點選劫持攻擊
- X-Frame-Options
- 內容安全策略 ( CSP )
什麼是點選劫持?
點選劫持是一種基於介面的攻擊,通過點選誘餌網站中的一些其他內容,誘使使用者點選隱藏網站上的可操作內容。考慮以下示例:
網路使用者訪問誘餌網站(可能這是電子郵件提供的連結)並單擊按鈕以贏取獎品。不知不覺中,他們被攻擊者欺騙,按下了一個替代的隱藏按鈕,這導致在另一個網站上支付一個帳戶。這是一個點選劫持攻擊的例子。該技術取決於在 iframe 中包含一個不可見的、可操作的網頁(或多個頁面),其中包含一個按鈕或隱藏連結。
對 CSRF 攻擊的保護通常是通過使用CSRF 令牌來提供的:特定於會話的一次性號碼或隨機數。CSRF 令牌不會減輕點選劫持攻擊,因為目標會話是使用從真實網站載入的內容建立的,並且所有請求都發生在域上。CSRF 令牌被放入請求中並作為正常行為會話的一部分傳遞給伺服器。與普通使用者會話相比的不同之處在於該過程發生在隱藏的 iframe 中。
如何構建基本的點選劫持攻擊
點選劫持攻擊使用 **CSS **來建立和操作圖層。攻擊者將目標網站合併為覆蓋在誘餌網站上的 iframe 層。使用樣式標籤和引數的示例如下:
<head> <style> #target_website { position:relative; width:128px; height:128px; opacity:0.00001; z-index:2; } #decoy_website { position:absolute; width:300px; height:400px; z-index:1; } </style> </head> ... <body> <div id="decoy_website"> ...decoy web content here... </div> <iframe id="target_website" src="https://vulnerable-website.com"> </iframe> </body>
目標網站 iframe 位於瀏覽器內,以便使用適當的寬度和高度位置值將目標操作與誘餌網站精確重疊。無論螢幕大小、瀏覽器型別和平臺如何,絕對和相對位置值用於確保目標網站準確地與誘餌重疊。z-index 確定 iframe 和網站層的堆疊順序。不透明度值定義為 0.0(或接近 0.0),以便 iframe 內容對使用者透明。瀏覽器點選劫持保護可能會應用基於閾值的 iframe 透明度檢測(例如,Chrome 76 版包含此行為,但 Firefox 不包含)。攻擊者選擇不透明度值,以便在不觸發保護行為的情況下實現預期效果。
使用預填表單輸入進行點選劫持
一些需要表單完成和提交的網站允許在提交之前使用 GET 引數預填充表單輸入。其他網站可能需要在提交表單之前輸入文字。由於 GET 值構成 URL 的一部分,因此可以修改目標 URL 以包含攻擊者選擇的值,並且透明的“提交”按鈕覆蓋在誘餌站點上,如基本的點選劫持示例。
幀破壞指令碼
只要網站可以被陷害,就可能進行點選劫持攻擊。因此,預防性技術基於限制網站的框架功能。通過 Web 瀏覽器制定的常見客戶端保護是使用框架破壞或框架破壞指令碼。這些可以通過專有瀏覽器 JavaScript 附加元件或擴充套件程式(例如 NoScript)來實現。指令碼通常經過精心設計,以便它們執行以下部分或全部行為:
- 檢查並強制當前應用程式視窗是主視窗或頂部視窗,
- 使所有幀可見,
- 防止點選隱形框架,
- 攔截並向用戶標記潛在的點選劫持攻擊。
幀破壞技術通常是特定於瀏覽器和平臺的,並且由於 HTML 的靈活性,它們通常可以被攻擊者規避。由於幀破壞者是 JavaScript,因此瀏覽器的安全設定可能會阻止其執行,或者瀏覽器甚至可能不支援 JavaScript。針對框架破壞者的有效攻擊者解決方法是使用 HTML5 iframesandbox屬性。當使用allow-formsorallow-scripts值設定此值並且allow-top-navigation省略該值時,可以中和 frame buster 指令碼,因為 iframe 無法檢查它是否是頂部視窗:
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
無論是allow-forms和allow-scripts值允許的iframe,但頂級導航中指定的行為被禁止。這會抑制框架破壞行為,同時允許目標站點內的功能。
將點選劫持與 DOM XSS攻擊相結合
到目前為止,我們已經將點選劫持視為一種獨立的攻擊。從歷史上看,點選劫持已被用於執行行為,例如在 Facebook 頁面上增加“喜歡”。然而,當點選劫持被用作另一種攻擊(例如DOM XSS攻擊)的載體時,它的真正威力就會顯現出來。假設攻擊者首先識別了 XSS 漏洞,則這種組合攻擊的實施相對簡單。然後將 XSS 漏洞與 iframe 目標 URL 結合起來,以便使用者單擊按鈕或連結,從而執行 DOM XSS 攻擊。
多步點選劫持
攻擊者對目標網站輸入的操縱可能需要採取多項行動。例如,攻擊者可能想要誘使使用者從零售網站購買商品,因此需要在下訂單之前將商品新增到購物籃中。攻擊者可以使用多個分割槽或 iframe 來實現這些操作。從攻擊者的角度來看,此類攻擊需要相當精確和謹慎,才能有效且隱蔽。
如何防止點選劫持攻擊
我們已經討論了一種常見的瀏覽器端預防機制,即幀破壞指令碼。但是,我們已經看到,攻擊者通常很容易繞過這些保護措施。因此,已經設計出伺服器驅動的協議來限制瀏覽器 iframe 的使用並減輕點選劫持。
點選劫持是瀏覽器端的行為,其成功與否取決於瀏覽器功能以及是否符合現行 Web 標準和最佳實踐。伺服器端針對點選劫持的保護是通過定義和傳達對元件(如 iframe)使用的約束來提供的。但是,保護的實施取決於瀏覽器的合規性和這些約束的實施。伺服器端點選劫持保護的兩種機制是 X-Frame-Options 和Content Security Policy。
X-Frame-Options
X-Frame-Options 最初是作為 Internet Explorer 8 中的非官方響應標頭引入的,它很快被其他瀏覽器採用。標題為網站所有者提供對 iframe 或物件使用的控制,以便可以使用deny指令禁止在框架中包含網頁:
X-Frame-Options: deny
或者,可以使用sameorigin指令 將框架限制為與網站相同的來源
X-Frame-Options: sameorigin
或使用allow-from指令訪問指定網站:
X-Frame-Options: allow-from https://normal-website.com
X-Frame-Options 在瀏覽器中的實現不一致(allow-from例如,Chrome 76 版或 Safari 12 不支援該指令)。但是,當與內容安全策略一起作為多層防禦策略的一部分正確應用時,它可以提供針對點選劫持攻擊的有效保護。
內容安全策略 ( CSP )
內容安全策略 (CSP) 是一種檢測和預防機制,可緩解 XSS 和點選劫持等攻擊。CSP 通常在 Web 伺服器中實現為表單的返回標頭:
Content-Security-Policy: policy
其中 policy 是一串由分號分隔的策略指令。CSP 向客戶端瀏覽器提供有關允許的 Web 資源來源的資訊,瀏覽器可以將這些資訊用於檢測和攔截惡意行為。
推薦的點選劫持保護是frame-ancestors在應用程式的內容安全策略中加入該指令。該frame-ancestors 'none'指令的行為類似於 X-Frame-Optionsdeny指令。該frame-ancestors 'self'指令大致等同於 X-Frame-Optionssameorigin指令。以下 CSP 僅將幀列入同一域的白名單:
Content-Security-Policy: frame-ancestors 'self';
或者,可以將框架限制為命名站點:
Content-Security-Policy: frame-ancestors normal-website.com;
為了有效對抗點選劫持和 XSS,CSP 需要仔細開發、實施和測試,並應作為多層防禦策略的一部分。
本文來自部落格園,作者:{Zeker62},轉載請註明原文連結:https://www.cnblogs.com/Zeker62/p/15177283.html