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