什么是恶意软件?
本指南将术语"恶意软件"用作一个集合名词,来指代故意在计算机系统上执行恶意任务的病毒、蠕虫和特洛伊木马。
那么,计算机病毒或蠕虫的确切含义是什么?它们和特洛伊木马之间有哪些不同之处?防病毒应用程序是仅对蠕虫和特洛伊木马有效,还是仅对病毒有效?
所有这些问题都起源于令人迷惑且通常被曲解的恶意代码世界。现有恶意代码的数目和种类繁多,因此很难为每个恶意代码类别提供一个准确的定义。
对于笼统的防病毒讨论,可使用以下简单的恶意软件类别定义:
• 特洛伊木马。该程序看上去有用或无害,但却包含了旨在利用或损坏运行该程序的系统的隐藏代码。特洛伊木马程序通常通过没有正确说明此程序的用途和功能的电子邮件传递给用户。它也称为特洛伊代码。特洛伊木马通过在其运行时传递恶意负载或任务达到此目的。
• 蠕虫。蠕虫使用自行传播的恶意代码,它可以通过网络连接自动将其自身从一台计算机分发到另一台计算机上。蠕虫会执行有害操作,例如,消耗网络或本地系统资源,这样可能会导致拒绝服务攻击。某些蠕虫无须用户干预即可执行和传播,而其他蠕虫则需用户直接执行蠕虫代码才能传播。除了复制,蠕虫也可能传递负载。
• 病毒病毒代码的明确意图就是自行复制。病毒尝试将其自身附加到宿主程序,以便在计算机之间进行传播。它可能会损害硬件、软件或数据。宿主程序执行时,病毒代码也随之运行,并会感染新的宿主,有时还会传递额外负载。
对于本指南的用途而言,负载是一个集合术语,表示恶意软件攻击在已感染计算机上执行的操作。各种恶意软件类别的上述定义使得可以通过一个简单的流程图来说明这些类别之间的不同之处。下图说明了可用来确定程序或脚本是否属于这些类别的元素:
图 2.1 恶意代码决策树
通过此图,可以区分对于本指南用途而言的每种常见恶意代码类别。但是,了解单个攻击所引入的代码可能适合一个或多个类别是非常重要的。这些类型的攻击(称作混合威胁,包含使用多种攻击方法的多个恶意软件类型)会以极快的速度传播。攻击方法是恶意软件可用于发起攻击的例程。由于这些原因,混合威胁特别难以应对。
以下部分对每种恶意软件类别进行了更为详细的解释,以帮助说明每种类别的一些主要元素。
特洛伊木马
特洛伊木马不被认为是计算机病毒或蠕虫,因为它不自行传播。但是,病毒或蠕虫可用于将特洛伊木马作为攻击负载的一部分复制到目标系统上,此过程称为"发送"。特洛伊木马的通常意图是中断用户的工作或系统的正常运行。例如,特洛伊木马可能在系统中提供后门,使黑客可以窃取数据或更改配置设置。
在提及特洛伊木马或特洛伊类型活动时,还有两个经常使用的术语,其识别方法和解释如下:
• 远程访问特洛伊。某些特洛伊木马程序使黑客或数据窃取者可以远程地控制系统。此类程序称为"远程访问特洛伊"(RAT) 或后门。RAT 的示例包括 Back Orifice、Cafeene 和 SubSeven。
有关此类特洛伊木马的详细说明,请参阅 Microsoft TechNet 网站上的文章"Danger:Remote Access Trojans",网址为http://www.microsoft.com/technet/security/topics/virus/virusrat.mspx(英文)。
• Rootkit。Rootkit 是软件程序集,黑客可用来获取计算机的未经授权的远程访问权限,并发动其他攻击。这些程序可能使用许多不同的技术,包括监视击键、更改系统日志文件或现有的系统应用程序、在系统中创建后门,以及对网络上的其他计算机发起攻击。Rootkit 通常被组织到一组工具中,这些工具被细化为专门针对特定的操作系统。第一批 Rootkit 是在 20 世纪 90 年代被识别出来的,当时 Sun 和 Linux 操作系统是它们的主要攻击对象。目前,Rootkit 可用于许多操作系统,其中包括 Microsoft? Windows? 平台。
注意:请注意,RAT 和某些包含 Rootkit 的工具具有合法的远程控制和监视使用。但是,这些工具引入的安全性和保密性问题给使用它们的环境带来了整体风险。
蠕虫
如果恶意代码进行复制,则它不是特洛伊木马,因此为了更精确地定义恶意软件而要涉及到的下一个问题是:"代码是否可在没有携带者的情况下进行复制?"即,它是否可以在无须感染可执行文件的情况下进行复制?如果此问题的答案为"是",则此代码被认为是某种类型的蠕虫。
大多数蠕虫试图将其自身复制到宿主计算机上,然后使用此计算机的通信通道来进行复制。例如,Sasser 蠕虫依赖服务的安全漏洞最初感染一个系统,然后使用已感染系统的网络连接来试图进行复制。如果已安装最新的安全更新(来停止感染),或已在环境中启用防火墙来阻止蠕虫所用的网络端口(来停止复制),则攻击将会失败。
病毒
如果恶意代码将其自身的副本添加到文件、文档或磁盘驱动器的启动扇区来进行复制,则认为它是病毒。此副本可以是原始病毒的直接副本,也可以是原始病毒的修改版本。有关详细信息,请参阅本章后面的"防护机制"部分。正如前面所提及的,病毒通常会将其包含的负载(例如,特洛伊木马)放置在一个本地计算机上,然后执行一个或多个恶意操作(例如,删除用户数据)。但是,仅进行复制且不具有负载的病毒仍是恶意软件问题,因为该病毒自身在其复制时可能会损坏数据、消耗系统资源并占用网络带宽。
恶意软件的特征
每类恶意软件可以表现出来的各种特征通常非常类似。例如,病毒和蠕虫可能都会使用网络作为传输机制。然而,病毒会寻找文件以进行感染,而蠕虫仅尝试复制其自身。以下部分说明了恶意软件的典型特征。
目标环境
恶意软件试图攻击宿主系统时,可能需要许多特定的组件,攻击才能成功。下面是一个典型示例,说明恶意软件在攻击宿主系统时所需的组件:
• 设备。某些恶意软件将一种设备类型作为专门的攻击目标,例如,个人计算机、Apple Macintosh 计算机甚至个人数字助理 (PDA),但是请注意,PDA 恶意软件目前非常少见。
• 操作系统。恶意软件可能需要特殊的操作系统才会有效。例如,20 世纪 90 年代后期出现的 CIH 或 Chernobyl 病毒仅攻击运行 Microsoft Windows? 95 或 Windows? 98 的计算机。
• 应用程序。恶意软件可能需要在目标计算机上安装特定的应用程序,才能传递负载或进行复制。例如,2002 出现的 LFM.926 病毒仅在 Shockwave Flash (.swf) 文件可在本地计算机上执行时才能进行攻击。
携带者对象
如果恶意软件是病毒,它会试图将携带者对象作为攻击对象(也称为宿主)并感染它。目标携带者对象的数量和类型随恶意软件的不同而大不相同,以下列表提供了最常用的目标携带者的示例:
• 可执行文件。这是通过将其自身附加到宿主程序进行复制的"典型"病毒类型的目标对象。除了使用 .exe 扩展名的典型可执行文件之外,具有以下扩展名的文件也可用作此用途:.com、.sys、.dll、.ovl、.ocx 和 .prg。
• 脚本。将脚本用作携带者目标文件的攻击,这些文件使用诸如 Microsoft Visual Basic? Script、JavaScript、AppleScript 或 Perl Script 之类的脚本语言。此类文件的扩展名包括:.vbs、.js、.wsh 和 .prl。
• 宏。这些携带者是支持特定应用程序(例如,字处理器、电子表格或数据库应用程序)的宏脚本语言的文件。例如,病毒可以在 Microsoft Word 和 Lotus Ami Pro 中使用宏语言来生成许多效果,从恶作剧效果(在文档四处改变单词或更改颜色)到恶意效果(格式化计算机的硬盘驱动器)。
• 启动扇区。计算机磁盘(硬盘和可启动的可移动媒体)上的特定区域(例如,主启动记录 (MBR) 或 DOS 启动记录)也可被认为是携带者,因为它们可以执行恶意代码。当某个磁盘被感染时,如果使用该磁盘来启动其他计算机系统,将会复制病毒。
注意:如果病毒同时将文件和启动扇区作为感染目标,可称其为"多部分"病毒。
传输机制
攻击可以使用一个或多个不同方法,在计算机系统之间尝试并复制。本部分提供了与恶意软件使用的几个比较常见的传输机制有关的信息。
• 可移动媒体。计算机病毒和其他恶意软件最初的、并且可能也是最多产的传送器(至少到当前为止)是文件传输。此机制开始于软盘,然后移动到网络,目前正在寻找新的媒体,例如,通用串行总线 (USB) 设备和火线。感染速度并不像基于网络的恶意软件那样快,但安全威胁却始终存在,而且难以完全消除,因为系统之间需要交换数据。
• 网络共享一旦为计算机提供了通过网络彼此直接连接的机制,就会为恶意软件编写者提供另一个传输机制,而此机制所具有的潜力可能会超出可移动媒体的能力,从而可以传播恶意代码。由于在网络共享上实现的安全性级别很低,因此会产生这样一种环境,其中恶意软件可以复制到大量与网络连接的计算机上。这在很大程度上替代了使用可移动媒体的手动方法。
• 网络扫描。恶意软件的编写者使用此机制来扫描网络,以查找容易入侵的计算机,或随意攻击 IP 地址。例如,此机制可以使用特定的网络端口将利用数据包发送到许多 IP 地址,以查找容易入侵的计算机进行攻击。
• 对等 (P2P) 网络。要实现 P2P 文件传输,用户必须先安装 P2P 应用程序的客户端组件,该应用程序将使用一个可以通过组织防火墙的