梁本來(lái) 朱 磊
1(中山職業(yè)技術(shù)學(xué)院信息工程學(xué)院 廣東 中山 528404) 2(西安理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 陜西 西安 710048)
高速率網(wǎng)絡(luò)帶來(lái)的流量激增,使得網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)(Network Intrusion Detection System, NIDS)的檢測(cè)性能出現(xiàn)瓶頸,傳統(tǒng)的單檢測(cè)引擎NIDS難以實(shí)時(shí)處理高速率流量。因此,基于多引擎并行檢測(cè)的NIDS是當(dāng)今的研究重點(diǎn)與趨勢(shì)[1-2]。特別指出,并行NIDS與分布式NIDS 并不相同,分布式NIDS將多個(gè)檢測(cè)引擎分布在網(wǎng)絡(luò)的不同物理位置檢測(cè)不同處的網(wǎng)絡(luò)流量,而并行NIDS則將多個(gè)檢測(cè)引擎分布在網(wǎng)絡(luò)的同一個(gè)物理位置,檢測(cè)同一處的網(wǎng)絡(luò)流量。盡管兩者不同,但分布式NIDS也會(huì)用到并行檢測(cè),兩者有相通之處[3-4]。
為充分發(fā)揮并行NIDS的高效性能, 應(yīng)在保持攻擊證據(jù)的前提下,盡量通過(guò)流量調(diào)度實(shí)現(xiàn)多檢測(cè)引擎的負(fù)載均衡。目前,并行NIDS的負(fù)載均衡算法主要分為靜態(tài)算法和動(dòng)態(tài)算法兩大類(lèi)[5-6]。靜態(tài)算法按照設(shè)定的策略進(jìn)行流量調(diào)度,多采用Hash函數(shù)映射來(lái)實(shí)現(xiàn)[7],該類(lèi)算法的優(yōu)點(diǎn)是不會(huì)破壞數(shù)據(jù)流的完整性,攻擊證據(jù)保持較好,缺點(diǎn)是難以適應(yīng)實(shí)際動(dòng)態(tài)網(wǎng)絡(luò)環(huán)境,各檢測(cè)引擎的負(fù)載均衡效果較差。動(dòng)態(tài)算法根據(jù)檢測(cè)引擎負(fù)載的實(shí)時(shí)變化,動(dòng)態(tài)調(diào)度網(wǎng)絡(luò)流量,優(yōu)點(diǎn)是負(fù)載均衡效果較好,缺點(diǎn)是容易破壞流量的完整性,保持攻擊證據(jù)的難度相對(duì)較大,算法復(fù)雜度較高[8]。動(dòng)態(tài)負(fù)載均衡算法又分為激活策略和前攝策略兩類(lèi),激活策略算法調(diào)度流量到檢測(cè)引擎前不考慮引擎負(fù)載,但當(dāng)某個(gè)引擎負(fù)載超過(guò)設(shè)定閾值時(shí),激活算法,將流量從負(fù)載較重的引擎遷移到負(fù)載較輕的引擎。文獻(xiàn)[9]提出的多檢測(cè)引擎監(jiān)測(cè)的動(dòng)態(tài)負(fù)載均衡算法,文獻(xiàn)[10]提出的分布式入侵檢測(cè)中基于能力與負(fù)載的數(shù)據(jù)分割算法,以及文獻(xiàn)[11]提出的動(dòng)態(tài)層次負(fù)載均衡算法,均是激活策略算法。此類(lèi)算法針對(duì)性強(qiáng),負(fù)載均衡效果較好,但會(huì)帶來(lái)檢測(cè)引擎間的通信量較大的問(wèn)題,在實(shí)際應(yīng)用中會(huì)額外占用檢測(cè)引擎的計(jì)算資源,導(dǎo)致NIDS的檢測(cè)性能下降。前攝策略算法在流量調(diào)度前就根據(jù)各檢測(cè)引擎的實(shí)時(shí)負(fù)載,動(dòng)態(tài)調(diào)度流量,確保各檢測(cè)引擎的負(fù)載均衡。文獻(xiàn)[12]提出的并行入侵檢測(cè)系統(tǒng)的預(yù)測(cè)負(fù)載均衡方法,以及文獻(xiàn)[13]提出的一種基于“最小PPS(Packet Per Second)”的動(dòng)態(tài)流量調(diào)度策略,均采用了前攝策略思想。此類(lèi)算法不需要檢測(cè)引擎間的大量通信,額外占用檢測(cè)引擎的計(jì)算資源較小,但需要采取較為科學(xué)的方法將流量按類(lèi)劃分調(diào)度到不同的檢測(cè)引擎,且不能破壞數(shù)據(jù)流的完整性,盡量保持攻擊證據(jù)。但以上并行入侵檢測(cè)方法都存在相應(yīng)優(yōu)缺點(diǎn),在保持攻擊證據(jù)與多引擎負(fù)載均衡之間難以全面提升。
分析攻擊特征,可將攻擊分為單連接攻擊以及多連接攻擊兩大類(lèi)[14]。前者攻擊特征分布在同一條數(shù)據(jù)流的報(bào)文中,多數(shù)攻擊屬于此類(lèi)攻擊,比如利用操作系統(tǒng)漏洞或程序漏洞發(fā)起的攻擊;后者攻擊特征分布在不同數(shù)據(jù)流的報(bào)文中,比如分布式拒絕服務(wù)(Distributed Denial of Service, DDoS)、掃描(Scan)等攻擊。
以上文獻(xiàn)提出的入侵檢測(cè)負(fù)載均衡算法多是分析單連接攻擊,而忽略了多連接攻擊,造成多連接攻擊的流量被調(diào)度至不同檢測(cè)引擎,而檢測(cè)引擎間又缺少互相通信獲取全局信息的機(jī)制,導(dǎo)致攻擊證據(jù)的丟失。為解決此類(lèi)問(wèn)題,本文提出基于攻擊分類(lèi)的高性能并行入侵檢測(cè)方法,將NIDS分為單連接攻擊檢測(cè)和多連接攻擊檢測(cè)兩個(gè)子系統(tǒng)。其中,多連接攻擊檢測(cè)子系統(tǒng)采用單檢測(cè)引擎,快速掃描報(bào)文首部,識(shí)別相應(yīng)攻擊行為;單連接攻擊檢測(cè)子系統(tǒng)采用多檢測(cè)引擎并行檢測(cè),將流量按照傳輸層協(xié)議分類(lèi),以會(huì)話或五元組為單位,將流量調(diào)度至負(fù)載最輕的檢測(cè)引擎,既能保持攻擊證據(jù),又動(dòng)態(tài)實(shí)現(xiàn)了負(fù)載均衡,且額外占用檢測(cè)引擎的計(jì)算資源較少。
方法思路如圖1所示。
圖1 基于攻擊分類(lèi)的并行入侵檢測(cè)方法實(shí)現(xiàn)結(jié)構(gòu)圖
(1) 多連接攻擊檢測(cè)子系統(tǒng)由高性能檢測(cè)引擎SensorB組成,其從鏡像口2拷貝網(wǎng)絡(luò)流量。為提高檢測(cè)效率,SensorB基于Snort 3.0系統(tǒng)改進(jìn),在原有規(guī)則庫(kù)中僅保留多連接攻擊規(guī)則文件,快速檢測(cè)報(bào)文首部,識(shí)別多連接攻擊行為。
(2) 單連接攻擊檢測(cè)子系統(tǒng)由SensorA1、A2、…、An等檢測(cè)引擎組成,基于Snort 3.0系統(tǒng)改進(jìn),在原有規(guī)則庫(kù)中僅保留單連接攻擊規(guī)則文件。因單連接攻擊行為復(fù)雜多樣,為保持攻擊證據(jù)并實(shí)現(xiàn)各檢測(cè)引擎的負(fù)載均衡,先由負(fù)載均衡模塊對(duì)鏡像口1拷貝的網(wǎng)絡(luò)流量進(jìn)行流量調(diào)度。
(3) 負(fù)載均衡模塊由流量調(diào)度及負(fù)載監(jiān)控兩個(gè)子模塊組成。其中,負(fù)載監(jiān)控子模塊實(shí)時(shí)監(jiān)視SensorA1、A2、…、An的負(fù)載,計(jì)算出負(fù)載最輕的檢測(cè)引擎;流量調(diào)度子模塊將網(wǎng)絡(luò)流量按照TCP、UDP以及其他協(xié)議進(jìn)行分類(lèi),并觸發(fā)以下流量調(diào)度策略。
① TCP流量以會(huì)話為單位進(jìn)行調(diào)度。每個(gè)會(huì)話的第一個(gè)報(bào)文被調(diào)度至當(dāng)前負(fù)載最輕的檢測(cè)引擎Am(m=1,2,…,n),相同會(huì)話的其他報(bào)文也被調(diào)度至Am。此方法可以保證同一會(huì)話的TCP報(bào)文被調(diào)度到同一個(gè)檢測(cè)引擎。
② UDP流量以五元組(源IP,源端口,目的IP,目的端口,協(xié)議類(lèi)型)為單位進(jìn)行調(diào)度。如果報(bào)文的五元組是第一次出現(xiàn),則將該報(bào)文調(diào)度至當(dāng)前負(fù)載最輕的檢測(cè)引擎Am,與該五元組相同的其他報(bào)文,統(tǒng)一被調(diào)度至Am。此方法可以保證相同五元組的UDP報(bào)文被調(diào)度到同一個(gè)檢測(cè)引擎。
③ 其他流量,則直接以報(bào)文為單位,調(diào)度至當(dāng)前負(fù)載最輕的檢測(cè)引擎。
方法流程如圖2所示。
圖2 基于攻擊分類(lèi)的并行入侵檢測(cè)方法流程
負(fù)載均衡算法運(yùn)行在負(fù)載均衡模塊,是本文所提入侵檢測(cè)方法的核心算法,作用于單連接攻擊檢測(cè)子系統(tǒng),在保持單連接攻擊證據(jù)的前提下實(shí)現(xiàn)多檢測(cè)引擎的負(fù)載均衡。
Pi:接收到的第i個(gè)報(bào)文,其中i=1,2,…;
Conn_num:目前所記錄的五元組數(shù)目(五元組信息不同時(shí)才計(jì)數(shù),初始為0);
Max_num:一個(gè)周期內(nèi)的五元組個(gè)數(shù)閾值;
Conn(Pi):報(bào)文Pi的五元組;
Conn(Pi).flag:Conn(Pi)的標(biāo)記;
Conn(Pi).seq:Conn(Pi)的序號(hào);
Conn(Pi).sensor:Conn(Pi) 指向的檢測(cè)引擎;
Am:當(dāng)前負(fù)載最輕的檢測(cè)引擎;
Pi.SYN:TCP報(bào)文Pi的SYN位數(shù)值;
Pi.FIN:TCP報(bào)文Pi的FIN位數(shù)值;
Pi.RST:TCP報(bào)文Pi的RST位數(shù)值;
Pi.SEQ:TCP報(bào)文Pi的序號(hào)。
定義1報(bào)文五元組
報(bào)文Pi的五元組定義如下:
Conn(Pi)=(Pi.srcIP,Pi.srcPort,Pi.dstIP,Pi.dstPort,Pi.proType)
(1)
式中:srcIP表示源IP;srcPort表示源端口;dstIP表示目的IP;dstPort表示目的端口;proType表示傳輸層協(xié)議。
定義2相同五元組
如果報(bào)文Pi和Pj存在以下關(guān)系
(2)
則Conn(Pi)=Conn(Pj),相同五元組由同一個(gè)內(nèi)存空間存儲(chǔ),改變Conn(Pi)的flag、seq、sensor的取值,即是改變Conn(Pj)對(duì)應(yīng)的數(shù)值。
定義3檢測(cè)引擎的負(fù)載
定義SensorAi的負(fù)載計(jì)算公式如下:
Load(Ai)=a·L(CPUi)+b·L(Memi)+c·L(Busi)
(3)
式中:L(CPUi)表示Ai的CPU利用率;L(Memi)表示Ai的內(nèi)存利用率;L(Busi)表示Ai的鏈路帶寬利用率。a、b、c分別為權(quán)重系數(shù),a+b+c=1。參考文獻(xiàn)[10],a取值為0.4,b取值為0.3,c取值為0.3。
定義4負(fù)載最輕的檢測(cè)引擎
如果Sensor Am的負(fù)載滿足以下公式:
Load(Am)=min{Load(A1),Load(A2),…,Load(An)}
(4)
則SensorAm就是負(fù)載最輕的檢測(cè)引擎。
以一個(gè)運(yùn)行周期為例,算法偽代碼描述如下:
算法1負(fù)載均衡算法
For(Pi=P1;Conn_num<=Max_num;i++)
{if(Pi.proType!=TCP&&Pi.proType!=UDP)
//TCP、UDP之外的報(bào)文
Piwill be sent to SensorAm;
//當(dāng)前負(fù)載最輕引擎Am
else
if(Conn(Pi) is new)
//該五元組是第一次出現(xiàn)
{Conn(Pi).flag=0;
//初始化flag
Conn_num++;
//五元組計(jì)數(shù)加1
if(Pi.proType==TCP)
//五元組是第一次出現(xiàn),且是TCP報(bào)文
Conn(Pi).seq=0;}
//初始化seq
if(Pi.proType==TCP)
//TCP報(bào)文
{if(Conn(Pi).flag==0)
//會(huì)話的第一個(gè)報(bào)文
{Piwill be sent to SensorAm;
//當(dāng)前負(fù)載最輕引擎Am
Conn(Pi).sensor=Am;
//該會(huì)話對(duì)應(yīng)的引擎為Am
Conn(Pi).flag=1;}
else
//不是會(huì)話的第一個(gè)報(bào)文
Piwill be sent toConn(Pi).Sensor;
//被調(diào)度至?xí)拰?duì)應(yīng)的引擎
if(Pi.FIN==1&&Conn(Pi).seq==0)
//第一個(gè)FIN報(bào)文
Conn(Pi).seq=Pi.SEQ;
if(Pi.SEQ==Conn(Pi).seq+1‖Pi.RST==1)
//會(huì)話最后一個(gè)報(bào)文或異常關(guān)閉報(bào)文
{Conn(Pi).flag=0;
Conn(Pi).seq=0;}
if(Pi.proType==UDP)
//UDP報(bào)文
if(Conn (Pi).flag==0)
//該五元組第一個(gè)UDP報(bào)文
{Piwill be sent to SensorAm;
//當(dāng)前負(fù)載最輕引擎Am
Conn (Pi).Sensor=Am;
//該五元組對(duì)應(yīng)引擎為Am
Conn (Pi).flag=1;}
else
//不是該五元組第一個(gè)UDP報(bào)文
Piwill be sent to Conn (Pi).Sensor;
//被調(diào)度至該五元組對(duì)應(yīng)的引擎
}
一個(gè)周期內(nèi),算法1需要循環(huán)調(diào)度Max_num個(gè)不同五元組的報(bào)文,假設(shè)每個(gè)五元組下包含的報(bào)文平均數(shù)為C,則需要調(diào)度的TCP、UDP報(bào)文數(shù)為C·Max_num;假設(shè)需要調(diào)度的TCP、UDP之外的報(bào)文數(shù)為Other_num,則算法1需要運(yùn)行C·Max_num+Other_num次,而在循環(huán)體內(nèi)并沒(méi)有嵌套循環(huán),因此,以一個(gè)周期為計(jì)算單位,算法的時(shí)間復(fù)雜度為O(C·Max_num+Other_num)。
一個(gè)五元組中,IP地址占用32 bit存儲(chǔ)空間,端口占用16 bit存儲(chǔ)空間,proType只有TCP、UDP兩種狀態(tài),需1 bit存儲(chǔ)空間,因此一個(gè)五元組占用97 bit的存儲(chǔ)空間。還需要記錄該五元組的sensor、flag和seq,假設(shè)檢測(cè)引擎?zhèn)€數(shù)為n,則sensor需要「log2n?bit的存儲(chǔ)空間;flag只有0,1兩種狀態(tài),需要1 bit存儲(chǔ)空間;seq記錄報(bào)文的序號(hào),需要32 bit的存儲(chǔ)空間。因此,每個(gè)五元組的sensor、flag和seq需要占用33+「log2n?bit的存儲(chǔ)空間。一個(gè)周期內(nèi),算法1處理的五元組數(shù)目為Max_num,因此總共需要(130+「log2n?)Max_numbit的存儲(chǔ)空間。另外,Conn_num變量最大取值為Max_num,需要占用「log2Max_num?bit的存儲(chǔ)空間。因此,算法1總共需要(130+「log2n?+「log2Max_num?)·Max_numbit的存儲(chǔ)空間。
通過(guò)以上分析可以看出,算法1的時(shí)空復(fù)雜度并不復(fù)雜,但仍可以通過(guò)降低Max_num數(shù)值減少時(shí)空復(fù)雜度。不過(guò)Max_num取值過(guò)小,會(huì)導(dǎo)致每一個(gè)運(yùn)行周期過(guò)短,過(guò)渡切割了攻擊流量,難以完整地檢測(cè)到攻擊行為,因此Max_num的取值也是值得分析的一個(gè)問(wèn)題。
以下定理都是基于同一個(gè)算法運(yùn)行周期。
定理1TCP報(bào)文Pi被調(diào)度前,若Conn(Pi).flag標(biāo)記為0時(shí),則Pi是會(huì)話的第一個(gè)報(bào)文;Conn(Pi).flag標(biāo)記為1時(shí),則Pi不是會(huì)話的第一個(gè)報(bào)文。
證明: 基于Conn(Pi)五元組的TCP連接中可能包含多個(gè)會(huì)話,假設(shè)Pi是第一個(gè)會(huì)話的第一個(gè)報(bào)文,則Conn(Pi) 一定是新出現(xiàn)的五元組,因此Conn(Pi).flag被初始化為0,且因Pi為T(mén)CP報(bào)文,Conn(Pi).seq也被初始化為0;報(bào)文Pi被調(diào)度后,Conn(Pi).flag賦值為1。
該會(huì)話之后的報(bào)文被調(diào)度后,Conn(Pi).flag一直保持為1;第一個(gè)終止連接的報(bào)文被調(diào)度后,由于其FIN位為1,且Conn(Pi).seq==0,因此Conn(Pi).seq=Pi.SEQ;直到第一個(gè)會(huì)話的最后一個(gè)報(bào)文被調(diào)度完成后,由于滿足Pi.SEQ==Conn(Pi).seq+1,Conn(Pi).flag及Conn(Pi).seq均被重新賦值為0。
假如第一個(gè)會(huì)話過(guò)程中,碰到了Pi.RST==1的異常情況,則需要立即終止連接,Conn(Pi).flag及Conn(Pi).seq均被重新賦值為0。
因此,第二個(gè)會(huì)話的第一個(gè)報(bào)文被調(diào)度前,Conn(Pi).flag已被重新賦值為0。
以此類(lèi)推可以得出,在Conn(Pi)連接中,每個(gè)會(huì)話的第一個(gè)報(bào)文被調(diào)度前,Conn(Pi).flag數(shù)值為0。每個(gè)會(huì)話的第一個(gè)報(bào)文被調(diào)度后,Conn(Pi).flag數(shù)值為1;之后Conn(Pi).flag數(shù)值保持為1不變,直到每個(gè)會(huì)話的最后一個(gè)報(bào)文被調(diào)度后,Conn(Pi).flag重新為0。
證畢。
定理2UDP報(bào)文Pi被調(diào)度前,若Conn(Pi).flag標(biāo)記為0時(shí),表示報(bào)文Pi是五元組Conn(Pi)的第一個(gè)報(bào)文;Conn(Pi).flag為1時(shí),表示報(bào)文Pi不是Conn(Pi).的第一個(gè)報(bào)文。
證明:假設(shè)UDP報(bào)文Pi是五元組Conn(Pi)的第一個(gè)報(bào)文,則Conn(Pi)一定是新出現(xiàn)的五元組,因此Conn(Pi).flag被初始化為0,且報(bào)文Pi經(jīng)過(guò)調(diào)度后,Conn(Pi).flag被賦值為1。
假設(shè)Pi是Conn(Pi)連接的第j(j≠1)個(gè)報(bào)文,經(jīng)過(guò)上述分析得知,該報(bào)文被調(diào)度前,Conn(Pi).flag為1。
證畢。
定理3同一TCP會(huì)話下的所有報(bào)文,被調(diào)度至同一檢測(cè)引擎。
證明: 標(biāo)記該TCP會(huì)話為S,由證明1可以得出,會(huì)話S的第一個(gè)報(bào)文PS1被調(diào)度前,由于Conn(PS1).flag標(biāo)記為0,PS1被調(diào)度至當(dāng)前負(fù)載最低的檢測(cè)引擎Am,且標(biāo)記Conn(PS1).sensor=Am。
令PSi表示為會(huì)話S的第i個(gè)報(bào)文(i≠1),由于PSi和PS1同屬于會(huì)話S,則Conn(PSi)=Conn(PS1)。由于Conn(PSi).flag標(biāo)記不為0,報(bào)文PSi被調(diào)度至Conn(PSi).sensor,即Conn[PS1].sensor,說(shuō)明報(bào)文PSi也被調(diào)度至引擎Am。
證畢。
定理4同一五元組的所有UDP報(bào)文,被調(diào)度至同一檢測(cè)引擎。
證明:標(biāo)記該組UDP五元組為U,由證明3可以得出,該五元組的第一個(gè)報(bào)文PU1被調(diào)度前,由于Conn(PU1).flag標(biāo)記為0,PU1被調(diào)度至當(dāng)前負(fù)載最輕的引擎Am,且標(biāo)記Conn(PU1).sensor=Am。
令PUi表示為五元組U的第i個(gè)報(bào)文(i≠1),由于PUi和PU1的五元組相同,則Conn(PUi)=Conn(PU1)。由于Conn(PUi).flag標(biāo)記不為0,報(bào)文PUi被調(diào)度至Conn(PUi).sensor,即Conn(PU1).sensor,說(shuō)明報(bào)文PUi也被調(diào)度至引擎Am。
證畢。
構(gòu)造如圖3所示的實(shí)驗(yàn)拓?fù)?其中,交換機(jī)與路由器、交換機(jī)與負(fù)載均衡服務(wù)器,以及交換機(jī)與Sensor B之間鏈路最高傳輸速率為10 Gbit/s,其余鏈路最高傳輸速率為1 Gbit/s。為突出測(cè)試并行入侵檢測(cè)方法的性能,不宜采用性能超強(qiáng)的服務(wù)器用作檢測(cè)引擎,主機(jī)硬件配置見(jiàn)表1。
表1 主機(jī)硬件配置
圖3 實(shí)驗(yàn)拓?fù)?/p>
其中,SensorA1-A4、SensorB及負(fù)載均衡服務(wù)器均安裝CentOS 7.0 64 bit操作系統(tǒng),SensorA1-A4運(yùn)行Snort3.0,僅保留單連接攻擊規(guī)則文件;Sensor B運(yùn)行Snort3.0,僅保留多連接攻擊規(guī)則文件;負(fù)載均衡服務(wù)器監(jiān)控SensorA1-A4的負(fù)載,運(yùn)行算法1完成流量調(diào)度。
攻擊區(qū)共8臺(tái)主機(jī),每臺(tái)主機(jī)安裝3個(gè)虛擬機(jī),每個(gè)虛擬機(jī)分配1 GB內(nèi)存,并輪詢使用10個(gè)IP地址;被攻擊區(qū)共4臺(tái)服務(wù)器,每臺(tái)服務(wù)器安裝3個(gè)虛擬機(jī),并分別提供20個(gè)TCP服務(wù)和UDP服務(wù),以上可以構(gòu)造出57 600個(gè)不同的五元組,足以確保實(shí)驗(yàn)質(zhì)量。
攻擊區(qū)安裝Blade IDS Informer軟件[15],產(chǎn)生各種網(wǎng)絡(luò)攻擊行為,加上正常網(wǎng)絡(luò)流量,通過(guò)TcpReplay軟件重放實(shí)現(xiàn)包含以上攻擊行為的高速網(wǎng)絡(luò)流量[16]。
定義5NIDS檢測(cè)結(jié)果評(píng)價(jià)指標(biāo)F-Measure。
參閱文獻(xiàn)[17],F-Measure(F)指標(biāo)能全面準(zhǔn)確評(píng)估NIDS的檢測(cè)結(jié)果,公式定義如下:
(5)
式中:R表示召回率;P表示查準(zhǔn)率。
P=TP/(TP+FP)
(6)
R=TP/(TP+FN)
(7)
定義6NIDS檢測(cè)時(shí)延。
假設(shè)NIDS采集完網(wǎng)絡(luò)流量的時(shí)間為t1,NIDS最終檢測(cè)完成的時(shí)間t2,則NIDS的檢測(cè)時(shí)延Δt有如下公式:
Δt=t2-t1
(8)
定義7NIDS丟包率
假設(shè)NIDS檢測(cè)過(guò)程中丟失的報(bào)文數(shù)量為lp,待檢網(wǎng)絡(luò)流量總報(bào)文數(shù)量為ap,則丟包率L(loss_rate)有如下公式:
L=lp/ap
(9)
表2 不同Max_num取值下的實(shí)驗(yàn)結(jié)果
本實(shí)驗(yàn)包含多連接攻擊檢測(cè)以及單連接攻擊檢測(cè), SensorA1-A4、SensorB以及負(fù)載均衡服務(wù)器全部工作。將本文方法與文獻(xiàn)[9]提出的多檢測(cè)引擎監(jiān)測(cè)的動(dòng)態(tài)負(fù)載均衡算法,文獻(xiàn)[10]提出的基于能力與負(fù)載的數(shù)據(jù)分割算法,文獻(xiàn)[11]提出的動(dòng)態(tài)層次負(fù)載均衡算法,文獻(xiàn)[12]提出的預(yù)測(cè)負(fù)載均衡方法,文獻(xiàn)[13]提出的基于“最小PPS”的動(dòng)態(tài)流量調(diào)度策略,統(tǒng)一采用4.1描述的實(shí)驗(yàn)拓?fù)浼碍h(huán)境,做不同方法的實(shí)驗(yàn)對(duì)比。
圖4 單連接攻擊檢測(cè)的
圖5 多連接攻擊檢測(cè)的
分析原因,本文方法中多連接攻擊檢測(cè)子系統(tǒng)采用單檢測(cè)引擎,沒(méi)有攻擊證據(jù)的丟失。同時(shí),為提高檢查效率,檢測(cè)引擎快速掃描報(bào)文首部,并只匹配多連接攻擊規(guī)則庫(kù)。而其他方法沒(méi)有區(qū)分單連接攻擊和多連接攻擊,統(tǒng)一采用多檢測(cè)引擎并行檢測(cè),造成多連接攻擊的流量被調(diào)度至不同檢測(cè)引擎,而檢測(cè)引擎間又缺少互相通信獲取全局信息的機(jī)制,導(dǎo)致攻擊證據(jù)的丟失,檢測(cè)結(jié)果相對(duì)本文方法較差。
圖6 平均檢測(cè)時(shí)延
圖7 平均丟包率
實(shí)驗(yàn)表明,本文方法在高速網(wǎng)絡(luò)環(huán)境下,具有更高的實(shí)用性和穩(wěn)定性。
本文提出的基于攻擊分類(lèi)的高性能并行入侵檢測(cè)方法,分為單連接攻擊檢測(cè)系統(tǒng)和多連接攻擊檢測(cè)系統(tǒng),有效地解決了攻擊證據(jù)保持及負(fù)載均衡問(wèn)題。實(shí)驗(yàn)結(jié)果表明,相比其他并行入侵檢測(cè)方法,本文方法在單連接攻擊及多連接攻擊檢測(cè)中均表現(xiàn)優(yōu)秀,F-Measure值提升顯著,檢測(cè)時(shí)延和丟包率也有一定降低。通過(guò)優(yōu)化模式匹配算法及規(guī)則連設(shè)計(jì)方法,提升單個(gè)檢測(cè)引擎的檢測(cè)性能,從而提升并行NIDS的整體檢測(cè)性能,是作者今后的研究重點(diǎn)。