什么是恶意代码
恶意代码malicious code)又称为恶意软件malicious software,Malware),是能够在计算机系统中进行非授权操作的代码。
恶意代码的分类
分类恶意代码的标准主要是代码的独立性和自我复制性,独立的恶意代码是指具备一个完整程序所应该具有的全部功能,能够独立传播、运行的恶意代码,这样的恶意代码不需要寄宿在另一个程序中。非独立恶意代码只是一段代码,必须嵌入某个完整的程序中,作为该程序的一个组成部分进行传播和运行。对于非独立恶意代码,自我复制过程就是将自身嵌入宿主程序的过程,这个过程也称为感染宿主程序的过程。对于独立恶意代码,自我复制过程就是将自身传播给其他系统的过程。不具有自我复制能力的恶意代码必须借助其他媒介进行传播。目前具有的恶意代码种类及属性如图1所示。按照图1中的分类称为“病毒”的恶意代码是同时具有寄生和感染特性的恶意代码,称之为狭义病毒。习惯上,把一切具有自我复制能力的恶意代码统称为病毒,为和狭义病毒相区别,将这种病毒称为广义病毒。基于广义病毒的定义,病毒、蠕虫和Zombie可以统称为病毒。
1.陷阱门
陷阱门是某个程序的秘密入口,通过该入口启动程序,可以绕过正常的访问控制过程,因此,获悉陷阱门的人员可以绕过访问控制过程,直接对资源进行访问。陷阱门已经存在很长一段时问,原先的作用是程序员开发具有鉴别或登录过程的应用程序时,为避免每一次调试程序时都需输入大量鉴别或登录过程需要的信息,通过陷阱门启动程序的方式来绕过鉴别或登录过程。程序区别正常启动和通过陷阱门启动的方式很多,如携带特定的命令参数、在程序启动后输入特定字符串等。
程序设计者是最有可能设置陷阱门的人,因此,许多免费下载的实用程序中含有陷阱门或病毒这样的恶意代码,使用免费下载的实用程序时必须注意这一点。
2.逻辑炸弹
逻辑炸弹是包含在正常应用程序中的一段恶意代码,当某种条件出现,如到达某个特定日期、增加或删除某个特定文件等,将激发这一段恶意代码,执行这一段恶意代码将导致非常严重的后果,如删除系统中的重要文件和数据、使系统崩溃等。历史上不乏程序设计者利用逻辑炸弹讹诈用户和报复用户的案例。
3.特洛伊木马
特洛伊木马也是包含在正常应用程序中的一段恶意代码,一旦执行这样的应用程序,将激发恶意代码。顾名思义,这一段恶意代码的功能主要在于削弱系统的安全控制机制,如在系统登录程序中加入陷阱门,以便黑客能够绕过登录过程直接访问系统资源;将共享文件的只读属性修改为可读写属性,以便黑客能够对共享文件进行修改;甚至允许黑客通过远程桌面这样的工具软件控制系统。
4.病毒
这里的病毒是狭义上的恶意代码类型,单指那种既具有自我复制能力,又必须寄生在其他实用程序中的恶意代码。它和陷阱门、逻辑炸弹的最大不同在于自我复制能力,通常情况下,陷阱门、逻辑炸弹不会感染其他实用程序,而病毒会自动将自身添加到其他实用程序中。
5.蠕虫
从病毒的广义定义来说,蠕虫也是一种病毒,但它和狭义病毒的最大不同在于自我复制过程,病毒的自我复制过程需要人工干预,无论是运行感染病毒的实用程序,还是打开包含宏病毒的邮件,都不是由病毒程序自我完成的。蠕虫能够自我完成下述步骤。
1)查找远程系统:能够通过检索已被攻陷的系统的网络邻居列表或其他远程系统地址列表找出下一个攻击对象。
2)建立连接:能够通过端口扫描等操作过程自动和被攻击对象建立连接,如Telnet连接等。
3)实施攻击:能够自动将自身通过已经建立的连接复制到被攻击的远程系统,并运行它。
6.Zombie
Zombie俗称僵尸)是一种具有秘密接管其他连接在网络上的系统,并以此系统为平台发起对某个特定系统的攻击功能的恶意代码。Zombie主要用于定义恶意代码的功能,并没有涉及该恶意代码的结构和自我复制过程,因此,分别存在符合狭义病毒的定义和蠕虫定义的Zombie。
恶意代码的特征
恶意代码的编写大多是出于商业或探测他人资料的目的,如宣传某个产品、提供网络收费服务或对他人的计算机直接进行有意的破坏等,总的来说,它具有恶意破坏的目的、其本身为程序,以及通过执行发生作用3个特征。
1)恶意破坏的目的。
有相当一部分黑客进行恶意代码攻击的目的是从破坏其他用户的系统中得到“成就感”。但现在更多的黑客则是出于经济利益。例如,某些广告类代码可以通过用户的上网习惯以提高广告点击率来获取经济利益,而更直接的则是通过窃取其他用户的网上信用卡、银行代码等直接对其进行经济侵犯。现今又出现了潜伏性的恶意代码,在攻击的同时尽量不被发现,对用户和社会都造成了严重的危害,构成了严重的经济犯罪。
2)其本身为程序。
恶意代码是一段程序,它可以在很隐蔽的情况下嵌入另一个程序中,通过运行别的程序而自动运行,从而达到破坏被感染计算机的数据、程序以及对被感染计算机进行信息窃取等目的。
3)通过执行发生作用。
恶意代码与木马一样,只要用户运行就会发作,只不过恶意代码是通过网页进行传播的。
恶意代码的发展史
恶意代码经过30多年的发展,破坏性、种类和感染性都得到增强。随着计算机的网络化程度逐步提高,网络传播的恶意代码对人们日常生活影响越来越大。
1988年11月泛滥的Morris蠕虫,顷刻之间使得6000多台计算机占当时Intemet上计算机总数的10%多)瘫痪,造成严重的后果,并因此引起世界范围内关注。
1998年CIH病毒造成数十万台计算机受到破坏。1999年Happy99、Melissa病毒大爆发,Melissa病毒通过E-mail附件快速传播而使E.mail服务器和网络负载过重,它还将敏感的文档在用户不知情的情况下按地址簿中的地址发出。
2000年5月爆发的“爱虫”病毒及其以后出现的50多个变种病毒,是近年来让计算机信息界付出极大代价的病毒,仅一年时间共感染了4000多万台计算机,造成大约87亿美元的经济损失。
2001年,国信安办与公安部共同主办了我国首次计算机病毒疫情网上调查工作。结果感染过计算机病毒的用户高达73%,其中,感染三次以上的用户又占59%多,网络安全存在大量隐患。
2001年8月,“红色代码”蠕虫利用微软Web服务器IIS4.0或5.0中Index服务的安全漏洞,攻破目标机器,并通过自动扫描方式传播蠕虫,在互联网上大规模泛滥。
2003年,SLammer蠕虫在10分钟内导致互联网90%脆弱主机受到感染。同年8月,“冲击波”蠕虫爆发,8天内导致全球计算机用户损失高达20亿美元之多。
2004年到2006年,振荡波蠕虫、爱情后门、波特后门等恶意代码利用电子邮件和系统漏洞对网络主机进行疯狂传播,给国家和社会造成了巨大的经济损失。
根据2010年1月28日网络安全厂商金山安全发布的《2009年中国电脑病毒疫情及互联网安全报告》。2009年,金山毒霸共截获新增病毒和木马20684223个,与5年前新增病毒数量相比,增长了近400倍。其中IE主页篡改类病毒第一次登上十大病毒之首,成为“毒王”。
目前,恶意代码问题成为信息安全需要解决的,迫在眉睫的、刻不容缓的安全问题。图2显示了过去20多年主要恶意代码事件。
伴随着用户对网络安全问题的日益关注,黑客、病毒木马制作者的“生存方式”也在发生变化。病毒的“发展”已经呈现多元化的趋势,类似熊猫烧香、灰鸽子等大张旗鼓进行攻击、售卖的病毒已经越来越少,而以猫癣下载器、宝马下载器、文件夹伪装者为代表的“隐蔽性”顽固病毒频繁出现,同时有针对性的木马、病毒也已经成为新增病毒的主流。
恶意代码存在的原因
1.系统漏洞层出不穷
AT&T实验室的S.Bellovin曾经对美国CERT提供的安全报告进行过分析,分析结果表明,大约50%的计算机网络安全问题是由软件工程中产生的安全缺陷引起的,其中,很多问题的根源都来自于操作系统的安全脆弱性。
在信息系统的层次结构中,包括从底层的操作系统到上层的网络应用在内的各个层次都存在着许多不叮避免的安全问题和安全脆弱性。而这些安全脆弱性的不可避免,直接导致了恶意代码的必然存在。
2.利益驱使
目前,网络购物、网络支付、网络银行和网上证券交易系统的已经普及,各种盗号木马甚至被挂在了金融、门户等网站上,“证券大盗”、“网银大盗”在互联网上疯狂作案,给用户造成了严重的经济损失。
如果下载网银木马,该木马会监视IE浏览器正在访问的网页,如果发现用户正在登录某银行的网上银行,就会弹出伪造的登录对话框,诱骗用户输入登录密码和支付密码,通过邮件将窃取的信息发送出去,威胁用户网上银行账号密码的安全。
骗取IP流量,所谓的IP流量指的是访问某个网站的独立IP数量。IP流量是评估一个网站的重要指标,因此一些商家就出售这些流量。
有了利益的驱使,就出现了很多非法弹网页的恶意软件,这些恶意软件通过定时器程序定时弹出某网页或者修改IE的默认页面,实现谋利。还有的网站,在用户打开时,自动弹出好几个广告网页,这些也都可以归纳到恶意代码范畴。
恶意代码的传播方式和趋势
恶意代码按传播方式可以分为病毒、蠕虫、木马、移动代码和间谍软件等。其传播的目的已有所变化,传统的攻击活动常常是受好奇心驱使,希望自己的技术可以得到认可,而现在的攻击则以获得经济利益为目的。这些攻击通常为犯罪行为,例如,为牟取经济利益而非法盗取他人的信息,从而对其造成经济损失。
1.恶意代码的传播方式
总的来说,恶意代码的传播是因为用户的软件出现了漏洞、操作不慎或者是两者的结合造成。
1)病毒。病毒具有自我复制的功能,一般嵌入主机的程序中。当被感染文件执行操作,例如,用户打开一个可执行文件时,病毒就会自我繁殖。病毒一般都具有破坏性。
2)木马。这种程序从表面上看没有危害,但实际上却隐含着恶意的意图和破坏的作用。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中;另外有的还会以软件的形式出现,因为它一般是以一个正常的应用程序身份在系统中运行的,所以这种程序通常不容易被发现。
3)蠕虫。蠕虫是一种可以自我复制的完全独立的程序,它的传播不需要借助被感染主机中的其他程序和用户的操作,而是通过系统存在的漏洞和设置的不安全性来进行入侵,如通过共享的设置来侵入。蠕虫可以自动创建与它的功能完全相同的副本,并能在无人干涉的情况下自动运行,大量地复制占用计算机的空间,使计算机的运行缓慢甚至瘫痪。其中比较典型的有Blaster和SQLSlammer。
4)移动代码。移动代码是能够从主机传输到客户端计算机上并执行的代码,它通常是作为病毒、蠕虫或者是特洛伊木马的一部分被传送到客户的计算机上的。此外,移动代码还可以利用系统的漏洞进行入侵,如非法的数据访问和盗取管理员账号等。
5)间谍软件。散布间谍软件的网站或个人会使用各种方法使用户下载间谍软件并将其安装在他们的计算机上。这些方法包括创建欺骗性的免费服务,以及隐蔽地将间谍软件和用户可能需要的其他软件捆绑在一起等,如使用免费的共享软件,达到利用软获取经济利益等目的。
2.恶意代码的传播趋势
1)种类更多。恶意代码的传播不再单纯地依赖软件漏洞或者他人操作中的不慎,也有可能是两者的结合,如蠕虫产生寄生的文件病毒、特洛伊木马程序、口令窃取程序、后门程序等,这进一步模糊了蠕虫、病毒和特洛伊木马之间的区别。
2)利用混合传播模式。“混合病毒威胁”和“收敛威胁”已成为新的病毒术语,红色代码利用的就是IIS的漏洞,它们的特点都是利用软件漏洞,以病毒的模式从引导区方式发展为多种类病毒方式进行攻击。
3)跨平台攻击。跨平台攻击已开始出现,有些恶意代码对所有的平台都能够起作用,例如,代码能兼容Windows、UNIX及Linux平台并进行攻击。
4)使用销售技术。另外一个趋势是更多的恶意代码使用销售技术,其目的不仅在于利用受害者的邮箱实现最大数量的信息转发,而且要引起受害者的兴趣,让受害者进一步对恶意代码进行下载等操作,并且使用网络探测和电子邮件脚本嵌入等技术来达到目的。
5)服务器和客户机同样受到攻击。对于现今的恶意代码,服务器和客户机的区别越来越模糊,客户计算机和服务器如果运行同样的应用程序,也将会受到恶意代码的攻击。
6)Windows操作系统被攻击得最频繁。WindoWS操作系统更容易遭受恶意代码的攻击,它也是病毒攻击最集中的平台,病毒总是选择配置不好的网络共享和服务作为进入点。
7)恶意代码类型变化。恶意代码利用MIME边界和UUEncode头的处理薄弱的缺陷,将恶意代码伪装成安全的数据类型,欺骗用户执行代码。
恶意代码攻击机制
恶意代码的行为表现各异,破坏程度千差万别,但基本作用机制大体相同,其整个作用过程分为6个部分。
1)侵入系统。侵入系统是恶意代码实现其恶意目的的必要条件。恶意代码入侵的途径很多,如:从互联网下载的程序本身就可能含有恶意代码;接收已经感染恶意代码的电子邮件;从光盘或U盘往系统上安装软件;黑客或者攻击者故意将恶意代码植入系统等。
2)维持或提升现有特权。恶意代码的传播与破坏必须盗用用户或者进程的合法权限才能完成。
3)隐蔽策略。为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己。
4)潜伏。恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动。
5)破坏。恶意代码的本质具有破坏性,其目的是造成信息丢失,泄密,破坏系统完整性等。
6)重复1)至5)对新的目标实施攻击过程。
恶意代码的命名规则
由于恶意代码的迅猛发展,使用统一的公用名称命名各种恶意代码,已经成为当前各个反病毒机构的迫切任务。目前,各个反病毒机构仍然试着通过尽量使用统一的公用名来减少混乱。在各个反病毒机构内部都有一个类似的命名机制,一般格式为:<病毒前缀>.<病毒名>.<病毒后缀>
1)病毒前缀
病毒前缀是指一个病毒的种类,它是用来区别病毒的种族分类的。不同种类的病毒,其前缀也是不同的。比如常见的木马病毒的前缀Trojan,蠕虫病毒的前缀是Worm等。常见的病毒前缀有:
①系统病毒:系统病毒的前缀为Win32、PE、Win95、W32、W95等。这些病毒的一般公有的特性是可以感染Windows系统的.exe和.dll文件,并通过这些文件进行传播,如CIH病毒。
②蠕虫病毒:前缀为Worm,如冲击波Worm.Blaster。
③木马:前缀为Trojan,如Trojan.LMir.PSW.60。
④脚本病毒:前缀为Script,脚本病毒的公有特性是使用脚本语言编写,通过网页进行传播,如红色代码Script.Redlof,或表示使用何种脚本编写的,如欢乐时光VBS.Happytime。
⑤宏病毒:宏病毒是一种特俗的脚本病毒,第一前缀为Macro,第二前缀为Word、Word97、Excel、Excel97等,代表能够感染的OFFICE版本,如著名的美丽莎Macro.Melissa。
⑥后门:后门病毒的前缀为Backdoor,该类病毒的公有特性是通过网络传播,给系统开后门,如IRC后门Backdoor.IRCBot。
⑦病毒种植程序病毒:前缀为Dropper,该类病毒的公有特性是运行时会从体内释放出一个或几个新的病毒到系统目录下,如冰河播种者Dropper.BingHe2.2C、MSN射手Dropper.Worm.Smibag等。
⑧破坏性程序病毒:前缀为Harm,该类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒便会直接对用户计算机产生破坏,如格式化C盘Harm.formatC.f、杀手命令Harm.Command.Killer等。
⑨玩笑病毒:前缀为Joke,也称恶作剧病毒,该类病毒的公有特性是本身具有好看的图标来诱惑用户点击,当用户点击这类病毒时,病毒会做出各种破坏动作来吓唬用户,其实病毒并没有对用户电脑进行任何破坏,如女鬼病毒Joke.Girlghost。
⑩捆绑机病毒:前缀为Binder,该类病毒的特性是病毒作者会使用特定的捆绑程序将病毒与一些应用程序如QQ、IE捆绑起来,表面上看是一个正常的文件,当用户运行这些捆绑病毒的应用程序时,隐藏运行捆绑在一起的病毒,如捆绑QQ的Binder.QQPass.QQBin、系统杀手Binder.killsys等。
2)病毒名
病毒名是指一个病毒的家族特征,是用来区别和标识病毒家族的,如以前著名的CIH病毒的家族名都是统一的“CIH”,振荡波蠕虫病毒的家族名是“Sasser”。
3)病毒后缀
病毒后缀是指一个病毒的变种特征,是用来区别具体某个家族病毒的某个变种的。一般都采用英文字母来表示,如Worm.Sasser.b就是指振荡波蠕虫病毒的变种B,因此一般称为“振荡波变种B”。
恶意代码的危害
恶意代码问题,不仅使企业和用户蒙受了巨大的经济损失,而且使国家的安全面临着严重威胁。1991年的海湾战争是美国第一次公开在实战中使用恶意代码攻击技术取得重大军事利益,从此恶意代码攻击成为信息战、网络战最重要的入侵手段之一。恶意代码问题无论从政治上、经济上,还是军事上,都成为信息安全面临的首要问题。
目前,恶意代码的危害主要表现在以下几个方面:
1)破坏数据:很多恶意代码发作时直接破坏计算机的重要数据,所利用的手段有格式化硬盘、改写文件分配表和目录区、删除重要文件或者用无意义的数据覆盖文件等。例如,磁盘杀手病毒DiskKiller)在硬盘感染后累计开机时问48小时内发作,发作时屏幕上显示“Waming!!Don’turn off power or remove diskette while Disk Killer is Processing!”,并改写硬盘数据。
2)占用磁盘存储空间:引导型病毒的侵占方式通常是病毒程序本身占据磁盘引导扇区,被覆盖的扇区的数据将永久性丢失、无法恢复。文件型的病毒利用一些DOS功能进行传染,检测出未用空间把病毒的传染部分写进去,所以一般不会破坏原数据,但会非法侵占磁盘空间,文件会不同程度的加长。
3)抢占系统资源:大部分恶意代码在动态下都是常驻内存的,必然抢占一部分系统资源,致使一部分软件不能运行。恶意代码总是修改一些有关的中断地址,在正常中断过程中加入病毒体,干扰系统运行。
4)影响计算机运行速度:恶意代码不仅占用系统资源覆盖存储空间,还会影响计算机运行速度。比如,恶意代码会监视计算机的工作状态,伺机传染激发;还有些恶意代码会为了保护自己,对磁盘上的恶意代码进行加密,CPU要多执行解密和加密过程,额外执行了上万条指令。
恶意代码的防范
为了确保系统的安全与畅通,已有多种恶意代码的防范技术,如恶意代码分析技术、误用检测技术、权限控制技术和完整性技术等。
一、恶意代码分析技术
恶意代码分析是一个多步过程,他深入研究恶意软件结构和功能,有利于对抗措施的发展。按照分析过程中恶意代码的执行状态可以把恶意代码分析技术分成静态分析技术和动态分析技术两大类。
1.静态分析技术
静态分析技术就是在不执行二进制程序的条件下,利用分析工具对恶意代码的静态特征和功能模块进行分析的技术。该技术不仅可以找到恶意代码的特征字符串、特征代码段等,而且可以得到恶意代码的功能模块和各个功能模块的流程图。由于恶意代码从本质上是由计算机指令构成的,因此根据分析过程是否考虑构成恶意代码的计算机指令的语义,可以把静态分析技术分成以下两种:
1)基于代码特征的分析技术。在基于代码特征的分析过程中,不考虑恶意代码的指令意义,而是分析指令的统计特性、代码的结构特性等。比如在某个特定的恶意代码中,这些静态数据会在程序的特定位置出现,并且不会随着程序拷贝副本而变化,所以,完全可以使用这些静态数据和其出现的位置作为描述恶意代码的特征。当然有些恶意代码在设计过程中,考虑到信息暴露的问题而将静态数据进行拆分,甚至不使用静态数据,这种情况就只能通过语义分析或者动态跟踪分析得到具体信息了。
2)基于代码语义的分析技术。基于代码语义的分析技术要求考虑构成恶意代码的指令的含义,通过理解指令语义建立恶意代码的流程图和功能框图,进一步分析恶意代码的功能结构。因此,在该技术的分析过程中首先使用反汇编工具对恶意代码执行体进行反汇编,然后通过理解恶意代码的反汇编程序了解恶意代码的功能。从理论上讲,通过这种技术可以得到恶意代码的所有功能特征。但是,目前基于语义的恶意代码分析技术主要还是依靠人工来完成,人工分析的过程需要花费分析人员的大量时间,对分析人员本身的摹求也很高。
2.动态分析技术
动态分析技术是指恶意代码执行的情况下,利用程序调试工具对恶意代码实施跟踪和观察,确定恶意代码的工作过程,对静态分析结果进行验证。根据分析过程中是否需要考虑恶意代码的语义特征,将动态分析技术分为以下两种:
1)外部观察技术。外部观察技术是利用系统监视工具观察恶意代码运行过程中系统环境的变化,通过分析这些变化判断恶意代码功能的一种分析技术。
2)跟踪调试技术。跟踪调试技术是通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能的技术。在实际分析过程中,跟踪调试可以有两种方法:
①单步跟踪恶意代码执行过程,即监视恶意代码的每一个执行步骤,在分析过程中也可以在适当的时候执行恶意代码的一个片段,这种分析方法可以全面监视恶意代码的执行过程,但是分析过程相当耗时。
②利用系统hook技术监视恶意代码执行过程中的系统调用和API使用状态来分析恶意代码的功能,这种方法经常用于恶意代码检测。
二、误用检测技术
误用检测也被称为基于特征字的检测。他是目前检测恶意代码最常用的技术,主要源于模式匹配的思想。其检测过程中根据恶意代码的执行状态又分为静态检测和动态检测:静态检测是指脱机对计算机上存储的所有代码进行扫描;动态检测则是指实时对到达计算机的所有数据进行检查扫描,并在程序运行过程中对内存中的代码进行扫描检测。