木馬一直是黑客的拿手技量。善于用木馬的黑客,可以在原來(lái)的入侵基礎(chǔ)之上達(dá)到更大的目的。如今,雖然木馬的種類有很多。但其中IFRAME掛馬比較早,相應(yīng)的預(yù)防措施也比較多,其中用CSS配合JS腳本進(jìn)行預(yù)防是主流方式??蛇@種預(yù)防方式也存在安全隱患,JS腳本也可以被用來(lái)掛馬,令人防不勝防。我們下面要介紹反擊JS掛馬的方法。
JS掛馬溯源
當(dāng)IFRAME逐漸被黑客濫用的時(shí)候,有經(jīng)驗(yàn)的安全工程師也開始研究相應(yīng)的對(duì)策,一段時(shí)間內(nèi)各種阻止IFRAME掛馬的方法不斷涌現(xiàn),其中通用性較高的就是利用CSS配合JS腳本防御IFRAME掛馬。
而黑客也發(fā)現(xiàn),很多網(wǎng)站都會(huì)讓網(wǎng)頁(yè)調(diào)用JS腳本來(lái)實(shí)現(xiàn)廣告等諸多特效,如果將木馬掛在JS腳本中,所有調(diào)用該JS腳本的網(wǎng)頁(yè)都等同于被掛上了木馬,對(duì)于需要肉雞群的黑客而言是一勞永逸,因此JS腳本掛馬逐漸開始被黑客應(yīng)用。
小百科:JS腳本是JavaScript腳本語(yǔ)言的簡(jiǎn)稱,它是一種面向?qū)ο蟮哪_本語(yǔ)言,目前廣泛用于動(dòng)態(tài)網(wǎng)頁(yè)的編程。需要提示大家的是,JavaScript和Java除了語(yǔ)法上有一些相似之處,以及都能夠當(dāng)作網(wǎng)頁(yè)的編程語(yǔ)言以外,兩者是完全不相干的。而JavaScript與Jscript也不同,Jscript是微軟為了迎戰(zhàn)JavaScript推出的腳本語(yǔ)言。
雖然JavaScript作為給非程序人員的腳本語(yǔ)言向大眾推廣,但是JavaScript是一門具有豐富特性的語(yǔ)言,它有著和其他編程語(yǔ)言一樣的復(fù)雜性。實(shí)際上,你必須對(duì)JS有扎實(shí)的理解才能用它來(lái)編寫比較復(fù)雜的程序,作為一名安全工程師,掌握J(rèn)S腳本在工作中會(huì)有很大的幫助。
掛馬原理一點(diǎn)通
JS腳本掛馬對(duì)于黑客而言,可以說(shuō)優(yōu)點(diǎn)多得數(shù)不過(guò)來(lái),首先JS腳本在掛馬時(shí)可以直接將JS代碼寫在網(wǎng)頁(yè)中,也可以通過(guò)注入網(wǎng)頁(yè),讓網(wǎng)站遠(yuǎn)程調(diào)取異地JS腳本。此外,JS掛馬插入Web頁(yè)面的方法有幾十種,絕對(duì)夠菜鳥們眼花繚亂,無(wú)從辨別木馬在何處。
IFRAME掛馬相對(duì)于安全工程師而言,如同一個(gè)穿著鮮紅顏色外衣的劫匪,招搖而扎眼,很容易被發(fā)現(xiàn)。但是利用JS掛馬就意味著這個(gè)劫匪擁有了一張可以隨時(shí)變換的面孔,而且它還能夠隨時(shí)更換衣服。這樣的劫匪在安全工程師搜查時(shí),很容易蒙混過(guò)關(guān),導(dǎo)致木馬久殺不絕。
JS掛馬攻防實(shí)錄
攻現(xiàn)最多見的JS掛馬方法有兩種,一種是直接將JavaScript腳本代碼寫在網(wǎng)頁(yè)中,當(dāng)訪問(wèn)者在瀏覽網(wǎng)頁(yè)時(shí),惡意的掛馬腳本就會(huì)通過(guò)用戶的瀏覽器悄悄地打開網(wǎng)馬窗口,隱藏地運(yùn)行。
另外一種JS掛馬方式是,黑客先將掛馬腳本代碼,存為.js的腳本文件,并上傳到自己指定的網(wǎng)址。這時(shí)黑客只需要在受害者的網(wǎng)站中寫入。
防第一種JS掛馬方式,不方便,用得非常少,而第二種JS掛馬方式才是當(dāng)前主流的,所以我們主要針對(duì)它進(jìn)行防御。方法就是阻止Src請(qǐng)求的異地外域的JS腳本,代碼如下:
iframe{mdy1:expression(this.src=’about:blank’,this.outerHTML=”);}
script{mzm2:expression((this.src.toLowerCase().indexOf(‘http’)==0)?document.write(‘木馬被成功隔離!’):”);}
不過(guò)這種方法的缺點(diǎn)就是網(wǎng)站的訪問(wèn)者將不能看到被掛了JS木馬的相關(guān)網(wǎng)頁(yè)。
所以我們?yōu)榘踩こ處熖峁┝艘欢慰梢灾兄笿S腳本運(yùn)行的CSS代碼,這段代碼會(huì)讓異地外域的JS文件在使用document.write()時(shí),被document.close()強(qiáng)制關(guān)閉。這個(gè)時(shí)侯JS掛馬的內(nèi)容往往還沒(méi)有來(lái)得及寫完,只有部分被強(qiáng)制輸出了,Writer后面的內(nèi)容再不會(huì)被寫入訪問(wèn)者的電腦中,從而起到防范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>