拒絕服務攻擊

拒絕服務攻擊

拒絕服務攻擊即是攻擊者想辦法讓目標機器停止提供服務,是黑客常用的攻擊手段之一。其實對網路頻寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分,只要能夠對目標造成麻煩,使某些服務被暫停甚至主機當機,都屬於拒絕服務攻擊。拒絕服務攻擊問題也一直得不到合理的解決,究其原因是因為網路協定本身的安全缺陷,從而拒絕服務攻擊也成為了攻擊者的終極手法。攻擊者進行拒絕服務攻擊,實際上讓伺服器實現兩種效果:一是迫使伺服器的緩衝區滿,不接收新的請求;二是使用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攻擊給運營商帶來的損害
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位址為慢速連線攻擊,中斷連線並加入黑名單。

相關詞條

熱門詞條

聯絡我們