预计阅读本页时间:-
9.7.3 蠕虫
互联网计算机发生的第一次大规模安全灾难是在1988年的11月2日,当时Cornell大学毕业生Robert Tappan Morris在Internet网上发布了一种蠕虫程序,结果导致了全世界数以千计的大学、企业和政府实验室计算机的瘫痪。这也导致了一直未能平息的争论。我们稍后将重点描述。具体的技术细节请参阅Spafford的论文(1989版),有关这一事件的警方惊险描述请参见Hafner和Markoff的书(1991版)。
故事发生在1988年的某个时候,当时Morris在Berkeley大学的UNIX系统里发现了两个bug,使他能不经授权接触到Internet网上所有的计算机。Morris完全通过自身努力,写了一个能够自我复制的程序,叫做蠕虫(worm)。蠕虫可以利用UNIX的bug,在数秒种内自我复制,然后迅速传染到所有的机器。Morris为此工作了好几个月,并想方设法调试以逃避跟踪。
现在还不知道1988年11月2日的发作是否是一次实验,还是一次真正的攻击。不管怎么说,病毒确实让大多数Sun和VAX系统在数小时内臣服。Morris的动机还不得而知,也有可能这是他开的一个高科技玩笑,但由于编程上的错误导致局面无法控制。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
从技术上来说,蠕虫包含了两部分程序,引导程序和蠕虫本身。引导程序是99行的称为l1.c的程序,它在被攻击的计算机上编译并运行。一旦发作,它就在源计算机与宿主机之间建立连接,上传蠕虫主体并运行。在花费了一番周折隐藏自身后,蠕虫会查看新宿主机的路由表看它是否连接到其他的机器上,通过这种方式蠕虫把引导程序传播到所有相连的机器。
蠕虫在感染新机器时有三种方法。方法1是试图使用rsh命令运行远程shell程序。有些计算机信任其他机器,允许其他机器不经校验就可运行rsh命令。如果方法一可行,远程shell会上传蠕虫主体,并从那里继续感染新的计算机。
方法2是使用一种在所有系统上叫做finger的程序,该程序允许Internet上任何地方的用户通过键入
finger name@site
来显示某人的在特定安装下的个人信息。这些信息通常包括:个人姓名、登录名、工作和家庭地址、电话号码、传真号码以及类似的信息。这有点像电话本。
finger是这样工作的。在每个站点有一个叫做finger守护进程的后台进程,它一直保持运行状态,监视并回答所有来自因特网的查询。蠕虫所做的是调用finger,并用一个精心编写的、由536个特殊字节组成的字符串作为参数。这一长串覆盖了守护进程的缓冲和栈,如图9-24c所示。这里所利用的缺陷是守护进程没有检查出缓冲区和栈的溢出情形。当守护进程从它原先获得请求时所在的过程中返回时,它返回的不是main,而是栈上536字节中包含的过程。该过程试图运行sh。如果成功,蠕虫就掌握了被攻击计算机里运行的shell。
方法3是依靠在电子邮件系统里的sendmail程序,利用它的bug允许蠕虫发送引导程序的备份并运行。
蠕虫一旦出现就准备破解用户密码。Morris没有在这方面做大量的有关研究。他所做的是问自己的父亲,一名美国国家安全局(该局是美国政府的密码破解机构)的安全专家,要一份Morris Sr.和Ken Thompson十年前在Bell实验室合著的经典论文(Morris和Thompson,1979)。每个被破译的密码允许蠕虫登录到任何该密码所有者具有账号的计算机上。
每一次蠕虫访问到新的机器,它就查看是否有其他版本的蠕虫已经存活。如果有,新的版本就退出,但七次中有一次新蠕虫不会退出。即使系统管理员启动了旧蠕虫来愚弄新蠕虫也是如此,这大概是为了给自己做宣传。结果,七次访问里的一次产生了太多的蠕虫,导致了所有被感染机器的停机:它们被蠕虫感染了。如果Morris放弃这一策略,只是让新蠕虫在旧蠕虫存在的情况下退出,蠕虫也许就不那么容易被发现了。
当Morris的一个朋友试图向纽约时报记者John Markoff说明整个事件是个意外,蠕虫是无害的,作者也很遗憾等的时候,Morris被捕了。Morris的朋友不经意地流露出罪犯的登录名是rtm。把rtm转换成用户名十分简单——Markoff所要做的只是运行finger。第二天,故事上了头条新闻,三天后影响力甚至超过了总统选举。
Morris被联邦法院审判并证实有罪。他被判10 000美元罚款,三年察看和400小时的社区服务。他的法律费用可能超过了150 000美元。这一判决导致了大量的争论。许多计算机业界人员认为他是个聪明的研究生,只不过恶作剧超出了控制。蠕虫程序里没有证据表明Morris试图偷窃或毁坏什么。而其他人认为Morris是个严重的罪犯必须蹲监狱。Morris后来在哈佛大学获得了博士学位,现在他是一名麻省理工学院的教授。
这一事件导致的永久结果是建立了计算机应急响应机构(Computer Emergency Response Team,CERT),这是一个发布病毒入侵报告的中心机构,有多名专家分析安全问题并设计补丁程序。CERT有了自己的下载网站,CERT收集有关会受到攻击的系统缺陷方面的信息并告知如何修复。重要的是,它把这类信息周期发布给Internet上的数以千计的系统管理员。但是,某些别有用心的人(可能假装成系统管理员)也可以得到关于系统bug的报告,并在这些bug修复之前花费数小时(或数天)寻找破门的捷径。
从Morris蠕虫出现开始,越来越多种类的蠕虫病毒出现在网络上。这些蠕虫病毒的机制与Morris一样,所不同之处只是利用系统中不同软件的不同漏洞。由于蠕虫能够自我复制,因此扩散趋势比病毒要快。其结果是,越来越多的反蠕虫技术被开发出来,它们大多都试图在蠕虫第一次出现的时候将其发现,而不是在它们进入中心数据库时才实施侦测(Portokalidis和Bos,2007)。