



恶意代码又称恶意软件,是指在不为人知的情况下侵入用户的计算机系统,破坏系统、网络、信息的保密性、完整性和可用性的程序或代码。与正常代码相比,恶意代码具有非授权性和破坏性等特点,这也是对其进行判断的主要依据。
自计算机病毒出现以来,恶意代码发展出了多种形式,包括病毒、木马、蠕虫、后门程序、逻辑炸弹、RootKit、间谍软件、恶意脚本代码等。
近年来,不同类别的恶意代码之间的界限逐渐模糊,其采用的技术和方法呈现出多样化、集成化的特点。计算机杀毒软件中的“毒”,也不再只针对于传统的计算机病毒,而是针对各类恶意代码。当今,木马取代传统的计算机病毒,正成为恶意代码的主要形式及恶意黑客常利用的攻击手段。因此,本章主要介绍计算机木马。在此之前,将对另外两种重要的恶意代码——计算机病毒和计算机蠕虫做一个简单介绍。
下面我们从定义、结构两方面对计算机病毒进行简单了解。
(一)计算机病毒的定义
截至目前,仍然没有出现可以被大家广泛接受的对计算机病毒的准确定义。因此,下面列举几种比较有影响力的定义。
计算机病毒的定义最早由美国计算机研究专家科恩博士给出,即计算机病毒是一种计算机程序,它通过修改其他程序,把自己的一个复制或演化的复制插入其他程序中,从而实施感染。该定义不仅突出了病毒的传染特性(即病毒可以自我繁殖),也提到了病毒的演化特性,即病毒在感染的过程中可以改变自身的一些特征。这种病毒演化特性在之后出现的很多病毒上都有所体现,它们往往通过自我演化来增强隐匿性,以躲避反病毒软件的查杀。
在科恩博士提出的病毒定义的基础上,Symantec首席反病毒研究员 Peter Szor给出了更为精确的病毒定义:计算机病毒是一种计算机程序,它递归地、明确地复制自己或其演化体。该定义使用“明确、递归”来区别病毒与正常程序的复制过程,“递归”反映了一个文件在被病毒感染以后会进一步感染其他文件,“明确”强调了自我复制是病毒的主要功能。该定义较为抽象,且没有严格指明病毒的自我复制到底采用什么样的方式进行,但这也使得种类各异的计算机病毒都能被该定义覆盖。
我国在1994年2月18日正式发布并开始施行《中华人民共和国计算机信息系统安全保护条例》,并于2011年对其进行修订,其中的第二十八条明确指出:计算机病毒,是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。该定义在我国具有法律性和权威性。
作为一种特殊的计算机程序,计算机病毒具有以下几项独特之处。
(1)传染性。
与生物界的病毒可以从一个生物体传播到另一个生物体一样,计算机病毒会通过各种渠道从已被感染的文件扩散到未被感染的文件,或者从已被感染的计算机系统扩散到其他未被感染的计算机系统。作为一段计算机程序,病毒进入计算机系统并获得运行机会以后,会搜寻满足其感染条件的文件或存储介质,并在确定目标后进行自我复制。遭受病毒感染的文件或存储介质将成为新的病毒传染源,并通过各种方式进一步传播该病毒。可以说,计算机病毒最重要的特点就是传染性,因此,是否具有传染性是判断程序是否是计算机病毒的首要条件。
(2)潜伏性。
设计精巧的计算机病毒在进入计算机系统以后,通常会进行较长时间的潜伏,除伺机传染外,不进行任何特征明显的破坏活动,以留出充裕的时间进行繁殖和扩散。试想,如果一个计算机病毒进入系统后,立刻修改系统分区表信息或恶意删除系统文件,那么其造成的明显的系统异常将暴露自身的存在,进而导致计算机用户采取查杀病毒或重新安装系统等措施,这样,病毒难以广泛扩散,其影响面和攻击效果都将非常有限。
(3)可触发性。
病毒编写者在设计病毒时,一般不会让病毒永远处于潜伏状态,而是希望病毒能够在特定条件下被激活,并完成预先设定的工作。计算机病毒的内部往往有一个或多个触发条件,病毒编写者通过触发条件来控制病毒的感染和破坏活动。可作为病毒触发条件的事件多种多样,可以是某个特定时间,也可以是键盘输入的某个特定字符的组合,还可以是病毒内置的计数器达到某个指定数值等,病毒编写者可以根据需要灵活设置病毒的触发条件。例如,著名的恶性病毒CIH在每年的4月26日被触发,它的一些变种在每个月的26日都会发作。病毒Peter-2在每年的2月27日被触发,该病毒会提出3个问题,如果用户不能回答正确这3个问题,那么病毒将加密硬盘,导致用户无法使用系统。
(4)寄生性。
计算机病毒常常寄生于文件或硬盘的引导扇区中。以 exe 为扩展名的可执行文件是目前病毒最常寄生的文件类型之一。当相应文件被执行时,寄生其中的病毒通常优先获得运行机会并常驻内存,之后伺机感染其他文件并进行破坏。寄生于软、硬盘引导扇区或主引导扇区中的病毒被称为引导型病毒,此类病毒将自身全部或部分的代码存储于软、硬盘的引导扇区,而将正常的系统引导记录(以及病毒中因空间限制或其他原因而不便放在引导扇区中的部分代码)存储在软、硬盘的其他空间。按照正常的工作流程,系统启动时,引导扇区中的引导程序将被加载到内存中运行。病毒占据引导扇区后,可以在系统启动时获得控制权限,并通过调用系统正常的引导记录保证系统启动。早期的很多计算机病毒是引导型病毒,如小球病毒和巴基斯坦病毒。
(5)非授权执行性。
在计算机系统中,一个正常程序通常是在用户的请求下执行的,操作系统依据用户的权限为程序分配必要的资源后,程序才能执行。程序的具体执行过程对用户来说是透明的,且程序的执行需要经过用户授权。没有用户会在明知程序感染病毒的情况下依然让其运行。因此,计算机病毒必须隐藏在合法的程序和数据中,伺机获得运行机会,其往往在没有用户许可的情况下获得系统资源并得以执行,这体现了非授权执行性。
(6)破坏性。
病毒在被感染主机上的活动完全取决于病毒编写者的设计。一些研究人员按照病毒对计算机的破坏程度,将其划分为良性病毒和恶性病毒。良性病毒通常只显示一些文字、动画,或者播放一段音乐,不对系统的正常运作造成大的影响。例如,我国曾出现的石头病毒,被感染主机的启动界面会显示一句英文,其对应的中文意思是“你的计算机现在是石头了!”,但显示完成后仍然可以正常进入操作系统。该病毒既不会破坏操作系统文件,也不会删除用户数据,对系统运行的影响很小,因此属于典型的良性病毒。而恶性病毒会严重影响系统的使用,其常见操作包括干扰、中断系统的输入或输出,修改系统配置,删除系统中的数据和程序,加密甚至格式化磁盘,以及破坏分区表信息等。尽管良性病毒对计算机系统造成的危害较小,但凡是病毒,其运行势必占用资源,包括CPU运行时间、内存空间、磁盘存储空间等,这会在一定程度上降低系统的性能。此外,病毒编写者在散布病毒前往往没有对病毒进行充分测试,因此其代码可能涉及对系统非公开API的调用,甚至以内核态特权级别运行,这些代码中存在的设计或实现漏洞,很可能为被感染主机造成不在病毒编写者计划内的破坏。
(二)计算机病毒的结构
从结构上看,计算机病毒一般包括引导模块、搜索模块、感染模块、表现模块和标识模块,它们分工合作,使计算机病毒能够正常运作、实现自我繁殖并完成各种破坏功能。
引导模块是计算机病毒的基础模块,该模块负责完成病毒正常运行所需的请求内存、修改系统中断等工作,保证了病毒能够获得系统控制权,并在系统中正常运行。
搜索模块是病毒的一个重要功能模块,该模块负责发现或定位病毒的感染对象。以文件型病毒为例,该病毒需要在系统中搜寻满足感染条件的文件。单从搜索范围看,搜索模块可以进行多种设定,如搜索范围既可以被限定为用户访问的可执行文件或在系统目录中查找,也可以是整个磁盘空间或病毒编写者认为合适的其他任意区域。搜索模块还需要判断文件是否符合感染条件,文件的大小、创建时间、隐藏属性等都可以作为其判定感染目标的逻辑条件。搜索模块在很大程度上决定了病毒的扩散能力,因为病毒只有找到合适的感染对象,才能实施感染及自我繁殖。搜索模块设计得越精细,病毒越有可能准确找到感染目标。但是,复杂的搜索模块也会带来一些弊端,搜索模块代码的增长将直接导致病毒体的增长,这会降低病毒的传播效率。同时,过于复杂的搜索模块还可能影响被感染系统的整体性能,从而导致病毒暴露。因此,设计病毒的搜索模块时,需要综合考虑目标搜索的准确度、病毒的大小,以及资源消耗等因素。
感染模块是计算机病毒的核心模块,病毒通过这一模块实现自我繁殖。感染模块在搜索模块的基础上起作用,病毒通过搜索模块确定感染目标,继而由感染模块对目标实施感染。病毒可以在感染模块中设置实施感染的逻辑条件,如以设定的概率进行感染,从而避免频繁感染引起用户察觉。病毒实施感染的方法千差万别,具体取决于感染模块的设计。感染模块需要确定病毒附加在感染目标上的方法,以文件型病毒为例,其既能以插入的方式链接目标文件,又能在目标文件的首部附加病毒代码,或者搜寻目标文件没有使用的区域,利用文件的空闲空间植入病毒代码,甚至采用伴随感染的方式,不对文件本身进行任何修改。感染模块还要确定病毒在感染过程中是否进行演化,病毒体既可以不做任何修改,直接复制到感染目标上,也可以首先对自身进行一定的演化,再将演化体植入感染目标中。此外,感染模块还可以包含对感染目标进行后期处理的方式。例如,可以对被感染的文件进行压缩,因为文件在被病毒感染后,其大小通常会增长,故若在实施感染后对文件进行压缩,则可使用户难以发现文件的异常变化。
表现模块是不同病毒之间差异最大的部分,在该模块中,病毒编写者可以根据自己的主观意愿,设定病毒的触发条件及病毒在触发后需要执行的具体操作。病毒的触发条件可以是日期、时间、键盘输入,以及其他各类逻辑条件。在满足触发条件的情况下,病毒会根据设定的代码开始自我表现,随后影响键盘输入、屏幕显示、音频输出、打印输出、文件数据、CMOS数据甚至使系统完全崩溃。
标识模块属于病毒的辅助模块,不是所有病毒均包含这个模块。病毒在成功感染一个目标后,其标识模块在目标的特定区域设置感染标记(或者说设置病毒签名)。从技术角度看,标识模块可以使病毒在实施感染前确定一个文件(或一个系统)是否已经被感染,以避免重复性感染带来的系统资源浪费。例如,巴基斯坦病毒在感染主机系统以后,会在主机引导扇区的04H地址处写入内容“1234H”,从而标识该主机已经被感染。此外,一些杀毒软件会将病毒的感染标记提取出来作为病毒特征码,从而根据感染标记是否存在,判断一个文件(或一个系统)是否已经被感染。然而,感染标记仅仅是病毒实施感染的众多表征中的一个,依靠感染标记进行病毒免疫和病毒感染判断是不可靠的。从病毒免疫的角度看,大多数病毒的感染标记形同虚设,因为有些病毒会对一个文件进行重复性感染,如黑色星期五病毒。此外,病毒可以在变种过程中修改感染标记,这将直接导致免疫失效。
计算机蠕虫是一种可以独立运行的、通过网络传播的恶性代码。它具有计算机病毒的一些特性,如传播性、隐蔽性、破坏性等,但也具有自己的特点,如漏洞依赖性等。计算机蠕虫需要通过网络系统漏洞进行传播,但不需要宿主文件,有的蠕虫甚至只存在于内存中。
计算机蠕虫可凭借其传播速度快、规模大等特点,在短时间内消耗大量网络和系统资源,从而严重威胁网络安全。1988年11月2日,Morris蠕虫发作,一夜之间造成与该网络系统连接的6000多台计算机停机,这些计算机位于美国国家航空航天局,以及美国的军事基地和主要大学,造成的直接经济损失达9200多万美元。2001年7月19日,Code Red蠕虫爆发,其在9个小时内攻击了25万台计算机,更在随后几个月内产生了威力更强的几个变种,其中的CodeRed II造成了约12亿美元的经济损失。2001年9月18日,结合了病毒技术的Nimda蠕虫席卷全球计算机网络。2003年1月25日爆发的Slammer蠕虫,利用微软SQL Server 2000数据库服务远程堆栈缓冲区溢出漏洞,在远程机器上执行自己的恶意代码,15分钟内感染了75000台主机,人工检测和响应根本无法应对。2017年5月12日,WannaCry蠕虫通过MS17-010漏洞(Windows操作系统中用于文件和打印共享的SMB协议存在的漏洞,网络端口号是445)在全球范围爆发,感染了大量的计算机,且该蠕虫感染计算机后,会向其中植入敲诈者病毒,导致计算机中的大量文件被加密,只有受害者支付价值相当于300美元(折合人民币约2069元)的比特币后,其计算机才可被解锁,因此该蠕虫也被称为勒索病毒。WannaCry蠕虫及其变种带来的影响一直持续到今天,给全球用户造成了巨大的经济损失。
一般来说,蠕虫包括以下几个基本功能模块。
(1)搜索模块:可自动运行,负责寻找满足感染条件(存在漏洞)的目标计算机。搜索模块通常会利用网络扫描技术来探测主机的存活情况、服务开启情况、软件版本等。当搜索模块向某个主机发送探测漏洞的信息,并成功收到反馈信息后,就锁定了一个可传播的对象。
(2)攻击模块:负责按漏洞攻击步骤,自动攻击搜索模块找到的对象,获得该主机的权限(一般为管理员权限),并在被感染的计算机上建立传输通道(通常获取一个远程Shell)。攻击模块通常利用系统或服务中存在的安全漏洞(如缓冲区溢出漏洞)远程注入、执行代码,并在必要的时候进行权限提升。
(3)传输模块:负责计算机间的蠕虫程序复制。既可以利用远程Shell直接传输复制的程序,也可以安装后门并通过文件传输复制的程序。
(4)负载模块:负责在进入被感染系统后,实施信息搜集、现场清理、攻击破坏等功能。尽管负载模块可以实现与木马相同的功能(远程控制功能除外),但因恶意黑客一般不需要控制蠕虫,故从这一点上看,蠕虫更接近病毒。
(5)控制模块:负责调整蠕虫行为,控制被感染主机,使其执行蠕虫编写者下达的指令。
蠕虫的攻击过程是对一般网络攻击过程的自动化实现,以上模块中的前3个构成了蠕虫的自动入侵功能,其中最关键的一步就是网络安全漏洞(主要是缓冲区溢出漏洞)使代码在远程系统上自动运行,这也是蠕虫与病毒、木马的本质区别。漏洞攻击体现了蠕虫的漏洞依赖性,因此,修补安全漏洞或关闭相关网络端口可以防止相应蠕虫侵入。
影响蠕虫传播速度的因素主要有三个:一是有多少潜在的“脆弱”目标可以被利用;二是潜在的存在漏洞的主机被发现的速度有多快;三是蠕虫对目标的感染(复制自身)速度有多快。决定蠕虫传播速度的主要因素是对存在漏洞的主机的发现速度,即单位时间内能够找到的可被感染的主机系统的数量。
计算机木马,又称特洛伊木马,该别称来源于荷马史诗。该书中记载,特洛伊王子帕里斯访问希腊,在见到希腊王后海伦后心生爱意,于是将海伦偷偷带回特洛伊。希腊国王发现王后被带走后勃然大怒,带兵远征特洛伊。由于特洛伊防守森严,希腊军队围攻了9年一直无法攻入。到了第10年,一位希腊将领想出一个计策:军队佯装撤兵,并在营地上留下一匹巨大的木马。该计策实施后,特洛伊人认为敌人已经败走,于是将木马作为战利品搬入城内,并举行大型欢庆活动庆祝战争胜利。但该木马中实际隐藏了一批精锐的希腊士兵,他们在夜间从木马中偷偷出来,与城外的大部队里应外合,攻下了特洛伊城。
将以上故事中的木马映射到网络安全领域,恶意黑客相当于希腊军队,计算机用户相当于特洛伊人。由于很多计算机用户通过打补丁、安装个人防火墙等方式对计算机进行了安全防护,因此恶意黑客很难直接通过网络攻击的方法获得计算机的控制权限。在这种情况下,恶意黑客可通过各种手段散播特洛伊木马,并诱骗计算机用户运行,这样,木马会绕过系统的安全防护手段,帮助恶意黑客获得计算机的控制权限。
在网络安全领域,特洛伊木马是指恶意黑客为盗取他人信息,甚至为远程控制他人计算机而制作的、通过各种手段传播并骗取目标用户执行的恶意代码。与病毒相似的是,木马具有破坏性,会对计算机安全构成威胁。同时,木马具有很强的隐蔽性,会采用各种手段避免被计算机用户发现。但与病毒不同的是,木马不具备自我复制能力。计算机发展初期木马出现较少,这是因为木马编写者必须通过手工传播的方法散播木马程序,这个操作难度较大。后来,互联网的迅速发展为木马提供了便捷的传播渠道,也对恶意黑客们不断改进和增强木马技术起到了促进作用。
木马通常具有很强的欺骗性。例如,1999年出现了一种通过电子邮件传播的木马,该邮件看似来源于微软公司,提供了微软Internet Explorer浏览器的免费补丁,但事实并非如此。邮件附件中名为“ie0199.exe”的可执行文件,实际上是一个木马。邮件的正文说:“由于您是微软Internet Explorer浏览器的用户,微软公司向您提供该浏览器的升级程序,该程序将弥补浏览器中的安全漏洞。烦请您下载并运行附件(ie0199.exe)”。一旦用户下载并运行该附件,木马就会感染用户的主机并进行破坏。
木马在进入计算机系统后执行什么操作,取决于木马编写者的设计。按照木马执行的操作,可将其划分为以下几类。
(1)密码窃取型木马(PSW Trojan):网络游戏的用户名及密码、社交软件的用户账号及密码往往是容易被木马窃取的数据信息。目前,大部分网络游戏中角色的修炼及游戏道具的获取都需要高昂的成本投入,很多游戏玩家愿意通过支付金钱来获得更高等级的游戏体验。恶意黑客盗取用户的账号、密码后,可以通过将更高级的账号贩卖给需要的游戏玩家来获取收益。
(2)投放器型木马(Trojan Dropper):此类木马用于在目标系统内安装恶意(一般是指有利于恶意黑客实施破坏的)程序。由于投放器型木马本身不执行破坏功能,且设计简单,因此恶意黑客常常通过创建投放器型木马来绕过反病毒软件的监控,并在进入用户系统后关闭反病毒软件,进而通过网络下载指定的木马程序或其他类型的恶意程序。大部分投放器型木马采用VBS或JavaScript等脚本语言编写,其编程实现难度较低,可以实现多种多样的功能。
(3)下载型木马(Trojan Downloader):此类木马的功能与投放器型木马的相似,以在目标主机上安装恶意程序为主要目的。两类木马的区别在于,投放器型木马需要下载的程序是预先设定的,且在下载完成后不再进行更新。而下载型木马往往设定一些公用的网络资源(如网站、FTP、博客空间)作为下载地址,并按照一定的频率访问这些资源,从而下载恶意黑客指定的恶意程序,实现系统内恶意程序的动态升级、更新,便于恶意黑客根据需求在系统中执行操作,达成利用木马控制目标主机系统的目的。
(4)监视型木马(Trojan Spy):此类木马的主要功能是跟踪用户行为,将收集的信息存储在用户的硬盘中,并适时发送给恶意黑客。其收集的信息包括用户的键盘记录、截屏信息等。一些该类型的木马甚至会打开与用户主机连接的摄像头,从而对用户进行直接监视。
(5)代理型木马(Trojan Proxy):此类木马在被感染主机上起的是代理服务器的作用,从而为恶意黑客提供匿名的网络访问。此类木马通常被恶意黑客用于大规模地发送垃圾邮件,以及发起DDoS攻击等。
(6)点击型木马(Trojan Clicker):此类木马用于将被感染主机发起的HTTP访问引导至特定的Web站点,其设计目的多种多样,有的出于广告宣传目的,旨在提高特定站点的点击率,也有的是为了针对特定站点实施DDoS攻击。
(7)远程控制型木马(Backdoor Trojan):此类木马可帮助恶意黑客对被感染主机实施远程控制,并执行注册表的修改及鼠标、键盘的控制等各类操作。
卡巴斯基等反病毒软件厂商通常基于以上几种木马类型对木马进行类别划分。由于各类木马的攻击目的不同,因此木马编写者可以根据需求对木马程序进行定制,从而实现预期的功能。例如,文件窃取型木马以盗取用户计算机中的敏感文档为目的,故常常预设关键字作为搜索对象,并结合搜索程序,将在被感染主机中搜索到的匹配文档发往指定邮箱。试卷大盗便是一种典型的文件窃取型木马,它会自动搜索受害者计算机,查找文件名中有“考题”“考卷”等关键字的文档,并将其发送到特定邮箱。我们将游离于主流木马类别之外的木马通称为为完成特定任务而设计的木马。
从功能实现的复杂程度和自我保护强度的角度看,木马技术大致经历了以下六代。
第一代是最原始的木马,只具备最基本的功能,如进行简单的密码窃取,以及通过电子邮件发送信息等。
第二代木马在技术上有了很大的进步,可以实现自动跟踪目标机屏幕变化、完全模拟键盘及鼠标输入、获取系统信息、限制系统功能、进行远程文件操作及注册表操作、发送信息、完成点对点通信等复杂功能。灰鸽子、冰河是其中的代表。
第三代木马在数据传递技术方面有了改进,出现了 ICMP等类型的木马,可利用畸形报文传递数据,增加了杀毒软件查杀识别的难度。
第四代木马在进程隐藏方面有了很大改进,其采用内核插入的嵌入方式,利用远程插入线程技术嵌入DLL线程,或者通过挂接PSAPI实现木马程序的隐藏。哪怕在Windows NT/2000下,第四代木马依然可实现良好的隐藏效果。
第五代为驱动级木马,其大多使用Rootkit技术深入内核空间,以实现自身的深度隐藏,且在目标系统中以内核态运行,拥有对杀毒软件和网络防火墙进行攻击的系统特权,查杀难度较大。
随着身份认证USBKey和杀毒软件主动防御技术的兴起,黏虫技术类型和特殊反显类型的木马逐渐开始系统化,形成了我们所说的第六代木马。在这两种类型的木马中,前者以盗取和篡改用户敏感信息为主,后者以动态口令和硬件证书攻击为主。PassCopy、暗黑蜘蛛侠是其中的代表。