什么是恶意软件以及其特征 什么是恶意软件? 本指南将术语"恶意软件"用作一个集合名词,来指代故意在计算机系统上执行恶意任务的病毒、蠕虫和特洛伊木马。
那么,计算机病毒或蠕虫的确切含义是什么?它们和特洛伊木马之间有哪些不同之处?防病毒应用程序是仅对蠕虫和特洛伊木马有效,还是仅对病毒有效?
所有这些问题都起源于令人迷惑且通常被曲解的恶意代码世界。现有恶意代码的数目和种类繁多,因此很难为每个恶意代码类别提供一个准确的定义。
对于笼统的防病毒讨论,可使用以下简单的恶意软件类别定义:
• 特洛伊木马。该程序看上去有用或无害,但却包含了旨在利用或损坏运行该程序的系统的隐藏代码。特洛伊木马程序通常通过没有正确说明此程序的用途和功能的电子邮件传递给用户。它也称为特洛伊代码。特洛伊木马通过在其运行时传递恶意负载或任务达到此目的。
• 蠕虫。蠕虫使用自行传播的恶意代码,它可以通过网络连接自动将其自身从一台计算机分发到另一台计算机上。蠕虫会执行有害操作,例如,消耗网络或本地系统资源,这样可能会导致拒绝服务攻击。某些蠕虫无须用户干预即可执行和传播,而其他蠕虫则需用户直接执行蠕虫代码才能传播。除了复制,蠕虫也可能传递负载。
• 病毒病毒代码的明确意图就是自行复制。病毒尝试将其自身附加到宿主程序,以便在计算机之间进行传播。它可能会损害硬件、软件或数据。宿主程序执行时,病毒代码也随之运行,并会感染新的宿主,有时还会传递额外负载。
对于本指南的用途而言,负载是一个集合术语,表示恶意软件攻击在已感染计算机上执行的操作。各种恶意软件类别的上述定义使得可以通过一个简单的流程图来说明这些类别之间的不同之处。下图说明了可用来确定程序或脚本是否属于这些类别的元素:
恶意代码决策树通过此图,可以区分对于本指南用途而言的每种常见恶意代码类别。但是,了解单个攻击所引入的代码可能适合一个或多个类别是非常重要的。这些类型的攻击(称作混合威胁,包含使用多种攻击方法的多个恶意软件类型)会以极快的速度传播。攻击方法是恶意软件可用于发起攻击的例程。由于这些原因,混合威胁特别难以应对。
以下部分对每种恶意软件类别进行了更为详细的解释,以帮助说明每种类别的一些主要元素。
特洛伊木马 特洛伊木马不被认为是计算机病毒或蠕虫,因为它不自行传播。但是,病毒或蠕虫可用于将特洛伊木马作为攻击负载的一部分复制到目标系统上,此过程称为"发送"。特洛伊木马的通常意图是中断用户的工作或系统的正常运行。例如,特洛伊木马可能在系统中提供后门,使黑客可以窃取数据或更改配置设置。
在提及特洛伊木马或特洛伊类型活动时,还有两个经常使用的术语,其识别方法和解释如下:
• 远程访问特洛伊。某些特洛伊木马程序使黑客或数据窃取者可以远程地控制系统。此类程序称为"远程访问特洛伊"(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 应用程序的客户端组件,该应用程序将使用一个可以通过组织防火墙的网络端口,例如,端口 80。应用程序使用此端口通过防火墙,并直接将文件从一台计算机传输到另一台。这些应用程序很容易在 Internet 上获取,并且恶意软件编写者可以直接使用它们提供的传输机制,将受感染的文件传播到客户端硬盘上。
• 电子邮件。电子邮件已成为许多恶意软件攻击所选择的传输机制。电子邮件可以很容易地传送到几十万人,而恶意软件作恶者又无须留下自己的计算机,这使得电子邮件成为一种非常有效的传输方式。使用此方式哄骗用户打开电子邮件附件要相对容易一些(使用社会工程技术)。因而,许多最多产的恶意软件爆发已使用电子邮件作为它们的传输机制。有两种使用电子邮件作为传输机制的基本类型的恶意软件:
• 邮件程序。这种类型的恶意软件通过使用宿主上安装的邮件软件(例如,Microsoft Outlook? Express),或使用其自身的内置简单邮件传输协议 (SMTP) 引擎,将其自身作为邮件发送到限定数量的电子邮件地址。
• 大量邮件程序。这种类型的恶意软件使用宿主上安装的邮件软件或其自身的内置 SMTP 引擎,在受感染的计算机上搜索电子邮件地址,然后将其自身作为邮件大量发送到这些地址。
• 远程利用。恶意软件可能会试图利用服务或应用程序中的特定安全漏洞来进行复制。此行为通常可以在蠕虫中见到;例如, Slammer 蠕虫利用 Microsoft SQL Server? 2000 中的漏洞。此蠕虫生成了一个缓冲区溢出,允许一部分系统内存被可在和 SQL Server 服务相同的安全上下文中运行的代码覆盖。缓冲区溢出这种情况的出现,是因为向缓冲区添加的信息多于其可以存储的信息量。攻击者可能会利用此漏洞来占用系统。Microsoft 在 Slammer 发布的数月之前即识别并修复了此漏洞,但是由于有少数系统未被更新,使得此蠕虫得以传播。
负载
一旦恶意软件通过传输到达了宿主计算机,它通常会执行一个称为"负载"的操作,负载可以采用许多形式。在本部分中识别的某些常见负载类型包括:
• 后门。这种类型的负载允许对计算机进行未经授权的访问。它可能提供完全访问权限,但也可能仅限于某些访问权限,例如,通过计算机上的端口 21 启用文件传输协议 (FTP) 访问。如果攻击可以启用 Telnet,黑客则可以将已感染计算机用作 Telnet 攻击在其他计算机上的临时区域。正如前面所述,后门有时也称为"远程访问特洛伊"。
• 数据损坏或删除。一种最具破坏性的负载类型应该是损坏或删除数据的恶意代码,它可以使用户计算机上的信息变得无用。此处恶意软件编写者具有两个选项:第一个选项是将负载设计为快速执行。尽管对于它所感染的计算机而言极具潜在破坏性,但是此恶意软件的设计会导致其很快被发现,从而减少了其复制操作不被发现的可能性。另一个选项是将负载在本地系统上(以特洛伊木马的形式)保留一段时间(有关其示例的信息,请参阅本章后面的"触发机制"部分),这样会使恶意软件在尝试传递负载之前进行传播,从而使用户警觉到它的存在。
• 信息窃取。一种特别令人担心的恶意软件负载类型是旨在窃取信息的负载。如果负载会损害宿主计算机的安全,则它可能会提供一种将信息传回恶意软件作恶者的机制。这种情况可以多种形式发生;例如,传输可以自动进行,从而使恶意软件可以很容易地获取本地文件或信息,例如,用户所按的键(以便获取用户名和密码)。另一种机制是在本地宿主上提供一种环境,使攻击者可以远程控制该宿主,或直接获取对系统上文件的访问权限。
• 拒绝服务 (DoS)。可以传递的一种最简单的负载类型是拒绝服务攻击。DoS 攻击是由攻击者发起的一种计算机化的袭击,它使网络服务超负荷或停止网络服务,如 Web 服务器或文件服务器。DoS 攻击的唯一目的是使特定服务在一段时间内不可用。
• 分布式拒绝服务 (DDoS)。这种类型的攻击一般使用已感染的客户端,而这些客户端通常完全不知道它们在此类攻击中的角色。DDoS 攻击是一种拒绝服务攻击,其中攻击者使用各种计算机上安装的恶意代码来攻击单个目标。攻击者使用此方法对目标造成的影响很可能会大于使用单个攻击计算机造成的影响。关于攻击怎样发生的语义根据攻击的不同而不尽相同,但是它们通常都涉及将大量数据发送到特定的宿主或网站,使其停止对合法通信的响应(或者无法响应)。这样会完全占用受害站点的可用带宽,并且会有效地使此站点脱机。
这种类型的攻击极难进行防护,因为应为此类攻击负责的宿主实际上其自身已成为不知情的受害者。DDoS 攻击通常由 bots(执行重复任务的程序)执行(例如,Internet 中继聊天 (IRC) Eggdrop bots),黑客可以使用 bots 通过 RC 通道来控制"受害"计算机。一旦这些计算机处于黑客的控制之中,它们就会成为"僵尸进程",并会在接到攻击者的命令之后影响目标,而计算机的所有者对此不会有任何察觉。
DoS 和 DDoS 方法都涉及到了许多不同的攻击技术,包括:
• 系统关闭。如果恶意软件可以关闭宿主系统或使其崩溃,则它可以成功地中断一项或多项服务。攻击宿主系统需要恶意软件找到应用程序的漏洞,或可以导致系统关闭的操作系统。
• 带宽充满。提供给 Internet 的大多数服务都通过带宽有限的网络连接进行链接,而网络又将它们连接到客户端。如果恶意软件编写者传递的负载使用虚假的网络通信填满带宽,则仅通过阻止客户端使其无法直接连接到服务即可生成 DoS。
• 网络 DoS。这种类型的负载试图使本地宿主可用的资源超负载。诸如微处理器和内存能力的资源因 SYN 洪水攻击而溢出;在此类攻击中,攻击者使用某个程序发送大量的 TCP SYN 请求,以填满服务器上挂起的连接队列,并拒绝来自宿主的合法网络通信和到宿主的合法网络通信。电子邮件炸弹攻击也通过填满存储资源来创建 DoS 攻击;在这种攻击中,过分庞大的电子邮件数据会发送到电子邮件地址,并试图中断电子邮件程序或使接收者无法再收到合法的信息。
• 服务中断。这种类型的负载也会导致 DoS。例如,如果域名系统 (DNS) 服务器上的攻击禁用了 DNS 服务,则此 DoS 攻击技术已经实现。但是,系统上的所有其他服务可能仍保持未感染状态。
触发机制
触发机制是恶意软件的一个特征,恶意软件使用此机制启动复制或负载传递。典型的触发机制包括以下内容:
• 手动执行。这种类型的触发机制只是执行由受害者直接执行的恶意软件。
• 社会工程。恶意软件通常使用某种形式的社会工程,来欺骗受害者手动执行恶意代码。这种方法可能相对简单,例如在大量邮件蠕虫中使用的那些方法,其中社会工程元素主要在电子邮件的主题字段中选择最有可能使受害者打开邮件的文本。 恶意软件编写者也可能使用电子邮件欺骗,以试图欺骗受害者并使其相信电子邮件来自可信源。欺骗是模拟网站或数据传输的行为,以使其看起来可信。例如,最早出现在 2003 年的原始 Dumaru 蠕虫修改了电子邮件的"收件人:"字段,使其错误地声称自己来自于 security@microsoft.com。(有关此特征的详细信息,请参阅本章中下一部分中的"恶作剧")。
• 半自动执行。这种类型的触发机制最初由受害者启动,之后则自动执行。
• 自动执行。这种类型的触发机制根本无须手动执行。恶意软件执行攻击,而无须受害者运行目标计算机上的任何恶意代码。
• 定时炸弹。这种类型的触发机制在一段时间之后执行操作。这段时间可能是自第一次执行感染或某个预先规定日期或日期范围之后的一段时间延迟。例如,MyDoom.B 蠕虫将仅在 2004 年2月3 日对于 Microsoft.com 网站启动其负载例程,并仅在2004 年2 月日对 SCO Group 网站启动其负载例程。然后,此蠕虫会在2004 年3 月1日停止所有复制,尽管此定时炸弹的后门组件在此时间之后仍处于激活状态。
• 条件。这种类型的触发机制使用某个预先确定的条件作为触发器来传递其负载。例如,一个重命名的文件、一组击键或一个启动的应用程序。使用此类触发器的恶意软件有时称为"逻辑炸弹"。
防护机制
许多恶意软件示例使用某种类型的防护机制,来降低被发现和删除的可能性。以下列表提供了一些已被使用的技术的示例:
• 装甲。这种类型的防护机制使用某种试图防止对恶意代码进行分析的技术。这种技术包括检测调试程序何时运行并试图阻止恶意代码正常工作,或添加许多无意义的代码,使人很难判断恶意代码的用途。
• 窃取。恶意软件使用此类技术,通过截获信息请求并返回错误数据来隐藏其自身。例如,病毒可能会存储未受感染的启动扇区的图像,并在有人尝试查看受感染的启动扇区时显示此图像。1986 年,最早被人们知道的计算机病毒(称为"Brain")便使用了这种技术。
• 加密。使用此防护机制的恶意软件加密其自身或负载(有时甚至加密其他系统数据),以防止检测或数据检索。加密的恶意软件包含静态的解密例程、加密密钥和加密的恶意代码(其中包含加密例程)。执行时,恶意软件使用解密例程和密钥来解密恶意代码。然后,恶意软件创建其代码的副本,并生成新的加密密钥。它使用该密钥及其加密例程来加密自身的新副本,然后使用解密例程添加新的密钥来启动新副本。与多态病毒不同,加密恶意软件总是使用相同的解密例程,因此尽管密钥值(以及加密的恶意代码签名)通常在不同的感染之间进行更改,但防病毒软件也可以搜索静态的解密例程,来检测出使用此防护机制的恶意软件。
• 寡态。显示此特征的恶意软件使用加密防护机制进行自身防护,并且可以将加密例程更改为只能使用固定的次数(通常数目很小)。例如,可生成两个不同解密例程的病毒将被划分到寡态。
• 多态。这种类型的恶意软件使用加密防护机制更改其自身,以免被检测出来,它通常采用如下方式:使用加密例程加密恶意软件自身,然后为每个变形提供不同的解密密钥。因此,多态恶意软件使用不限数量的加密例程来防止自身被检测出来。恶意软件复制时,解密代码中的一部分将被修改。根据特定的恶意代码,所执行的负载或其他操作可能使用加密,也可能不使用加密。通常情况下有一个变形引擎,它是生成随机加密例程的加密恶意软件的自包含组件。此引擎和恶意软件都将被加密,并且新的解密密钥会同它们一起传送。