黃 強(qiáng), 葉 震
(合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院,安徽 合肥 230009)
一般DoS(Denial-of-Service,簡(jiǎn)稱 DoS)攻擊是一種使服務(wù)器無法為正常用戶提供服務(wù)的攻擊行為,是攻擊者發(fā)送大量的網(wǎng)絡(luò)封包(Packet)到受害者(Victim)的主機(jī)服務(wù)器上,致使受害者的網(wǎng)絡(luò)帶寬耗盡,網(wǎng)絡(luò)完全陷于癱瘓,或者造成服務(wù)器主機(jī)在同一個(gè)時(shí)間內(nèi)接收大量的數(shù)據(jù)報(bào)連接請(qǐng)求,以至于超過服務(wù)器在該時(shí)間內(nèi)能夠處理的數(shù)據(jù)報(bào)的上限,從而使服務(wù)器無法響應(yīng)其他正常用戶的合法請(qǐng)求[1]。
在因特網(wǎng)上,DoS攻擊的目的是破壞由中間設(shè)施網(wǎng)絡(luò)或者末端服務(wù)器提供的各項(xiàng)服務(wù),當(dāng)發(fā)起的DoS攻擊源數(shù)目眾多時(shí),稱此時(shí)的攻擊行為是 DDoS(distributed denial of service,簡(jiǎn) 稱DDoS)攻擊。攻擊源的數(shù)目越多,其攻擊能力就越強(qiáng),從而防范也就變得越復(fù)雜。一個(gè)典型的DDoS攻擊可由以下2個(gè)部分組成[2]:捕獲“傀儡機(jī)”,即通常所說的“肉雞”,通過一些手段發(fā)現(xiàn)傀儡機(jī)的漏洞,向其注入發(fā)動(dòng)DDoS的攻擊程序;通過主控機(jī)向傀儡機(jī)發(fā)送攻擊信號(hào),再由傀儡機(jī)向攻擊目標(biāo)發(fā)動(dòng)攻擊。
研究如何防范DDoS攻擊對(duì)保護(hù)Internet的安全性和穩(wěn)定性具有重要意義,一般對(duì)于DDoS攻擊分為4個(gè)大類[3]:預(yù)防、檢測(cè)、源追蹤以及響應(yīng)。在這4個(gè)方面吸引了國(guó)內(nèi)外很多學(xué)者的注意,尤其是在攻擊檢測(cè)方面,更是運(yùn)用了很多算法。文獻(xiàn)[4]使用非參數(shù)的CUSUM算法來檢測(cè)DDoS攻擊,減少了漏報(bào)率和誤報(bào)率,并且消耗較少的計(jì)算機(jī)資源;文獻(xiàn)[5]提出了基于攻擊流量特征聚類的特征提取算法,能夠有效地進(jìn)行檢測(cè)過濾,減少攻擊包傳播的危害,保護(hù)有限的網(wǎng)絡(luò)資源;文獻(xiàn)[6]利用馬爾可夫鏈模型通過統(tǒng)計(jì)的方法來學(xué)習(xí)網(wǎng)絡(luò)的正常行為,將正常行為與當(dāng)前網(wǎng)絡(luò)行為進(jìn)行比較來檢測(cè)攻擊;文獻(xiàn)[7]利用數(shù)據(jù)挖掘中的關(guān)聯(lián)算法和聚類算法,通過分布處理數(shù)據(jù)來檢測(cè)攻擊。但是,這些檢測(cè)算法在檢測(cè)攻擊結(jié)束時(shí)刻的延遲均比較大,而且目前大部分攻擊檢測(cè)算法都是基于目的端(受害者端)[8]進(jìn)行的,雖然受害端的攻擊流量大,攻擊特征明顯,在受害端檢測(cè)準(zhǔn)確率會(huì)比較高,其受害端檢測(cè)DDoS攻擊存在以下問題。
(1)難以從正常的數(shù)據(jù)流中隔離出攻擊流。
(2)發(fā)生攻擊時(shí)受害端負(fù)載大,實(shí)施檢測(cè)算法需考慮主機(jī)性能、處理能力和各方面的開銷。
(3)當(dāng)檢測(cè)到攻擊時(shí),攻擊已在實(shí)施,甚至已經(jīng)完成攻擊,往往來不及響應(yīng)。
基于以上分析,本文提出了從傀儡機(jī)端(客戶端)和服務(wù)器端進(jìn)行協(xié)同防御的機(jī)制,當(dāng)客戶機(jī)成為傀儡機(jī)后,將防御此種DDoS攻擊的任務(wù)合理地分配給傀儡機(jī)和服務(wù)器,由兩者共同完成。對(duì)于非面向連接的攻擊,主要采取在傀儡機(jī)端進(jìn)行主動(dòng)檢測(cè)防御,而并非是基于受害端進(jìn)行的攻擊檢測(cè),這樣使攻擊流在進(jìn)入網(wǎng)絡(luò)前就被主動(dòng)丟棄,從而將攻擊的危害程度降到最低;對(duì)于面向連接的攻擊,采用客服協(xié)同的SYN Cookie技術(shù),使SYN Flood攻擊的資源消耗失效,同時(shí)避免了傳統(tǒng)的SYN Cookie技術(shù)可能帶來的TCP-ACK攻擊,從而主動(dòng)有效地防御攻擊DDoS。
傀儡機(jī)是DDoS攻擊的實(shí)施者和傳播者,因此在傀儡機(jī)上防御此類攻擊是可行有效的,只需把防御措施當(dāng)作補(bǔ)丁安裝到每臺(tái)客戶機(jī)即可。在傀儡機(jī)端防御通過傀儡機(jī)發(fā)動(dòng)的UDP泛洪、ICMP洪流攻擊不但可以大大減輕服務(wù)器端的防御負(fù)擔(dān),而且由于在攻擊流進(jìn)入網(wǎng)絡(luò)前就將其丟棄,可以減輕甚至消除攻擊流帶來的網(wǎng)絡(luò)擁塞,另外還能夠檢測(cè)出客戶機(jī)是否受到黑客控制。因此,在傀儡機(jī)端進(jìn)行檢測(cè)防御具有花費(fèi)代價(jià)小、實(shí)施簡(jiǎn)單、更具主動(dòng)性、將危害降到最低等特點(diǎn)。
客戶機(jī)發(fā)送數(shù)據(jù)包前,分析所有數(shù)據(jù)包包頭,丟棄源地址不是本機(jī)地址或是有分段的數(shù)據(jù)包。若數(shù)據(jù)包通過了以上檢測(cè),則根據(jù)協(xié)議類型采取不同的防御規(guī)則。
1.2.1 UDP數(shù)據(jù)包過濾規(guī)則
UDP數(shù)據(jù)包過濾規(guī)則,如圖1所示。
圖1 UDP數(shù)據(jù)包過濾規(guī)則
對(duì)于UDP數(shù)據(jù)包,丟棄源端口和目的端口相同的數(shù)據(jù)包,同時(shí)知道UDP協(xié)議是不可靠的傳輸,主要用于DNS、Network Time Protocol、Multimedia-Streamin、VoIP、Network File System和Chat Application等,通過UDP來通信的應(yīng)用都有一個(gè)比較穩(wěn)定的數(shù)據(jù)率,而且對(duì)每個(gè)目的地址只連接很少的端口。正常的UDP會(huì)話一般都使用小的UDP包,通常有效數(shù)據(jù)內(nèi)容不超過10字節(jié),且數(shù)據(jù)包的大小是不定的,隨機(jī)性很高[9]。因此,可以通過限定每個(gè)目的地址單位時(shí)間內(nèi)連接的源目的端口對(duì)數(shù)量來防御對(duì)服務(wù)隨機(jī)端口的掃描,而對(duì)于UDP舊數(shù)據(jù)流(通過目的地址,源目的端口判斷),通過該數(shù)據(jù)流的歷史表現(xiàn)(如數(shù)據(jù)包大小異常)和數(shù)據(jù)率來判定是丟棄還是放行。
對(duì)于UDP數(shù)據(jù)流本文用到了自己定義的數(shù)據(jù)結(jié)構(gòu)體DD-UDP-Log-Node和DD-UDP-Conn-Node用于記錄最新時(shí)間、目的IP、源端口、目的端口、失敗次數(shù)、成功次數(shù)、每個(gè)目的IP的端口對(duì)使用數(shù)量、數(shù)據(jù)包長(zhǎng)度和指向下一節(jié)點(diǎn)的指針。一方面用于檢查現(xiàn)數(shù)據(jù)包的“新鮮度”和便于日志的清理,另一方面用于檢測(cè)舊數(shù)據(jù)流的歷史表現(xiàn)行為(如數(shù)據(jù)包長(zhǎng)度異常,所請(qǐng)求的服務(wù)器端口是不開放的),從而判斷該數(shù)據(jù)流的攻擊性。
1.2.2 ICMP數(shù)據(jù)包過濾規(guī)則
對(duì)于ICMP數(shù)據(jù)包,由于ICMP是網(wǎng)絡(luò)控制,專門用作邏輯錯(cuò)誤和診斷的信使。且普通用戶并不會(huì)頻繁地使用需要回應(yīng)的ICMP請(qǐng)求應(yīng)答報(bào)文,正常的ICMP消息也不會(huì)超過64~128字節(jié)。因此,可以通過限制單位時(shí)間內(nèi)主機(jī)發(fā)送出去的ICMP包,有效地防御利用ICMP來進(jìn)行DDoS攻擊,同時(shí)對(duì)于接收到的ICMP包,過濾掉需要回復(fù)的請(qǐng)求包,從而有效防御Smurf攻擊。當(dāng)接收“目的端口不可達(dá)”的ICMP包時(shí)記錄該不可達(dá)端口,以用于防御UDP洪流攻擊該端口而使服務(wù)器忙于回復(fù)“目的端口不可達(dá)”報(bào)文。
對(duì)于ICMP包也同樣定義了自己的數(shù)據(jù)結(jié)構(gòu)體DD-ICMP-Log-Node,用于記錄最新事件、目的IP、發(fā)包數(shù)量和指向下一節(jié)點(diǎn)的指針,相應(yīng)的軟件流程如圖2所示。
圖2 ICMP數(shù)據(jù)包過濾規(guī)則
本文采用客服協(xié)同的SYN Cookie技術(shù)防止SYN DDoS攻擊,該機(jī)制很好地借助客戶機(jī),不但保留了SYN Cookie技術(shù)的優(yōu)點(diǎn)而且較好地彌補(bǔ)了它的缺點(diǎn),能夠有效地防止SYN DDoS半連接攻擊,使得服務(wù)器的資源不會(huì)被攻擊耗盡。
客服協(xié)同的SYN Cookie機(jī)制原理如下:
(1)當(dāng)客戶機(jī)端發(fā)出一個(gè)SYN連接請(qǐng)求時(shí),在內(nèi)存中做相應(yīng)的記錄,作為檢驗(yàn)ACK數(shù)據(jù)報(bào)的依據(jù)。
(2)在TCP服務(wù)器收到TCP-SYN包并返回TCP SYN-ACK包時(shí),不分配一個(gè)專門的數(shù)據(jù)區(qū),也不計(jì)算Cookie值。
(3)客戶機(jī)端在發(fā)送ACK確認(rèn)時(shí),檢查是否有與之對(duì)應(yīng)的SYN請(qǐng)求,若有,說明這是正常的連接請(qǐng)求,放行;否則,說明這是攻擊數(shù)據(jù)流,丟棄。
(4)在收到TCP-ACK包時(shí),再分配專門的數(shù)據(jù)區(qū),從而使客戶端與服務(wù)器之間建立一個(gè)完整的TCP連接,為以后的數(shù)據(jù)交換服務(wù)。
對(duì)于TCP數(shù)據(jù)流本文用到了自己定義的日志結(jié)構(gòu)體DD-TCP-Log-Node,用于記錄最新時(shí)間、創(chuàng)建數(shù)據(jù)流的時(shí)間、源IP、目的IP、源端口、目的端口、數(shù)據(jù)流狀態(tài)、SYN包通過次數(shù)、向服務(wù)器發(fā)送的最新確認(rèn)號(hào)、下一次應(yīng)發(fā)送的確認(rèn)號(hào)上限、數(shù)據(jù)流速和指向下個(gè)節(jié)點(diǎn)的指針。該結(jié)構(gòu)體用于檢查現(xiàn)數(shù)據(jù)包的“新鮮度”,便于日志的清理工作,用于記錄檢測(cè)的SYN數(shù)據(jù)包和ACK數(shù)據(jù)包的行為狀況,從而決定該數(shù)據(jù)包的放行與否。在進(jìn)行流速限制時(shí),通過直接改變發(fā)送窗口的大小來實(shí)現(xiàn)。
TCP數(shù)據(jù)報(bào)的過濾規(guī)則,如圖3所示。
圖3 TCP數(shù)據(jù)報(bào)的過濾規(guī)則
由于TCP是一個(gè)可靠的面向連接的數(shù)據(jù)流協(xié)議,TCP傳送的報(bào)文可以看成是連續(xù)的數(shù)據(jù)流。在每個(gè)TCP包中都包含一個(gè)序列號(hào)Syn-Number和一個(gè)確認(rèn)號(hào)AckNumber,SynNumber是本報(bào)文段中所發(fā)送數(shù)據(jù)的起始字節(jié)編號(hào),Ack-Number表示期望收到對(duì)方發(fā)出的下一個(gè)報(bào)文段數(shù)據(jù)部分的起始字節(jié)編號(hào)。在TCP服務(wù)器收到客戶端發(fā)來的一個(gè)TCP-SYN數(shù)據(jù)報(bào)時(shí),檢查該報(bào)文的序列號(hào)SynNumber,并返回一個(gè)TCPACK數(shù)據(jù)報(bào),該報(bào)文中包含了確認(rèn)號(hào)AckNum-ber,而此時(shí) AckNumber>SynNumber,確認(rèn)號(hào)符合要求,若AckNumber<SynNumber,則客戶端即可認(rèn)為確認(rèn)號(hào)不符合要求,從而丟棄該數(shù)據(jù)報(bào)。
為了驗(yàn)證提出的DDoS客服協(xié)同防御機(jī)制的有效性,在仿真軟件模擬試測(cè)中建立2個(gè)場(chǎng)景,每個(gè)場(chǎng)景主要由普通用戶節(jié)點(diǎn)、攻擊節(jié)點(diǎn)、路由器和服務(wù)器構(gòu)成。第1個(gè)場(chǎng)景中,傀儡機(jī)端和服務(wù)器端都不添加過濾規(guī)則;第2個(gè)場(chǎng)景中,在傀儡機(jī)端添加過濾規(guī)則,在服務(wù)器端添加VDR分析[10]。在2個(gè)場(chǎng)景中分別用不同種類的DDoS攻擊方法攻擊服務(wù)器,查看仿真結(jié)果中客戶機(jī)端和服務(wù)器端的數(shù)據(jù)流量,以證實(shí)該機(jī)制的防御效果。
(1)對(duì)UDP和ICMP攻擊防御客戶端結(jié)果如圖4和圖5所示。圖4中,紅線表示正常的客戶端數(shù)據(jù)包流量,綠線表示未添加過濾規(guī)則的攻擊端數(shù)據(jù)包流量,藍(lán)線表示添加了過濾規(guī)則后的攻擊端數(shù)據(jù)包流量。
圖4 UDP客戶端數(shù)據(jù)流平均時(shí)間攔截圖
圖5 ICMP客戶端數(shù)據(jù)流平均時(shí)間攔截圖
圖5中,藍(lán)線表示正常的客戶端數(shù)據(jù)包流量,綠線表示攻擊端數(shù)據(jù)包流量,紅線表示實(shí)施過濾規(guī)則后的攻擊端數(shù)據(jù)包流量,從中可以看出仿真環(huán)境中的客戶端防御系統(tǒng)對(duì)UDP和ICMP攻擊起到了非常好的抵御作用。
(2)對(duì)TCP SYN攻擊仿真結(jié)果。受攻擊的Web服務(wù)器數(shù)據(jù)流量,如圖6所示。
圖6 受攻擊的Web服務(wù)器數(shù)據(jù)流量
從圖6可以看出,由客戶端發(fā)出的TCP連接請(qǐng)求,在沒有客服協(xié)同的SYN Cookie機(jī)制的過濾規(guī)則下,大量的帶有攻擊性數(shù)據(jù)包被客戶端放行,致使服務(wù)器遭受了攻擊,而采取了客服協(xié)同的SYN Cookie機(jī)制的過濾規(guī)則后,大部分攻擊性的數(shù)據(jù)包被過濾并丟棄,從而減輕了服務(wù)器端的壓力,不至于使服務(wù)器遭受巨大的攻擊而無法響應(yīng)其他正常的TCP連接請(qǐng)求。
本文首先引出了4類DDoS攻擊抵御機(jī)制,并著重分析了攻擊檢測(cè)方面的一些方法,然后提出了DDoS客服協(xié)同防御機(jī)制,即通過傀儡機(jī)端主動(dòng)檢測(cè)和客服協(xié)同的SYN Cookie技術(shù)來抵御DDoS的攻擊,初步的仿真實(shí)驗(yàn)已經(jīng)驗(yàn)證了其有效性。
[1]楊子翔,蔡錫鈞.Network DoS/DDoS攻擊及預(yù)防方法之研究[EB/OL].[2000-10-21].http://www.nckv.edu.tw/TANET2000/download/A3-2,2000-10-21/2010-12.
[2]Wang H N,Zhang D L,Shin K G.Detecting SYN flooding attacks[C]//INFOCOM,Vol 3,2002:1530-1539.
[3]Sun Z X,Tang Y W.Router anomaly traffic filter algorithm investigation based on character aggregation[J].Journal of Software,2006,17(2):295-304.
[4]Du Ping,Nakao A.Mantlet Trilogy:DDoS defense deployable with innovative anti-spoofing,attack detection and mitigation[C]//2010Proceedings of 19th International Conference on Computer Communications and Networks(ICCCN),2010:1-7.
[5]高 能,馮登國(guó),向 繼.一種基于數(shù)據(jù)挖掘的拒絕服務(wù)攻擊檢測(cè)技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2006,29(6):944-951.
[6]陳 偉,何炎祥,彭文靈.一種輕量級(jí)的拒絕服務(wù)攻擊檢測(cè)方法[J].計(jì)算機(jī)學(xué)報(bào),2006,29(8):1392-1400.
[7]雷 穎.DoS/DDoS攻擊原理與防范[J].微計(jì)算機(jī)信息,2010(24):77-79.
[8]Kumar P A R,Selvakumar S.Distributed denial-of-service(DDoS)threat in collaborative environment:a survey on DDoS attack tools and traceback mechanisms[C]//IEEE International Advance Computing Conference,2009:1275-1280.
[9]Mirkovic J,Reiher P.D-WARD:a source-end defense against flooding denial-of-service attacks[J].IEEE Transactions on Dependable and Secure Computing,2005:2(3):216-232.
[10]葉 震,施偉偉.基于TCP-IP報(bào)頭分析和主動(dòng)測(cè)試的DDoS攻擊響應(yīng)機(jī)制[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2010,33(3):363-367.