蒙治伸,張振威,朱思義,谷源濤
(1. 清華大學電子工程系,北京 100084;2. 盲信號處理重點實驗室,四川 成都 610000)
針對網絡流量的分析是目前網絡研究的重要領域之一,不僅可以得到目標網絡的基本通信信息,找出其通信規律,還可以加工分析其獲取到的基本信息,來進行網絡管理、網絡度量以及網絡安全相關領域的工作和研究。在現如今網絡發達,網絡管理較為困難的情況下,網絡流量分析具有很重要的現實意義。
網絡流量分析的定義是通過使用統計信息或其它復雜方法發現網絡流量數據中有用信息的過程,該過程普遍包括捕獲、收集和存儲網絡流量數據,匯總數據以進行查詢和分析,以及分析數據以挖掘有用的信息[1]。
根據網絡流量分析的不同層次,當前針對網絡流量的研究分為三大類:網絡流層次、單一主機層次和主機群層次。大部分先前的研究關注網絡流量層次,將主機通信信息按照網絡流進行聚合整理,提取特征再進行分析。Trestian等人利用谷歌搜索引擎,通過互聯網獲得的信息,研究了一種網絡流量分類技術[2];文獻[3]提出了一種基于相似網絡流量特征,將網絡數據包頭數據加入聚類算法中的方法;文獻[4]提出通過處理網絡數據包,將網絡流按照不同特征劃分的方法,也在分類上取得了不錯的效果。另外,還有很多研究關注的層次為單一主機層次,即網絡單個主機的行為特征[5,6],或是根據單個主機的流量特征分析主機的角色[7,8]。在文獻[6]中,作者為了對網絡流量進行分類,在社交、功能和業務三個層次研究主機的行為。文獻[5]則利用流量通信關系對主機的行為進行畫像。文獻[7]設計了兩個算法通過主機之間的通聯關系,來對企業網絡內主機的角色進行劃分。文獻[8]根據一個大型企業網絡數據,來研究主機通信的社團(Communities of Interest)。但是上述的研究都存在一定的問題,由于網絡流量特征在不同網絡中不盡相同,這些方法往往會遇到性能或結果不穩定等問題。且大多數研究只是基于比較底層的網絡流層次和單一主機層次,鮮有研究關注更高的主機群的層面,難以獲得更高層面的普遍性規律。
針對上述情況,本文提出了一種基于網絡流量特征分析的主機群分析研究方法,從更高的主機群層次來對網絡和主機進行分析和研究。利用采集到的網絡流量PCAP數據包,進行包頭分析提取出其五元組信息組成網絡流,之后進行統計分析提取得到其基礎通信信息和隱含信息。之后依照本文中重新定義的四個層次的主機行為特征,在一定時間段內給主機進行畫像,對主機的一系列行為特征屬性進行抽象性描述。最后,通過主機畫像來計算主機之間的距離,判斷主機之間的相似性程度,在此基礎上使用聚類算法對主機群進行劃分,得到一些彼此相似的主機集群,從而挖掘出進一步的主機行為模式。
為了實現上述目的,本文設計了一套完整的主機群分析研究系統,包括了最初的數據采集到主機畫像再到最后的主機群分析的部分。系統的整體框架如圖1所示。

圖1 系統整體框架圖
由上圖可以看出,系統主要由網絡流元數據和主機活動提取模塊、網絡流元數據存儲數據庫、主機畫像構建模塊和主機聚類分析模塊四個模塊組成。其主要流程可以分為三個部分,分別是網絡流量采集部分、主機畫像構建部分和主機聚類分析部分。以下將會對這三個部分進行詳細敘述。
該部分的主要功能是將網絡流量數據獲取的PCAP數據包進行讀取和輸入,便于后續在其它子模塊進行處理,是一個比較簡單的部分,該部分只需要將提前采集好的PCAP格式數據包輸入分析系統中即可,支持單個或多個PCAP文件的讀取。
收集網絡流量數據有多種方法,如:SNMP、NetFlow、原始PCAP數據包等。大部分國內外研究都采用首先采集原始網絡PCAP數據包,再利用開源或商業的網絡流分析軟件對原始數據進行處理得到網絡流的統計信息,之后再進行進一步的分析處理。本文也采取此方法來獲取相關數據,所以設計了此部分用以便捷的讀取采集到的PCAP數據包。
該部分是整個系統最為復雜也是最為重要的部分,同時對于魯棒性和處理速度也有較高的要求。該部分又可以細分為三個子模塊,分別為網絡流元數據和主機活動提取模塊、網絡流元數據存儲數據庫和主機畫像構建模塊。該部分的主要目的就是利用采集到的PCAP數據包,提取其五元組信息(源IP,目的IP,源端口,目的端口,傳輸層協議)并構成網絡流,對網絡流進行深度包檢測(DPI),獲取其基本通信信息,并對其主機操作系統等隱含信息進行推測和分析,最后將信息進行整合,構建主機畫像。該部分是主機群分析的基礎部分,需要保證數據處理的可靠性、準確性和快速性。下面將會對這三個模塊進行詳細說明。
2.2.1 網絡流元數據和主機活動提取模塊
該模塊的主要功能是提取輸入數據包中的網絡流元數據和主機關鍵活動,并推測主機的相關隱含信息,并進行統計,便于后續的存儲和使用。先將傳入的PCAP數據包進行數據包包頭解析,得出其通信基本信息,之后利用解析得到的五元組信息(源IP,目的IP,源端口,目的端口,傳輸層協議)來構建網絡流,此后的提取統計工作都在上述被標識的網絡流的基礎上進行。之后提取網絡流中的元數據信息和主機關鍵活動信息。提取過程就是檢測PCAP的數據包,一層層解析其包內每一幀數據,將有用的信息提取出來。為了提升此過程處理和運算的速度,本系統采用了管道模型(Pipeline)設計模式搭建,其原理圖如圖2所示。

圖2 網絡流元數據提取模塊
此模塊將整體功能拆分成若干個子階段,每個子階段都采用獨立的管道來處理,隨后將各個管道拼接來實現整個流程。這樣的設計方案靈活高效,不僅可以將各個管道靈活組裝來應對不同的場景,還可以做到并行利用資源、提高計算效率,每個管道專門處理得到相應的處理結果,便于存儲和有效利用關鍵信息。在處理的過程中,每一個管道都不用處理完整的PCAP數據包,而是只需要處理一部分數據,即每個管道只需要專門處理自己需要的部分數據,可以達到快速處理數據的目的。
此模塊還提取了主機的其它隱含信息——主機的操作系統。該部分主要是利用前面提取到的一些關鍵信息和特殊字段以及PCAP數據包中的一些特殊數據,來對目標主機的操作系統進行推斷。現階段主要有兩種方法來對目標主機的操作系統進行判斷,分別是主動掃描和被動檢測兩種方法。主動掃描即主動在目標通信網絡上獲取各種數據包來分析,向目標主機直接發送數據包,根據其響應的不同和特殊字段來進行判斷。這種方法的主要優點是準確性高,效果可靠,但是其致命缺點是容易被人追蹤,占用大量的帶寬資源,同時會在網絡中加入流量,無法離線使用。而被動掃描和主動掃描相反。被動掃描是被動的去收聽目標網絡中被廣播出的信息,從被傳輸的數據包中來推斷目標的操作系統。該方法本質上是完全安靜的,沒有被發現的風險,但是其準確性就會受到影響[9]。由于本研究需離線使用,且本研究主要處理的數據都是經過采集的PCAP網絡數據包,而非線上主動偵聽,故本系統采用被動掃描的方式來對目標主機的操作系統進行推測。本系統采取HTTP UserAgent和被動指紋識別相結合的方法來對目標主機的操作系統進行推測,前者使用HTTP協議連接過程中明文傳輸的UserAgent字段進行判斷,優點是可以直接簡單明了知道目標操作系統等信息,一旦目標主機沒有修改該字段,準確率為100%,缺點就是該字段信息容易被修改,且只能判斷網絡中客戶端主機的信息。后者則是利用不同操作系統在傳輸TCP SYN和SYN+ACK數據包過程中一些特殊字段和一些特殊標志符組成的指紋來進行對比識別。其優點是可以識別通信雙方的操作系統,缺點則是依賴指紋庫,且準確性有待提升。所以本系統將二者融合,兩者結果可以相互印證,達到更準確的識別和推測。
2.2.2 網絡流元數據存儲數據庫模塊
該模塊內容較為簡單,主要功能就是將上一個模塊得到的元數據信息和一些推測統計信息存儲到數據庫內部,便于讀取和使用。此模塊采用基于分布式文件存儲的MongoDB數據庫來進行存儲,其所有信息都采用類似于JSON的BSON格式進行存儲,該存儲相比于傳統的關系型數據庫具有對象清晰、使用方便、輕量級、易擴展等優點,便于后續的處理工作。
2.2.3 主機畫像構建模塊
該模塊的主要作用構建主機畫像,對主機行為進行抽象化描述。該模塊通過從上一模塊的數據庫中讀取元信息,然后從網絡流中按照主機畫像的定義規則篩選出頻繁出現的主機,并通過網絡流信息為這些主機構建主機畫像。本系統中重新定義了主機行為特征的四個層次:連接層次、功能層次、流量層次和應用層次,并使用這四個層次的一些行為特征對主機進行畫像,這四個層次的特征如下:
1)連接層次:包含主機通信的目的IP的信息,即該主機與哪些其它主機進行交流。該層次僅需要網絡流中的源IP和目的IP信息,提取的主機屬性為:目的IP個數、目的IP第二與第四字節熵的比值、目的IP第三與第四字節熵之比等。
2)功能層次:包含主機的目的IP聯合主機的開放端口信息,反映主機在網絡中的作用(如服務器還是個人PC等)。該層次提取的主機屬性為主機源端口個數,主機目的端口個數,系統端口、用戶端口和動態端口。
3)流量層次:包含主機流量的詳細統計信息,反映主機的流量特征。包括網絡流平均包個數、平均流量大小、平均包大小、平均持續時間等,另外還包含TCP連接一些字段的信息,如流平均ACK個數、流平均PSH個數等。
4)應用層次:包含主機流量類型信息,反映主機業務類型的分布。該層次需要對網絡數據進行深度包檢測(DPI),從而得到每個網絡流所承載的協議。針對流量應用進行分析,可以準確地定位主機的角色。流量應用類型也是主機行為的一部分,對于服務器而言可以反映服務類型,對于客戶端而言可以揭示用戶的訪問習慣。
在構建主機畫像過程中,本系統認為TCP連接是有向的,對于一個主機來說,只有由這個主機建立的TCP連接才被計算進這個主機的特征;而其它主機向這個主機建立的TCP連接則不算入該主機的特征。對于UDP流量而言,本系統認為UDP連接是雙向的,UDP連接會被算入連接雙方主機的特征中。主機畫像的時間間隔按照網絡數據包的數據大小和詳細程度可以人為確定,且主機連接次數和網絡流量均大于一定閾值才被用于主機畫像。
該部分是整個系統的最后一部分,主要功能是通過前一模塊得到的主機畫像,來計算主機之間的距離,在此基礎之上使用聚類算法來對主機群進行劃分,從而進一步挖掘主機的行為模式,找到更高層次的普遍性的規律,進行進一步的分析工作。
主機聚類是利用主機的特征畫像計算主機間的相似性,然后將相似的一些主機組成不同的類別,得到一些彼此相似的主機群,最后再進行分析處理工作。對主機進行聚類來分析網絡數據可以用來挖掘網絡主機更深層次的行為模型,定位主機角色。還可以幫助監控網絡情況,檢測網絡異常行為。并且可以減少監控網絡、挖掘信息所需要的計算資源,提升分析方法的可擴展性。
為了更好的反映主機之間的關系,在對主機聚類前,對主機畫像中的數值特征進行歸一化和降維處理,先將所有特征數值都在范圍[0,1]之間。在特征歸一化之后對所有的特征進行降維,本系統采用PCA(主成分分析)特征降維方法。之后進行主機相似性度量,對于集合類型的特征采用Jaccard距離,并通過一定系數加權相加得到最終主機間的距離
D(xi,xj)=α1×dEuclidean(xi,Num,xj,Num)
+α2×djaccrard(xi,port,xj,port)
(1)
其中Jaccard距離公式如下

(2)
本系統采用聚合層次聚類(Hierarchical Clustering)的方法來對網絡主機進行聚類,通過將數據組織成若干組并形成一個相應的樹狀圖來進行聚類。將每個主機均認為是簇,簇與簇之間按照簇間相似度來逐漸進行組合,直到滿足某個終結條件(達到預先給定的簇數目或兩個簇組合之后得到的簇內分散度大于給定閾值)或者所有主機均在一個簇中。采用基于Single-Link的聚類方法,根據兩個聚類中間隔最近的兩個點之間的距離來評價這兩個類之間的相似程度。這樣即可以得到一系列的主機群。
本實驗利用網絡公開數據集:The UNSW-NB15 Dataset來進行實驗驗證上述結果。
本實驗共采用兩種不同的語言來進行各個部分內容的實現。第一部分主要語言為Java,實現的功能模塊為網絡流量采集部分和主機畫像構建部分的前兩個模塊,即將所有分析結果寫入數據庫前面的所有模塊均用Java實現,后續的用戶畫像和主機聚類分析模塊則使用Python實現。各個模塊各司其職,便于利用各個語言的優勢,提升處理速率。
本實驗使用pipeline模型,使得實驗處理速率很快,可以達到10MB/s以上,可以高速的處理數據量很大的pcap數據包,很好地體現了管道模型的優越性。

圖3 管道模型處理速率
本實驗在主機聚類方面采用了一種改進算法,使用存儲到數據庫中的關鍵特征來進行聚類分析。這里還用了兩個其它的算法PCH(Profiling and Clustering Internet Host)和BCH(Unsupervised Host Behavior Classification from connection patterns)來作為對照算法,來檢驗聚類的可靠性問題。下圖是三種算法的結果圖。

圖4 PCH聚類結果

圖5 BCH聚類結果

圖6 論文所提方法聚類結果
從上圖的結果可以看出,本文所采用的聚類方法可以得到比前兩種方法更好且更加準確地分類結果。
在PCH算法中,該算法使用公共數據包中的包頭數據來選擇相關的特征對互聯網主機進行畫像,并在主機畫像的基礎上使用分層聚類技術構建包含所有主機的樹狀圖。左圖顯示的是相似矩陣的熱度圖,右圖則以樹狀圖的形式顯示層次聚類的結果。該聚類算法只得出了兩個主機群(紅色部分和綠色部分),有一些孤立的主機和連接數據較少的主機則被忽略,這是由于該算法在預處理的時候省略了一些IP所導致的。此算法可以得到一個大致的結果,但是沒有很準確的給出所有主機群的情況,并不是完整的分類,具有很明顯的缺點。
在BCH算法中,該算法使用簡單的譜聚類算法來發現網絡主機之間的行為相似性以及主機行為類別。左圖顯示的是該數據集各個主機群聚類的結果,右圖則是顯示該數據集的投影圖加權鄰接矩陣。可以看到該數據集的主機群有兩個大類,還有一些小類和很多孤立的單個主機。該算法比PCH得到了更多的主機類別,還指出了一些孤立的主機。該算法得到的結果更加準確一些,但是一些單點的分類還存在一定的問題,一些單點被錯誤合并,而一些單點則被錯誤分開,對于一些小類別該算法的分類結果就不理想,幾乎都是變成了單點或者進行了合并。該算法每一次運算后一些單點的分類都不相同。且一些幾乎不活躍的IP地址也被此算法忽略,會遺失一部分小流量IP的數據。
在本文所使用的改進算法中,將類別進行了一個很好的劃分,更加清楚的看到不同的類別。可以看到此算法也得到了兩類大的主機群(分別為綠色和紫色),還有一些兩個主機構成的小型的主機群,還有很多的單點,可以看到大致結果和上述兩種算法得出的結果一致。此算法明確顯示出了一些小型的主機群以及它們之間的距離,對于一些單點的分類結果也要好于上述算法,更加明確且直觀的給出了該數據集各個主機之間行為的相似性和分布特征。該算法還可以調整閾值來控制主機聚類的細致結果,便于在不同維度和精度要求下宏觀調控主機群行為特征。且該算法涵蓋了數據集中的絕大多數IP,對于一些特殊的不活躍IP也有劃分,得到的結果也更加完整,且本算法幾次的結果都有較好的穩定性。
使用本實驗的上述結果,還可以根據其行為模式和行為特征描述,來進行一些主機群類型和角色的推斷。如下表所示:

表1 主機群角色推測
可以根據主機群活動的群體行為模式,依照主機群畫像特征,來對主機群的角色進行推斷,得到主機的典型行為,便于網絡的監控和管理等。不僅可以在更高層次進行一個分析,得出普遍規律,還可以發現其中一些危險主機群或者異常主機群,在一些特殊領域有著重要的意義。
隨著目前網絡通信的不斷發展,網絡結構不斷的擴大,網絡分析的難度也越來越大。低層次的分析往往無法覆蓋大規模網絡,也滿足不了龐大的網絡需求,所以在更高層次的分析就顯得尤為重要。對主機群進行聚類來分析網絡數據可以挖掘網絡主機更深層次的行為模型,定位主機角色,通過分析主機群的流量特征,可以挖掘出主機的行為模式以及其在網絡中對應的角色。主機群聚類分析還可以幫助監控網絡情況,檢測網絡異常行為。將整個網絡的流量,拆分成一個個主機群的流量,則可以更好的對流量進行人為解讀。另外,通過聚類發現的主機行為特征還可以幫助針對網絡構建合適的ACL規則,在一定程度上可以阻止黑客攻擊和網絡病毒。實驗結果也表明,本文采取的方法能夠很好的獲取更高層次的主機群規律,且穩定性較好,可以從數據包中一步步獲取目標主機群的關系,便于大規模網絡的管理。