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