崔弘,蔣言,郭士串,汪洋
(烽火通信科技股份有限公司,江蘇南京 210019)
隨著大數據時代的到來,在計算機網絡方向的工程應用中,很多時候都需要對流量所屬應用類型進行識別,軟件流量識別分類是網絡管理、網絡安全和流量工程等網絡研究和應用的重要組成部分,也是解決網絡擁塞、安全監管、網絡異常檢測等研究的基礎。
在互聯網流量識別的歷史中,經歷了3個階段:第一個階段是通過端口來識別,但是后來由于動態端口和偽裝端口等技術的出現導致這個方法不再適用;第二個階段是采用深度包檢測技術,基于應用層的流量檢測和控制技術,當IP數據包、TCP或UDP數據流通過時,DPI系統通過深入讀取IP包載荷的內容來對協議中的應用層信息進行分析讀取,進而識別各類型應用[1,2];第三個階段是通過機器學習的方法識別流量,通過統計一系列流量數據的外在特性來形成特征,例如流的持續時間和分組的數目等外在特征,然后采用機器學習的方法訓練模型進行流量識別[3]。本文采用第二類和第三類相結合的方式,考慮到數據外在特征的抽取具有一定的迷惑性,同時在進行純凈數據提取時會損失大量的外在特性,所以本文首先對即時通訊軟件流數據提取報文載荷,利用信息熵對獲得特征進行離散化處理,結合離散載荷特征與XGBoost的方法進行流量數據量化與分類訓練,該方法具有數據處理效率高、適應性強、流量分類精度高等優點。
本文所使用的數據來源于多個手機端即時通訊軟件聊天流量數據,其中包括圖片、語音、文字等不同形式數據。分別對每種類別通訊軟件利用Wireshark抓取對應軟件的聊天流量數據報文,由于在Wireshark抓取過程中無法避免噪音流量的數據的干擾,需要對抓取的每類報文數據進行提純。
為了能充分利用報文中所有信息,又能準確提取有價值數據降低數據維度,此次提純的方式采用五元組(源IP地址、源端口、目的IP地址、目的端口、傳輸層協議)識別的方式進行,首先采用五元組對各流量數據進行聚類,然后對于聚類后的數據,剔除數據鏈路層、網絡層、傳輸層數據維度,提取傳輸層有效凈載荷構建識別模型[4~6]。通過這種方式獲取到的報文基本只屬于對應的通訊軟件,由此獲得純凈的輸入數據。報文的示意圖如圖1所示。

圖1 報文示意圖
對每條報文去除五元組頭部信息,只保留數據部分,為了防止心跳報文等空報文的影響,同時避免數據字段后續部分無用信息的影響,只保留每條報文前50個字節長度的數據,同時舍去小于9個字節的報文數據,對于大于9個字節不足50個字節的數據設置缺失值為0。同時以每條報文中每個字節為一個特征維度,將每個十六進制數轉換為十進制數,對于每一條報文數據,這樣可以得到一個特征維度為50的輸入向量,每個特征均為正整數數值類型。為避免類別數量不均衡帶來不良影響,設置獲取的每種類別報文均為10,000條。數據準備過程示意圖如圖2所示。

圖2 數據準備過程示意圖
對所有的原始報文流數據,依據五元組特征對五元組進行聚類,通過報文提純的方式對各五元組提取其中的有效載荷,具體聚類流程如圖3所示。

圖3 五元組聚類示意圖
謝宏和程浩忠等[7~9]人提出當訓練數據的數量通常不足以使用連續特征來獲得準確的模型時,使用離散特征而不是連續特征的算法的分類誤差較低。由于網絡流量中的IP地址、協議和端口等屬性在分布特征上表現出較強的自相似性和重尾特性,各個屬性在分布特征上存在明顯的差異[10]。因此將信息熵應用于載荷特征離散化,用熵值量化網絡流量載荷的不同屬性。特征離散化就是在特定屬性的取值范圍內設定若干個劃分點(即斷點),將該屬性的值域范圍劃分成一些子區間(離散化區間),每個子區間用一個符號或整數值代替[11]。本文采用信息熵方法對提取的五元組連續載荷特征進行離散化,分別計算每條報文流在這些有效載荷上的熵值。
(1)信息熵離散化原理

上式中、為可調參數,可用于控制屬性X的離散區間數k。本文取,則準則函數簡化為:。
豬偽狂犬病毒,除感染豬外,還可以感染多種家畜和野生動物,是一種急性傳染性疾病。豬偽狂犬病發病沒有季節性限制,春夏秋冬四季均可發生,但以冬春季節氣溫寒冷、外界應激因素多變造成的發病率和死亡率最高。患病豬和帶毒豬可以通過體內分泌物、流產物、尿液、乳汁排毒,健康豬接觸這些污染物質后,感染該種病毒的幾率極大增加。近年,隨著豬養殖產業不斷向集約化和規模化方向發展,豬偽狂犬病已經成為嚴重損害豬養殖產業健康發展的主要病毒性疾病。因此,做好該種疾病的防控,具有重大現實意義。
(2)信息熵方法離散化算法
基于Shannon熵的準則函數,通訊流量的特征離散化算法步驟為:
步驟一:對報文載荷區間進行初始化。依次掃描各個報文,使單個取值的樣本成為一個區間,記錄每個區間的相關信息;
步驟二:對于單個報文,掃描所有載荷區間,按區間內樣本值的大小對區間進行遞增排序;
步驟三:對排序后的區間進行掃描,如果兩個相鄰區間內樣本的分類情況對應相同,將這兩個區間合并。每合并一次,區間數減1,合并結束后得到k個區間;

由于該算法只針對單個載荷特征,而實際報文中往往有多個載荷特征,因此需要按照以上步驟,對多個載荷特征分別使用該算法進行離散化計算熵值。
APP識別模型,本質上是一個多分類的問題。對于多分類問題,通常有兩種實現模式,一是直接進行多種類別編碼,二是劃分為多個二分類問題。前者一次訓練,耗時小、預測快,但不易于增量擴展;后者需要構建多個識別模型,訓練耗時、預測總時間也長,但易于增量擴展。本項目采用第二種方法,即針對N個APP中的每個APP,分別訓練N個二分類模型;測試時,對于任意一條(或一批)報文,同時丟入N個二分類模型,最后取N個模型得分最高者作為輸出。多二分類器的流量識別模型如圖4所示。

圖4 多二分類器的流量識別模型
對通訊軟件各批報文數據分別提取五元組中有效載荷的基礎上,通過Shannon熵方法對各個有效載荷劃分為離散化區間,并對離散區間計算有效載荷熵值。采用構建好的APP分類器分別對每個五元組的每個報文的五元組載荷特征熵值進行識別,再對每個五元組的識別結果,依據得分高低進行競選投票,最后輸出該五元組的流量歸屬類別,模型構建流程示意圖如圖5所示。

圖5 模型構建示意圖
本實驗針對目前市面上常見的10種手機即時通訊軟件(QQ、微信、Whatsapp、陌陌、COCO、易信、YY、阿里旺旺、微會、米聊),分別利用Wireshark抓取對應軟件的聊天流量數據報文。由于在抓取過程中無法避免噪音流量的數據的干擾,對每類報文數據進行提純,通過報文提純的方式對各五元組提取其中的有效載荷,獲得每種類別的五元組連續數據10,000條。為了描述載荷分布特征差異,提高分類準確率,對五元組加載荷連續特征離散化后,每種類別五元組報文數據均為10,000條,數據總量為100,000條。
對于每種通訊軟件,設置訓練數據:測試數據=0.7:0.3,因為訓練模型為二分類模型,故針對每種訓練模型,設置對應訓練類別為正例,其余9種數據混合為反例,反例中保持9種數據數量相等,且正例數據量與反例數據量相等。針對每個分類模型的訓練數據量和測試數據量為7,000條和3,000條,其中訓練數據中3,500條為正例,3,500條為反例,測試數據中1,500條為正例,1,500條為反例。
實驗采用機器學習模型廣泛使用的框架Scikit-learn,具體軟硬件環境如表1所示。

表1 實驗軟硬件環境
XGBoost采用樹模型,Silent采用默認值打印運行時輸出信息,有助于模型的調參,Nthread為XGBoost運行時的線程數,基于實驗室設備,在保證運行速度情況下設置為4;學習率eta是在更新過程中用到的收縮步長,決定著學習速度的快慢,一般設置為0.01到0.2之間,本次實驗設置為0.02。Gamma默認值為0,max_depth表示樹的最大深度,其設置得當可以防止過擬合,本次實驗設置值為8。由于本次實驗選取的數據類別平衡性良好,故max_delta_step、scale_pos_weight等參數使用默認值即可,對于學習任務和學習目標中的目標函數選定為multi:softprob,輸出為類別數*訓練數據量大小的矩陣,每行數據表示每個樣本屬于各個類別的概率。選取最大的概率對應的類別作為分類器對輸入數據預測的類別。經過調整最終設置循環迭代次數為30次。
分別采用離散載荷特征與連續載荷特征構建XGBoost分類模型,以測試模型的準確率與召回率作為比較依據。測試性能結果如表2所示,由于離散載荷考慮了流量數據的分布特征,量化了流量載荷的不同屬性,所以采用離散化流量分類器比連續流量特征分類更有效。
分別與隨機森林、SVM以及樸素貝葉斯進行對比。在相同數據的情況下其他分類算法的測試性能結果如圖6所示,可以看出XGBoost在識別手機即時通訊應用具有較高的準確率和召回率,同時其比隨機森林、SVM和樸素貝葉斯算法在大部分應用流量識別情景中的應用性能要高。

表2 XGBoost測試性能結果

圖6 RF、SVM、MNB測試性能結果
本文提出一種基于離散載荷特征的即時通訊軟件流量分類技術,一是基于信息熵對流量特征進行離散化,了解流量特征分布情況以便進行流量分類,二是采用了具有自學習、自適應功能的XGBoost算法提高了流量識別的準確率和識別速率。實驗結果表明,本方法對即時通訊軟件流量分類的準確率高達92.6%,較傳統流量分類方法準確率提高4.3%,與采用連續特征分類相比分類準確率提高2.3%。綜上所述基于離散載荷特征的即時通訊軟件流量分類技術這項研究對市場手機通訊軟件的使用分布,以及通訊軟件的逆向追蹤都有著極其重要的現實意義。