李佳靜 高潤(rùn)智 孫陽(yáng)陽(yáng) 楊功江 趙彥
摘 要:應(yīng)用層會(huì)話分析可以用來(lái)反應(yīng)網(wǎng)絡(luò)狀態(tài)、掌握用戶習(xí)慣以及發(fā)現(xiàn)潛在的安全威脅。該文提出了一種網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)方法,給出了應(yīng)用層協(xié)議包括固定端口和可變端口協(xié)議的分析算法。實(shí)驗(yàn)表明,該文的方法能夠有效地在對(duì)局域網(wǎng)內(nèi)的會(huì)話進(jìn)行識(shí)別和統(tǒng)計(jì)。
關(guān)鍵字:計(jì)算機(jī)網(wǎng)絡(luò) 協(xié)議分析 端口 數(shù)據(jù)庫(kù)
中圖分類字:TP319 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2012)12(a)-00-03
當(dāng)前政府、銀行、企業(yè)等機(jī)構(gòu)紛紛連接到互聯(lián)網(wǎng)中,越來(lái)越多的核心業(yè)務(wù)在互聯(lián)網(wǎng)上完成。網(wǎng)絡(luò)為人們提供了極大的便利,已經(jīng)逐漸成為很多用戶完成相關(guān)業(yè)務(wù)的非常重要的、不可或缺的手段。然而,網(wǎng)絡(luò)的不斷普及也帶來(lái)了其安全問(wèn)題。各種各樣的后門、代碼攻擊、蠕蟲等無(wú)時(shí)無(wú)刻不在對(duì)用戶的網(wǎng)絡(luò)進(jìn)行著攻擊,造成網(wǎng)絡(luò)用戶的服務(wù)被拒絕、企業(yè)或個(gè)人機(jī)密信息被竊取等等一系列損失。因此對(duì)網(wǎng)絡(luò)的監(jiān)測(cè)和管理成為一個(gè)急需解決的問(wèn)題。
應(yīng)用層會(huì)話分析是網(wǎng)絡(luò)狀態(tài)監(jiān)測(cè)和管理的一個(gè)重要組成部分。應(yīng)用層會(huì)話分析具有如下的意義。
(1)應(yīng)用層會(huì)話分析的結(jié)果能夠反映網(wǎng)絡(luò)的狀態(tài)。根據(jù)應(yīng)用層會(huì)話的統(tǒng)計(jì)信息,能夠得知傳輸中斷、VoIP語(yǔ)音質(zhì)量及應(yīng)用服務(wù)的響應(yīng)時(shí)間等,從而提供更好的網(wǎng)絡(luò)服務(wù);
(2)應(yīng)用層會(huì)話分析的結(jié)果可以用來(lái)掌握用戶的愛(ài)好和習(xí)慣,進(jìn)而進(jìn)行網(wǎng)絡(luò)的監(jiān)控等管理;
(3)應(yīng)用層會(huì)話分析能夠發(fā)現(xiàn)潛在的安全威脅,比如蠕蟲和網(wǎng)絡(luò)入侵,在沒(méi)有造成更大的危害之前進(jìn)行響應(yīng)。
目前,網(wǎng)絡(luò)的監(jiān)測(cè)和管理有多種方式可以實(shí)現(xiàn),主要分為簡(jiǎn)單網(wǎng)絡(luò)管理SNMP,F(xiàn)LOW和Sniffing。簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)是應(yīng)用最廣泛的網(wǎng)關(guān)協(xié)議。SNMP構(gòu)架中包含若干個(gè)被管理的網(wǎng)絡(luò)接點(diǎn)設(shè)備以及至少一個(gè)管理工作站。工作站通過(guò)輪詢或者中斷的方法從被管理的網(wǎng)絡(luò)設(shè)備中收集數(shù)據(jù)信息。Flow技術(shù)采用集中式的管理,由核心交換機(jī)或路由器提供信息。Sniffer技術(shù)可以截取完整的數(shù)據(jù)包,因此得到的信息最為完整,甚至可以還原和重現(xiàn)原始的網(wǎng)絡(luò)通信內(nèi)容。
該文在Sniffer技術(shù)的基礎(chǔ)上,提出了網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)方法。該方法給出了應(yīng)用層會(huì)話分析的工作流程,以及在應(yīng)用層會(huì)話分析中各種關(guān)鍵問(wèn)題的算法?;谶@些算法,該文實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng),并給出使用該系統(tǒng)在真實(shí)的網(wǎng)絡(luò)中進(jìn)行實(shí)驗(yàn)的結(jié)果和分析。
1 網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)的設(shè)計(jì)
根據(jù)TCP/IP模型,網(wǎng)絡(luò)協(xié)議可以分為鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。為了實(shí)現(xiàn)應(yīng)用層會(huì)話分析,需要程序能夠獲得鏈路層的報(bào)文,并對(duì)鏈路層、網(wǎng)絡(luò)層和傳輸層的協(xié)議進(jìn)行解析,并在此基礎(chǔ)上識(shí)別應(yīng)用層協(xié)議類型并確定會(huì)話的建立和結(jié)束;同時(shí)為了方便用戶查詢,需要建立會(huì)話信息的數(shù)據(jù)庫(kù)表。對(duì)應(yīng)于以上的四個(gè)功能,將網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)設(shè)計(jì)為如下四個(gè)模塊:數(shù)據(jù)包捕獲模塊,基本協(xié)議解碼模塊,應(yīng)用層協(xié)議分析模塊和數(shù)據(jù)庫(kù)管理模塊。下面分別給出這些模塊的設(shè)計(jì):
1.1 數(shù)據(jù)包捕獲模塊
數(shù)據(jù)包捕獲庫(kù)模塊實(shí)現(xiàn)鏈路層數(shù)據(jù)幀獲取,從網(wǎng)卡中直接獲取數(shù)據(jù)鏈路層數(shù)據(jù)包,對(duì)數(shù)據(jù)包進(jìn)行一定的解析,提供一套自己的內(nèi)存管理機(jī)制,并向上層應(yīng)用提供一套接口,使上層應(yīng)用程序可以很簡(jiǎn)便的完成數(shù)據(jù)包獲取。在實(shí)現(xiàn)數(shù)據(jù)包捕獲的時(shí)候,還應(yīng)該考慮到效率的問(wèn)題,盡量減少丟包情況的發(fā)生。
1.2 基本協(xié)議解碼模塊
基本協(xié)議將數(shù)據(jù)包捕獲模塊監(jiān)聽到的數(shù)據(jù)包進(jìn)行協(xié)議解碼,并將標(biāo)志了各個(gè)字段的數(shù)據(jù)包上傳給應(yīng)用層協(xié)議分析模塊。基本協(xié)議解析模塊模擬操作系統(tǒng)中的協(xié)議棧處理過(guò)程,按照鏈路層、網(wǎng)絡(luò)層、傳輸層的順序以此將數(shù)據(jù)包的包頭各字段進(jìn)行標(biāo)記,同時(shí)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)和檢查。
1.3 會(huì)話分析模塊
會(huì)話分析在基本協(xié)議解析的基礎(chǔ)上,以會(huì)話為單位進(jìn)行網(wǎng)絡(luò)流量的分析。該文利用網(wǎng)絡(luò)報(bào)文中的如下字段來(lái)判定它所屬于的會(huì)話:源IP地址、目的IP地址、源端口、目的端口和應(yīng)用層協(xié)議的類型。即同一個(gè)會(huì)話中的數(shù)據(jù)報(bào)文具有的以上字段具有相同
的值。
因此,分析一個(gè)網(wǎng)絡(luò)報(bào)文的應(yīng)用層協(xié)議的類型,是進(jìn)行會(huì)話分析的基礎(chǔ)。應(yīng)用層的協(xié)議種類繁多,在進(jìn)行分析的時(shí)候要針對(duì)不同的協(xié)議采用不同的方法。例如對(duì)于固定端口的協(xié)議,如http協(xié)議等,可以根據(jù)服務(wù)的端口80或8080來(lái)識(shí)別;對(duì)于一些服務(wù)端口需要經(jīng)過(guò)協(xié)商確定的協(xié)議,如bittorrent協(xié)議和skype協(xié)議等,端口匹配的方法不再適用。
這時(shí)需要根據(jù)報(bào)文數(shù)據(jù)的某些特征,例如包含一些特殊的字符串來(lái)進(jìn)行識(shí)別。例如在bittorrent協(xié)議的報(bào)文數(shù)據(jù)中通常包含一個(gè)長(zhǎng)度為19字節(jié)的字符串“bittorrent protocol”。
因此需要適當(dāng)?shù)姆椒▽?duì)可變端口的協(xié)議特征進(jìn)行描述,使用并行模式匹配算法,對(duì)報(bào)文數(shù)據(jù)進(jìn)行匹配。應(yīng)用層協(xié)議分析模塊同時(shí)還要對(duì)每個(gè)會(huì)話中的網(wǎng)絡(luò)報(bào)文數(shù)目和數(shù)據(jù)字節(jié)數(shù)進(jìn)行統(tǒng)計(jì)。
另外,為了避免網(wǎng)絡(luò)會(huì)話數(shù)量的急劇增長(zhǎng),應(yīng)用層協(xié)議分析模塊還要給出判斷會(huì)話結(jié)束的策略。會(huì)話結(jié)束分為兩種情況:正常結(jié)束和非正常結(jié)束。例如,經(jīng)過(guò)TCP協(xié)議的兩次握手,完成會(huì)話就是正常結(jié)束的情況;對(duì)于一段時(shí)間內(nèi)沒(méi)有新數(shù)據(jù)包到來(lái)的會(huì)話,從數(shù)據(jù)庫(kù)中刪除。
1.4 數(shù)據(jù)庫(kù)模塊
數(shù)據(jù)庫(kù)模塊要完成數(shù)據(jù)庫(kù)的連接,以及插入新會(huì)話、更新會(huì)話的信息以及刪除會(huì)話記錄的相應(yīng)操作。
2 網(wǎng)絡(luò)應(yīng)用層會(huì)話分析工具的實(shí)現(xiàn)
基于以上的設(shè)計(jì)思路,該文實(shí)現(xiàn)了一個(gè)網(wǎng)絡(luò)應(yīng)用層會(huì)話分析工具。下面分別介紹各模塊實(shí)現(xiàn)時(shí)的要點(diǎn)。
2.1 數(shù)據(jù)包捕獲模塊的實(shí)現(xiàn)
為了捕捉到鏈路層上的所有通信,該文將監(jiān)控主機(jī)上的網(wǎng)卡設(shè)置為混雜模式。在非交換式網(wǎng)絡(luò)中,這將是整個(gè)網(wǎng)絡(luò)的通信。對(duì)于交換式網(wǎng)絡(luò),需要在交換機(jī)上設(shè)定端口鏡像,使監(jiān)控主機(jī)可以截取到廣播之外的網(wǎng)絡(luò)包??紤]到效率問(wèn)題,該文中使用MMAPed pcap完成數(shù)據(jù)包捕獲工作。MMAPed pcap中使用一個(gè)環(huán)狀的緩沖內(nèi)存管理機(jī)制,減少了內(nèi)存拷貝的次數(shù),防止在突發(fā)大流量數(shù)據(jù)時(shí)丟包情況的發(fā)生。
2.2 基本協(xié)議解析模塊的實(shí)現(xiàn)
基本協(xié)議解析模塊的工作分成以下三個(gè)步驟。
(1)根據(jù)pcap_datalink函數(shù)的返回值,得到鏈路層協(xié)議的類型,例如以太網(wǎng)或點(diǎn)到點(diǎn)網(wǎng)絡(luò);然后根據(jù)各鏈路層協(xié)議的格式,標(biāo)識(shí)出其中每個(gè)字段的范圍;并根據(jù)nProtocolType值,得到網(wǎng)絡(luò)層協(xié)議的類型,例如IP協(xié)議,將報(bào)文傳遞給網(wǎng)絡(luò)層協(xié)議分析函數(shù);
(2)根據(jù)網(wǎng)絡(luò)層協(xié)議的包頭結(jié)構(gòu),標(biāo)志出網(wǎng)絡(luò)層協(xié)議的各個(gè)字段;根據(jù)報(bào)文頭部的nIpProto值,得到傳輸層協(xié)議的類型,并傳遞給傳輸層協(xié)議分析函數(shù);
(3)根據(jù)傳輸層各協(xié)議的包頭結(jié)構(gòu),標(biāo)志出傳輸層協(xié)議的各個(gè)字段,將數(shù)據(jù)報(bào)文傳遞給應(yīng)用層會(huì)話分析模塊。
圖1 網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)的工作框架
2.3 會(huì)話分析模塊的實(shí)現(xiàn)
程序初始化時(shí),將應(yīng)用層協(xié)議的正則表達(dá)式從文件中讀入,每個(gè)正則表達(dá)式要進(jìn)行編譯和預(yù)處理,以便能夠進(jìn)行匹配。
圖2中給出了應(yīng)用層會(huì)話分析模塊的工作流程。對(duì)于每個(gè)到來(lái)的數(shù)據(jù)包,檢查是否是新的會(huì)話;如果是新建的會(huì)話,則新建一個(gè)會(huì)話,填寫它的修改時(shí)間為當(dāng)前時(shí)間,數(shù)據(jù)包個(gè)數(shù)為1,字節(jié)數(shù)為該數(shù)據(jù)包的字節(jié)個(gè)數(shù);否則更新會(huì)話的修改時(shí)間為當(dāng)前時(shí)間,數(shù)據(jù)包個(gè)數(shù)加1,字節(jié)數(shù)增加該數(shù)據(jù)包的字節(jié)個(gè)數(shù)。如果已經(jīng)識(shí)別該會(huì)話的協(xié)議,則處理下一個(gè)數(shù)據(jù)包;否則,若該會(huì)話的數(shù)據(jù)包個(gè)數(shù)已經(jīng)超過(guò)8,則認(rèn)為該會(huì)話使用了未知的協(xié)議,將協(xié)議字段填寫為“unknown”。對(duì)于數(shù)據(jù)包個(gè)數(shù)沒(méi)有超過(guò)8的協(xié)議,首先判斷端口是否為已知服務(wù),若為已知服務(wù)則填寫協(xié)議。若不為已知服務(wù),則對(duì)報(bào)文數(shù)據(jù)部分進(jìn)行正則匹配,匹配成功則填寫協(xié)議字段。
對(duì)于會(huì)話結(jié)束該文采用如下判斷方法:對(duì)于連接的雙方A和B,當(dāng)A向B發(fā)送了一個(gè)FIN包,B回復(fù)一個(gè)ACK包,之后B向A發(fā)送一個(gè)FIN包,A回復(fù)一個(gè)ACK包,即經(jīng)過(guò)了兩次握手則認(rèn)為TCP連接正常結(jié)束。該文為每個(gè)會(huì)話增加了如下四個(gè)數(shù)據(jù)項(xiàng):srcFIN,dstACK,dstFIN,srcACK來(lái)分別表示兩次握手時(shí)的數(shù)據(jù)包,它們的初始值為FALSE,當(dāng)該會(huì)話接收到相應(yīng)的數(shù)據(jù)包時(shí),將對(duì)應(yīng)的數(shù)據(jù)項(xiàng)值更改為TRUE。當(dāng)一個(gè)會(huì)話的(srcFIN&&dstACK&&dstFIN&&srcACK==TRUE)成立時(shí),則認(rèn)為該會(huì)話正常結(jié)束。在一段時(shí)間內(nèi)沒(méi)有新數(shù)據(jù)包到來(lái)則認(rèn)為該會(huì)話非正常結(jié)束,在目前的系統(tǒng)中超時(shí)設(shè)置為300 s。
2.4 數(shù)據(jù)庫(kù)模塊的實(shí)現(xiàn)
數(shù)據(jù)庫(kù)模塊首先連接數(shù)據(jù)庫(kù),然后根據(jù)應(yīng)用層會(huì)話分析模塊的請(qǐng)求,對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。比如,根據(jù)應(yīng)用層會(huì)話分析模塊的新建會(huì)話請(qǐng)求,將新建會(huì)話的信息轉(zhuǎn)化為正確的mysql語(yǔ)句,在數(shù)據(jù)表中插入新的表項(xiàng)。為了提高系統(tǒng)的可擴(kuò)展性,數(shù)據(jù)庫(kù)模塊以插件實(shí)現(xiàn)。
圖2 會(huì)話分析模塊的工作流程
3 實(shí)驗(yàn)和討論
見(jiàn)表1。
基于以上方法,該文實(shí)現(xiàn)了一個(gè)應(yīng)用層會(huì)話分析系統(tǒng)。該系統(tǒng)使用C語(yǔ)言實(shí)現(xiàn),在Ubuntu 10.10版本下運(yùn)行,網(wǎng)絡(luò)環(huán)境為包含兩臺(tái)主機(jī)的小型局域網(wǎng),控制主機(jī)配置為Inter Celeron CPU 1.8 GHZ,2.0G RAM。系統(tǒng)運(yùn)行10 min之后,統(tǒng)計(jì)得到了159個(gè)會(huì)話,其中ID是系統(tǒng)為每個(gè)會(huì)話分配的,作為主鍵;srcIP,dstIP,srcPort和dstPort分別表示源IP,目的IP,源端口和目的端口,Protocol表示應(yīng)用層協(xié)議,count表示該會(huì)話中的報(bào)文個(gè)數(shù),datas表示該會(huì)話中的數(shù)據(jù)字節(jié)數(shù),firstTime是當(dāng)接收到第一個(gè)數(shù)據(jù)包時(shí)調(diào)用gettimeofday得到的當(dāng)前時(shí)間。由于會(huì)話過(guò)多,省略一些相似的會(huì)話,給出部分實(shí)驗(yàn)結(jié)果。
以上數(shù)據(jù)表明,該文的方法可以捕獲局域網(wǎng)內(nèi)部的全部數(shù)據(jù)包,并且以應(yīng)用層會(huì)話為單位,進(jìn)行數(shù)據(jù)包的統(tǒng)計(jì)和分析。
4 結(jié)語(yǔ)
應(yīng)用層協(xié)議種類繁多,不同的應(yīng)用層協(xié)議數(shù)據(jù)具有不同的格式,很難找到一種通用的模式來(lái)適用于各種應(yīng)用協(xié)議的分析。該文提出了一種對(duì)網(wǎng)絡(luò)應(yīng)用層會(huì)話分析系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)的方法,針對(duì)應(yīng)用層會(huì)話分析中的一些關(guān)鍵問(wèn)題給出了解決辦法。通過(guò)在真實(shí)網(wǎng)絡(luò)中的實(shí)驗(yàn),證明該文的方法能夠有效地在對(duì)局域網(wǎng)內(nèi)的會(huì)話進(jìn)行識(shí)別和統(tǒng)計(jì)。在應(yīng)用層會(huì)話分析的基礎(chǔ)上,可以進(jìn)一步進(jìn)行網(wǎng)絡(luò)的故障管理、性能管理和安全管理等。
參考文獻(xiàn)
[1] 謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008.
[2] 矯健.基于WinPcap網(wǎng)絡(luò)數(shù)據(jù)包捕獲程序的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2008:163-165.
[3] 平震宇.Libpcap數(shù)據(jù)包捕獲機(jī)制剖析與研究[J].信息網(wǎng)絡(luò)安全,2008(8):37-39.
[4] 謝柏林,余順爭(zhēng).基于應(yīng)用層協(xié)議分析的應(yīng)用層實(shí)時(shí)主動(dòng)防御系統(tǒng)[J].計(jì)算機(jī)學(xué)報(bào),2011,34(3):452-463.
[5] 牟喬.準(zhǔn)確高效的應(yīng)用層協(xié)議分析識(shí)別方法[J].計(jì)算機(jī)工程與科學(xué),2010(8):39-45.