什么是恶意软件? 本指南将术语"恶意软件"用作一个集合名词,来指代故意在计算机系统上执行恶意任务的病毒、蠕虫和特洛伊木马。 那么,计算机病毒或蠕虫的确切含义是什么?它们和特洛伊木马之间有哪些不同之处?防病毒应用程序是仅对蠕虫和特洛伊木马有效,还是仅对病毒有效? 所有这些问题都起源于令人迷惑且通常被曲解的恶意代码世界。现有恶意代码的数目和种类繁多,因此很难为每个恶意代码类别提供一个准确的定义。 对于笼统的防病毒讨论,可使用以下简单的恶意软件类别定义: • 特洛伊木马。该程序看上去有用或无害,但却包含了旨在利用或损坏运行该程序的系统的隐藏代码。特洛伊木马程序通常通过没有正确说明此程序的用途和功能的电子邮件传递给用户。它也称为特洛伊代码。特洛伊木马通过在其运行时传递恶意负载或任务达到此目的。 对于本指南的用途而言,负载是一个集合术语,表示恶意软件攻击在已感染计算机上执行的操作。各种恶意软件类别的上述定义使得可以通过一个简单的流程图来说明这些类别之间的不同之处。下图说明了可用来确定程序或脚本是否属于这些类别的元素:
图 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 是在 20 世纪 90 年代被识别出来的,当时 Sun 和 Linux 操作系统是它们的主要攻击对象。目前,Rootkit 可用于许多操作系统,其中包括 Microsoft? Windows? 平台。 注意:请注意,RAT 和某些包含 Rootkit 的工具具有合法的远程控制和监视使用。但是,这些工具引入的安全性和保密性问题给使用它们的环境带来了整体风险。 蠕虫 如果恶意代码进行复制,则它不是特洛伊木马,因此为了更精确地定义恶意软件而要涉及到的下一个问题是:"代码是否可在没有携带者的情况下进行复制?"即,它是否可以在无须感染可执行文件的情况下进行复制?如果此问题的答案为"是",则此代码被认为是某种类型的蠕虫。 大多数蠕虫试图将其自身复制到宿主计算机上,然后使用此计算机的通信通道来进行复制。例如,Sasser 蠕虫依赖服务的安全漏洞最初感染一个系统,然后使用已感染系统的网络连接来试图进行复制。如果已安装最新的安全更新(来停止感染),或已在环境中启用防火墙来阻止蠕虫所用的网络端口(来停止复制),则攻击将会失败。 病毒 如果恶意代码将其自身的副本添加到文件、文档或磁盘驱动器的启动扇区来进行复制,则认为它是病毒。此副本可以是原始病毒的直接副本,也可以是原始病毒的修改版本。有关详细信息,请参阅本章后面的"防护机制"部分。正如前面所提及的,病毒通常会将其包含的负载(例如,特洛伊木马)放置在一个本地计算机上,然后执行一个或多个恶意操作(例如,删除用户数据)。但是,仅进行复制且不具有负载的病毒仍是恶意软件问题,因为该病毒自身在其复制时可能会损坏数据、消耗系统资源并占用网络带宽。 恶意软件的特征 每类恶意软件可以表现出来的各种特征通常非常类似。例如,病毒和蠕虫可能都会使用网络作为传输机制。然而,病毒会寻找文件以进行感染,而蠕虫仅尝试复制其自身。以下部分说明了恶意软件的典型特征。 目标环境 恶意软件试图攻击宿主系统时,可能需要许多特定的组件,攻击才能成功。下面是一个典型示例,说明恶意软件在攻击宿主系统时所需的 组件: • 设备。某些恶意软件将一种设备类型作为专门的攻击目标,例如,个人计算机、Apple Macintosh 计算机甚至个人数字助理 (PDA),但是请注意,PDA 恶意软件目前非常少见。 携带者对象 如果恶意软件是病毒,它会试图将携带者对象作为攻击对象(也称为宿主)并感染它。目标携带者对象的数量和类型随恶意软件的不同而大不相同,以下列表提供了最常用的目标携带者的示例: • 可执行文件。这是通过将其自身附加到宿主程序进行复制的"典型"病毒类型的目标对象。除了使用 .exe 扩展名的典型可执行文件之外,具有以下扩展名的文件也可用作此用途:.com、.sys、.dll、.ovl、.ocx 和 .prg。 注意:如果病毒同时将文件和启动扇区作为感染目标,可称其为"多部分"病毒。 恶意软件的传输机制 攻击可以使用一个或多个不同方法,在计算机系统之间尝试并复制;本部分提供了与恶意软件使用的几个比较常见的传输机制有关的信息。 • 可移动媒体。计算机病毒和其他恶意软件最初的、并且可能也是最多产的传送器(至少到当前为止)是文件传输。此机制开始于软盘,然后移动到网络,目前正在寻找新的媒体,例如,通用串行总线 (USB) 设备和火线。感染速度并不像基于网络的恶意软件那样快,但安全威胁却始终存在,而且难以完全消除,因为系统之间需要交换数据。 • 邮件程序。这种类型的恶意软件通过使用宿主上安装的邮件软件(例如,Microsoft Outlook? Express),或使用其自身的内置简单邮件传输协议 (SMTP) 引擎,将其自身作为邮件发送到限定数量的电子邮件地址。 恶意软件的"负载" 一旦恶意软件通过传输到达了宿主计算机,它通常会执行一个称为"负载"的操作,负载可以采用许多形式。在本部分中识别的某些常见负载类型包括: • 后门。这种类型的负载允许对计算机进行未经授权的访问。它可能提供完全访问权限,但也可能仅限于某些访问权限,例如,通过计算机上的端口 21 启用文件传输协议 (FTP) 访问。如果攻击可以启用 Telnet,黑客则可以将已感染计算机用作 Telnet 攻击在其他计算机上的临时区域。正如前面所述,后门有时也称为"远程访问特洛伊"。 • 分布式拒绝服务 (DDoS)。这种类型的攻击一般使用已感染的客户端,而这些客户端通常完全不知道它们在此类攻击中的角色。DDoS 攻击是一种拒绝服务攻击,其中攻击者使用各种计算机上安装的恶意代码来攻击单个目标。攻击者使用此方法对目标造成的影响很可能会大于使用单个攻击计算机造成的影响。关于攻击怎样发生的语义根据攻击的不同而不尽相同,但是它们通常都涉及将大量数据发送到特定的宿主或网站,使其停止对合法通信的响应(或者无法响应)。这样会完全占用受害站点的可用带宽,并且会有效地使此站点脱机。 这种类型的攻击极难进行防护,因为应为此类攻击负责的宿主实际上其自身已成为不知情的受害者。DDoS 攻击通常由 bots(执行重复任务的程序)执行(例如,Internet 中继聊天 (IRC) Eggdrop bots),黑客可以使用 bots 通过 RC 通道来控制"受害"计算机。一旦这些计算机处于黑客的控制之中,它们就会成为"僵尸进程",并会在接到攻击者的命令之后影响目标,而计算机的所有者对此不会有任何察觉。 DoS 和 DDoS 方法都涉及到了许多不同的攻击技术,包括: • 系统关闭。如果恶意软件可以关闭宿主系统或使其崩溃,则它可以成功地中断一项或多项服务。攻击宿主系统需要恶意软件找到应用程序的漏洞,或可以导致系统关闭的操作系统。 恶意软件的触发机制 触发机制是恶意软件的一个特征,恶意软件使用此机制启动复制或负载传递。典型的触发机制包括以下内容: • 手动执行。这种类型的触发机制只是执行由受害者直接执行的恶意软件。 • 社会工程。恶意软件通常使用某种形式的社会工程,来欺骗受害者手动执行恶意代码。这种方法可能相对简单,例如在大量邮件蠕虫中使用的那些方法,其中社会工程元素主要在电子邮件的主题字段中选择最有可能使受害者打开邮件的文本。 恶意软件编写者也可能使用电子邮件欺骗,以试图欺骗受害者并使其相信电子邮件来自可信源。欺骗是模拟网站或数据传输的行为,以使其看起来可信。例如,最早出现在 2003 年的原始 Dumaru 蠕虫修改了电子邮件的"收件人:"字段,使其错误地声称自己来自于 [email protected]。(有关此特征的详细信息,请参阅本章中下一部分中的"恶作剧")。 恶意软件防护机制 许多恶意软件示例使用某种类型的防护机制,来降低被发现和删除的可能性。以下列表提供了一些已被使用的技术的示例: • 装甲。这种类型的防护机制使用某种试图防止对恶意代码进行分析的技术。这种技术包括检测调试程序何时运行并试图阻止恶意代码正常工作,或添加许多无意义的代码,使人很难判断恶意代码的用途。 |