第7章恶意代码分析与防治内容提要◎恶意代码的发展史和恶意代码长期存在的原因◎恶意代码实现机理、定义以及攻击方法◎恶意代码生存技术、隐藏技术,介绍网络蠕虫的定义以及结构◎恶意代码防范方法:基于主机的检测方法和基于网络的检测方法7.1恶意代码概述代码是指计算机程序代码,可以被执行完成特定功能。任何食物事物都有正反两面,人类发明的所有工具既可造福也可作孽,这完全取决于使用工具的人。计算机程序也不例外,软件工程师们编写了大量的有用的软件(操作系统,应用系统和数据库系统等)的同时,黑客们在编写编写扰乱社会和他人的计算机程序,这些代码统称为恶意代码(MaliciousCodes)。7.1.1研究恶意代码的必要性在Internet安全事件中,恶意代码造成的经济损失占有最大的比例。恶意代码主要包括计算机病毒(Virus)、蠕虫(Worm)、木马程序(TrojanHorse)、后门程序(Backdoor)、逻辑炸弹(LogicBomb)等等。与此同时,恶意代码成为信息战、网络战的重要手段。日益严重的恶意代码问题,不仅使企业及用户蒙受了巨大经济损失,而且使国家的安全面临着严重威胁。恶意代码问题,不仅使企业和用户蒙受了巨大的经济损失,而且使国家的安全面临着严重威胁。目前国际上一些发达国家(如美国,德国,日本等国)均已在该领域投入大量资金和人力进行了长期的研究,并取得了一定的技术成果。据报道,1991年的海湾战争,美国在伊拉克从第三方国家购买的打印机里植入了可远程控制的恶意代码,在战争打响前,使伊拉克整个计算机网络管理的雷达预警系统全部瘫痪,这是美国第一次公开在实战中使用恶意代码攻击技术取得的重大军事利益。7.1.1研究恶意代码的必要性恶意代码攻击成为信息战、网络战最重要的入侵手段之一。恶意代码问题无论从政治上、经济上,还是军事上,都成为信息安全面临的首要问题。恶意代码的机理研究成为解决恶意代码问题的必需途径,只有掌握当前恶意代码的实现机理,加强对未来恶意代码趋势的研究,才能在恶意代码问题上取得先决之机。一个典型的例子是在电影《独立日》中,美国空军对外星飞船进行核轰炸没有效果,最后给敌人飞船系统注入恶意代码,使敌人飞船的保护层失效,从而拯救了地球,从中可以看出恶意代码研究的重要性。7.1.2恶意代码的发展史恶意代码经过20多年的发展,破坏性、种类和感染性都得到增强。随着计算机的网络化程度逐步提高,网络传播的恶意代码对人们日常生活影响越来越大。1988年11月泛滥的Morris蠕虫,顷刻之间使得6000多台计算机(占当时Internet上计算机总数的10%多)瘫痪,造成严重的后果,并因此引起世界范围内关注。1998年CIH病毒造成数十万台计算机受到破坏。1999年Happy99、Melissa病毒大爆发,Melissa病毒通过E-mail附件快速传播而使E-mail服务器和网络负载过重,它还将敏感的文档在用户不知情的情况下按地址簿中的地址发出。2000年5月爆发的“爱虫”病毒及其以后出现的50多个变种病毒,是近年来让计算机信息界付出极大代价的病毒,仅一年时间共感染了4000多万台计算机,造成大约87亿美元的经济损失。7.1.2恶意代码的发展史2001年,国信安办与公安部共同主办了我国首次计算机病毒疫情网上调查工作。结果感染过计算机病毒的用户高达73%,其中,感染三次以上的用户又占59%多,网络安全存在大量隐患。2001年8月,“红色代码”蠕虫利用微软Web服务器IIS4.0或5.0中Index服务的安全漏洞,攻破目标机器,并通过自动扫描方式传播蠕虫,在互联网上大规模泛滥。2003年,SLammer蠕虫在10分钟内导致互联网90%脆弱主机受到感染。同年8月,“冲击波”蠕虫爆发,8天内导致全球电脑用户损失高达20亿美元之多。2004年到2006年,振荡波蠕虫、爱情后门、波特后门等恶意代码利用电子邮件和系统漏洞对网络主机进行疯狂传播,给国家和社会造成了巨大的经济损失。恶意代码的发展目前,恶意代码问题成为信息安全需要解决的,迫在眉睫的、刻不容缓的安全问题。图7-1显示了过去20多年主要恶意代码事件。恶意代码从80年代发展至今体现出来的3个主要特征①恶意代码日趋复杂和完善:从非常简单的,感染游戏的AppleII病毒发展到复杂的操作系统内核病毒和今天主动式传播和破坏性极强的蠕虫。恶意代码在快速传播机制和生存性技术研究取得了很大的成功。②恶意代码编制方法及发布速度更快:恶意代码刚出现时发展较慢,但是随着网络飞速发展,Internet成为恶意代码发布并快速蔓延的平台。特别是过去5年,不断涌现的恶意代码,证实了这一点。③从病毒到电子邮件蠕虫,再到利用系统漏洞主动攻击的恶意代码:恶意代码的早期,大多数攻击行为是由病毒和受感染的可执行文件引起的。然而,在过去5年,利用系统和网络的脆弱性进行传播和感染开创了恶意代码的新纪元。7.1.3恶意代码长期存在的原因计算机技术飞速发展的同时并未使系统的安全性得到增强。技术进步带来的安全增强能力最多只能弥补由应用环境的复杂性带来的安全威胁的增长程度。不但如此,计算机新技术的出现还很有可能使计算机系统的安全变得比以往更加脆弱。AT&T实验室的S.Bellovin曾经对美国CERT(ComputerEmergencyResponseTeam)提供的安全报告进行过分析,分析结果表明,大约50%的计算机网络安全问题是由软件工程中产生的安全缺陷引起的,其中,很多问题的根源都来自于操作系统的安全脆弱性。互联网的飞速发展为恶意代码的广泛传播提供了有利的环境。互联网具有开放性的特点,缺乏中心控制和全局视图能力,无法保证网络主机都处于统一的保护之中。计算机和网络系统存在设计上的缺陷,这些缺陷会导致安全隐患。7.2码恶意代码实现机理早期恶意代码的主要形式是计算机病毒。80年代,Cohen设计出一种在运行过程中可以复制自身的破坏性程序,Adleman将它命名为计算机病毒,它是早期恶意代码的主要内容。随后,Adleman把病毒定义为一个具有相同性质的程序集合,只要程序具有破坏、传染或模仿的特点,就可认为是计算机病毒。这种定义有将病毒内涵扩大化的倾向,将任何具有破坏作用的程序都认为是病毒,掩盖了病毒潜伏、传染等其它重要特征。7.2.1恶意代码的定义90年代末,恶意代码的定义随着计算机网络技术的发展逐渐丰富,Grimes将恶意代码定义为,经过存储介质和网络进行传播,从一台计算机系统到另外一台计算机系统,未经授权认证破坏计算机系统完整性的程序或代码。它包括计算机病毒(ComputerVirus)、蠕虫(Worms)、特洛伊木马(TrojanHorse)、逻辑炸弹(LogicBombs)、病菌(Bacteria)、用户级RootKit、核心级RootKit、脚本恶意代码(MaliciousScripts)和恶意ActiveX控件等。由此定义,恶意代码两个显著的特点是:非授权性和破坏性。恶意代码的相关定义恶意代码类型定义特点计算机病毒指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。潜伏、传染和破坏计算机蠕虫指通过计算机网络自我复制,消耗系统资源和网络资源的程序扫描、攻击和扩散特洛伊木马指一种与远程计算机建立连接,使远程计算机能够通过网络控制本地计算机的程序。欺骗、隐蔽和信息窃取逻辑炸弹指一段嵌入计算机系统程序的,通过特殊的数据或时间作为条件触发,试图完成一定破坏功能的程序。潜伏和破坏病菌指不依赖于系统软件,能够自我复制和传播,以消耗系统资源为目的的程序。传染和拒绝服务用户级RootKit指通过替代或者修改被系统管理员或普通用户执行的程序进入系统,从而实现隐藏和创建后门的程序。隐蔽,潜伏核心级RootKit指嵌入操作系统内核进行隐藏和创建后门的程序隐蔽,潜伏7.2.2恶意代码攻击机制恶意代码的行为表现各异,破坏程度千差万别,但基本作用机制大体相同,其整个作用过程分为6个部分:①侵入系统。侵入系统是恶意代码实现其恶意目的的必要条件。恶意代码入侵的途径很多,如:从互联网下载的程序本身就可能含有恶意代码;接收已经感染恶意代码的电子邮件;从光盘或软盘往系统上安装软件;黑客或者攻击者故意将恶意代码植入系统等。②维持或提升现有特权。恶意代码的传播与破坏必须盗用用户或者进程的合法权限才能完成。③隐蔽策略。为了不让系统发现恶意代码已经侵入系统,恶意代码可能会改名、删除源文件或者修改系统的安全策略来隐藏自己。④潜伏。恶意代码侵入系统后,等待一定的条件,并具有足够的权限时,就发作并进行破坏活动。⑤破坏。恶意代码的本质具有破坏性,其目的是造成信息丢失、泄密,破坏系统完整性等。⑥重复①至⑤对新的目标实施攻击过程。恶意代码的攻击模型7.3恶意代码实现关键技术一段好的恶意代码,首先必须具有良好隐蔽性,生存性,不能轻松被软件或者用户察觉。然后,必须具有良好的攻击性。7.3.1恶意代码生存技术生存技术主要包括4方面:反跟踪技术加密技术模糊变换技术自动生产技术。反跟踪技术可以减少被发现的可能性,加密技术是恶意代码自身保护的重要机制。1.反跟踪技术(1)禁止跟踪中断。针对调试分析工具运行系统的单步中断和断点中断服务程序,恶意代码通过修改中断服务程序的入口地址实现其反跟踪目的。“1575”计算机病毒采用该方法将堆栈指针指向处于中断向量表中的INT0至INT3区域,阻止调试工具对其代码进行跟踪。(2)封锁键盘输入和屏幕显示,破坏各种跟踪调试工具运行的必需环境;(3)检测跟踪法。检测跟踪调试时和正常执行时的运行环境、中断入口和时间的差异,根据这些差异采取一定的措施,实现其反跟踪目的。例如,通过操作系统的API函数试图打开调试器的驱动程序句柄,检测调试器是否激活确定代码是否继续运行。(4)其它反跟踪技术。如指令流队列法和逆指令流法等。反静态分析技术主要包括两方面内容(1)对程序代码分块加密执行。为了防止程序代码通过反汇编进行静态分析,程序代码以分块的密文形式装入内存,在执行时由解密程序进行译码,某一段代码执行完毕后立即清除,保证任何时刻分析者不可能从内存中得到完整的执行代码;(2)伪指令法(JunkCode)。伪指令法系指在指令流中插入“废指令”,使静态反汇编无法得到全部正常的指令,不能有效地进行静态分析。例如,“Apparition”是一种基于编译器变形的Win32平台的病毒,编译器每次编译出新的病毒体可执行代码时都要插入大量的伪指令,既达到了变形的效果,也实现了反跟踪的目的。此外,伪指令技术还广泛应用于宏病毒与脚本恶意代码之中。2.加密技术加密技术是恶意代码自我保护的一种手段,加密技术和反跟踪技术的配合使用,使得分析者无法正常调试和阅读恶意代码,不知道恶意代码的工作原理,也无法抽取特征串。从加密的内容上划分,加密手段分为信息加密、数据加密和程序代码加密三种。大多数恶意代码对程序体自身加密,另有少数恶意代码对被感染的文件加密。例如,“Cascade”是第一例采用加密技术的DOS环境下的恶意代码,它有稳定的解密器,可以解密内存中加密的程序体。“Mad”和“Zombie”是“Cascade”加密技术的延伸,使恶意代码加密技术走向32位的操作系统平台。此外,“中国炸弹”(Chinesebomb)和“幽灵病毒”也是这一类恶意代码。3.模糊变换技术(1)指令替换技术。(2)指令压缩技术。(3)指令扩展技术。(4)伪指令技术。(5)重编译技术。4.自动生产技术恶意代码自动生产技术是针对人工分析技术的。“计算机病毒生成器”,使对计算机病毒一无所知的用户,也能组合出算法不同、功能各异的计算机病毒。“多态性发生器”可将普通病毒编译成复杂多变的多态性病毒。多态变换引擎可以使程序代码本身发生变化,并保持原有功能。保加利亚的“DarkAvenger”是较为著名的一个例子,这个变换引擎每产生一个恶意代码,其程序体都会发生变化,反恶意代码软件如果采用基于