你知道苹果里面会有虫子,可是你知道电脑里面也会有“虫子”吗?虽然这两种虫子截然不同,可是研究发现,电脑“虫子”在衍生、破坏性等方面却和自然界的虫子有不少类似之处。今天,我们就一起来深入了解一下什么是网络“虫子”,以及它的危害和防治。
老皮特坐在电脑前写着邮件,愁眉不展,连敲回车也弄出很大的声响。
“该死的虫子!我用了几种农药也杀不死它们!它们总是躲着,从这棵树爬到那棵树!这些可恶的虫子!现有的农药不管用!你们快点赶过来,带上新的杀虫剂,要快!费用不是问题,重要的是我的果园!看在果实就快要成熟的份上,快点!上帝啊!”。原来,老皮特的果园正在经历一场蠕虫危机,他今天和农业虫害防治的人员取得了联系,正在发电子邮件让他们马上过来。
蠕虫源起
提到蠕虫,大家都不会陌生,这些自然界中的低等生物以农作物为食,给人类带来经济损失。但是,如果说计算机中也有这样一种名为“蠕虫”的东西存在,同样也给人类带来严重经济损失,你也许会觉得这是天方夜谭,虫子怎么会爬进计算机呢?
1988年11月2日,世界上第一个计算机蠕虫正式诞生。美国康乃尔大学一年级研究生莫里斯为了求证计算机程序能否在不同的计算机之间自我复制传播,他写了一段试验程序,为了程序能顺利进入另一台计算机,他写了一段破解用户口令的代码。11月2日早上5点,这段被称为“Worm”(蠕虫)的程序开始了它的旅行(图1),它果然没有辜负莫里斯的期望:它爬进了几千台电脑,让它们死机,造成了经济损失高达9600万美元的记录。从此,“蠕虫”这个名词传开了,莫里斯也许并不知道:他在证明这个结论的同时,也打开了潘多拉魔盒。
图1 蠕虫最初模型。
爬进机器的虫子
过了一会儿,老皮特收到两封邮件,一封是虫害防治人员的回复,他们说马上就会过来;另一封就有点奇怪,是个陌生的地址发来的,内容更奇怪,只有一行字:“Hey,is that your photo?”。也许是哪个孩子的恶作剧吧,老皮特随手把邮件删除了。但是老皮特做梦也不会想到,他用来管理果园的计算机里已经来了一个不受欢迎的“客人”。
自1988年第一个蠕虫显示出它的威力以来,越来越多的人加入了蠕虫制作阵营,他们用这种途径来证明自己的能力,或者实现一些特殊目的,于是多种多样的蠕虫诞生了。可是不管蠕虫的“行为方式”(它们进入计算机后要做的事情)有多少种,其“传播方式”却仅仅有屈指可数的几种:电子邮件、网页代码、社会工程学以及系统漏洞等。
下面,我们就来看看蠕虫进入计算机的几种主要方式。
破邮箱而出:邮件蠕虫
虫害防治人员刚赶到老皮特的果园就意识到了这里虫害的严重性:路边树上有个苹果掉进了他们的车里,裂开了,里面爬出两条毛茸茸的褐色虫子。
也许是受遗传的影响吧,最初的莫里斯蠕虫是通过邮件系统复制自身的,发展到现在,蠕虫传播的主流依然是邮件系统,不同的是,蠕虫“前辈”利用的邮件系统能够自动完成协助复制工作,而如今的邮件系统只能负责传播,要启动蠕虫必须由用户打开邮件才可以。
为什么选择邮件传播?因为这是最大的传播系统。为什么用户一打开邮件就被蠕虫撬窗入室?这要从微软的两个古老漏洞说起,它们分别是1999年11月11日的IFrame漏洞和2001年3月29日的MIME漏洞。
IFrame是一段用于往网页里放入一个小页面的HTML语言,它用来实现“框架”结构。当年有好事者测试出一个可怕的现象:往一个页面里放入多个IFrame时,框架里请求运行程序的代码就会被执行,如果有人故意做了一个执行破坏程序的页面,那后果可想而知。由于IFrame的尺寸可以自由设置,因此破坏者可以在一个页面里放入多个“看不见”的框架,并附带多个“看不见”的有害程序,浏览了那个网页的人自然就成了受害者!
和IFrame漏洞相比,MIME漏洞更加出名,它其实只是一小段用来描述信息类型的数据。浏览器通过读取它来得知接收到的数据该怎么处理,如果是文本和图片就显示出来,是程序就弹出下载确认,是音乐就直接播放。请留意最后一个类型:音乐,浏览器对它采取的动作是:播放。
要知道:音乐文件和程序文件都是一样的二进制数据,都需要解码还原数据到系统临时目录里,然后浏览器通过一个简单的文件后缀名判断来决定该用哪种方法处理它。例如用户收到一个MP3文件,MIME把它描述成音乐文件,所以浏览器解码保存这个文件到一个临时目录,而后查找调用这个文件后缀MP3对应的执行程序,这就是一次完整的工作过程;但是问题就出在这个似乎完美的步骤上,如果攻击者给用户发送一个带有EXE后缀可执行文件的邮件,并把它的MIME描述为音乐文件,这时候浏览器会把它解到临时目录,然后根据它的后缀名调用一个能打开它的应用程序――EXE后缀告诉系统,直接运行这个文件!于是这个文件就被顺利执行了,用户的机器也开始遭到破坏(图2)。
图2 MIME描述漏洞。
正因为这样,邮件蠕虫才成了如今世界“虫害”的主要来源。靠邮件传播的蠕虫主要有SoBig、MyDoom、求职信等。
页面藏刀:网页里的爬虫
“它们无处不在”,老皮特砍下了一根树枝拿给防治人员,从断口可以看到一个个虫洞。
相对于邮件蠕虫,利用网页传播的蠕虫手段无疑更为高明,它分为两个“门派”:传统派和脚本派。传统派使用的技术又包括两种,一种是用一个IFrame插入一个Mail框架,同样利用MIME漏洞执行蠕虫,这是直接沿用邮件蠕虫的方法;另一种是用IFrame漏洞和浏览器下载文件的漏洞来运作的,首先由一个包含特殊代码的页面去下载放在另一个网站的病毒文件,然后运行它,完成蠕虫传播。
“脚本派”蠕虫就更复杂了,它们不是可执行程序,而是一段具有破坏和自动寻找载体能力进行传播的代码。凑巧的是,Windows系统自身文件夹模板也是通过脚本运作的(由此可见脚本的强大!),于是有人把它们的用途放到了入侵方面,通过一段精心编制的脚本,这只“没有身体”(没有独立执行的程序体)的虫子就很轻松地爬进了千家万户。当然,这类蠕虫实现的功能往往比完整的蠕虫要少,因此编写者让它完成的任务一般也很简单:破坏文件。曾经大面积爆发的欢乐时光就是这样做才令人“谈虫色变”的,虽然它只是一段很简单的文件操作代码集合(图3)。
图3 网页背后的秘密。
骗你没商量:社会学虫子
“这一带果树似乎没有虫害啊,怎么回事?”,防治人员走到林萌深处,这里有一片郁郁葱葱的沙枣林。老皮特却严肃地说:“还是别这么快下结论,留意脚下吧,先生们!”,大家一低头,只见一群大蚂蚁正在耀武扬威地从防治人员脚上爬进沙枣林的根部。
细心的读者应该会有个疑问:既然网页蠕虫是通过网页传播的,而看网页的人那么多,它应该成为主流才对啊,为什么却是邮件蠕虫?
其实原因很简单:大部分蠕虫作者不可能在公共热门网站里放入自己的蠕虫框架代码。要知道,往页面里加入代码是要取得服务器管理权限的,这并不是所有人都能做得到的,这就增加了传播的局限性,因此网页蠕虫始终成不了主流。
不记得是谁第一个把网页蠕虫和社会学结合在一起了,但是当QQ第一次被迫自动发出“http://sckiss.yeah.net,你快去看看”的消息时,这一领域的大门被撞开了,“爱情森林”蠕虫的实体是躲在网页背后的EXE木马,又利用QQ把自身网址宣布出去,把这两个看似不相关的方面结合得天衣无缝!这种蠕虫的实现原理很简单:当蠕虫爬进你的机器后,它就会查找QQ进程,截获发送消息事件并且在QQ的信息里自动加入一段诱惑你的话,让你去浏览它藏身的网页而被它爬入电脑,同时成为它的又一个宣传者。显然,这种“宣传”方法成功与否,全在于蠕虫编写者的社会学和心理学,否则稍有经验的人都会知道这是大名鼎鼎的“QQ尾巴”了(图4),例如“想看XX明星绯闻去http://www.xxxxx.com”这种弱智的语言功力,如今已经不能拿来骗人了。
图4 QQ尾巴。
强行入室:系统漏洞蠕虫
前面就是老皮特的值班室了。突然一只昆虫从众人面前飞过,停在门缝边努力往里面钻。 “快打死它!别让它钻进去产卵!”,老皮特抓起棍子打过去,飞虫倒在地上还在不停地扑腾。
2003年1月,很多人特别是从事信息安全的IT人都记住了这个月,因为在这个月里,全世界的网络被大小仅为376个字节的“小虫子”打败了,直接经济损失超过数百亿美元,更重要的是:这个小蠕虫又开创了一个蠕虫里程碑,它就是“SQL蠕虫王Slammer”,世界上第一个打破常规的蠕虫。它不再像前面那些蠕虫一样安静等待别人来触发了,它要自己闯天下,它把运行的关键指向了SQL溢出漏洞,结果,它成功了:它收拾了全球13台根域名服务器中的8台,导致全球主干网络瘫痪!
“SQL蠕虫王Slammer”所做的一切似乎只为了宣布一件事情:蠕虫也可以这样写!于是这一新领域的蠕虫便迅速发展起来了,利用RPC溢出漏洞的冲击波、冲击波杀手,仓促把玩LSASS溢出漏洞的震荡波、震荡波杀手……这些反客为主的蠕虫在每一次新漏洞被公布之时迅速出现,趁火打劫地加入破坏行列,其间又有些号称“杀手”的“除害蠕虫”,帮人家把前一个蠕虫杀了,然后自己也赖着不走了,成为受害者机器里的又一条蠕虫――拔刀相助,尔后强驻?这似乎不是英雄所为。
系统漏洞蠕虫一般具备一个小型的溢出系统,它随机产生IP并尝试溢出,然后将自身复制过去。它们往往造成被感染系统性能速度迅速降低,甚至系统崩溃,属于最不受欢迎的一类虫子。
蠕虫进入电脑后,会做什么事情呢?现在已经很难下定论了,因为蠕虫的类型已经变得非常复杂,但是它们的最终目的不外乎是:偷密码资料(比如QQ尾巴)、影响用户正常使用机器(比如冲击波)、扰乱网络通讯(比如Nimda)、破坏用户机器(比如欢乐时光)、“借机杀人”(比如MyDoom、SQL蠕虫王)、发email(比如Sobig)等。
杀虫剂:你准备好了吗?
“您们拿杀虫剂来了吗?要有效的!”,老皮特边看着监视器边跺脚,显示屏上有只虫子正在咬苹果。
“嗯,最新配方,非常有效。”一个防治人员拿出一个大瓶子,里面都是药片。“每颗药片用二加仑的水稀释,不要太稀,免得它们抗药。”。他右手举起一个瓶子,里面是几只虫子的尸体,他刚才在果园里抓来试验的。
“谢谢,嗯……”。老皮特留意到电脑有异常动静,他跑过去弄了一会儿,无效,他无奈的回过头来:“顺便问一下,您们有人懂得修电脑吗?”
“是蠕虫病毒,让我来,别怕。”一个懂计算机的工程师走了过去。
蠕虫的防治
蠕虫已经成了当前病毒的主流方式,每年由蠕虫造成的经济损失超过数亿美元,不仅如此,它们还在向威胁人类正常使用电脑的方向发展,如果再不严厉打击制造蠕虫的幕后黑手,总有一天世界网络会被这些小虫子摧毁。
由于蠕虫发展越来越壮大,它的进程也由单一文件变成多进程互相防护、DLL挂钩、文件并联等方式。普通用户要想手工清除这些蠕虫已经变得相当困难,最好的方法是预防。其实大部分蠕虫都是利用了系统漏洞进行传播的,如果用户安全意识较高,那么蠕虫就会无门可钻。专家认为:提高用户的安全防范意识,学习一点常备的电脑维护知识,远比一味跟在蠕虫后面升级杀毒软件的方法更加实际和有效!