林國慶, 王 靜, 陳汝偉
(1.長安大學 汽車學院,陜西 西安 710064;2.長安大學 信息學院,陜西 西安 710064;3.桂林電子科技大學 數(shù)學與計算科學學院,廣西 桂林 541004)
P2P(Peer to Peer)技術(shù)實現(xiàn)了網(wǎng)絡(luò)節(jié)點的地位平等,每個節(jié)點既接受服務也提供服務,而且節(jié)點間可以直接進行信息交互,這樣充分利用網(wǎng)絡(luò)、節(jié)點上的空閑資源,提供了一個高效的信息共享平臺。P2P網(wǎng)絡(luò)體現(xiàn)的“人人為我,我為人人”的理念也非常符合互聯(lián)網(wǎng)開放、平等的設(shè)計理念。
但是在當前網(wǎng)絡(luò)環(huán)境中,以BT為代表的P2P下載軟件流量以及以PPlive為代表的P2P流媒體軟件占用了寬帶接入的大量帶寬,據(jù)統(tǒng)計已經(jīng)超過了60%,這造成了網(wǎng)絡(luò)帶寬的巨大消耗,甚至會引起網(wǎng)絡(luò)擁塞,大大降低了網(wǎng)絡(luò)性能,劣化了網(wǎng)絡(luò)服務質(zhì)量,妨礙了正常的網(wǎng)絡(luò)業(yè)務的開展和關(guān)鍵應用的普及,嚴重影響了用戶使用正常的Web、E-mail等業(yè)務,因此在必要時,運營商、企業(yè)用戶以及教育等行業(yè)的用戶需要對這類流量進行限制;另一方面,對于企業(yè)用戶來說,員工利用內(nèi)部網(wǎng)進行BT下載會占用大量的內(nèi)部網(wǎng)帶寬,同時通過并不安全的網(wǎng)絡(luò)環(huán)境獲得的應用程序和P2P軟件的使用,將可能為企業(yè)安全防護打開一扇后窗,使得病毒和惡意代碼得以躲過安全審查潛入企業(yè)內(nèi)部網(wǎng)絡(luò)。因此實現(xiàn)分類、標識和控制P2P流量越來越成為企業(yè)、網(wǎng)絡(luò)運營商急需解決的問題。對運營商或企業(yè)來說,簡單的擴容無法滿足容量增長的需要,對P2P流量進行識別、管理和控制是解決目前網(wǎng)絡(luò)狀態(tài)的根本途徑。
文中借助Snort系統(tǒng)的鏈表結(jié)構(gòu),設(shè)計了一種局域網(wǎng)P2P流量識別系統(tǒng),該系統(tǒng)綜合使用端口識別和特征匹配兩種方法來提高檢測的效率。首先介紹了P2P流量識別的傳統(tǒng)方法;然后提出了一種基于Snort[1-7]系統(tǒng)的局域網(wǎng)P2P流量識別系統(tǒng)P2PSnort.
1)端口識別法 端口識別法是根據(jù)TCP數(shù)據(jù)包或UDP數(shù)據(jù)包首部的源端口號或目的端口號識別一些常見業(yè)務的流量,如 HTTP,SMTP,Telnet,HTTPS 等。 多數(shù) P2P 流量也可通過端口號進行識別.在P2P發(fā)展早期,P2P的應用都是使用固定的端口號[8]進行通信的。而目前多數(shù)P2P用戶也是使用程序的默認端口.如 BitTorrent使用 6881,6882,6884,6886等TCP端口,eDonkey使用 4371和 4662作為 TCP端口,使用4672作為UDP端口等。所以,最早的P2P識別方法[8]就是基于P2P應用的特征端口號的。只需簡單比對端口號就可以直接識別出是何種具體的P2P協(xié)議(如eMule、BitTorrent等),也可以直接排除知名的非 P2P應用(如 FTP,mail,www等)。該方法原理簡單,技術(shù)成熟,一些對準確性要求不高的流量監(jiān)測系統(tǒng)主要使用特征端口號識別作為P2P流量識別手段。
2)數(shù)據(jù)包負載識別法 由于P2P軟件可采用動態(tài)端口,只能通過掃描P2P數(shù)據(jù)包的高層協(xié)議來探知。以BitTorrent為例,其原理為:當兩臺應用了BitTorrent協(xié)議的主機試圖共享文件信息時,他們首先需要通過3次握手來建立連接。在這些數(shù)據(jù)包中,payload(應用層用戶數(shù)據(jù))部分便會包含BitTorrent協(xié)議的特征字段—“0x13Bit”。識別出包含特征字段的數(shù)據(jù)包之后,提取并記錄下源和目的的IP地址及端口號。之后出現(xiàn)的與此四元組相匹配的數(shù)據(jù)包即為兩主機間進行具體文件數(shù)據(jù)傳輸?shù)臄?shù)據(jù)包通過數(shù)據(jù)包負載識別法可識別多數(shù)等主流P2P軟件。
本節(jié)綜合了端口識別法和數(shù)據(jù)包負載識別法的優(yōu)點,利用Snort系統(tǒng)的鏈表結(jié)構(gòu)和預處理器擴展功能,設(shè)計了一種新的P2P流量識別系統(tǒng)P2PSnort.
1)端口識別規(guī)則 將正常業(yè)務端口和常用P2P端口以Snort規(guī)則形式表達。如eDonkey2000常使用4672作為UDP端口,其對應的Snort規(guī)則為:
alert udp$HOME_NET 4672<->$EXTERNAL_NET any(msg:”GetIP(SrcIP, DstIP) eDonkey! ”;)
該規(guī)則的含義是如果一個達到主網(wǎng)某地址的或由網(wǎng)內(nèi)某地址使用4672端口收發(fā)UDP數(shù)據(jù)包,則報警并屏顯收發(fā)地址和eDonkey2000字樣。
當P2PSnort啟動時,所有P2P端口識別規(guī)則被解析為P2P端口識別鏈表,與其他Snort規(guī)則相同,每個P2P端口識別規(guī)則對應一個鏈表節(jié)點.P2P端口識別鏈表。先解析正常端口規(guī)則,再解析常用P2P端口規(guī)則。P2P端口識別鏈表。形成后正常端口規(guī)則節(jié)點在鏈表前部,常用P2P端口規(guī)則節(jié)點在鏈表后部。如圖1所示。
2)負載識別規(guī)則 將各個P2P類型的應用層特征以Snort規(guī)則的形式表達.如eDonkey2000的應用層特征是含有字符串0xc53f010000,則其對應的Snort規(guī)則就是:
alert tcp$HOME_NET any<-> $EXTERNAL_NET any(content:”|0xc53f010000|/bin/sh”; msg:” GetIP (SrcIP, DstIP)eDonkey2000! ”;)
圖1 端口識別鏈表Fig.1 Chain for port identification
該規(guī)則的含義是如果一個達到主網(wǎng)某地址的或由網(wǎng)內(nèi)某地址發(fā)出的TCP數(shù)據(jù)包含有0xc53f010000字段,則報警并屏顯收發(fā)地址和eDonkey2000字樣。
當P2PSnort啟動時,所有P2P流量識別規(guī)則被解析為P2P特征識別鏈表,與其他Snort規(guī)則相同,每個P2P特征識別規(guī)則對應一個鏈表節(jié)點。每個鏈表節(jié)點對應一個索引節(jié)點.所有索引節(jié)點生成對應P2P特征識別鏈表的可動態(tài)調(diào)整的索引節(jié)點鏈表.P2P特征識別鏈表如圖2所示。
圖2 P2P特征識別鏈表Fig.2 Chain for P2P feature matching
P2PSnort的檢測過程如下:
1)捕獲數(shù)據(jù)包 系統(tǒng)利用libpcap庫函數(shù)[1]采集到一個數(shù)據(jù)包后,隨即送往數(shù)據(jù)包解碼器。
2)數(shù)據(jù)包解碼 利用各層解碼器將數(shù)據(jù)包層層解碼。所有解析結(jié)果存入Packet數(shù)據(jù)結(jié)構(gòu)[1]的相應字段中。
3)將數(shù)據(jù)包端口部分按照鏈表順序依次匹配端口識別鏈表。若源端口號或目的端口號為常見業(yè)務的端口號,則轉(zhuǎn)4)。否則繼續(xù)匹配端口識別鏈表后部的常用P2P端口規(guī)則節(jié)點。若源端口號或目的端口號是某P2P軟件的常用端口則直接輸出報警,并丟棄該數(shù)據(jù)包。否則,轉(zhuǎn)4)。
4)將該數(shù)據(jù)包負載部分與P2P識別鏈表的各個節(jié)點依次匹配(按照對應索引鏈表順序),若不存在匹配,則認為該數(shù)據(jù)包為非P2P流量包,丟棄.否則轉(zhuǎn)5)。
5)若存在匹配節(jié)點,則將該節(jié)點的索引節(jié)點放置到索引鏈表的最上端,并輸出相應報警信息,即提示使用P2P的主機地址和P2P的類型,丟棄數(shù)據(jù)包。
整個檢測過程如圖3所示。由于P2P流量在某一時段會發(fā)生大量相同特征數(shù)據(jù)包的傳輸,所以對P2P識別鏈表進行動態(tài)調(diào)節(jié),在發(fā)現(xiàn)某一匹配特征的數(shù)據(jù)包后將相應節(jié)點位置前移,可以減少后續(xù)數(shù)據(jù)包的鏈表節(jié)點匹配次數(shù),從而提高檢測效率。所以,在5)中對索引鏈表進行動態(tài)調(diào)節(jié)。
圖3 P2PSnort的工作流程圖Fig.3 Work flow chart of P2PSnort
具體網(wǎng)絡(luò)環(huán)境如圖4所示。3臺工作站通過交換機組成局域網(wǎng),交換機上行端口通過防火墻連接到Internet.P2P流量識別系統(tǒng)P2PSnort連接在交換機測試端口上.交換機內(nèi)網(wǎng)網(wǎng)關(guān) IP:192.168.1.1; 工作站 A 內(nèi)網(wǎng) IP地址:192.168.1.10;B:192.168.1.20; C:192.168.1.60。
圖4 測試網(wǎng)絡(luò)Fig.4 Test network
啟動P2PSnort,在工作站A上運行下載程序BitTorrent并下載某個AVI文件,在B上運行下載程序eMule并下載某個ZIP文件,在C上運行程序PPLive,并在線播放某個流媒體文件。
在各個下載程序開始工作后,P2PSnort迅速輸出報警,準確提示了所有P2P程序的種類和下載的IP地址。
P2PSnort系統(tǒng)綜合了兩種傳統(tǒng)的P2P流量識別方法,利用模式匹配的方式可以有效的識別出已知的有特征值的各種P2P軟件,系統(tǒng)采用端口識別法將數(shù)據(jù)包分類,對常見P2P端口的數(shù)據(jù)包直接報警,對其他端口的數(shù)據(jù)包則順次匹配檢測規(guī)則鏈表。同時在發(fā)現(xiàn)特征鏈表有相匹配的情況后動態(tài)調(diào)整索引鏈表以提高檢測效率。這樣的設(shè)計大幅度減少了檢測模塊的工作量,提高了檢測效率和準確性,降低了漏檢的可能性。
同時,該系統(tǒng)也存在一些缺陷,包括:
1)采用端口識別法可能會漏掉一些采用正常業(yè)務端口的P2P流量數(shù)據(jù)包,盡管只有某些特權(quán)用戶才能做到這一點.因此在網(wǎng)絡(luò)流量不大時可以不開啟端口識別預處理器而直接檢測所有數(shù)據(jù)包。
2)與Snort系統(tǒng)相同,該系統(tǒng)在面臨較大的網(wǎng)絡(luò)流量時可能會出現(xiàn)漏檢的情況,但由于在P2P軟件工作時它的數(shù)據(jù)包數(shù)量很大,因此在相同網(wǎng)絡(luò)環(huán)境下該系統(tǒng)較Snort系統(tǒng)漏檢的可能性要低得多。
3)不能檢測加密的數(shù)據(jù)流和未知的P2P數(shù)據(jù)流。
文章借助入侵檢測系統(tǒng)Snort的檢測原理和其規(guī)則的鏈表組織形式,設(shè)計了一種局域網(wǎng)P2P流量識別系統(tǒng),該系統(tǒng)綜合使用端口識別和特征匹配兩種方法來對數(shù)據(jù)包進行檢測。該系統(tǒng)完全由自由軟件Snort改造而來,降低了成本。與Snort系統(tǒng)相同,P2PSnort可在各類操作系統(tǒng)下運行,通用性好.適用于各類學校和中小企業(yè)網(wǎng)絡(luò)。
[1]潘振業(yè),李學干.基于模式匹配和協(xié)議分析的入侵檢測系統(tǒng)設(shè)計[D].西安:西安電子科技大學,2005.
[2]李春梅,李學干.基于網(wǎng)絡(luò)的入侵檢測系統(tǒng)的研究及實現(xiàn)[D].西安:西安電子科技大學,2005.
[3]康振勇,田玉敏.網(wǎng)絡(luò)入侵檢測系統(tǒng)Snort的研究與改進[D]西安:西安電子科技大學,2006.
[4]嚴書亭,劉佳新,王新生.Snort規(guī)則鏈表結(jié)構(gòu)的分析與改進[J].燕山大學學報,2006, 30(3):272-275.
YAN Shu-ting, LIU Jia-xin, WANG Xin-sheng.Analysis and improvement of structure of snort rule chain[J].Journal of Yanshan University, 2006, 30(3):272-275.
[5]高平利,任金昌.基于Snort入侵檢測系統(tǒng)的分析與實現(xiàn)[J].計算機應用與軟件,2006, 23(8):134-138.
GAO Ping-li,REN Jin-chang.Analysis and realization of snort-based intrusion detection system[J]. Computer Applications and Software,2006, 23(8):134-138.
[6]張悅連,郭文東.Snort規(guī)則及規(guī)則處理模塊分析[J].河北科技大學學報, 2003,24(4):44-47.
ZHANG Yue-lian,GUO Wen-dong.Analysis of the rule of snort and the module of snort rule process[J].Journal of Hebei University of Science and Technology, 2003,24(4):44-47.
[7]唐謙,張大方.基于Snort的入侵檢測引擎比較分析[J].計算機工程與設(shè)計,2005,26(11):2884-2886.
TANG Qian,ZHANG Da-fang.Intrusion detection engine comparison based on Snort[J].Computer Engineering and Design, 2005,26(11):2884-2886.
[8]Internet Assigned Numbers Authority (IANA)[EB/OL].(2002-08-16)[2003-10-04]http://www.iana.org/assignments/port-numbers.