首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第41期->技术专题
期刊号: 类型: 关键词:
Internet蠕虫的定义和历史

作者:spark <spark.bbs@bbs.nankai.edu.cn>
日期:2003-06-03

1.1 Internet蠕虫的定义

1.1.1 蠕虫的原始定义:

蠕虫这个生物学名词在1982年由Xerox PARC 的John F. Shoch等人最早引入计算机领域[30],并给出了计算机蠕虫的两个最基本特征:"可以从一台计算机移动到另一台计算机"和"可以自我复制"。他们编写蠕虫的目的是做分布式计算的模型试验,在他们的文章中,蠕虫的破坏性和不易控制已经初露端倪。1988年Morris蠕虫爆发后,Eugene H. Spafford 为了区分蠕虫和病毒,给出了蠕虫的技术角度的定义,"计算机蠕虫可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上。" (worm is a program that can run by itself and can propagate a fully working version of itself to other machines. )[8]。

1.1.2 病毒的原始定义:

人们在探讨计算机病毒的定义时,常常追溯到David Gerrold在1972年的发表的科幻小说《When Harlie Was One》,但计算机病毒的技术角度的定义是由Fred Cohen在1984年给出的,"计算机病毒是一种程序,它可以感染其它程序,感染的方式为在被感染程序中加入计算机病毒的一个副本,这个副本可能是在原病毒基础上演变过来的。" (a program that can 'infect' other programs by modifying them to include a possibly evolved copy of itself.)[32]。 1988年Morris蠕虫爆发后,Eugene H. Spafford 为了区分蠕虫和病毒,将病毒的含义作了进一步的解释。"计算机病毒是一段代码,能把自身加到其它程序包括操作系统上。它不能独立运行,需要由它的宿主程序运行来激活它。"(virus is a piece of code that adds itself to other programs, including operating systems. It cannot run independently and it requires that its 'host' program be run to activate it. )[8]。

1.1.3 蠕虫、病毒之间的区别与联系:

计算机蠕虫和计算机病毒都具有传染性和复制功能,这两个主要特性上的一致,导致二者之间是非常难区分的,尤其是近年来,越来越多的病毒采取了部分蠕虫的技术,另一方面具有破坏性的蠕虫也采取了部分病毒的技术,更加剧了这种情况。但对计算机蠕虫和计算机病毒进行区分还是非常必要的,因为通过对它们之间的区别、不同功能特性的分析,可以确定谁是对抗计算机蠕虫的主要因素、谁是对抗计算机病毒的主要因素;可以找出有针对性的有效对抗方案;同时也为对它们的进一步研究奠定初步的理论基础。
本节给出了病毒和蠕虫的一些差别,如下表(表格 1):

表格 1病毒和蠕虫的一些差别

-----------------------------------------------------------------------------------------
|                  | 病毒                      | 蠕虫                                   |
-----------------------------------------------------------------------------------------
| 存在形式         | 寄生                      | 独立个体                               |
-----------------------------------------------------------------------------------------
| 复制形式         | 插入到宿主程序(文件)中  | 自身的拷贝                             |
-----------------------------------------------------------------------------------------
| 传染机制         | 宿主程序运行              | 系统存在漏洞(vulnerability)          |
-----------------------------------------------------------------------------------------
| 攻击目标         | 针对本地文件              | 针对网络上的其它计算机                 |
-----------------------------------------------------------------------------------------
| 触发传染         | 计算机使用者              | 程序自身                               |
-----------------------------------------------------------------------------------------
| 影响重点         | 文件系统                  | 网络性能、系统性能                     |
-----------------------------------------------------------------------------------------
| 计算机使用者角色 | 病毒传播中的关键环节      | 无关                                   |
-----------------------------------------------------------------------------------------
| 防治措施         | 从宿主文件中摘除          | 为系统打补丁(Patch)                  |
-----------------------------------------------------------------------------------------
| 对抗主体         | 计算机使用者、反病毒厂商  | 系统软件和服务软件提供商、网络管理人员 |
-----------------------------------------------------------------------------------------

1.1.4 Internet蠕虫的完整定义:

在上面提到的蠕虫原始定义和病毒原始定义中,都忽略了相当重要的一个因素,就是计算机使用者,定义中都没有明确描述计算机使用者在其整个传染机制中所处的地位。

计算机病毒主要攻击的是文件系统,在其传染的过程中,计算机使用者是传染的触发者,是传染的关键环节,使用者的计算机知识水平的高低常常决定了病毒所能造成的破坏程度。而蠕虫主要利用计算机系统漏洞(vulnerability)进行传染,搜索到网络中存在漏洞的计算机后主动进行攻击,在传染的过程中,与计算机操作者是否进行操作无关,从而与使用者的计算机知识水平无关。

另外,蠕虫的定义中强调了自身副本的完整性和独立性,这也是区分蠕虫和病毒的重要因素。可以通过简单的观察攻击程序是否存在载体来区分蠕虫与病毒;
目前很多破坏性很强的病毒利用了部分网络功能,例如以信件作为病毒的载体,或感染Windows系统的网络邻居共享中的文件。通过分析可以知道,Windows系统的网络邻居共享本质上是本地文件系统的一种扩展,对网络邻居共享文件的攻击不能等同与对计算机系统的攻击。而利用信件作为宿主的病毒同样不具备独立运行的能力。不能简单的把利用了部分网络功能的病毒统统称为蠕虫或蠕虫病毒,因为它们不具备上面提到的蠕虫的基本特征。

通过以上的分析和总结,本文重新给出的Internet蠕虫完整定义:"Internet蠕虫是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。" (Internet worm is a program which can executes independently without intervention of computer users and propagates by compromising vulnerable computers partially or fully on the Internet.)

通过简单的分析,可以得出结论,一些常见的以蠕虫为名的病毒[24~26],都不是蠕虫。如"Happy99蠕虫病毒"、"Mellisa网络蠕虫宏病毒"、"Lover Letter网络蠕虫病毒"、"SirCam蠕虫病毒","NAVIDAD网络蠕虫"、"Blebla.B网络蠕虫"、"VBS_KAKWORM.A蠕虫"等等都是病毒而非蠕虫。

1.2 蠕虫历史回顾

1980年,Xerox PARC 的研究人员编写了最早的蠕虫[30],用来尝试进行分布式计算(Distributed Computation)。整个程序由几个段(Segment)组成,这些段分布在网络中的不同计算机上,它们能够判断出计算机是否空闲,并向处于空闲状态的计算机迁移。当某个段被破坏掉时,其它段能重新复制出这个段。研究人员编写蠕虫的目的是为了辅助科学实验。

1988年11月2日,Morris 蠕虫[8~12]发作,几天之内6000台以上的Internet服务器被感染,损失超过一千万美元。它造成的影响是如此之大,使它在后来的10几年里,被反病毒厂商作为经典病毒案例,虽然它是蠕虫而非病毒;1990年,Morris蠕虫的编写者Robert T. Morris被判有罪并处以3年缓刑、1万美元罚金和400小时的社区义务劳动。Morris蠕虫通过fingerd、sendmail、rexec/rsh三种系统服务中存在漏洞进行传播。

1989年10月16日,WANK蠕虫[33]被报告,它表现出来强烈的政治意味,自称是抗议核刽子手的蠕虫(worms against the nuclear killers),将被攻击的DEC VMS计算机的提示信息改为"表面上高喊和平,背地里却准备战争"(You talk of times of peace for all, and then prepare for war.)。WANK蠕虫是通过系统弱口令漏洞进行传播的。

1998年5月,ADM蠕虫[34~35]被发现,它只感染Linux系统,由于程序自身的限制,它的传染效率较低。ADM蠕虫是通过域名解析服务程序BIND中的反向查询(inverse query)溢出漏洞进行传播的。

1999年9月,Millennium蠕虫[36]被报告,它可能是最没有名气的蠕虫,因为只有一个人声称自己的计算机系统被它感染,并且人们能够得到的蠕虫代码不能正常工作。它被认定是ADM蠕虫的仿制品。Millennium蠕虫只感染Linux系统,它入侵系统后,会修补所有它利用的系统漏洞。它通过imapd、qpopper、bind、rpc.mountd四种系统服务中存在漏洞进行传播。

2001年1月,Ramen蠕虫[37]在Linux系统下发现,它的名字取自一种面条。它在15分钟内可以扫描13万个地址,早期的版本只修改被入侵计算机Web服务下的index.html文件,在利用系统漏洞入侵后会为系统修补好漏洞。但后期的版本中被加入了隐藏其踪迹的工具包(Rootkit),并在系统中留下后门。虽然它是蠕虫而非病毒,但仍被媒体称为"Linux系统下的首例病毒"。Ramen蠕虫通过wuftpd、rpc.statd、LPRng三种系统服务中存在漏洞进行传播。

2001年3月23日,Lion(1i0n)蠕虫被发现[38~39];它之所以引起了广泛的注意,是因为它是中国的一名黑客写出来的。根据lion蠕虫编写者的自述,他是四年制的中专生,2000年3月才第一次上网。Lion蠕虫集成了多个网上常见的黑客工具如扫描工具Pscan、后门工具t0rn、DDoS工具TFN2K等等,并把被攻击的主机上重要信息如口令文件等发往li0nsniffer@china.com,这些信息后来在Internet上被广为传播,使曾被蠕虫攻击过的系统即使修补好系统漏洞后,仍然受到潜在的威胁。Lion蠕虫通过域名解析服务程序BIND中的TSIG漏洞进行传播。代码中有明显的对Ramen蠕虫的抄袭痕迹。

2001年4月3日,Adore蠕虫被发现[40],它也曾被称为Red蠕虫,对系统攻击后,会向adore9000@21cn.com, adore9000@sina.com, adore9001@21cn.com, adore9001@sina.com等处发送系统信息,所以有计算机专家推断Adore蠕虫为中国黑客编写。经分析Adore蠕虫是基于Ramen蠕虫和Lion蠕虫写成,它综合利用了这两个蠕虫的攻击方法。Adore蠕虫通过wuftpd、rpc.statd、LPRng、BIND四种系统服务中存在漏洞进行传播。

2001年5月,cheese蠕虫[41~42]被发现,这个蠕虫号称是友好的蠕虫(friendly worm),是针对Lion蠕虫编写的,它利用Lion蠕虫留下的后门(10008端口的rootshell)进行传播。进入系统后,它会自动修补系统漏洞并清除掉Lion蠕虫留下的所有痕迹。它的出现,被认为是对抗蠕虫攻击的一种新思路,但不管怎样,它造成的网络负载也会导致网络不可用,所以对cheese蠕虫的评价毁誉参半。

2001年5月,sadmind蠕虫[43~44]被发现,也有人称之为sadmind/IIS蠕虫,它被认为是第一个同时攻击两种操作系统的蠕虫。有不确定信息表明它为中国黑客所写。它利用SUN公司的Solaris系统(UNIX族)中的sadmind服务中的两个漏洞进行传播,同时利用微软公司IIS服务器中的Unicode解码漏洞破坏安装了IIS服务器的计算机上的主页。

2001年7月19日,CodeRed蠕虫[13~14]爆发,在爆发后的9小时内就攻击了25万台计算机。造成的损失估计超过20亿美元,随后几个月内产生了威力更强的几个变种,其中CodeRed II蠕虫[15~16]造成的损失估计12亿美元。由于2001年4月1日的中美撞机事件导致了2001年5月1日前后的所谓中美黑客大战,而CodeRed蠕虫产生的时间刚好是黑客大战的尾声,并且CodeRed蠕虫在被攻击的计算机的网页上留下"Hacked by Chinese!"字样,所以有计算机专家推断Code Red为中国黑客编写。CodeRed II在传染过程中,如果发现被感染的计算机使用的是中文系统,就会把攻击线程数从300增加到600,从而造成更大的破坏。根据这个特征,有计算机专家推断CodeRed II是他国技术人员对中国技术人员的一种报复。不象Morris蠕虫和Lion蠕虫那样被人评价为粗制滥造,CodeRed蠕虫用到了很多相当高级的编程技术。CodeRed蠕虫的名字取自一种软饮料,通过微软公司的IIS服务的.ida漏洞(Indexing Service中的漏洞)进行传播。

2001年9月18日,Nimda蠕虫[17~22]被发现,不同于以前的蠕虫,Nimda开始结合病毒技术。它的定性引起了广泛的争议,NAI(著名的网络安全公司,反病毒厂商McAfee是它的子公司)把它归类为病毒,CERT(Computer Emergency Response Team)把它归类为蠕虫,Incidents.Org(国际安全组织)同时把它归入病毒和蠕虫两类。Nimda蠕虫执行代码里包含"Concept Virus (CV) 5.5, Copyright ? 2001 RP.China",由此有计算机专家推断这个蠕虫也是中国黑客所编写的。对Nimda造成的损失评估数据从5亿美元攀升到26亿美元后,继续攀升,到现在已无法估计。自从它诞生以来到现在,无论哪里、无论以什么因素作为评价指标排出的十大病毒排行榜,它都榜上有名。Nimda蠕虫只攻击微软公司的WinX系列操作系统,它通过电子邮件、网络邻近共享文件、IE浏览器的内嵌MIME类型自动执行(Automatic Execution of Embedded MIME Types)漏洞、IIS服务器文件目录遍历(directory traversal)的漏洞、CodeRed II和sadmind/IIS蠕虫留下的后门共五种方式进行传播。其中前三种方式是病毒传播的方式。

以上列出了大部分蠕虫的简要说明。有非常多的文献提到最早的蠕虫是Creeper(爬行者)和Reaper(收割机),Creeper在计算机之间传播复制自己,Reaper在计算机之间寻找Creeper并杀死它,并在最后自杀掉;进而提到它们是Core War(磁芯大战)游戏中最著名的两个例子。但实际情况正好相反,Core War游戏的设计者A. K. Dewdney在文献[45]中提到,这两个传说(folklore)中的蠕虫是他设计这个游戏的灵感来源。不像病毒一开始被制造出来就是为了破坏计算机文件系统,最原始的蠕虫是计算机工作者的助手,但随着时间的流逝,蠕虫也变成了怀有恶意的编程人员释放的杀手。从上面描述的蠕虫的发展的历史也可以看到,最近这一两年是蠕虫出现的高峰,并且造成了非常大的危害。

在本文写作期间,2002年9月14日,Slapper蠕虫[46~50]爆发,2003年1月25日,Slammer蠕虫[51~53]爆发,2003年3月7日Dvldr32蠕虫[54~55]爆发,蠕虫的频繁爆发,蠕虫编写技术为越来越多的黑客所掌握,让作者更深切的感受到了进行防治蠕虫研究的紧迫感和压力。
版权所有,未经许可,不得转载