程家興,羅文華
(中國刑事警察學(xué)院 公安信息技術(shù)與情報學(xué)院,遼寧 沈陽 110035)
分布式拒絕服務(wù)(DDoS)攻擊能夠瞬間發(fā)動極大量的攻擊使服務(wù)器癱瘓,導(dǎo)致其無法正常提供服務(wù)[1]。DDoS 攻擊者首先通過惡意程序感染多臺處于互聯(lián)網(wǎng)絡(luò)中的主機(jī),從而對這些主機(jī)進(jìn)行控制,被控制的主機(jī)喪失自主權(quán),稱為“僵尸機(jī)”或者“肉雞”,攻擊者再通過控制這些“僵尸機(jī)”對被攻擊者發(fā)送大量攻擊數(shù)據(jù)包,一般來說,攻擊者控制的“僵尸機(jī)”數(shù)量越多,造成攻擊的威力越大。相較其他類型的網(wǎng)絡(luò)攻擊,由于存在多個中轉(zhuǎn)的“僵尸機(jī)”,讓DDoS 具備了分布式的特點(diǎn),通過無規(guī)律、隱藏的數(shù)據(jù)源,將傳統(tǒng)的單點(diǎn)之間數(shù)據(jù)攻擊變?yōu)槎帱c(diǎn)的數(shù)據(jù)流攻擊,且發(fā)送的流量本身幾乎不包含惡意數(shù)據(jù)信息,涉及協(xié)議與服務(wù)的惡意攻擊與正常連接請求界限模糊。因此,無論是對DDoS的檢測還是防范難度都相當(dāng)大。
當(dāng)前存在大量對其進(jìn)行檢測防范的研究,采取的方法大致可分為兩種,第一種基于機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò),通過分析流量特征差異來確定攻擊流量,另一種則是基于統(tǒng)計模型,通過分析輸入流量和正常流量數(shù)據(jù)量差異來檢測。Hameed S 等人提出過一種基于Hadoop的分布式檢測框架[2],該算法運(yùn)用統(tǒng)計計數(shù),能夠完成實(shí)時自動的DDoS 攻擊檢測,隨著研究深入,發(fā)現(xiàn)適應(yīng)于其中的傳統(tǒng)計數(shù)算法存在一定的局限之處,本文將統(tǒng)計與流量特征結(jié)合,基于MapReduce 框架編寫新的檢測算法,并與傳統(tǒng)計數(shù)算法進(jìn)行對比,根據(jù)多方面的檢測數(shù)據(jù)綜合分析,研究不同DDoS 攻擊環(huán)境中最為適合的檢測算法。
MapReduce的框架結(jié)構(gòu)主要由Client、JobTracker、TaskTracker 以及Task 四部分組成[3],各組成部分間的關(guān)系如圖1 所示。其中,Client 主要為用戶與JobTracker 端提供接口,用戶能夠直觀地查看任務(wù)的運(yùn)行。JobTracker 負(fù)責(zé)監(jiān)測與調(diào)度TaskTracker 與Job,是MapReduce 框架的核心部分,與框架的其他部分均存在聯(lián)系。TaskTracker 通過“心跳”周期性向JobTracker 發(fā)送本節(jié)點(diǎn)的運(yùn)行狀態(tài),同時對JobTracker分配過來的命令等進(jìn)行處理。Task 為MapReduce 任務(wù)部分,分為Map Task 與Reduce Task[4]。
圖1 MapReduce 組成框架
檢測模型基于Hadoop 架構(gòu)搭建,包含一個主節(jié)點(diǎn)和若干個從節(jié)點(diǎn),其中主節(jié)點(diǎn)同時充當(dāng)檢測核心,數(shù)據(jù)的輸入以及檢測形成結(jié)果到最后的輸出均在此檢測核心中進(jìn)行。
該模型主要包含兩個部分,第一部分為數(shù)據(jù)的輸入部分,第二部分為檢測部分,模型能夠完成輸入日志的檢測并生成結(jié)果。
(1)數(shù)據(jù)輸入。輸入的數(shù)據(jù)均為通過Tshark 收集的DDoS 攻擊流量日志,部分日志文件如圖2 所示,其中一條描述結(jié)果如下:11 3.775 426 138 192.168.253.179→192.168.253.175 TCP 74 41 910→80[SYN] Seq=0 Win=29 200 Len=0 MSS=1 460 SACK_PERM=1 TSval=287 474 TSecr=0 WS=128,其中,11代表此條數(shù)據(jù)序號,3.775 426 138 為Tshark 計算的時間戳,192.168.253.179 為源IP,192.168.253.175為目的IP,TCP 代表此條數(shù)據(jù)的使用的協(xié)議類型,74 為此條數(shù)據(jù)的數(shù)據(jù)幀長度,41 910 為源端口,80 為目的端口,之后為具體的TCP 協(xié)議信息。模型的檢測核心為Hadoop的主節(jié)點(diǎn),實(shí)驗(yàn)中在此主節(jié)點(diǎn)設(shè)計一個簡易的Java 程序,通過該程序?qū)斎肴罩具M(jìn)行調(diào)控,完成日志接收之后隨即將該日志文件上傳HDFS 之中[5]。
圖2 部分輸入日志
(2)執(zhí)行檢測。集群通過中央管理器將HDFS 中的輸入日志劃分成各種日志碎片,這些片段有序化處理之后進(jìn)入MapReduce 階段,通過檢測算法的Map 和Reduce 兩個函數(shù)對輸入的日志碎片進(jìn)行檢測,形成輸出文件。MapReduce 階段之后,輸出的文件會再次返回HDFS 之中,集群的中央管理器能夠?qū)DFS 中的文件進(jìn)行解析,生成最終的檢測結(jié)果,可通過調(diào)控檢測核心中的Java 程序?qū)⒃摻Y(jié)果從HDFS 中調(diào)出。
檢測模型通過以上運(yùn)行階段,對輸入的日志文件執(zhí)行檢測并生成檢測結(jié)果,整體運(yùn)行過程如圖3所示。
圖3 基于Hadoop的DDoS 檢測模型
本文提出的檢測算法,本質(zhì)為基于異常的計數(shù)算法[6],該類型的檢測算法從網(wǎng)絡(luò)流量包的特征屬性出發(fā),通過統(tǒng)計計數(shù)的方法確定攻擊來源。對DDoS 攻擊數(shù)據(jù)進(jìn)行區(qū)分,需要根據(jù)計數(shù)的數(shù)量設(shè)定一定的界限,計數(shù)數(shù)量超過此界限的數(shù)據(jù)就被認(rèn)定為攻擊數(shù)據(jù),這個界限可被稱作閾值,根據(jù)MapReduce的運(yùn)行模式以及實(shí)際環(huán)境中DDoS 攻擊強(qiáng)度,實(shí)驗(yàn)統(tǒng)一采用每秒800 數(shù)據(jù)包的閾值[7]。
通過對輸入的DDoS 攻擊流量日志進(jìn)行研究,發(fā)現(xiàn)流量存在的幾項(xiàng)特征屬性能夠被統(tǒng)計分析,包括源IP、數(shù)據(jù)類型、數(shù)據(jù)幀大小,根據(jù)不同的特征組合能形成不同類型的檢測算法,隨著組合數(shù)量的增加,算法的復(fù)雜度也會提升,這些都會對檢測產(chǎn)生影響。
單一屬性Counter-Based 算法[8]采取源IP 這種單一的特征作為檢測標(biāo)準(zhǔn),該算法的檢測原理為:一定時間內(nèi)訪問服務(wù)器的單一IP的流量超過實(shí)驗(yàn)所設(shè)定的閾值,此IP 就被認(rèn)定為攻擊IP,來源于此IP的流量就被認(rèn)定為攻擊流量[9]。通過近期的研究發(fā)現(xiàn),該算法在實(shí)際的DDoS 檢測環(huán)境中存在一定局限性,由于算法過于簡單,只存在源IP 這一種檢測參數(shù),對DDoS 攻擊的檢測率不高,當(dāng)前發(fā)動的較為廣泛的多IP 攻擊行為,攻擊者通過控制大量“僵尸機(jī)”,而每臺“僵尸機(jī)”又偽造多種不同的IP 對服務(wù)器進(jìn)行攻擊,此種情況下,單一IP的攻擊流量往往難以達(dá)到閾值標(biāo)準(zhǔn),因此存在較多的漏報,此時僅采取源IP 這種單一的檢測方式難以準(zhǔn)確感知DDoS 攻擊。對于這種偽造多IP的攻擊方式,需要尋找更多流量的特征項(xiàng)進(jìn)行識別。通過研究發(fā)現(xiàn),攻擊者偽造大量IP 發(fā)送的攻擊數(shù)據(jù)包往往具有相同的長度,此時采取數(shù)據(jù)幀長度作為計數(shù)的特征參數(shù)更為合適。因此將最具有識別價值的源IP 與數(shù)據(jù)幀大小提取進(jìn)行組合,形成雙重屬性Counter-Based 算法。
該算法的檢測類型包括TCP-Flood、UDP-Flood、ICMP-Flood、HTTP-Flood,以下為算法執(zhí)行TCPFlood 檢測過程的偽代碼,執(zhí)行Mapredcue 之前,輸入的日志文件會被劃分成新的日志碎片,這些日志碎片經(jīng)過Map 和Reduce 兩個函數(shù)階段最終形成輸出文件。
Map 階段,該函數(shù)作用是從輸入的日志碎片中提取相應(yīng)的網(wǎng)絡(luò)數(shù)據(jù)特征值,包括源IP、數(shù)據(jù)幀長度、數(shù)據(jù)類型,首先過濾包含TCP的碎片,然后將源IP 和數(shù)據(jù)幀長度分別與TCP 組合形成<源IP,TCP,1>、<數(shù)據(jù)幀長度,TCP,1>兩種類型的輸出數(shù)據(jù),其中1 代表形成單一鍵值對。
Map 函數(shù)的輸出值作為Reduce 函數(shù)輸入值進(jìn)行計算,Reduce 函數(shù)將輸入的形如<源IP,TCP,1>、<數(shù)據(jù)幀長度,TCP,1>的相同鍵值對進(jìn)行統(tǒng)計計數(shù),相同源IP的計數(shù)結(jié)果為Counts1,相同數(shù)據(jù)幀長度的計數(shù)結(jié)果為Counts2,并將兩項(xiàng)計數(shù)結(jié)果與指定的閾值進(jìn)行比較,如果小于閾值,則被認(rèn)定為合法數(shù)據(jù),如果大于等于閾值,則被認(rèn)定為攻擊數(shù)據(jù),并將計數(shù)后鍵值對進(jìn)行輸出,形成
檢測模型包含的多個節(jié)點(diǎn)均運(yùn)行于Ubuntu 虛擬機(jī)之中,并采用橋接的模式連接到互聯(lián)網(wǎng)之中,保證集群的各節(jié)點(diǎn)之間能夠通過TCP/IP 協(xié)議進(jìn)行交互,虛擬機(jī)的配置如表1 所示。
表1 檢測模型虛擬機(jī)配置
依據(jù)將要進(jìn)行實(shí)驗(yàn)測試的性能指標(biāo),需要配置不同的實(shí)驗(yàn)環(huán)境,與集群運(yùn)行相關(guān)的參數(shù)包括輸入DDoS 攻擊日志的大小、Hadoop 集群規(guī)模、DDoS 攻擊比例、HDFS 分塊大小。根據(jù)測試需要,實(shí)驗(yàn)參數(shù)可以進(jìn)行調(diào)整,以保證實(shí)驗(yàn)的準(zhǔn)確性,以下對實(shí)驗(yàn)涉及的具體實(shí)驗(yàn)參數(shù)進(jìn)行分析。
(1)日志大小?;趯?shí)驗(yàn)機(jī)器的性能考慮,實(shí)驗(yàn)選擇10 M,20 M,40 M,80 M 大小的輸入日志。
(2)集群規(guī)模。檢測模型采用典型的完全分布式的Hadoop 架構(gòu),設(shè)置一個主節(jié)點(diǎn)和若干從節(jié)點(diǎn),實(shí)驗(yàn)中部署1~4 個從節(jié)點(diǎn)來進(jìn)行測試。
(3)DDoS 攻擊比例。DDoS 攻擊比例為監(jiān)聽日志中DDoS 攻擊流量和合法訪問流量的比例,該比例的改變會影響檢測模型執(zhí)行檢測的時間,為了保證日志文件大小這一單一變量的原則,檢測時間與檢測結(jié)果對比實(shí)驗(yàn)中,統(tǒng)一采用70%DDoS 攻擊比例(DDoS 攻擊流量占比70%,合法訪問流量占比30%)的輸入日志,檢測率實(shí)驗(yàn)中,增加90%DDoS 攻擊比例的輸入日志進(jìn)行對比。
(4)HDFS 分塊大小。HDFS 分塊為集群存儲計算的基本單位,實(shí)驗(yàn)采取16 M,32 M,64 M,96 M 作為測試的HDFS 分塊大小。
不同的檢測算法會影響輸入日志檢測的時間,執(zhí)行不同算法對DDoS 攻擊的檢測率與生成的檢測結(jié)果也有所不同,本節(jié)通過檢測時間與檢測率以及輸出結(jié)果三方面對兩種檢測算法進(jìn)行對比。
3.3.1 檢測時間對比
(1)改變HDFS 分塊大小。本節(jié)實(shí)驗(yàn)設(shè)定HDFS 分塊大小分別為16 M,32 M,64 M,96 M,從節(jié)點(diǎn)數(shù)量為2 個,輸入日志大小為80 MB,執(zhí)行兩種檢測算法的時間如圖4 所示。
通過圖4 可以看出,當(dāng)HDFS 分塊大小為16 M 時,執(zhí)行單一屬性Counter-Based 算法、雙重屬性Counter-Based 算法時間分別為22.8 s、33.1 s,隨著算法復(fù)雜度的提升,執(zhí)行檢測的時間增加較為明顯,且隨著HDFS 分塊的改變,不同檢測算法執(zhí)行時間的差值基本保持不變。
(2)改變集群規(guī)模。本節(jié)實(shí)驗(yàn)設(shè)定HDFS 分塊大小為64 MB,從節(jié)點(diǎn)數(shù)量為1~4 個,輸入日志大小為80 MB,執(zhí)行兩種檢測算法的結(jié)果如圖5 所示。
圖5 顯示的實(shí)驗(yàn)結(jié)果與圖4 較為類似,隨著從節(jié)點(diǎn)數(shù)量的增加,模型執(zhí)行兩種算法的時間均存在一定的下降,但兩種時間的差值較為穩(wěn)定。
圖4 HDFS 分塊大小對不同檢測算法檢測時間的影響
圖5 集群規(guī)模對不同檢測算法檢測時間的影響
(3)改變輸入日志大小。本節(jié)實(shí)驗(yàn)設(shè)定HDFS 分塊大小為64 MB,從節(jié)點(diǎn)數(shù)量為2 個,輸入日志大小分別為10 M,20 M,40 M,80 M。執(zhí)行不同檢測算法檢測相同輸入日志所用時間如圖6 所示。
圖6 輸入日志大小對不同檢測算法檢測時間的影響
通過圖6 可以發(fā)現(xiàn),隨著輸入日志大小的變化,檢測時間的差距逐漸在變化,當(dāng)輸入監(jiān)聽日志為10 M 時,單一屬性Counter-Based 算法、雙重屬性Counter-Based 算法檢測時間分別為9.3 s、10.2 s,當(dāng)監(jiān)聽日志為80 M 時,兩種算法的執(zhí)行時間變成22.3 s、32.3 s,其中的差值正在逐漸增大,從折線圖中很容易看到這一趨勢,在處理大文件時,這種時間上的差值更應(yīng)該被考慮到。
單純從檢測時間的角度來看,隨著算法復(fù)雜度的提升,對相同輸入日志檢測的時間變化明顯,且隨著輸入日志容量的增加,這種時間差正在加劇。
3.3.2 輸出結(jié)果對比
根據(jù)檢測算法的編寫原理,對比單一屬性Counter-Based 算法,執(zhí)行雙重屬性Counter-Based 算法能夠獲得DDoS 攻擊數(shù)據(jù)包的數(shù)據(jù)幀長度,通過增加數(shù)據(jù)幀長度的驗(yàn)證,能夠獲得更為準(zhǔn)確的檢測結(jié)果。兩種檢測算法對同一輸入日志的檢測結(jié)果如圖7、8 所示。
圖7 單一屬性Counter-Based 算法檢測結(jié)果
圖8 雙重屬性Counter-Based 算法檢測結(jié)果
3.3.3 檢測率對比
針對檢測率的對比,實(shí)驗(yàn)收集了兩種不同DDoS 攻擊比例的輸入日志進(jìn)行多次測試。HDFS 分塊大小為64 MB,從節(jié)點(diǎn)數(shù)量為2 個,輸入日志大小為80 M,DDoS 攻擊比例分別為70%和90%,使用兩種檢測算法分別進(jìn)行測試,實(shí)驗(yàn)結(jié)果如圖9 所示。
圖9 兩種檢測算法檢測率對比
實(shí)驗(yàn)結(jié)果顯示,無論是在70%還是90%的DDoS 攻擊比例的實(shí)驗(yàn)測試環(huán)境中,雙重屬性Counter-Based 算法對DDoS 攻擊都存在極高的檢測準(zhǔn)確率,誤報率較低,而單一屬性Counter-Based 算法的誤報率與雙重屬性Counter-Based 算法接近,但卻存在較高的漏報,準(zhǔn)確率不足。因此,從檢測率上來看,單一屬性Counter-Based 算法檢測效果不如雙重屬性Counter-Based 算法。
本文針對適應(yīng)于Hadoop 架構(gòu)的DDoS 檢測算法進(jìn)行分析,根據(jù)實(shí)際中的運(yùn)行要求,提出雙重屬性Counter-Based 算法,并與傳統(tǒng)的單一屬性Counter-Based 算法從檢測時間、檢測率、檢測結(jié)果三方面進(jìn)行對比,研究兩種檢測算法在不同DDoS 攻擊環(huán)境的檢測效率。其中,在檢測時間方面,處理相同的輸入日志,單一屬性Counter-Based 算法擁有更快的檢測速度,但在檢測結(jié)果與檢測率方面,雙重屬性Counter-Based 算法擁有更大的優(yōu)勢。在多數(shù)情況下,對于DDoS 檢測模型來說,檢測率應(yīng)放在首位,此時,雙重屬性Counter-Based 算法具有更優(yōu)的檢測效率。
面對未來更為復(fù)雜的DDoS 攻擊形式,需要對網(wǎng)絡(luò)數(shù)據(jù)的特征值再次進(jìn)行發(fā)掘,進(jìn)行更多類型的組合實(shí)驗(yàn),編寫適應(yīng)環(huán)境更為廣泛的檢測算法。