本讲讨论信息安全领域中最著名、最可怕、最难懂的问题之一。阐述了什么是病毒和蠕虫(什么不是),总结了防御病毒的方法,同样也列出了一些进一步学习的资料。
病毒和蠕虫的定义
计算机病毒也许是安全领域中最有名且令人头疼的问题,但是人们并没有真正正确地意识到它们的危害性。所有的病毒都会产生一定的危害性,除了一些特例外,病毒带来的危害是社会性的。
每一种病毒都会对机器的性能产生一定程度的影响,这是由于它们会占用磁盘空间、内存和处理器的运算时间。有些病毒对系统产生的危害是无妨的。但有些却是很危险的,甚至会导致硬件无法使用(如CIH病毒)。现在还没有病毒可以直接破坏硬件,但是这并不代表一定没有,大多数流行的病毒只是不断地复制自身,从而导致存在很长时间而没有被发现,还有些病毒由于直接产生危害而很容易被发现。还有些病毒会缓慢地破坏数据,有些除了破坏性很强外还会长期存在。
要注意的是即使是一个危害性不强的病毒也会带来很多问题,有时甚至不会被发现。由于不知道病毒的存在而采取一些不恰当的操作,这样会导致二次破坏。同时还会产生社会影响,如名誉损失、成为散播病的替罪羊,甚至遭到法律制裁,被指控没有尽到责任、违反数据保护法。在许多国家可能会被指控为故意传播病毒。
那些不进行恶意破坏的病毒可以称之为良性病毒,类似良性肿瘤。但时,这种说法具有误导性,良性并不意味着这类病毒没有破坏性。
因特网上应用(如电子邮件)的急剧增加使病毒的危害涉及到每一个人。局域网的不断增加,数据共享和应用的增多使主机受到病毒侵害的几率成倍增长。总之,病毒传播的范围比以前更广、速度更快。蠕虫病毒最著名。1990年初,因特网应用不再局限于通过哑终端同大型机或微机相连。第一代病毒产生的危害性相应减少。当时的病毒和杀毒技术集中在单台微机上。但到了90年代后半期,编写病毒的作者开始研究利用蠕虫技术来加速病毒的传播。现在,蠕虫病毒已经成为系统管理员要面对的一大难题。
本章将详细介绍蠕虫技术的原理,但没能特别关注病毒和蠕虫的区别。在有关病毒的文章中,这两个词经常互换使用。
什么是计算机病毒
许多杀毒专家这样定义计算机病毒“病毒是一种能复制自己来“感染”目标系统的程序”。(F.Cohen:A Short Course on Computer Viruses)
这个定义中的关键是通过感染来实现复制。病毒本质上不是破坏性的,反过来一段具有破坏性的程序本质上也不是病毒。更进一步讲,虽然许多病毒是在不了解系统用户的情况下进行操作,但这不是必须的。必须的一个特点是复制:感染程序的主要目的是复制。
注意 程序这个术语不仅仅是指一个程序文件,虽然大多数病毒在某种程度上是感染文件。但是在本章中,除非特别指定其是文件感染,一般都是指被感染和具有感染性的目标,还包括主引导扇区和内含于数据文件中的宏程序。
感染是指病毒程序附在了目标系统中的一个或多个文件上。虽然附着一词在本章中多次出现,但这个词也是有歧义的,在邮件中还有其他解释。参考病毒感染过程还是很有用的。当病毒代码插入到一串命令中后,运行合法但已经被感染的程序时,就会执行病毒代码(在某些情况下病毒代码会代替合法代码运行)。
虽然感染一词经常是指病毒代码附着在程序中,但也不会是这样。有时,当系统被控制后运行一个指定的程序时病毒程序就会运行。有时,在任何程序运行前病毒都会被激活。这样不论系统中的程序是否被改动过,都可以被病毒程序有效地感染。这类病毒有簇病毒或分区表病毒(File Allocation Table,FAT),它们可以将被感染程序的指针重新定向;compamion病毒;更改Windows寄存器的病毒,这样执行任何一个程序都会调用病毒代码。
除一些特殊的病毒是删除系统程序外,其他病毒都是这样工作的:
·计算机用户执行一合法程序
·已经插入到一串命令中的病毒代码会替代其运行
·病毒代码终止或接管合法程序
companion病毒的执行过程相同,但病毒代码在一个单独的文件中。这意味着执行目标程序时病毒代码会被调用(随后会接管合法程序)。
感染病毒的过程有些类似感染生物病毒的过程,虽然这个比喻有些不适合。假想一个人感染了通过空气传染的病毒,当他在公共场所呼吸时,就会传染给他人。同样,感染了病毒的程序在执行时就有可能影响其他程序。与生物病毒感染特定人人群一样,病毒程序也只感染特定文件和系统。
什么是蠕虫病毒
蠕虫病毒的特征也是复制,一些权威人事(包括计算机病毒学之父,Fred Cohen)将蠕虫病毒定义为种病毒的一个子类。但是蠕虫病毒有特殊的地方。它和普通病毒程序的区别在于“附着”。其他病毒“附着”在合法程序上,而蠕虫病毒通过网络或系统传播自身。可以这么说,蠕虫病毒感染环境(指操作系统或邮件系统)而不是感染特定目标,如文件。
有时蠕虫也指通过网络传播的能自复制的恶意软件,但这不是真正的区别。许多病毒也可以在局域网中传播,例如,病毒并不清楚目标卷是否与自己在同一台主机上。
病毒的危害
每年都会出现大量的新病毒。它们的原理各不相同,各种文件都会被感染。然而,只有在运行程序时病毒才能传播,也就是说只有那些感染了病毒的程序或其他目标(如主引导扇区)才能成为进一步传播病毒的工具。但这不是说只有二进制可执行文件(如.EXE和.COM文件)才可以被感染。
许多数据文件同样可以感染宏病毒。目前,微软的Office软件中的两个软件(Word和Excel)最容易感染宏病毒,因为病毒利用解释语言如Visual Basic语言等。非微软公司的应用软件同样会感染宏病毒,将宏代码同文档分离的文字处理器软件感染的几率会减小。人们交换文档的可能性比交换宏代码的可能性要大得多。
Shell脚本文件、批处理文件、解释执行的代码甚至Postscript文件同样含有可执行代码,理论上也容易感染病毒。然而感染取决于很多因素,如操作平台是否流行、操作系统的访问控制。例如UNIX或NT这类多用户操作系统对资源的写权限的限制并不能制止病毒的传播和特洛伊木马。完全依赖这种保护是不明智的。事实上早期的病毒就是在UNIX操作系统上产生的。
病毒的撰写者及其目的
目前还流传着很多关于病毒的老套说法。总体上,这些说法没有多大用处。许多人编写病毒是为了保护自己的名誉,测试系统是否真正的安全。一些人在公开或半公开的新闻组如alt.comp.virus上发表自己的想法并互相讨论。这其中很多是年轻的男性,有报告说他们中的大多数成年后会离开这个领域过上正常生活。
那些负责有关病毒新闻组的人严肃地声明编写病毒是为了展示自己的才能,但他们所说的并不可靠,实际上大多数人都是为了追求时髦和刺激,而不是单纯的竞争。许多成功的病毒是由一些没有显赫头衔的个人编写的。
还有许多被媒体、法律机构、政府和其他组织高度评价的活跃人士并没有受到同行的尊敬。当然,在计算机其他领域中也是如此。
一些人是为了在这个领域内做些研究才编写病毒的。然而,做大量的研究是不现实的,那些已经开始的研究已经变成对种类的研究。换句话说,这类研究不是建立一个包含丰富样本的数据库,而是收集少量的具有代表性的样例数据。
本领域的专家是Sarah Gordon,他写了有关病毒及相关领域的大量文献。他在第四和六届病毒报告会议上发表的有关普通病毒作者的文章很有用。可以在http://www.badguys.org/papers.htm上可以找到许多他写的文章。
第二个较普遍的说法是编写杀毒程序的人同时也编写病毒代码,这是为了其杀毒软件的销量。我不能肯定这种情况是否存在。但是,很难理解为什么杀毒专家愿意看到这场游戏迷失在“黑暗的边缘”。许多业余爱好者编写过病毒。在《Generic Virus Writer II》一书中,Gordon提到的就是这些安全专家,尤其是系统管理员通过实验(善意的)导致病毒的流行。但是病毒编写者的热情会让人联想有这种可能,系统管理员和软件供应没之间没有为提高软件销售量而达成的协议;即便是有,也是极少数。
可能编写病毒的目的同其作者一样多,但并不是全部都经得起分析。许多人是为看看自复制/自更改程序到底是如何实现的。实际上,许多人辩称他们编写病毒是研究人工智能的合法途径。(许多高级病毒表现出的自适应性是相当有限的)。
许多人编写病毒是为了享受同杀毒措施较量的快乐。实际上,许多人向杀毒公司提供的病毒不是为了传播。有些人编写病毒只是想让同行羡慕而不是引起杀毒专家的注意。还有些人认为编写病毒代码同编写杀毒程序有何区别。实际上,开发人员经常基于实际或人道的原因雇佣具有编写病毒经验的人员,这通常会给他们带来新思路。
当然,许多病毒会引发很大的损失,尽管大多数人无法相信这点(通常,由于编写病毒的人的疏忽或能力的问题同样会带来危害)。许多编写病毒的人辩称只有那些没有能力保护计算机的人才会受到病毒的攻击。反过来许多编写病毒的人声明他们没有散播病毒,对他人使用自己的程序不负任何责任。如果他们确实没有在网上共享病毒源代码,其声明就是可信的,这样病毒就不会这么流行了。