
拒绝服务攻击
拒绝服务攻击即是攻击者想办法让目标机器停止提供服务,是黑客常用的攻击手段之一。其实对网路频宽进行的消耗性攻击只是拒绝服务攻击的一小部分,只要能够对目标造成麻烦,使某些服务被暂停甚至主机当机,都属于拒绝服务攻击。拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为网路协定本身的安全缺陷,从而拒绝服务攻击也成为了攻击者的终极手法。攻击者进行拒绝服务攻击,实际上让伺服器实现两种效果:一是迫使伺服器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使伺服器把非法用户的连线复位,影响合法用户的连线。
基本介绍
- 中文名:拒绝服务攻击
- 外文名:DoS
- 定义:攻击者让目标机器停止提供服务
- 代表:SYN Flood
- 攻击对象:伺服器
- 攻击者:骇客
基本概念
拒绝服务攻击,英文名称是Denial of Service,简称DOS,即拒绝服务,造成其攻击行为被称为DoS攻击,其目的是使计算机或网路无法提供正常的服务。最常见的DoS攻击有计算机网路频宽攻击和连通性攻击。频宽攻击指以极大的通信量冲击网路,使得所有可用网路资源都被消耗殆尽, 最后导致合法的用户请求无法通过。
连通性攻击指用大量的连线请求冲击计算机,使得所有可用的作业系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。常用攻击手段有:同步洪流、WinNuke、死亡之PING、Echl攻击、ICMP/SMURF、Finger炸弹、Land攻击、Ping洪流、Rwhod、tearDrop、TARGA3、UDP攻击、OOB等。
原理
SYN Flood
SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(Distributed Denial Of Service分散式拒绝服务攻击)的方式之一,这是一种利用TCP协定缺陷,传送大量伪造的TCP连线请求,使被攻击方资源耗尽(CPU满负荷或记忆体不足)的攻击方式。
SYN Flood攻击的过程在TCP协定中被称为三次握手(Three-way Handshake),而SYN Flood拒绝服务攻击就是通过三次握手而实现的。
典型的分散式拒绝服务攻击网路结构图

(1) 攻击者向被攻击伺服器传送一个包含SYN标誌的TCP报文,SYN(Synchronize)即同步报文。同步报文会指明客户端使用的连线埠以及TCP连线的初始序号。这时同被攻击伺服器建立了第一次握手。
(2) 受害伺服器在收到攻击者的SYN报文后,将返回一个SYN+ACK的报文,表示攻击者的请求被接受,同时TCP序号被加一,ACK(Acknowledgment)即确认,这样就同被攻击伺服器建立了第二次握手。
(3) 攻击者也返回一个确认报文ACK给受害伺服器,同样TCP序列号被加一,到此一个TCP连线完成,三次握手完成。
具体原理是:TCP连线的三次握手中,假设一个用户向伺服器传送了SYN报文后突然当机或掉线,那幺伺服器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下伺服器端一般会重试(再次传送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连线。这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致伺服器的一个执行绪等待1分钟并不是什幺很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP位址),伺服器端将为了维护一个非常大的半连线列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和记忆体,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果伺服器的TCP/IP栈不够强大,最后的结果往往是堆叠溢出崩溃—— 即使伺服器端的系统足够强大,伺服器端也将忙于处理攻击者伪造的TCP连线请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,伺服器失去回响,这种情况就称作:伺服器端受到了SYN Flood攻击(SYN洪水攻击)。
分散式拒绝服务攻击网路结构图

SYN COOKIE 防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆叠上的,他为linux作业系统提供保护。SYN cookie防火墙是linux的 一大特色,你可以使用一个防火墙来保护你的网路以避免遭受SYN洪水攻击。
下面是SYN cookie防火墙的原理
client firewall server
------ ---------- ------
1. SYN----------- - - - - - - - - - ->
2. <------------SYN-ACK(cookie)
3. ACK----------- - - - - - - - - - ->
4. - - - - - - -SYN--------------->
5. <- - - - - - - - - ------------SYN-ACK
6. - - - - - - -ACK--------------->
7. -----------> relay the ------->
<----------- connection <-------
1:一个SYN包从C传送到S
2:防火墙在这里扮演了S的角色来回应一个带SYN cookie的SYN-ACK包给C
3:C传送ACK包,接着防火墙和C的连线就建立了。
4:防火墙这个时候扮演C的角色传送一个SYN给S
5:S返回一个SYN给C
6:防火墙扮演C传送一个ACK确认包给S,这个时候防火墙和S的连线也就建立了
7:防火墙转发C和S间的数据
如果系统遭受SYN Flood,那幺第三步就不会有,而且无论在防火墙还是S都不会收到相应在第一步的SYN包,所以我们就击退了这次SYN洪水攻击。
IP欺骗性攻击
这种攻击利用RST位来实现。假设有一个合法用户(61.61.61.61)已经同伺服器建立了正常的连线,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向伺服器传送一个带有RST位的TCP数据段。伺服器接收到这样的数据后,认为从61.61.61.61传送的连线有错误,就会清空缓冲区中建立好的连线。这时,如果合法用户61.61.61.61再传送合法数据,伺服器就已经没有这样的连线了,该用户就必须从新开始建立连线。攻击时,攻击者会伪造大量的IP位址,向目标传送RST数据,使伺服器不对合法用户服务,从而实现了对受害伺服器的拒绝服务攻击。
DDOS攻击给运营商带来的损害
DDOS攻击


UDP洪水攻击
攻击者利用简单的TCP/IP服务,如Chargen和Echo来传送毫无用处的占满频宽的数据。通过伪造与某一主机的Chargen服务之间的一次的UDP连线,回复地址指向开着Echo服务的一台主机,这样就生成在两台主机之间存在很多的无用数据流,这些无用数据流就会导致频宽的服务攻击。
Ping洪流攻击
由于在早期的阶段,路由器对包的最大尺寸都有限制。许多作业系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是载入的尺寸超过64K上限时,就会出现记忆体分配错误,导致TCP/IP堆叠崩溃,致使接受方当机。
teardrop攻击
泪滴攻击是利用在TCP/IP堆叠中实现信任IP碎片中的包的标题头所包含的信息来实现自己的攻击。IP分段含有指明该分段所包含的是原包的哪一段的信息,某些TCP/IP(包括service pack 4以前的NT)在收到含有重叠偏移的伪造分段时将崩溃。
Land攻击
Land攻击原理是:用一个特别打造的SYN包,它的原地址和目标地址都被设定成某一个伺服器地址。此举将导致接受伺服器向它自己的地址传送SYN-ACK讯息,结果这个地址又发回ACK讯息并创建一个空连线。被攻击的伺服器每接收一个这样的连线都将保留,直到逾时,对Land攻击反应不同,许多UNIX实现将崩溃,NT变的极其缓慢(大约持续5分钟)。
Smurf攻击
一个简单的Smurf攻击原理就是:通过使用将回复地址设定成受害网路的广播地址的ICMP应答请求(ping)数据包来淹没受害主机的方式进行。最终导致该网路的所有主机都对此ICMP应答请求作出答覆,导致网路阻塞。它比ping of death洪水的流量高出1或2个数量级。更加複杂的Smurf将源地址改为第三方的受害者,最终导致第三方崩溃。
Fraggle攻击
原理:Fraggle攻击实际上就是对Smurf攻击作了简单的修改,使用的是UDP应答讯息而非ICMP。
属性分类
J.Mirkovic和P. Reiher [Mirkovic04]提出了拒绝服务攻击的属性分类法,即将攻击属性分为攻击静态属性、攻击动态属性和攻击互动属性三类,根据DoS攻击的这些属性的不同,就可以对攻击进行详细的分类。凡是在攻击开始前就已经确定,在一次连续的攻击中通常不会再发生改变的属性,称为攻击静态属性。攻击静态属性是由攻击者和攻击本身所确定的,是攻击基本的属性。那些在攻击过程中可以进行动态改变的属性,如攻击的目标选取、时间选择、使用源地址的方式,称为攻击动态属性。而那些不仅与攻击者相关而且与具体受害者的配置、检测与服务能力也有关係的属性,称为攻击互动属性。
攻击静态属性
攻击静态属性主要包括攻击控制模式、攻击通信模式、攻击技术原理、攻击协定和攻击协定层等。
(1)攻击控制方式
攻击控制方式直接关係到攻击源的隐蔽程度。根据攻击者控制攻击机的方式可以分为以下三个等级:直接控制方式(Direct)、间接控制方式(Indirect)和自动控制方式(Auto)。
最早的拒绝服务攻击通常是手工直接进行的,即对目标的确定、攻击的发起和中止都是由用户直接在攻击主机上进行手工操作的。这种攻击追蹤起来相对容易,如果能对攻击包进行準确的追蹤,通常就能找到攻击者所在的位置。由于直接控制方式存在的缺点和攻击者想要控制大量攻击机发起更大规模攻击的需求,攻击者开始构建多层结构的攻击网路。多层结构的攻击网路给针对这种攻击的追蹤带来很大困难,受害者在追蹤到攻击机之后,还需要从攻击机出发继续追蹤控制器,如果攻击者到最后一层控制器之间存在多重跳板时,还需要进行多次追蹤才能最终找到攻击者,这种追蹤不仅需要人工进行操作,耗费时间长,而且对技术也有很高的要求。这种攻击模式,是目前最常用的一种攻击模式。自动攻击方式,是在释放的蠕虫或攻击程式中预先设定了攻击模式,使其在特定时刻对指定目标发起攻击。这种方式的攻击,从攻击机往往难以对攻击者进行追蹤,但是这种控制方式的攻击对技术要求也很高。Mydoom蠕虫对SCO网站和Microsoft网站的攻击就属于第三种类型[TA04-028A]。
(2)攻击通信方式
在间接控制的攻击中,控制者和攻击机之间可以使用多种通信方式,它们之间使用的通信方式也是影响追蹤难度的重要因素之一。攻击通信方式可以分为三种方式,分别是:双向通信方式(bi)、单向通信方式(mono)和间接通信方式(indirection)。
双向通信方式是指根据攻击端接收到的控制数据包中包含了控制者的真实IP位址,例如当控制器使用TCP与攻击机连线时,该通信方式就是双向通信。这种通信方式,可以很容易地从攻击机查找到其上一级的控制器。
单向通信方式指的是攻击者向攻击机传送指令时的数据包并不包含传送者的真实地址信息,例如用伪造IP位址的UDP包向攻击机传送指令。这一类的攻击很难从攻击机查找到控制器,只有通过包标记等IP追蹤手段,才有可能查找到给攻击机传送指令的机器的真实地址。但是,这种通信方式在控制上存在若干局限性,例如控制者难以得到攻击机的信息反馈和状态。
间接通信方式是一种通过第三者进行交换的双向通信方式,这种通信方式具有隐蔽性强、难以追蹤、难以监控和过滤等特点,对攻击机的审计和追蹤往往只能追溯到某个被用于通信中介的公用伺服器上就再难以继续进行。这种通信方式已发现的主要是通过IRC(Internet Relay Chat)进行通信[Jose Nazario],从2000年8月出现的名为Trinity的DDoS攻击工具开始,已经有多种DDoS攻击工具及蠕虫採纳了这种通信方式。在基于IRC的傀儡网路中,若干攻击者连线到Internet上的某个IRC伺服器上,并通过伺服器的聊天程式向傀儡主机传送指令。
(3)攻击原理
DoS攻击原理主要分为两种,分别是:语义攻击(Semantic)和暴力攻击(Brute)。
语义攻击指的是利用目标系统实现时的缺陷和漏洞,对目标主机进行的拒绝服务攻击,这种攻击往往不需要攻击者具有很高的攻击频宽,有时只需要传送1个数据包就可以达到攻击目的,对这种攻击的防範只需要修补系统中存在的缺陷即可。暴力攻击指的是不需要目标系统存在漏洞或缺陷,而是仅仅靠传送超过目标系统服务能力的服务请求数量来达到攻击的目的,也就是通常所说的风暴攻击。所以防御这类攻击必须藉助于受害者上游路由器等的帮助,对攻击数据进行过滤或分流。某些攻击方式,兼具语义和暴力两种攻击的特徵,比如SYN风暴攻击,虽然利用了TCP协定本身的缺陷,但仍然需要攻击者传送大量的攻击请求,用户要防御这种攻击,不仅需要对系统本身进行增强,而且也需要增大资源的服务能力。还有一些攻击方式,是利用系统设计缺陷,产生比攻击者频宽更高的通信数据来进行暴力攻击的,如DNS请求攻击和Smurf攻击,参见4.2.3节以及文献[IN-2000-04]和[CA-1998-01]。这些攻击方式在对协定和系统进行改进后可以消除或减轻危害,所以可把它们归于语义攻击的範畴。
(4)攻击协定层
攻击所在的TCP/IP协定层可以分为以下四类:数据链路层、网路层、传输层和套用层。
数据链路层的拒绝服务攻击[Convery] [Fischbach01][Fischbach02]受协定本身限制,只能发生在区域网路内部,这种类型的攻击比较少见。针对IP层的攻击主要是针对目标系统处理IP包时所出现的漏洞进行的,如IP碎片攻击[Anderson01],针对传输层的攻击在实际中出现较多,SYN风暴、ACK风暴等都是这类攻击,面向套用层的攻击也较多,剧毒包攻击中很多利用应用程式漏洞的(例如缓冲区溢出的攻击)都属于此类型。
(5)攻击协定
攻击所涉及的最高层的具体协定,如SMTP、ICMP、UDP、HTTP等。攻击所涉及的协定层越高,则受害者对攻击包进行分析所需消耗的计算资源就越大。
攻击动态属性
攻击动态属性主要包括攻击源地址类型、攻击包数据生成模式和攻击目标类型。
(1)攻击源地址类型
攻击者在攻击包中使用的源地址类型可以分为三种:真实地址(True)、伪造合法地址(Forge Legal)和伪造非法地址(Forge Illegal)。
攻击时攻击者可以使用合法的IP位址,也可以使用伪造的IP位址。伪造的IP位址可以使攻击者更容易逃避追蹤,同时增大受害者对攻击包进行鉴别、过滤的难度,但某些类型的攻击必须使用真实的IP位址,例如连线耗尽攻击。使用真实IP位址的攻击方式由于易被追蹤和防御等原因,近些年来使用比例逐渐下降。使用伪造IP位址的攻击又分为两种情况:一种是使用网路中已存在的IP位址,这种伪造方式也是反射攻击所必需的源地址类型;另外一种是使用网路中尚未分配或者是保留的IP位址(例如192.168.0.0/16、172.16.0.0/12等内部网路保留地址[RFC1918])。
(2)攻击包数据生成模式
攻击包中包含的数据信息模式主要有5种:不需要生成数据(None)、统一生成模式(Unique)、随机生成模式(Random)、字典模式(Dictionary)和生成函式模式(Function)。
在攻击者实施风暴式拒绝服务攻击时,攻击者需要传送大量的数据包到目标主机,这些数据包所包含的数据信息载荷可以有多种生成模式,不同的生成模式对受害者在攻击包的检测和过滤能力方面有很大的影响。某些攻击包不需要包含载荷或者只需包含适当的固定的载荷,例如SYN风暴攻击和ACK风暴攻击,这两种攻击传送的数据包中的载荷都是空的,所以这种攻击是无法通过载荷进行分析的。但是对于另外一些类型的攻击包,就需要携带相应的载荷。
攻击包载荷的生成方式可以分为4种:第一种是传送带有相同载荷的包,这样的包由于带有明显的特徵,很容易被检测出来。第二种是传送带有随机生成的载荷的包,这种随机生成的载荷虽然难以用模式识别的方式来检测,然而随机生成的载荷在某些套用中可能生成大量没有实际意义的包,这些没有意义的包也很容易被过滤掉,但是攻击者仍然可以精心设计载荷的随机生成方式,使得受害者只有解析到套用层协定才能识别出攻击数据包,从而增加了过滤的困难性。第三种方式是攻击者从若干有意义载荷的集合中按照某种规则每次取出一个填充到攻击包中,这种方式当集合的规模较小时,也比较容易被检测出来。最后一种方式是按照某种规则每次生成不同的载荷,这种方式依生成函式的不同,其检测的难度也是不同的。
(3)攻击目标类型
攻击目标类型可以分为以下6类:应用程式(Application)、系统(System)、网路关键资源(Critical)、网路(Network)、网路基础设施(Infrastructure)和网际网路(Internet)。
针对特定应用程式的攻击是较为常见的攻击方式,其中以剧毒包攻击较多,它包括针对特定程式的,利用应用程式漏洞进行的拒绝服务攻击,以及针对一类套用的,使用连线耗尽方式进行的拒绝服务攻击。针对系统的攻击也很常见,像SYN风暴、UDP风暴[CA-1996-01]以及可以导致系统崩溃、重启的剧毒包攻击都可以导致整个系统难以提供服务。针对网路关键资源的攻击包括对特定DNS、路由器的攻击。而面向网路的攻击指的是将整个区域网路的所有主机作为目标进行的攻击。针对网路基础设施的攻击需要攻击者拥有相当的资源和技术,攻击目标是根域名伺服器、主干网核心路由器、大型证书伺服器等网路基础设施,这种攻击发生次数虽然不多,但一旦攻击成功,造成的损失是难以估量的[Naraine02]。针对Internet的攻击是指通过蠕虫、病毒发起的,在整个Internet上蔓延并导致大量主机、网路拒绝服务的攻击,这种攻击的损失尤为严重。
互动属性
攻击的动态属性不仅与攻击者的攻击方式、能力有关,也与受害者的能力有关。主要包括攻击的可检测程度和攻击影响。
(1)可检测程度
根据能否对攻击数据包进行检测和过滤,受害者对攻击数据的检测能力从低到高分为以下三个等级:可过滤(Filterable)、有特徵但无法过滤(Unfilterable)和无法识别(Noncharacterizable)。
第一种情况是,对于受害者来说,攻击包具有较为明显的可识别特徵,而且通过过滤具有这些特徵的数据包,可以有效地防御攻击,保证服务的持续进行。第二种情况是,对于受害者来说,攻击包虽然具有较为明显的可识别特徵,但是如果过滤具有这些特徵的数据包,虽然可以阻断攻击包,但同时也会影响到服务的持续进行,从而无法从根本上防止拒绝服务。第三种情况是,对于受害者来说,攻击包与其他正常的数据包之间,没有明显的特徵可以区分,也就是说,所有的包,在受害者看来,都是正常的。
(2)攻击影响
根据攻击对目标造成的破坏程度,攻击影响自低向高可以分为:无效(None)、服务降低(Degrade)、可自恢复的服务破坏(Self-recoverable)、可人工恢复的服务破坏(Manu-recoverable)以及不可恢复的服务破坏(Non-recoverable)。
如果目标系统在拒绝服务攻击发生时,仍然可以提供正常服务,则该攻击是无效的攻击。如果攻击能力不足以导致目标完全拒绝服务,但造成了目标的服务能力降低,这种效果称之为服务降低。而当攻击能力达到一定程度时,攻击就可以使目标完全丧失服务能力,称之为服务破坏。服务破坏又可以分为可恢复的服务破坏和不可恢复的服务破坏,网路拒绝服务攻击所造成的服务破坏通常都是可恢复的。一般来说,风暴型的DDoS攻击所导致的服务破坏都是可以自恢复的,当攻击数据流消失时,目标就可以恢复正常工作状态。而某些利用系统漏洞的攻击可以导致目标主机崩溃、重启,这时就需要对系统进行人工恢复;还有一些攻击利用目标系统的漏洞对目标的档案系统进行破坏,导致系统的关键数据丢失,往往会导致不可恢复的服务破坏,即使系统重新提供服务,仍然无法恢复到破坏之前的服务状态。
动机
与其他类型的攻击一样,攻击者发起拒绝服务攻击的动机也是多种多样的,不同的时间和场合发生的、由不同的攻击者发起的、针对不同的受害者的攻击可能有着不同的目的。这里,把拒绝服务攻击的一些主要目的进行归纳。需要说明的是,这里列出的没有也不可能包含所有的攻击目的;同时,这些目的也不是排他性的,一次攻击事件可能会有着多重的目的。
作为练习手段
由于DoS攻击非常简单,还可以从网上直接下载工具进行自动攻击。因此,这种攻击可以被一些自认为是或者想要成为黑客而实际上是脚本小子(Script Kiddies)的人用做练习攻击技术的手段。而其他的一些特权提升攻击(除通过蠕虫等进行自动攻击外),通常都会或多或少地牵涉到一些技术性的东西,从而掌握起来会有一定的难度。
炫耀
黑客们常常以能攻破某系统作为向同伴炫耀,提高在黑客社会中的可信度及知名度的资本,拒绝服务攻击虽然技术要求不是很高,有时也被一些人特别是一些“所谓的”黑客用来炫耀。
仇恨或报复
仇恨或报复也常常是攻击的动机。寻求报复通常都基于强烈的感情,攻击者可能竭尽所能地发起攻击,因而一般具有较大的破坏性。同时,拒绝服务攻击当是报复者的首选攻击方式,因为他们的目的主要是破坏而非对系统的控制或窃取信息。因仇恨而发起攻击的人员有:
前雇员,由于被解僱、下岗或者因为其他不愉快的原因辞职而感到不满的。
现雇员,感到其僱主应该提升自己、增加薪水或以其他方式承认其工作,而愿望没有得到满足的,尤其是哪些因为类似原因,打算辞职的。
现雇员,因为政治斗争、升职竞争等原因而恶意破坏他人工作成绩的。
外部人员,由于对公司充满仇恨,例如不满的客户或者竞争对手的雇员,他们可能希望损害公司的利益或者使其陷入困境。
外部人员,他们可能仇恨公司所雇用的某个人,这个人也许是前男/女朋友,前配偶等。
4.恶作剧或单纯为了破坏
有些系统的使用需要账户(用户名)和口令进行身份认证,而当以某个用户名登录时,如果口令连续错误的次数超过一定值,系统会锁定该账户,攻击者可以採用此方法实施对账户的拒绝服务攻击。此外,我们在现实生活中常常见到一些公共设施如通信电缆被恶意毁坏;在网路社会中,类似的情况也时有发生,这些攻击常常是为了恶作剧。
经济原因
有的攻击者攻击系统是为了某种经济利益,无论是直接的还是间接的。比如A、B是两家相互竞争的依赖Internet做生意的公司,如果其中一个公司的服务质量降低或者顾客不能访问该公司的网路,顾客可能会转向另一家公司,则A就可能对B公司提供的网上服务实施拒绝服务攻击,在这里,攻击者A可以通过对B的攻击而获取经济利益。攻击者也可以受僱而发起攻击,例如在上例中,一些黑客可能受A的僱佣而攻击B的网路,类似的实际案例早有报导。
敲诈、勒索也逐渐成为了一些攻击者进行拒绝服务攻击的目的。由于拒绝服务攻击会导致较大的损失,一些攻击者以此作为敲诈勒索的手段。例如,2004年欧洲杯足球赛期间发生的一起针对一个赌博公司的敲诈案[BBC04],攻击者威胁说如果该公司不付钱就会攻击其网站,使之下线。在其他的重要体育赛事期间,也发生过多起类似的犯罪行为。
又如,Renaud Bidou在Black Hat USA 2005会议中介绍了一个以拒绝服务攻击进行敲诈勒索的例子。受害者是位于莫斯科的一个从事货币兑换的俄罗斯金融公司,受害者的业务都是从网上线上处理的。攻击者先用大约每秒150 000个数据包的SYN风暴攻击受害者的伺服器(所有数据包指向同一个IP的同一个连线埠,即受害者关键业务所用的连线埠),攻击30分钟后,攻击者通过ICQ联繫,要求受害者在36小时内支付指定数量的赎金,整个第一波攻击持续60分钟后停止。从第一波攻击开始起36小时后,由于没有收到赎金,攻击者发起了第二波攻击,在此次攻击中,攻击者从每秒50 000个数据包开始,按每5分钟以每秒50 000个数据包的力度递增,到20分钟时达到攻击的极限——每秒200 000个数据包,所有这些数据包都被受害者的SYNCookies措施所阻塞。第二波攻击的持续时间不长,到35分钟以后,受害者的业务得以恢复。
随着越来越多的受害者选择向敲诈者妥协,以拒绝服务攻击进行敲诈勒索的案例越来越多。同时,由于拒绝服务攻击常常涉及超出国界的Internet连线,对拒绝服务攻击这种犯罪行为的起诉也比较困难,这进一步加剧了问题的严重性。
政治原因
这类攻击的目的是对某种政治思想的表达或者压制他人的表达。如2001年5月间,由美国间谍飞机撞毁我巡逻机引发的,中美黑客之间的一场网路大战①,以及2003年伊拉克战争期间美国与伊拉克黑客之间的发生的相互攻击对方国区域网路络的事件就属政治原因引起的(当然,拒绝服务攻击只是当时双方採取的攻击手段之一)。又比如,某银行贷款给一家公司用于在某处建一对环境污染严重的化工厂,环境保护主义者可能会攻击该银行,后果或者是导致该银行的损失,达到报复该银行的目的,或者是迫使该银行取消该项贷款,达到保护环境的目的。
信息战
在战争条件下,交战双方如果採取信息战的方式,则拒绝服务攻击就是最常用的战术手段之一。例如,1991年,在海湾战争开战前数周,美国特工买通了安曼国际机场的工作人员,用带有病毒的晶片替换了运往伊拉克的印表机晶片。该病毒由美国国家安全局设计,目的就是为了破坏巴格达的防空系统,从而为美方的空中打击创造有利条件。据一本名为《不战而胜:波斯湾战争中未揭露的历史》(Triumph without Victory: The Unreported History of the Persian Gulf War)的图书称,该病毒可以逃避层层安全检测,当病毒存在于计算机上时,每次伊拉克的技术人员开一个视窗访问信息的时候,其计算机萤幕上的信息就会消失。有报导称该病毒最后确实起作用了。这里,美方通过激发病毒使得伊拉克防空系统使用的印表机不能正常工作,就是一种拒绝服务攻击。
辅助手段
前面讨论的目的都是由拒绝服务攻击直接达到的,事实上,拒绝服务攻击还可以作为特权提升攻击、获得非法访问的一种辅助手段。这时候,拒绝服务攻击服从于其他攻击的目的。通常,攻击者不能单纯通过拒绝服务攻击获得对某些系统、信息的非法访问,但其可作为间接手段。
SYN风暴攻击可以用于IP劫持、IP欺骗等。当攻击者想要向B冒充C时,其通常需要C不能回响B的讯息,为此,攻击者可以先攻击C(如果它是线上的)使其无法对B的讯息进行回响。然后攻击者就可以通过窃听发向C的数据包,或者通过猜测发向C的数据包中的序列号等,然后冒充C与第三方通信。
一些系统在启动时会有漏洞,可以通过拒绝服务攻击使之重启,然后在该系统重启时针对漏洞进行攻击。如RARP-boot,如果能令其重启,就可以将其攻破。只需知道RARP-boot在引导时监听的连线埠号(通常为69),通过向其传送伪造的数据包几乎可以完全控制其引导(Boot)过程。
有些网路配置成当防火墙关闭时所有数据包都能通过(特别是对于那些提供服务比安全更加重要的场合,如普通的ISP),则可通过对防火墙的拒绝服务攻击使其失去作用达到非法访问受防火墙保护的网路的目的。
对Windows系统的大多数配置变动在生效前都需要重新启动系统。这幺一来,如果攻击者已经获得了对系统的管理性特权的变动之后,可能需要採取拒绝服务攻击的手段使系统重启或者迫使系统的真正管理员重启系统,以便其改动的配置生效。
对DNS的拒绝服务攻击可以达到地址冒充的目的。DNS伺服器起到的是把域名解析为IP位址的作用。攻击者可以通过把DNS致瘫,然后冒充DNS的域名解析,把错误的域名-IP位址的对应关係提供给用户,以便把用户(受害者)的数据包指向错误的网站(如攻击者的网站),或者把受害者的邮件指向错误的(如攻击者的)邮件伺服器,这样,攻击者就达到了冒充其他域名的目的。攻击者的最终目的大致有两种:一是窃取受害者的信息,但客观上导致用户不能套用相应的服务,也构成拒绝服务攻击;二是拒绝服务攻击,如蓄意使用户不能访问需要的网站,不能传送邮件到需要的伺服器等。
防止攻击
许多现代的UNIX允许管理员设定一些限制,如限制可以使用的最大记忆体、CPU时间以及可以生成的最大档案等。如果当前正在开发―个新的程式,而又不想偶然地使系统变得非常缓慢,或者使其它分享这台主机的用户无法使用,这些限制是很有用的。Korn Shell的ulimit命令和Shell的Iimit命令可以列出当前程的资源限制。
SYN Flood防御
前文描述过,SYN Flood攻击大量消耗伺服器的CPU、记忆体资源,并占满SYN等待伫列。相应的,我们修改核心参数即可有效缓解。主要参数如下:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
分别为启用SYN Cookie、设定SYN最大伫列长度以及设定SYN+ACK最大重试次数。
SYN Cookie的作用是缓解伺服器资源压力。启用之前,伺服器在接到SYN数据包后,立即分配存储空间,并随机化一个数字作为SYN号传送SYN+ACK数据包。然后保存连线的状态信息等待客户端确认。启用SYN Cookie之后,伺服器不再分配存储空间,而且通过基于时间种子的随机数算法设定一个SYN号,替代完全随机的SYN号。传送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到伺服器接到客户端的最终ACK包,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。当然,前文的高级攻击中有SYN混合ACK的攻击方法,则是对此种防御方法的反击,其中优劣由双方的硬体配置决定
tcp_max_syn_backlog则是使用伺服器的记忆体资源,换取更大的等待伫列长度,让攻击数据包不至于占满所有连线而导致正常用户无法完成握手。net.ipv4.tcp_synack_retries是降低伺服器SYN+ACK报文重试次数,儘快释放等待资源。这三种措施与攻击的三种危害一一对应,完完全全地对症下药。但这些措施也是双刃剑,可能消耗伺服器更多的记忆体资源,甚至影响正常用户建立TCP连线,需要评估伺服器硬体资源和攻击大小谨慎设定。
除了定製TCP/IP协定栈之外,还有一种常见做法是TCP首包丢弃方案,利用TCP协定的重传机制识别正常用户和攻击报文。当防御设备接到一个IP位址的SYN报文后,简单比对该IP是否存在于白名单中,存在则转发到后端。如不存在于白名单中,检查是否是该IP在一定时间段内的首次SYN报文,不是则检查是否重传报文,是重传则转发并加入白名单,不是则丢弃并加入黑名单。是首次SYN报文则丢弃并等待一段时间以试图接受该IP的SYN重传报文,等待逾时则判定为攻击报文加入黑名单。
首包丢弃方案对用户体验会略有影响,因为丢弃首包重传会增大业务的回响时间,有鑒于此发展出了一种更优的TCP Proxy方案。所有的SYN数据报文由清洗设备接受,按照SYN Cookie方案处理。和设备成功建立了TCP三次握手的IP位址被判定为合法用户加入白名单,由设备伪装真实客户端IP位址再与真实伺服器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP位址,被判定为恶意IP位址禁止一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标誌位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。
清洗设备的硬体具有特殊的网路处理器晶片和特别最佳化的作业系统、TCP/IP协定栈,可以处理非常巨大的流量和SYN伫列。
HTTP Flood防御
HTTP Flood攻击防御主要通过快取的方式进行,儘量由设备的快取直接返回结果来保护后端业务。大型的网际网路企业,会有庞大的CDN节点快取内容。
当高级攻击者穿透快取时,清洗设备会截获HTTP请求做特殊处理。最简单的方法就是对源IP的HTTP请求频率做统计,高于一定频率的IP位址加入黑名单。这种方法过于简单,容易带来误杀,并且无法禁止来自代理伺服器的攻击,因此逐渐废止,取而代之的是JavaScript跳转人机识别方案。
HTTP Flood是由程式模拟HTTP请求,一般来说不会解析服务端返回数据,更不会解析JS之类代码。因此当清洗设备截获到HTTP请求时,返回一段特殊JavaScript代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程式会攻击到空处。
DNS Flood防御
DNS攻击防御也有类似HTTP的防御手段,第一方案是快取。其次是重发,可以是直接丢弃DNS报文导致UDP层面的请求重发,可以是返回特殊回响强制要求客户端使用TCP协定重发DNS查询请求。
特殊的,对于授权域DNS的保护,设备会在业务正常时期提取收到的DNS域名列表和ISP DNS IP列表备用,在攻击时,非此列表的请求一律丢弃,大幅降低性能压力。对于域名,实行同样的域名白名单机制,非白名单中的域名解析请求,做丢弃处理。
慢速连线攻击防
Slowloris攻击防御比较简单,主要方案有两个。
第一个是统计每个TCP连线的时长并计算单位时间内通过的报文数量即可做精确识别。一个TCP连线中,HTTP报文太少和报文太多都是不正常的,过少可能是慢速连线攻击,过多可能是使用HTTP 1.1协定进行的HTTP Flood攻击,在一个TCP连线中传送多个HTTP请求。
第二个是限制HTTP头部传输的最大许可时间。超过指定时间HTTP Header还没有传输完成,直接判定源IP位址为慢速连线攻击,中断连线并加入黑名单。