王 攀,陳雪嬌
(1.南京郵電大學 現(xiàn)代郵政學院,南京 210003; 2.南京信息職業(yè)技術學院 通信學院,南京 210023)
流量分類與識別是提升網(wǎng)絡管理與安全監(jiān)測水平,改善服務質量的基礎,也是網(wǎng)絡設計與規(guī)劃等網(wǎng)絡行為的前提。隨著用戶隱私保護和安全意識的增強,SSL、SSH、VPN和Tor等技術得到了越來越廣泛的應用,導致加密流量在網(wǎng)絡傳輸中的比重越來越高。
因采用應用層加密,傳統(tǒng)的端口匹配[1]、DPI深度包檢測[2-4]等技術無法準確識別這類加密應用流量,相關研究人員也一直在嘗試通過各種機器學習方法,如SVM、決策樹、樸素貝葉斯等[5-7],圍繞流特征、凈荷特征以及混合特征進行識別和分類。然而這些方法都存在2個問題,一個就是機器學習的特征提取和選擇非常復雜,耗時耗力,且非常依賴特征專家的知識面和經(jīng)驗;另一個就是分類準確率不高。
相比其他機器學習方法,深度學習具有深層結構的特點,而其他淺層結構模型,如最大熵和Softmax回歸、SVM等方法的局限性主要是依賴于有標記的樣本、對復雜函數(shù)難以表示和陷入局部最優(yōu)化,或者泛化能力受到樣本數(shù)據(jù)量的影響較大,如BP算法。深度學習采用訓練多個單層非線性網(wǎng)絡,組合底層特征構成數(shù)據(jù)的抽象表示,從而發(fā)現(xiàn)并且刻畫問題內部復雜的結構特征,故而表達數(shù)據(jù)的本質特征。
鑒于上述深度學習的優(yōu)點,研究人員開始探討深度學習方法在流量識別中的應用。文獻[8]嘗試用深度學習的方法來識別流量,采用堆棧式自動編碼器(Stacked Autoencoder,SAE)來識別協(xié)議及應用,并對未知流量進行識別,達到了較好的準確率,但文中所采用的數(shù)據(jù)集為非公開數(shù)據(jù)集,無法進行驗證對比。文獻[9]提出采用SAE和卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)對加密流量進行識別,但對于數(shù)據(jù)的預處理和模型參數(shù)的選擇等方面論述得不夠清晰。文獻[10]提出一種基于CNN的流量分類算法,分別采用公開數(shù)據(jù)集和實際數(shù)據(jù)集進行測試,并與傳統(tǒng)分類方法相比,提高了流量分類的精度,減少了分類使用的時間,但并未涉及對加密流量的分類識別。文獻[11]提出基于馬爾科夫模型的半監(jiān)督學習分類器進行流量分類。
本文提出一種基于SAE的加密流量識別方法,一方面利用SAE的無監(jiān)督特性及在數(shù)據(jù)降維方面的優(yōu)勢,結合多層感知機(Multi-Layer Perceptron,MLP)的有監(jiān)督分類學習,實現(xiàn)對加密應用流量的準確識別;另一方面考慮到樣本數(shù)據(jù)集的類別不平衡性對分類精度的影響,本文采用SMOTE過抽樣方法對不平衡數(shù)據(jù)集進行處理。
自動編碼器是一種多層神經(jīng)網(wǎng)絡,屬于非監(jiān)督學習,不需要對訓練樣本進行標記,其輸入層和輸出層表示相同的含義——具有的節(jié)點數(shù)。自動編碼器學習的是一個輸入輸出相同的“恒等函數(shù)”,其意義在于中間層,這一層是輸入向量的特征表達。其原理表示如下:
假設輸入一個n維信號x(x∈[0,1]),經(jīng)過輸入層到達中間層,信號變?yōu)閥,可以用下式表示:
y=a(Wx+b)
(1)
其中,a()表示激活函數(shù),如Sigmoid函數(shù)、ReLU函數(shù)等,實現(xiàn)非線性變換,W為權值,b為偏置。信號y經(jīng)過解碼層解碼,輸出到輸出層,輸出層和輸入層一樣有n個神經(jīng)元,假設輸出信號為z,計算公式如下:
z=a(W′y+b′)
(2)
則z為x的預測值,W′、b′同樣分別表示權值與偏置,以區(qū)別于W、b。通過調整網(wǎng)絡參數(shù),使得最終輸出的z與原始輸入的x盡可能相近??赏ㄟ^損失/誤差函數(shù)進行最小化運算得到,損失/誤差函數(shù)可以是均方差(MSE)、交叉熵(Cross Entropy)等。
SAE是深度學習領域常用的一個深度學習模型,由多個自動編碼器堆疊而成,其目的是為了逐層提取輸入數(shù)據(jù)的高階特征,常被稱為逐層貪婪訓練學習過程,在此過程中逐層降低輸入數(shù)據(jù)的維度,將一個復雜的輸入數(shù)據(jù)轉化成了一個系列簡單的高階特征,然后再把這些高階特征輸入一個分類器進行分類[12]。如圖1所示,SAE的訓練過程主要分為以下4步:
1)給定初始輸入Y,采用無監(jiān)督方式訓練第一層自動編碼器V,輸出為Y′,設定輸入Y和輸出Y′的損失函數(shù),或者叫做重構誤差,最小化損失函數(shù)以減少重構誤差達到設定值。
2)把第一個自動編碼器(AE1)隱含層的輸出V作為第二個自動編碼器(AE2)的輸入,采用以上同樣的方法訓練自動編碼器Z。
3)重復第2步直到初始化完成所有自動編碼器。
4)把最后一個SAE的隱含層輸出(如圖1中的Z)作為分類器的輸入,然后采用有監(jiān)督的方法訓練分類器的參數(shù)。
圖1 SAE訓練過程
網(wǎng)絡流量數(shù)據(jù)與圖像既有相同之處,也有不同之處。相同之處在于網(wǎng)絡數(shù)據(jù)包分組中的每一個字節(jié)都是由8 bit構成,取值范圍為0~255,非常類似于黑白圖片中的一個灰度像素,可以借鑒很多圖像識別的深度學習方法;不同之處在于數(shù)據(jù)包分組的長度,即每個數(shù)據(jù)包所包含的字節(jié)數(shù)長短不一,因而無法直接作為深度學習模型的輸入,必須進行數(shù)據(jù)預處理。圖2為樣本數(shù)據(jù)的預處理過程。
圖2 數(shù)據(jù)預處理流程
數(shù)據(jù)預處理流程如下:
步驟1樣本數(shù)據(jù)包文件導入:流量樣本數(shù)據(jù)集有各種形式,比如原始數(shù)據(jù)包、包特征文件等。為獲取流量樣本文件中所存儲的分組信息,一般首先對樣本文件頭部進行讀取,以獲得該樣本文件的概要信息,比如總共有多少分組或有哪些特征項。如果是原始數(shù)據(jù)包形式,還需要進行數(shù)據(jù)包過濾。原因在于樣本數(shù)據(jù)包文件往往不夠純凈,即其中雖包含大量的準確樣本數(shù)據(jù)包,但也包含部分其他數(shù)據(jù)包,比如APR、DHCP等局域網(wǎng)數(shù)據(jù),這些數(shù)據(jù)的濾除對于后期的訓練和測試都是有意義的。
步驟2循環(huán)讀取數(shù)據(jù)包:預處理過程逐個讀取流量樣本數(shù)據(jù)集中每一個分組,對該分組完成預處理之后再讀取下一個分組,直至文件中最后一個分組為止。
步驟3分組截斷(Truncation)和補零(zero-padding):形成分組字節(jié)矩陣(Packet Byte Matrix,PBM)作為深度學習模型的輸入。其中,PBM的每一行都是流量樣本中的一個分組,也是網(wǎng)絡的輸入基本單元,稱為分組字節(jié)向量(Packet Byte Vector,PBV)??紤]到深度學習的輸入維度需統(tǒng)一,而每個分組的大小都不一樣,因此需要考慮要么統(tǒng)一截斷,要么長度不足的補零。定義Truncation_len為截斷長度,需要考慮如下3個問題:
1)每個分組的大小最大值為MTU,即1 500 Byte,即以太網(wǎng)傳輸?shù)淖畲驣P報文(包含IP頭部)是1 500 Byte。所以,Truncation_len值的理論范圍為0 Byte~1 500 Byte。
2)Truncation_len的選值。該值過大,會造成深度學習訓練的輸入?yún)?shù)過多,從而加大訓練的復雜度;該值過小,則會犧牲識別的準確性,因為有可能被截斷的凈荷內容中是包含有流量識別的特征信息。
3)數(shù)據(jù)集中的分組大小分布。從數(shù)據(jù)集中的分組大小的分布可以看出,分組大小主要分布在頭部(前300 Byte)和尾部(后1 200 Byte~1 500 Byte)。因此,本文從保障準確性的角度出發(fā),選擇Truncation_len為最大值,即1 500 Byte。
步驟4歸一化(Normalization):為了提升訓練的性能,將每個分組歸一化至0~1。每個分組大小為0~255,因此每個分組大小均除以256。
步驟5類別不平衡的樣本數(shù)據(jù)集處理。詳述見節(jié)2.2。
步驟6樣本標記:根據(jù)流量樣本數(shù)據(jù)集對數(shù)據(jù)包文件的標記。對PBM進行標記,可以通過在矩陣中增加一列用于標記每一行,即PBV,也可單獨建立標記向量用于標記PBV。
無論是淺層機器學習,還是深度學習,分類識別研究基礎都是基于一種假設:各種網(wǎng)絡應用流都是均勻分布在網(wǎng)絡中,即網(wǎng)絡數(shù)據(jù)流的應用類別是平衡的。然而,現(xiàn)實網(wǎng)絡中各種加密應用數(shù)據(jù)流分布很不均衡,比如通過加密協(xié)議承載的音、視頻流遠大于即時通信、純網(wǎng)頁加密流等。網(wǎng)絡流類別不平衡是指流量樣本數(shù)據(jù)集中存在的類別樣本數(shù)量不均衡,通過訓練,這些分類算法可能會忽略少數(shù)類別的流樣本導致欠擬合,或重視少數(shù)類的差別造成過擬合[13]。
在進行深度學習訓練之前,本文采用過抽樣和欠抽樣2種辦法來處理不平衡數(shù)據(jù)集。對于比例過大的樣本采用欠抽樣方法來減少樣本數(shù)量;對于比例過小的樣本采用過抽樣技術提高樣本的可分性,拓展分類的決策邊界。SMOTE算法是一種隨機過抽樣方法,其主要思想是應用K-最近鄰方法,在少數(shù)類樣本之間利用線性插值生成新的樣本,從而增加少數(shù)類樣本的數(shù)量,使數(shù)據(jù)集的類別數(shù)量相對平衡[14]。SMOTE 算法按照一定規(guī)則,利用插值方法合成新樣本有良好的泛化作用,避免了隨機復制原有樣本的盲目和局限。沒有引進少數(shù)類的冗余信息,擴展決策區(qū)域,避免過擬合問題,改善了數(shù)據(jù)集的可分性。
本文所采用的數(shù)據(jù)來源于“ISCX VPN-non VPN traffic dataset”[15],該數(shù)據(jù)集包括常規(guī)加密和VPN隧道傳輸?shù)?類加密應用。本文選擇常規(guī)加密流量中的15種應用作為訓練和測試的樣本數(shù)據(jù),樣本數(shù)據(jù)集均為PCAP文件格式。為了說明不平衡樣本對性能的影響,同時給出了平衡樣本,詳細描述見表1。從表1可以看出,不平衡樣本中比例最高的netflix可以達到27.701%,比例最少的aim_chat僅有0.663%;對于樣本量少的類別采用SMOTE過抽樣方法,而對于樣本量多的類別采用欠抽樣方法,通過這2種方式預處理之后可以看出,樣本基本都在5%~8%。
表1 樣本數(shù)據(jù)集描述
根據(jù)第1節(jié)所述的SAE模型的訓練過程,可將基于SAE的加密流量識別模型的搭建和訓練分為2大階段:第一階段是SAE的訓練過程,這一深度學習訓練過程是無監(jiān)督的,稱之為SAE訓練過程;第二階段是將訓練好的SAE與分類輸出相連,完成一個基于MLP的分類模型的訓練,這一階段是有監(jiān)督的,稱之為SAE分類器訓練過程?;谏鲜龅?個訓練過程,本文所提出的SAE模型架構也分為2個部分:SAE訓練過程和SAE分類器訓練過程。
如圖3所示,第一階段,SAE訓練過程中由3個自動編碼器堆疊而成。
圖3 SAE模型架構
訓練過程分為如下幾步:
Z=∑WY+b
(3)
計算后得到的結果采用ReLu作為激活函數(shù),其公式表示如下:
ReLU(Z)=max[0,Z]
(4)
輸出層與輸入層相同,由1 500個神經(jīng)元構成。定義損失函數(shù)為MSE,為盡可能減少重構誤差,實質上就是最小化輸入與輸出的誤差,假設n為輸出神經(jīng)元個數(shù),則定義如下:
(5)
在反向傳播的過程中,采用隨機梯度下降(Stochastic gradient descent,SGD)算法更新權值W、偏置b以最小化損失函數(shù),計算公式如下:
(6)
(7)
其中,ρ為學習速率。
第1階段整體處理過程總結見算法1,即SAE模型訓練算法。
算法1SAE模型訓練算法
輸入Y={y1,y2,…,yk},k=1 500,即PBV
1.設定相關初始化參數(shù)。激活函數(shù)α= ReLU; е為訓練周期,即epoches;τ為mini_batch的大小;
2.for t from 1 to e do
3.for each τ do
4.針對每一個流量樣本y∈Y,執(zhí)行如下步驟:
5.前向傳播:計算式(3);
6.激活函數(shù):計算式(4);
7.計算損失函數(shù)并最小化:計算式(5);
8.反向傳播更新權值:計算式(6)和式(7);
9.end for
10.end for
第2個階段是SAE分類器訓練過程,如圖3所示,由1個輸入層、3個隱藏層和1個輸出層構成,訓練過程分為如下6步:
步驟1輸入數(shù)據(jù)采用第2.1節(jié)所描述的數(shù)據(jù)預處理后所得到的PBV,訓練數(shù)據(jù)輸入維度為1 500,即輸入為1 500個神經(jīng)元。
步驟23個隱藏層分別使用SAE模型中訓練好的Autoencoder1、Autoencoder2和Autoencoder3,神經(jīng)元個數(shù)分別為740、92和32,對輸入數(shù)據(jù)進行加權、偏置,見式(3)。
步驟3計算后得到的結果均采用ReLu作為激活函數(shù),見式(4)。
(8)
步驟5在模型訓練過程中,采用交叉熵作為損失函數(shù),假設L表示損失函數(shù),則定義如下:
(9)
步驟6在反向傳播的過程中,同樣采用SGD算法更新權值W、偏置b以最小化損失函數(shù),見式(6)和式(7)。
第2階段整體處理過程總結見算法2,即SAE分類模型訓練算法。
算法2SAE分類模型訓練算法
輸入Y={y1,y2,…,yk},k=1 500,即PBV
1.設定相關初始化參數(shù)。隱藏層激活函數(shù)α= ReLU; 分類激活函數(shù)s = Softmax;е為訓練周期,即epoches;τ為mini_batch的大小;
2.for t from 1 to e do
3.for each τ do
4.針對每一個流量樣本y∈Y,執(zhí)行如下步驟:
5.前向傳播:計算式(3);
6.激活函數(shù):計算式(4);當?shù)竭_輸出層時,計算式(8);
7.計算損失函數(shù)并最小化:計算式(9);
8.反向傳播更新權值:計算式(6)和式(7);
9.end for
10.end for
為了測試并對比SAE的流量識別性能,本文選擇最基本的深度學習模型——MLP來與之對比,實驗環(huán)境參數(shù)見表2。本文設計了一個簡單的MLP模型用于加密流量識別,模型采用1個輸入層,1 500個神經(jīng)元;2個隱藏層,分別為128和32個神經(jīng)元,激活函數(shù)為ReLU;1個輸出層,15個神經(jīng)元,激活函數(shù)為Softmax用于分類。
表2 實驗環(huán)境參數(shù)
在訓練過程中,將數(shù)據(jù)集隨機的分成2部分:一部分是訓練集,占比為60%;剩下的40%為測試集。深度學習的模型訓練過程中所采用的優(yōu)化器、損失函數(shù)、epoches以及mini_batch等參數(shù)信息見表3。
表3 模型訓練參數(shù)設置
圖4為SAE模型的訓練過程中準確率和損失率的變化趨勢。可以看出,在200個訓練周期中,SAE模型的準確率穩(wěn)定攀升,直至0.99,最后趨于穩(wěn)定;而損失率持續(xù)下降并趨于穩(wěn)定。
圖4 訓練過程中的準確率和損失率變化曲線
為了評估模型的性能,本文采用以下2類指標:
1)精確率和召回率
誤報(False Positive,FP)是指非類別C(C指代一個特定的類別)的流量被分類成為類別C;真陰性(True Negative,TN)是指非類別C的流被分成非類別C;漏報(False Negative,FN)是指屬于類別C的流量被分類為非類別C;真陽性(True Positive,TP)是指屬于類別C的流量而被分類成類別C。
精確率(Precision)和召回率(Recall)計算如下:
(10)
(11)
2)F1-Score
F1-Score是精確率和召回率加權調和平均,用于綜合反映整體的指標[18],最常見的F1-Score計算公式為:
(12)
為了驗證不平衡數(shù)據(jù)集與平衡數(shù)據(jù)集對分類性能的影響,本文分別用節(jié)2.2中所描述2種數(shù)據(jù)集,采用基于MLP的深度學習方法進行模型訓練和測試,得出的分類混淆矩陣如圖5所示。在該矩陣中,對角線上的元素代表分類正確的樣本數(shù)量,其他元素均為誤判??梢苑浅C黠@地看出,圖5(a)中有不少分類錯誤的樣本,而圖5(b)中分類性能較好??梢钥闯?不平衡數(shù)據(jù)集對于分類器的性能有直接的影響,因此本文中后續(xù)的實驗均基于第2.2節(jié)所描述的平衡數(shù)據(jù)集,以期最大程度上減少對分類性能的影響。
圖5 基于平衡、不平衡數(shù)據(jù)集的MLP識別方法混淆矩陣
圖6展示了基于平衡數(shù)據(jù)集訓練出來的MLP和SAE 2種加密流量識別方法的分類混淆矩陣。從對角線上的元素數(shù)量,也即分類正確的樣本數(shù)量來看,基于SAE的分類方法要高于MLP方法。比如,對于aim_chat與ICQ這2種加密應用而言,因均為聊天類的應用,所以流量特征方面較為相近,容易造成誤判。在MLP識別方法中,aim_chat被誤判為ICQ的樣本數(shù)量高達174,已接近測試集的10%;而在SAE識別方法中,aim_chat被誤判為ICQ的樣本數(shù)量僅為59,大致為測試集的3%。
圖6 基于SAE、MLP的加密流量識別方法混淆矩陣
從混淆矩陣中還不能直觀的反映出2種方法的分類性能,圖7和圖8分別展示了MLP和SAE 2種加密流量識別方法在精確度、召回率和F1-Score 3個指標上的對比。雖然基于MLP的加密流量識別方法顯示出比較好的性能,但可以明顯看出,在aim_chat、Facebook、hangout和ICQ這4種流量特征相近的即時通信類加密應用的分類性能上,有比較大的差距。而圖8所展示出的基于SAE的加密流量識別方法則展示出了很好的分類性能。從表4中更能清晰地看到每一種加密應用的3項指標,尤其是總體指標,可以看出,基于SAE的加密流量識別方法在分類精度、召回率和F1-Score 3項指標均達到99%,高于基于MLP的加密流量識別方法的指標(96%),顯示出了優(yōu)秀的分類性能。
圖7 基于MLP方法的精度、召回率和F1-Score
圖8 基于SAE方法的精度、召回率和F1-Score
表4 SAE、MLP的精確度、召回率和F1-Score
本文提出一種基于SAE的深度學習方法對加密應用流量進行分類識別,利用SAE的無監(jiān)督特性及在數(shù)據(jù)降維方面的優(yōu)勢,并結合MLP的有監(jiān)督分類學習,實現(xiàn)對加密流量的準確識別。同時考慮到樣本數(shù)據(jù)集的類別不平衡性對分類精度的影響,本文采用SMOTE過抽樣方法對不平衡數(shù)據(jù)集進行處理。實驗結果表明,該方法在樣本數(shù)據(jù)集類別平衡的情況下識別精確度和召回率可以達到99%。在未來工作中,將進一步減少訓練參數(shù),并研究采用非監(jiān)督的方式對加密應用實現(xiàn)準確識別。