由于黑客攻击最近在新闻中屡有报导,我们都知道需要认真地对待计算机安全问题。尽管有许多出版物介绍可以用来确保计算机环境安全的软件,但很少有出版物说明黑客攻击实际上是如何执行的。如果您负责确保公司的计算机环境的安全,那么,理解黑客攻击的工作原理对您就很重要了。在本文中,竖一分析了一些有趣的网络攻击并说明了它们是如何工作的。您将看到黑客是多么富于创造性,并将了解自己的软件中所包含的一些特性是如何被利用来对付您的。本文适合于对网络有一定理解,但不一定从事网络领域日常工作的读者。
黑客基础知识
不难想象,本文可选择的攻击类型范围很广。我之所以选取本文所讨论的几种特定攻击,是因为它们不需要太多关于所涉及协议的知识,但仍然能有效地说明了攻击是如何执行的、攻击实际上是多么简单(一旦您知道了详细信息)以及攻击者所需的资源(计算和网络)是多么有限。尽管不可能在本文中涵盖关于黑客攻击的整个主题,但我已尽可能简化基本原理,而仍然尽量多地提供必要信息,以便您理解所描述的攻击。
攻击的种类
稍后您将了解关于所选取的攻击及其执行方式的详细信息。但在开始讨论之前,您需要理解这个领域的一些术语。通常,攻击是按其特征分类的。下面描述了这些特征中的两种:
扫描:扫描或跟踪足迹(footprinting)是黑客的初始信息收集过程的一部分。在黑客能够攻击系统之前,他们需要收集关于该系统的信息,如网络布局、操作系统类型、系统可用服务、系统用户等。黑客可以根据所收集的信息推断出可能的弱点,并选择对选定目标系统的最佳攻击方法。
拒绝服务攻击:通常,黑客瞄准特定系统,闯入系统以便将其用于特定用途。那些系统的主机安全性经常会阻止攻击者获得对主机的控制权。但进行拒绝服务攻击时,攻击者不必获得对系统的控制权。其目标只是使系统或网络过载,这样它们就无法继续提供服务了。拒绝服务攻击可以有不同的目标,包括带宽消耗(bandwidth consumption)和资源缺乏(resource starvation)。
协议
本文讨论了针对网际控制报文协议(ICMP)和传输控制协议(TCP)上的攻击,这两个协议都属于网际协议(IP)系列。在深入研究关于这些协议的详细信息之前,我打算先在适合于这些协议的环境中讨论它们。图 1 显示了将以太网假定为底层物理网络技术时的网际协议(Internet Protocol)栈的简化图。
图 1. 网际协议栈
如图 1 所示,网络协议通常是分层的。这样做是有意义的,因为底层协议提供很基本的服务,如网络电缆上的信号传输。此外,较高级别的协议提供更复杂的应用层服务,如 Telnet。每个层都使用下面一层的服务,这使得顶层协议能够在物理网络上传输消息。让我们简要地研究一下图 1 中显示的协议。
称为物理层协议的两个底层处理网络电缆上的实际信号传输。高一级别的协议 — 网际协议(IP)使用这一服务。
网际协议(IP)提供“主机对主机”包(或数据报)传递服务。IP 在底层物理网络的边界之间提供最基本的数据报传递形式。反过来,IP 层又提供由网际控制报文协议(ICMP)和传输控制协议(TCP)使用的服务。
网际控制报文协议(ICMP)是 IP 的组成部分,但它使用某些 IP 服务。ICMP 提供服务,使主机能够彼此交流控制信息。ICMP 由 IP 和一些更高级别的协议使用,如传输控制协议(TCP)。
传输控制协议(TCP) 是本文中讨论的第三个重要协议。TCP 的功能比 IP 更进一步,并提供两个重要特性:连接和服务质量。这意味着您可以在两台主机之间开一个虚拟通道,通过这个通道,使得所发送的包的顺序及其实际传递都得到保障。
接下来更高的一级是应用层协议,如 Telnet 和 SMTP。它们都使用由 TCP 提供的服务。例如,当您用 Telnet 连接到主机时,打开一个连接,并且您希望所有输入这个 Telnet 会话的数据都以正确的顺序发送到接收主机。
理解 IP
尽管我将不在本文中介绍任何 IP 级别的攻击,但我确实需要稍微详细地讨论 IP,因为它是 ICMP 和 TCP 的底层协议。
IP 提供在两个设置为 IP 节点的网络节点(称为源和目的地)间传输数据块的服务。源和目的地节点都用 IP 地址标识。要使一个 IP 网络中的两个节点能够通信,那些 IP 地址必须在整个网络中是唯一的。IP 地址(IP 版本 4)是一个 32 位数,通常以点分十进制符号
因为 IP 提供的是无连接、不可靠、最高效的(best-effort)数据报传递服务,所以 IP 的使用范围多少受到了限制。但是,它提供两个基本功能:寻址和分段。地址(在 IP 数据报头中封装为源和目的地地址)用来将数据报传输到其目的地,这个过程称为路由。有两种基本情况:
接收主机和发送主机位于同一子网,这种情况下数据报将被直接从发送方发送到接收方。
接收主机位于不同的子网,这种情况下发送主机将把数据报转发到网关(连接两个子网的 IP 主机),然后,如果目的地主机在一个与网关相连的子网中,则网关会尝试将数据报传递到目的地主机。如果目的地主机不在与网关相连的子网中,网关将会把数据报转发到另一个网关。这个过程将反复进行,直到能够将数据报传递到其目的地主机为止。
如果要传输的数据报超过了底层物理层规定的最大包的大小,则 IP 模块会在发送前将该数据报分割成几个较小的包(称为分段),然后在接收中时重新组装它们。
既然我已经介绍了基础知识,现在可以讨论个别协议了。在以下几节中,您将找到关于 ICMP 和 TCP 的更详细的信息以及一些使用这些协议的有趣的攻击。
使用 ICMP
因为 ICMP 是面向包的,所以它在相互连接的网络系统中是不可靠的主机对主机数据报服务,提供无保证的传递。ICMP 使用 IP 的基本支持,就好象是更高级别的协议。但是,ICMP 是 IP 的组成部分 — 这基本上意味着 ICMP 包将 IP 头用于传输 — 而且 ICMP 必须由每个 IP 模块实现。通常,ICMP 用来报告主机上数据报处理中的错误。ICMP 的部分功能包括:
目的地不可到达消息:如果根据网关的路由表,数据报中指定的要转发的目的地地址是不可到达的,则网关会向源主机返回 ICMP 的目的地不可到达消息,通知发送主机包传递不成功。
超时消息:每个 IP 数据报头中都包含一个字段 — 称为“生存时间字段” — 它指出数据报在被丢弃之前还能在因特网上保持多久。数据报在因特网上保持的时间以跳跃点(hop)衡量,其中一个跳跃点表示数据报通向目的地节点路径上的一个网关。当数据报经过网关转发时,它就将生存时间字段中的值减一。如果处理数据报的网关测定该数据报 IP 头中的生存时间字段为 0,则丢弃该数据报并用超时消息通知源主机。
回应请求和回应应答消息:如果主机 A 想知道主机 B 是否是活动的,则主机 A 会向主机 B 发送一条 ICMP 回应请求消息。主机 B 将用 ICMP 回应应答消息来应答,以表明自己是活动的。这条消息就是众所周知的 ping 包。
以上这些并不是 ICMP 所使用的全部消息类型,但它们能使您大致了解 ICMP 的用途。接下来我将向您介绍两种 ICMP 攻击。
目的地不可到达攻击
类别:拒绝服务攻击
描述:如上所述,ICMP 目的地不可到达消息向尝试转发消息的网关提供了一种工具,用来通知发送方:因为在数据报目的地地址中指定的主机不可到达,所以无法传递该消息。
您可能会猜想“目的地不可到达攻击”会是什么情形。让我们假设网关 G 连接了两个网络:网络 10.1.0.0 和网络 10.2.0.0。假设主机 A 地址为 10.1.23.3(因此属于网络 10.1.0.0),它想将数据报发送到主机 B,其地址为 10.2.156.34(因此属于 10.2.0.0)。在传输过程中,数据报将被发送到网关 G,而网关 G 又会将它转发到目的地主机。
如果入侵者获得了网络 10.1.0.0 中一台主机的访问权,那么,他可以广播一条“目的地不可到达消息”,声明网关 G 对于他所在网络的所有主机是不可到达的。这将使网关 G 和网络 10.2.0.0 暂时变得不可用,因而不可能从网络 10.1.0.0 向网络 10.2.0.0 传输任何消息。
这种攻击背后的动机只是使网络或服务暂时瘫痪。因为攻击者不需要功能强大的机器或高速的网络连接来执行这种攻击,所以它特别危险。
Smurf 攻击
类别:拒绝服务攻击
描述:Smurf 攻击是拒绝服务攻击的一种非常可怕的形式,因为它具有放大效应。Smurf 攻击利用 ICMP 回应消息。如上所述,主机 A 每次向主机 B 发送回应请求消息时,主机 B 都会返回回应应答消息以表明自己是活动的。名称“Smurf 攻击”源自一个名为 smurf 的利用程序,攻击者用该程序来执行这种攻击。
在深入研究这种攻击的详细信息之前,我应该解释一下术语电子欺骗(spoofing)。电子欺骗可以解释成用于伪造的网络安全术语。它指的是攻击者有办法构造包含错误数据的网络数据报。例如,攻击者可以从主机 A 向主机 B 发送数据报,但在该数据报头的源地址字段使用主机 C 的 IP 地址。这样,主机 B 就会认为包是来自主机 C 而不是主机 A。实际上,主机 C“假扮”了主机 A,而主机 B 对此一无所知。
知道了这一点,假设攻击者构造了一条 ICMP 回应消息,它的头中包含伪造的任意主机 A 的源地址,如 192.168.2.2。让我们进一步假设主机 A 位于网络 192.168.2.0,并且攻击者将该数据报发送到这个网络的网络广播地址而不是某台特定主机。通过将该数据报发送到网络广播地址,该数据报将被广播到这个网络上的每台主机,而该网络上的每台主机都会向假想的发送方(主机 A)返回回应应答消息。假设有 255 个子网,每个子网有 255 台计算机,则会有超过 65,000 台计算机向主机 A 发送回应应答消息 — 而这还只是假设攻击者仅仅广播了一条欺骗数据报(255 * 255 = 65,025)。通过增加欺骗包广播的次数或网络广播的规模,您将发现这能够成为非常严重的攻击形式。
Smurf 攻击的动机与前一种攻击相同。容易发现,由于这种攻击的放大效应,它甚至能够使工业强度的 Web 服务器瘫痪。同样,攻击者只需要很少的资源。
传输控制协议(TCP)
TCP 协议在包交换计算机网络中提供面向连接的、可靠的流传递服务。这意味着 TCP 模块保证传递无重复、无传输错误,而且数据以正确顺序传输。TCP 进一步提供了端口抽取功能,这使得主机可以并行地打开多个 TCP 连接。您可以由此发现 TCP 是由源地址/端口和目的地地址/端口四部分标识的。IP 地址/端口对被称为套接字。
TCP 与下面的 IP 层和上面的表示层及应用层协议(如 Telnet 或 SMTP)相互操作,如图 1 所述。
在继续讨论攻击之前,我将更详细地讨论 TCP 的某些方面,这些知识对于下面讨论的攻击是必需的。尤其是 TCP 包(称为段)的结构、如何在主机之间建立 TCP 连接和如何关闭连接。
TCP 包的结构
与 IP 数据报类似,TCP 段包含头部分、可选(选项)部分和数据部分。现在,让我们更仔细地研究一下 TCP 头的某些重要字段:
源端口:分配给启动连接的主机上虚连接的端口号。
目的地端口:目的地端口号。这也由启动连接的主机分配,因为只有该主机知道自己“想”连接到哪里。例如,如果您打开到特定主机的 Telnet 连接,则目的地端口将被设置为 23。
序列号和确认号:发送方和接收方使用两个序列号来确保包没有丢失、没有重复以及可以在目的地节点以正确顺序重新组装。
标志:这个字段包含六个控制位:
URG:向接收方表明一接收完数据就进行紧急处理。
ACK:表明确认号字段是有意义的。
PSH:表明必须迅速地将数据传递到接收方。
RST:表明要立即复位连接。
SYN:在需要同步序列号的情况下设置。
FIN:表明不会再有来自发送方的数据了(也就是说,连接将要关闭)。
以上是 TCP 头中的重要字段,下面关于 TCP 连接的建立和关闭的几节将使您更好地理解这些字段的用途。
建立和关闭 TCP 连接
连接建立:TCP 连接的建立由要建立连接的客户机和该客户机联系的服务器通过三步握手过程执行。要开始连接,您需要有一个在特定端口提供服务的服务器;例如,在端口 23 侦听的 Telnet 服务。当客户机想要打开与服务器的连接时,它向服务器发送一个连接请求。这意味着向服务器发送一个设置了 SYN 标志的 TCP 包。服务器以设置了 SYN 和 ACK 标志的包应答。最后,客户机通过向服务器发送设置了 ACK 标志的 TCP 包进行确认。这样,客户机和服务器之间的连接就建立起来了。
连接关闭:在发送完所有数据之后,通信伙伴中的一方想要关闭连接。假设是客户机要终止连接。它将通过向服务器发送设置了 FIN 标志的 TCP 包来完成该操作。服务器将通过返回设置了 ACK 标志的包进行确认。从此刻起,客户机将不再向服务器发送任何数据。它将仅以空段确认由服务器发送的数据。当服务器关闭客户机流时,连接关闭。
讲完了预备知识,我将向您介绍两个 TCP 攻击的示例。
TCP SYN 扫描
类别:端口扫描
描述:TCP SYN 扫描是端口扫描的变体。端口扫描用来检查给定主机上的端口是否打开。收集此类信息是跟踪足迹(先前的攻击种类中讨论过)的一部分,用来获得主机上的额外信息。知道主机上哪些端口是打开的,对于攻击者推断目标主机上可能存在的弱点是重要的第一步。
TCP 端口扫描的最简单形式是打开一个到主机所有端口的连接。如果成功地打开了到给定端口的连接,则攻击者知道该服务是可用的。但是,因为操作系统和/或工具可能会记录此类行为并因此察觉端口扫描,所以,攻击者通常想在被扫描主机不知道的情况下执行端口扫描。在本节中,我将讨论攻击者所使用的一种端口扫描形式,它不会被目标主机轻易地侦测到。
TCP SYN 扫描也称为半开扫描。顾名思义,攻击者只是部分地打开连接。要实现这一点,攻击者向目标主机发送设置了 SYN 标志的 TCP 包,就象打开常规 TCP 连接时一样。如果该端口是打开的,则被扫描主机返回设置了 SYN 和 ACK 标志的包进行响应。如果端口未打开,则被扫描主机发送设置了 RST 和 ACK 标志的包。
在被扫描主机返回了 SYN/ACK 包后,连接在服务器端将进入挂起状态,表明连接正处于建立的过程中,但还没有完全建立。但是,攻击者会发送设置了 RST 和 ACK 标志的包回应 SYN/ACK 包。这将触发被扫描主机再次关闭已部分建立的连接。
这种攻击的想法是找出特定目标主机上打开的端口,但完成的方式非常狡猾,因此被攻击的主机或质量低劣的入侵检测工具不会发现。
SYN 扩散
种类:拒绝服务攻击
描述:在 Smurf 攻击流行之前,SYN 扩散攻击是最具破坏性的拒绝服务攻击。如上所述,当主机 A 想建立到目的地主机 D 的 TCP 连接时,它首先发送设置了 SYN 标志的 TCP 段。当接收这个段时,主机 D 通过返回设置了 SYN 和 ACK 标志的包确认它。但主机 D 同时将挂起(部分打开的)连接放到挂起连接队列中。当等待连接的发起方(主机 A)的确认时,连接保持挂起状态。
主机 D 在特定的超时周期以内等待确认的到来,通常根据中断的 IP 实现从 75 秒到 25 分钟不等。因为挂起连接队列大小有限(大约是十二个左右的连接),所以最终将被填满。您会发现,攻击者只要每十秒钟左右发送几个 SYN 包就可以禁用特定端口。这种攻击方法是一种非常严重的拒绝服务攻击方式,因为在接收新的 SYN 包之前,被攻击的系统将永远无法清除积压队列,因此也就无法响应任何其它请求。
这种攻击的动机也很明显。攻击者想要使特定服务(例如 Web 服务器)瘫痪。您可以再次发现,对攻击者一方而言,只需少得惊人的资源就可以执行这种攻击。