6.2.2 宏病毒的工作机制
宏病毒要达到病毒传染的目的,必须具备以下三个条件:
(1)能够把特定的宏命令代码附加在指定文件上;
(2)能够实现宏命令在不同文件之间的共享和传递;
(3)能够在未经使用者许可的情况下获取某种控制权。
目前,主要有微软的Word、Excel和莲花的Amipor三种软件符合上述条件。这些软件中内置了一种类似BASIC的宏编程语言,在Word中是Word Basic,在Excle中是Visual Basic。由于大多数宏病毒为Word宏病毒,下面以Word为例,简要说明宏病毒的传染以及作用机理。
Word处理文档的过程与Excel处理数据表的过程一样,需要同时进行不同的动作,如打开文件、关闭文件、读取数据资料以及保存和打印等。事实上,每一种动作都对应着特定的宏命令,如打开文件对应于Fileopen,打印对应于Fileprint等。Word打开文件时,首先检查是否有AutoOpen宏存在,如果存在,Word就启动它。同样,Word在关闭一个文件时,如果发现有AutoClose宏存在,Word也会自动执行它。
宏病毒正是利用了软件中的这些宏命令进行感染与传播。假如某个文档感染了Word宏病毒,当Word打开、打印这个文档时,Word就运行了自动宏或标准宏包含的病毒代码,这些代码含有把带病毒的宏移植(复制)到通用宏的代码段,它会替代原有的正常宏,如Fileopen、Filesave、Fileprint等,并通过这些宏所关联的文件操作功能获取对文件交换的控制。当某项功能被调用时,相应的病毒宏就会篡夺文件的控制权,实施病毒所定义的非法操作。当Word退出时,宏病毒会自动地把所有的通用宏保存到模板文件中(通常为NORMAL.DOT)。当Word再次启动时,所有的通用宏(包括病毒宏)从模板中装入系统,从而在打开或新建文档时感染该原来未染毒的文档,从而达到传播的目的。如下图6.12所示。
图6.12 宏病毒感染过程
目前,几乎所有已知的宏病毒都使用了相同的作用机制。Word宏病毒几乎是唯一可跨越不同硬件平台而生存、传染和流行的一类病毒。如果说宏病毒还有什么局限性的话,那就是这些病毒必须假设某个可受其感染的系统(如Word、Excel)挂有这些特定的系统,这些宏病毒便成了无水之源。由于Word允许对宏本身进行加密操作,因此有许多宏病毒是经过加密处理的,不经过特殊处理是无法进行编辑或观察的,这也是很多宏病毒无法手工清除的主要原因。
1.Word宏语言
直到20世纪90年代早期,使应用程序自动化还是充满挑战性的领域。对每个需要自动化的应用程序,人们都不得不学习一种不同的自动化语言。例如,可以用Excel的宏语言来使Excel自动化,使用Word Basic使Word自动化等。微软决定让它开发出来的应用程序共享一种通用的自动化语言,这种语言就是Visual Basic for Application(VBA)。
作为Visual Basic家族的一部分,VBA于1993年在Excel中首次发布,并且现在已经集成到微软的很多应用程序中。Office 97及其高版本应用程序使用VBA作为它们的宏语言和编程语言。现在,超过80个不同的软件厂商使用VBA作为他们的宏语言,包括Visio、AutoCAD和Great Plains Accounting。VBA允许编程者和终端用户使用开放软件(多数是Office程序)并且定制应用程序。今天,VBA是宏病毒制作者用来感染Office文档的首选编程语言。表6.1列出不同的微软Office程序中使用的宏语言版本。
表6.1 不同的微软Office程序中使用的宏语言版本
读者可以认为VBA是非常流行的应用程序开发语言Visual Basic(VB)的子集,但实际上VBA是“寄生于”VB应用程序的版本。VBA和VB的区别主要包括如下几个方面。
(1)VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序自动化。
(2)VB具有自己的开发环境,而VBA必须寄生于已有的应用程序。
(3)要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的母体应用程序性(如Word等)。
尽管VBA和VB存在这些不同,但是,它们在结构上仍然十分相似。事实上,如果读者已经了解了VB,会发现学习VBA非常快。相应地,学完VBA会给学习VB打下坚实的基础。如果读者已经学会在Excel中用VBA创建解决方案后,也就具备了在Word、Access、Outlook、Power Point等Office程序中用VBA创建解决方案的大部分知识。VBA的一个关键特征是读者所学的知识在微软的一些产品中可以相互转化。
更确切地讲,VBA是一种自动化语言,它可以使常用的程序自动化,并且能够创建自定义的解决方案。
使用VBA可以实现如下功能:
(1)使重复的任务自动化;
(2)自定义Word工具栏、菜单和界面;
(3)简化模板的使用;
(4)自定义Word,使其成为开发平台。
2.宏病毒关键技术
下面简单介绍宏病毒中常用的代码段。理解这些程序,可以帮助读者分析现有宏病毒代码,也有助于读者制作实验型宏病毒。
(1)宏指令的复制技术
判断一个系统是否能产生恶意代码的必要条件是“复制技术”。也就是说,如果宏指令不能实现自我复制,黑客们就不可能制造出基于“宏指令”的恶意代码。但是,聪明的黑客实现了宏指令的自我复制。
实现自我复制的代码如下:
(2)自动执行的示例代码
(3)Save As程序
这是一个当使用File/Save As功能时,复制宏病毒到活动文本的程序。它使用了许多类似于AutoExcc程序的技巧。尽管示例代码短小,但足以制作一个小巧的宏病毒。
(4)特殊代码
有些方法可以用来隐藏和使宏病毒更有趣。当有些人使用Tools/Macro菜单观察宏时,该代码可以达到掩饰病毒的目的。
读者也可以做一些子程序,并在子程序中实现对系统功能的调用。著名的Nuclear宏病毒尝试编译外部病毒或者一些木马程序,进一步增加破坏作用。当打开文件时,实现格式化硬盘子程序所包括的关键语句如下:
(警告:禁止在工作的计算机上练习该语句,因为可能会造成重大损失)
3.经典宏病毒
(1)美丽莎(Melissa)
1999年3月26日,星期五上午8点30分,著名反病毒公司NAI的一位专家所罗门博士(Solomons)在一个著名的“性讨论新闻组”里发现了一个极不寻常的帖子,并在其文档中发现了编写精致的宏病毒。
这个病毒专门针对微软的电子邮件服务器MS Exchange和电子邮件收发软件Outlook Express,是一种Word宏病毒,利用微软的Word宏和Outlook Express发送载有80个色情文学网址的列表,它可感染Word 97或Word 2000。当用户打开一个受到感染的Word 97或Word 2000文件时,病毒会自动通过被感染者的MS Exchange和Outlook Express的通信录,给前50个地址发出带有W97M_MELISSA病毒的电子邮件。
如果某个用户的电子信箱感染了“美丽莎”病毒,那么在他的信箱中将可以看到一幅题为“Important message from XX(来自XX的重要信息)”的邮件,其中XX是发件人的名字。正文中写道,“这是你所要的文件……不要给其他人看”。此外,邮件还包括一个名为list.doc的Word文档附件,其中包含大量的色情网址。
由于每个用户的邮件目录中大都保存有部分经常通信的朋友或客户的地址,“美丽莎”病毒便能够以几何级数增长的速度向外传播,直至“淹没”电子邮件服务器,使大量电子邮件服务器瘫痪。据计算,如果“美丽莎”病毒能够按照理论上的速度传播,只需要繁殖5次就可以让全世界所有的网络用户都收到一份病毒邮件。由于病毒自动地进行自我复制,因而属于蠕虫类病毒。“美丽莎”病毒的作者显然对此颇为得意,他在病毒代码中写道“蠕虫类?宏病毒?Word 97病毒?还是Word 2000病毒?你们自己看着办吧!”
“美丽莎”病毒最令人恐怖之处,不是在于令邮件服务器“瘫痪”,而是大量涉及企业、政府和军队的核心机密有可能通过电子邮件的反复传递而扩散出去,甚至受损害的用户连机密被扩散到了哪里都不知道。由此看来,“美丽莎”病毒较之1988年谈之色变的“莫里斯蠕虫病毒”和1998年的“BO黑客程序”,更加险恶。
(2)台湾NO.1B
自1995年发现了全世界第一个宏病毒后,国内也已诞生了第一个本土中文化的“十三号台湾NO.1B宏病毒”。这只病毒正以“何谓宏病毒,如何预防?”之类的标题,随着Internet与BBS网络流传,将会对不知情而收取观看的Word使用者造成很大的不便。据了解这只宏病毒在中国台北已有蔓延的迹象,除了一般的计算机经销商在13号当天传出灾情,导致Word无法使用外,若干学校也发现此病毒的踪迹。在不是13号的日子里,宏病毒只会默默地进行感染的工作。而一旦到了每月13号,只要用户随便开启一份文件来看,病毒就马上发作。
在病毒发作时,只要打开一个Word文档,就会被要求计算一道5个至多4位数的连乘算式。由于算式的复杂度,很难在短时间内计算出答案,一旦计算错误,Word就会自动开启20个新窗口,然后再次生成一道类似的算式,不断往复,直至系统资源被耗尽。
(3)097M.Tristate.C病毒
097M.Tristate.C宏病毒可以交叉感染MS Word 97、MS Excel 97和MS Power Point 97等多种程序生成的数据文件。病毒通过Word文档、Excel电子表格或Power Point幻灯片被激活,并进行交叉感染。病毒在Excel中被激活时,它在Excel Startup目录下查找文档book1.xls,如果不存在,病毒将在该目录下创建一个被感染的工作簿,并使Excel的宏病毒保护功能失效。病毒存放在被感染的电子表格的“This Workbook”中。
病毒在Word中被激活时,它在通用模板NORMAL.DOT的“ThisDocument”中查找是否存在它的代码,如果不存在,病毒感染通用模板并使Word的宏病毒保护功能失效。病毒在PowerPoint中被激活,在其模板“BLACK PRESENTATION.POT”中查找是否存在模块“Triplicate”。如果没找到,病毒使Power Point的宏病毒保护功能失效,并添加一个不可见的形状到第一个幻灯片,并将其自身复制到模板。该病毒带有效载荷,但会将Word通用模板中的全部宏移走。表6.2为已知宏病毒的主要变种系列。
由表6.2可以总结出宏病毒的一些共性,以及一些在实践中发现的共性。
表6.2 已知宏病毒主要变种系列
1)宏病毒会感染DOS文档文件和DOT模板文件。被它感染的DOS文档属性必然会被改变为模板而不是文档,而用户在另存文档时,就无法将该文档转换为任何其他方式,而只能用模板方式存盘。这一点在多种编辑器需转换文档时是绝对不允许的。
2)宏病毒的传染通常是Word在打开一个带宏病毒的文档或模板中,以后在打开或关闭文件时病毒就会把病毒复制到该文件中。
3)大多数宏病毒中含有AutoOpen,AutoClose,AutoNew和AutoExit等自动宏。只有这样,宏病毒才能获得文档(模板)操作控制权。有些宏病毒还通过FileNew,FileOpen,FileSave,FileSaveAs,FileExit等宏控制文件的操作。
4)宏病毒中必然含有对文档读写操作的指令。
5)宏病毒在DOS文档、DOT模板中是以BFF(Binary FileFormat)格式存放,这是一种加密压缩格式,每种Word版本格式可能不兼容。