馬 晉
(重慶市氣象局,重慶401147)
網(wǎng)絡(luò)數(shù)據(jù)包的特殊傳輸形式使得協(xié)議分析技術(shù)在網(wǎng)絡(luò)安全應(yīng)用中具有特殊優(yōu)勢,例如,協(xié)議分析是網(wǎng)絡(luò)入侵檢測研究的主要技術(shù)[1],也是通信流量識(shí)別[2]的重要技術(shù),其本質(zhì)是根據(jù)協(xié)議規(guī)范分析網(wǎng)絡(luò)數(shù)據(jù)包,確認(rèn)數(shù)據(jù)包的協(xié)議類型。協(xié)議分析的前提是采集網(wǎng)絡(luò)數(shù)據(jù)包,數(shù)據(jù)包的捕獲能力是決定協(xié)議分析性能高低的首要因素。隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,網(wǎng)絡(luò)帶寬日益增長[3],從高速和海量的網(wǎng)絡(luò)流量中實(shí)時(shí)采集數(shù)據(jù)包的難度很大。
采用傳統(tǒng)Libpcap庫等普通模式下的數(shù)據(jù)包采集機(jī)制已經(jīng)難以適應(yīng)高速網(wǎng)絡(luò)的發(fā)展,為了提高采集效率,高速網(wǎng)絡(luò)環(huán)境下通常采用零拷貝技術(shù)[4],但它只是減小了由于數(shù)據(jù)拷貝帶來的系統(tǒng)開銷,存在著必須對(duì)網(wǎng)卡底層驅(qū)動(dòng)程序進(jìn)行改造的問題,也就是說數(shù)據(jù)包的采集一定要與特定的硬件系統(tǒng)相關(guān),系統(tǒng)的可移植性將會(huì)受到很大程度的影響。
由于數(shù)據(jù)包采集的硬件處理器處理能力的增長遠(yuǎn)遠(yuǎn)低于網(wǎng)絡(luò)流量增長的速度,在這種情況下,負(fù)載均衡技術(shù)被應(yīng)用到采集系統(tǒng)來解決高速網(wǎng)絡(luò)下的數(shù)據(jù)采集問題。但是當(dāng)前的負(fù)載均衡策略主要有針對(duì)特定應(yīng)用的策略和針對(duì)特定目標(biāo)的策略。針對(duì)特定應(yīng)用的負(fù)載均衡策略是指專門針對(duì)一種特定應(yīng)用協(xié)議(HTTP、FTP或者SMTP等)進(jìn)行分流,基于該策略,根據(jù)識(shí)別網(wǎng)絡(luò)數(shù)據(jù)流中數(shù)據(jù)包的應(yīng)用協(xié)議類型將數(shù)據(jù)包分發(fā)到相應(yīng)的引擎中,但是當(dāng)多種協(xié)議的數(shù)據(jù)流量不均勻時(shí),就很難達(dá)到負(fù)載均衡的效果;基于主機(jī)源地址[5]的調(diào)度策略是針對(duì)特定主機(jī)的網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)行分流,根據(jù)識(shí)別網(wǎng)絡(luò)數(shù)據(jù)流中的主機(jī)IP地址將數(shù)據(jù)包分發(fā)到相應(yīng)的引擎,但是同樣的,當(dāng)多個(gè)目標(biāo)主機(jī)的數(shù)據(jù)流量不夠均勻時(shí),難以實(shí)現(xiàn)負(fù)載均衡。在對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議分析過程中,不僅僅是單獨(dú)分析某個(gè)數(shù)據(jù)包的內(nèi)容,更重要的是要考慮數(shù)據(jù)包的上下文關(guān)系,需要保證分流的正確性,即要避免將屬于同一個(gè)會(huì)話的數(shù)據(jù)包被分流到多個(gè)引擎。如果不能保證被分流到同一個(gè)引擎會(huì)話的完整性,就可能造成入侵檢測的漏報(bào)現(xiàn)象,例如Web請(qǐng)求“GET/cgi-bin/phf”是Unix系統(tǒng)下的一個(gè)Web入侵特征串,但如果攻擊者將該請(qǐng)求分成多個(gè)網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送,比如一個(gè)數(shù)據(jù)包含有“GET/cgi-”,另一個(gè)數(shù)據(jù)包包含“bin/phf”,如果不能把這些網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)發(fā)到某個(gè)固定的分析引擎,就無法正確檢測到攻擊行為的發(fā)生。
為了解決上述高速網(wǎng)絡(luò)環(huán)境中協(xié)議分析存在的問題,本文給出了一種改進(jìn)的基于會(huì)話的動(dòng)態(tài)負(fù)載均衡技術(shù),即SDLB(Session Dynamic Load Balance)技術(shù)。
本文所提出的基于SDLB技術(shù)的高速網(wǎng)絡(luò)環(huán)境中協(xié)議分析的解決方案應(yīng)用了負(fù)載均衡、模式匹配、數(shù)據(jù)包分流、協(xié)議分析等技術(shù),其參考模型如圖1所示。
圖1 基于SDLB技術(shù)的協(xié)議分析參考模型
基于SDLB技術(shù)的協(xié)議分析參考模型包括數(shù)據(jù)采集模塊、Session分流模塊、負(fù)載均衡模塊和協(xié)議分析模塊。首先需要將采集到的高速網(wǎng)絡(luò)數(shù)據(jù)包分解成以Session會(huì)話為單位的數(shù)據(jù)流,通過Session分流模塊的控制將同一Session的數(shù)據(jù)流分配到相同的協(xié)議分析引擎,再經(jīng)負(fù)載均衡模塊維持各協(xié)議分析引擎的負(fù)載均衡性,最后由協(xié)議分析模塊實(shí)現(xiàn)協(xié)議解析。下面給出SDLB技術(shù)在協(xié)議分析中實(shí)現(xiàn)數(shù)據(jù)包的Session分流和維持?jǐn)?shù)據(jù)包分流的負(fù)載均衡性的工作原理。
一個(gè)會(huì)話對(duì)應(yīng)于TCP數(shù)據(jù)流的一個(gè)連接,本文使用一個(gè)〈源地址,目標(biāo)地址,源端口,目標(biāo)端口,協(xié)議類型〉五元組即〈Sip,Dip,Sport,Dport,Ptype〉來定義;對(duì)于UDP、ICMP等無連接協(xié)議的數(shù)據(jù)包以及不完整的TCP連接數(shù)據(jù)包,本文設(shè)定相近時(shí)間內(nèi)具有相同五元組的所有數(shù)據(jù)包為一個(gè)會(huì)話單位。下面介紹SDLB技術(shù)保證同一會(huì)話分流到相同協(xié)議分析引擎的工作過程。
對(duì)網(wǎng)絡(luò)數(shù)據(jù)包按照上述對(duì)會(huì)話的定義提取五元組信息進(jìn)行計(jì)算,以8位長度為單位進(jìn)行運(yùn)算,即將32位的IP地址分割成4個(gè)8位數(shù)據(jù),16位的端口號(hào)分割成2個(gè)8位數(shù)據(jù),協(xié)議類型為8位則保持不變,將分割后的8位數(shù)據(jù)做二進(jìn)制加法運(yùn)算,這樣同屬一個(gè)會(huì)話的五元組所得到的和肯定是相同的,所以能夠保證同一會(huì)話的數(shù)據(jù)包的完整性,但是不屬于這個(gè)會(huì)話的數(shù)據(jù)包的五元組也有可能做加法運(yùn)算后的和與該會(huì)話的和相同,例如,〈192.168.3.100,192.168.3.10,4000,80,6〉的五元組和〈192.168.3.90,192.168.3.10,80,4010,6〉的和值是相同的,但是他們不屬于同一個(gè)會(huì)話。為了進(jìn)一步細(xì)分不同的會(huì)話,引入異或運(yùn)算,即將作和運(yùn)算后值相等的五元組再進(jìn)行按照8位二進(jìn)制的異或運(yùn)算,如果異或后的值相等則判定為屬于同一會(huì)話。如果加法運(yùn)算后的和相等,再將五元組做8位異或運(yùn)算后的值也相等,則取加法運(yùn)算的和值記為S,再進(jìn)行取模運(yùn)算,數(shù)據(jù)欲分配的引擎號(hào)按照E=S mod n計(jì)算,其中n為協(xié)議分析引擎的數(shù)量,E則為某個(gè)會(huì)話將被分配的引擎號(hào)。可以證明,屬于同一個(gè)會(huì)話的五元組計(jì)算出的S是相同的,即如果S1=S2,則有E1=S1mod n=S2mod n=E2,即E1=E2,所以SDLB技術(shù)保證了屬于同一會(huì)話的數(shù)據(jù)流被分配到同一個(gè)協(xié)議分析引擎中。
SDLB技術(shù)可以通過動(dòng)態(tài)地獲取當(dāng)前引擎的負(fù)載情況,將新的會(huì)話數(shù)據(jù)包分發(fā)給當(dāng)前負(fù)載最小的引擎。用一個(gè)負(fù)載函數(shù)表示第i臺(tái)協(xié)議分析引擎在時(shí)刻t的負(fù)載狀態(tài)值
式中:a1,a2,a3,a4分別代表在t時(shí)刻第i臺(tái)引擎正在處理的會(huì)話數(shù)Si(t)、尚未處理的數(shù)據(jù)包剩余量Pi(t)、CPU占用率Ui(t)、內(nèi)存占用率Mi(t)對(duì)引擎負(fù)載的影響因子,它們滿足式子,各影響因子應(yīng)根據(jù)具體的流量環(huán)境確定。Li(t)的值越大,表明引擎的負(fù)載越重。
考慮到動(dòng)態(tài)反饋需要額外的系統(tǒng)開銷,所以還引入負(fù)載修正值的定義。引擎的負(fù)載修正值是指在t1時(shí)刻會(huì)話S的分配或完成導(dǎo)致的相應(yīng)引擎增加或減少的負(fù)載量,其定義式為
式中:Li(t1)是指在t1時(shí)刻動(dòng)態(tài)反饋得到的引擎負(fù)載,Si(t1)是指在t1時(shí)刻引擎正在處理的會(huì)話個(gè)數(shù)。
SDLB技術(shù)中定義兩張表,即引擎負(fù)載表和數(shù)據(jù)包分發(fā)表,這兩張表具有動(dòng)態(tài)學(xué)習(xí)的功能。其中引擎負(fù)載表包含引擎號(hào)、正在處理的會(huì)話數(shù)、數(shù)據(jù)包剩余量、CPU占用率、內(nèi)存占用率和負(fù)載量;數(shù)據(jù)包分發(fā)表包含〈Sip,Dip,Sport,Dport,Ptype〉五元組、引擎號(hào)和更新時(shí)間。通過引擎負(fù)載表和數(shù)據(jù)包分發(fā)表的動(dòng)態(tài)學(xué)習(xí),實(shí)現(xiàn)引擎負(fù)載表的定時(shí)更新、數(shù)據(jù)包分發(fā)表的定時(shí)更新以及數(shù)據(jù)包會(huì)話分流的功能。下面將介紹這3個(gè)功能的實(shí)現(xiàn)原理。
1)引擎負(fù)載表的更新
負(fù)載表的更新工作過程如下:
(1)將引擎負(fù)載表中的各項(xiàng)初始值置為0;
(2)設(shè)定時(shí)間間隔Tp;
(3)搜集各個(gè)引擎的負(fù)載信息,包括會(huì)話數(shù)、數(shù)據(jù)包剩余量、CPU占用率和內(nèi)存占用率等;
(4)按照式(1)計(jì)算各個(gè)引擎的負(fù)載量;
(5)用上述最新的各個(gè)參數(shù)更新負(fù)載表中的表項(xiàng);
(6)等待Tp時(shí)間到,跳轉(zhuǎn)到(3)。
2)數(shù)據(jù)包分發(fā)表的更新
數(shù)據(jù)分發(fā)表的更新工作過程如下:
(1)將數(shù)據(jù)分發(fā)表中的各項(xiàng)初始值置為0。
(2)設(shè)定時(shí)間間隔Tp,設(shè)定時(shí)間閾值Ts。
(3)將數(shù)據(jù)分發(fā)表的指針指向表中的第一條記錄。
(4)讀取該記錄的更新時(shí)間ti。
(5)將當(dāng)前時(shí)間t與更新時(shí)間ti的差值Δt和Ts作比較,如果Δt>Ts,執(zhí)行(6),否則執(zhí)行(7)。
(6)讀取該記錄中的引擎號(hào)E,刪除該記錄(定時(shí)清除超時(shí)的會(huì)話記錄),然后按照式(2)計(jì)算引擎E的負(fù)載修正值ΔLi;更新負(fù)載表引擎E的表項(xiàng)記錄,會(huì)話數(shù)Si=Si-1,負(fù)載值Li=Li-ΔLi。
(7)將數(shù)據(jù)分發(fā)表的指針下移,判斷是否表的結(jié)束,是結(jié)束位置執(zhí)行(8),否則執(zhí)行(4)。
(8)等待Tp時(shí)間到,跳轉(zhuǎn)到(3)。
3)網(wǎng)絡(luò)數(shù)據(jù)包的均衡分流
數(shù)據(jù)包分流過程基于數(shù)據(jù)分發(fā)表和引擎負(fù)載表工作。數(shù)據(jù)包分流的具體工作過程如下:
(1)新接收一個(gè)數(shù)據(jù)包,提取〈Sip,Dip,Sport,Dport,Ptype〉五元組信息。
(2)判斷是否為TCP數(shù)據(jù)包,是TCP包,則提取TCP標(biāo)志FIN和RST。
(3)在數(shù)據(jù)分發(fā)表中查找五元組〈Sip,Dip,Sport,Dport,Ptype〉所在的記錄,查找成功執(zhí)行(4),否則,執(zhí)行(8)。
(4)讀取該記錄中的引擎號(hào)E。
(5)如果是TCP會(huì)話的最后一個(gè)數(shù)據(jù)包,即FIN=1或者RST=1,執(zhí)行(6),否則執(zhí)行(7)。
(6)刪除該記錄,然后按照式(2)計(jì)算引擎E的負(fù)載修正值ΔLi;更新負(fù)載表引擎E的表項(xiàng)記錄,會(huì)話數(shù)Si=Si-1,負(fù)載值Li=Li-ΔLi,然后執(zhí)行(1)。
(7)查詢引擎負(fù)載表,如果由上面模運(yùn)算得到的引擎號(hào)代表的引擎負(fù)載最小則直接發(fā)往該引擎;否則,找到負(fù)載最小的引擎E,即Li=min(Li),將數(shù)據(jù)包分發(fā)給對(duì)應(yīng)的引擎E,并更新時(shí)間記錄,然后執(zhí)行(1)。
(8)查詢引擎負(fù)載表,如果由上面模運(yùn)算得到的引擎號(hào)代表的引擎負(fù)載最小則直接發(fā)往該引擎;否則,找到負(fù)載最小的引擎E,即Li=min(Li),將數(shù)據(jù)包分發(fā)給引擎E;在數(shù)據(jù)包分發(fā)表中增加對(duì)應(yīng)五元組〈Sip,Dip,Sport,Dport,Ptype〉的記錄:更新時(shí)間t,〈Sip,Dip,Sport,Dport,Ptype〉和引擎號(hào)E;按照式(2)計(jì)算引擎E的負(fù)載修正值ΔLi;更新負(fù)載表中引擎E的記錄:會(huì)話數(shù)(Si=Si+1),負(fù)載值(Li=Li+ΔLi),然后執(zhí)行(1)。
為了測試SDLB技術(shù)的性能,在本單位數(shù)據(jù)中心機(jī)房將核心交換機(jī)所有流量分別鏡像到兩個(gè)千兆端口,分別以使用SDLB技術(shù)和未使用SDLB技術(shù)的組網(wǎng)方式進(jìn)行數(shù)據(jù)采集和協(xié)議分析,為方便比較和分析,兩種方式在同一時(shí)間進(jìn)行測試。采用SDLB技術(shù)的組網(wǎng)環(huán)境以可編程的Intel網(wǎng)絡(luò)處理器硬件平臺(tái)作為數(shù)據(jù)包分流器,選用4臺(tái)相同的帶有2 Gbyte內(nèi)存、250 Gbyte硬盤、主頻2.0 GHz雙核處理器的處理機(jī)作為協(xié)議分析引擎;未采用SDLB技術(shù)的組網(wǎng)方式是使用4臺(tái)相同的處理機(jī)作為協(xié)議分析處理器,按照應(yīng)用類型進(jìn)行數(shù)據(jù)分流。實(shí)驗(yàn)共進(jìn)行5次數(shù)據(jù)測試,每次測試時(shí)間為2 h,每5 min取一次采樣值,取采樣結(jié)果的加權(quán)平均值為測試結(jié)果。如圖2所示,可以看出,采用SDLB技術(shù)的方式,數(shù)據(jù)包的丟包率大大降低,并且每臺(tái)引擎內(nèi)存和CPU占用率都比不采用SDLB技術(shù)的方式負(fù)載情況更加均衡,所以驗(yàn)證了SDLB技術(shù)的正確性和可行性。
圖2 兩種方式測試結(jié)果對(duì)比圖
在此基礎(chǔ)上,將SDLB技術(shù)應(yīng)用到網(wǎng)絡(luò)信息系統(tǒng)的運(yùn)維管理工作中,把一臺(tái)配置較高的服務(wù)器虛擬化出多臺(tái)處理機(jī)作為協(xié)議分析處理器,通過SDLB技術(shù)進(jìn)行數(shù)據(jù)分流,經(jīng)過協(xié)議分析處理器對(duì)高速的數(shù)據(jù)流量進(jìn)行協(xié)議分析,從而實(shí)現(xiàn)對(duì)高速網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行實(shí)時(shí)統(tǒng)計(jì)監(jiān)控和網(wǎng)絡(luò)威脅報(bào)警,這對(duì)實(shí)際工作中信息網(wǎng)絡(luò)的運(yùn)維管理具有重要的意義。
本文根據(jù)高速網(wǎng)絡(luò)環(huán)境中的協(xié)議分析存在的問題,給出了一種改進(jìn)的基于SDLB技術(shù)的協(xié)議分析模型,實(shí)驗(yàn)證明,SDLB技術(shù)可以提高協(xié)議分析引擎負(fù)載的均衡性和協(xié)議分析的完整性,適合應(yīng)用在高速網(wǎng)絡(luò)環(huán)境中的協(xié)議分析系統(tǒng),對(duì)實(shí)現(xiàn)企業(yè)局域網(wǎng)高速網(wǎng)絡(luò)數(shù)據(jù)的協(xié)議識(shí)別、流量監(jiān)控和威脅發(fā)現(xiàn)具有重要意義。
[1]REED K D.Protocol analysis[M].Westland:WestNet Inc,2001.
[2]王超,張白愚.DVB-S中即時(shí)通信語音流量識(shí)別技術(shù)研究[J].電視技術(shù),2010,34(9):13-16.
[3]肖寅東,王厚軍,田書林.高速網(wǎng)絡(luò)入侵檢測系統(tǒng)中包頭解析方法[J].儀器儀表學(xué)報(bào),2012,33(6):1415-1419.
[4]李旭芳.網(wǎng)絡(luò)信息審計(jì)系統(tǒng)中數(shù)據(jù)采集的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(3):550-552.
[5]周瑩蓮,劉甫.服務(wù)器負(fù)載均衡技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2010,38(4 ):11-14.