孫懿,高見,2,顧益軍
(1.中國人民公安大學 信息網絡安全學院,北京 100038;2.安全防范與風險評估公安部重點實驗室,北京 102623)
隨著信息技術的發展及公眾對隱私與安全的日益關注,非加密的數據傳輸方式逐漸被加密傳輸所取代[1]。加密技術的不斷發展,使得加密流量在互聯網流量中的占比也不斷上升,根據互聯網研究趨勢報告統計,大約有87%的Web 流量是加密的[2]。加密流量在一定程度上保障了用戶隱私與安全,但攻擊者也通過加密技術來隱藏惡意程序和服務器之間的交互,從而逃避防火墻和網絡入侵檢測系統等[3]。因此,如何在加密流量背景下有效識別出惡意加密流量,對于維護網絡空間安全、抵御網絡攻擊具有重要意義。
目前針對惡意流量檢測的方法大致可分為4 種方式[4]:基于端口號,深度包檢測,機器學習和深度學習。基于端口號的方法,即根據數據包包頭中的端口號來區分不同種網絡應用類型(例如FTP 流量的21 端口、HTTP 流量的80 端口等)。但隨著隨機端口策略[5]、端口偽裝技術[6]等手段的普遍使用,使得基于端口對惡意加密流量進行檢測變得十分困難。MOORE 等[7]通過實驗發現,目前基于端口進行流量分類的方法在最佳情況下也僅有31%的準確率。基于深度包檢測的方法則通過分析整個數據包數據,根據匹配預定義模式來判定流量所屬種類。然而,加密技術的使用對網絡流量載荷數據進行加密或協議封裝,使得這種通過對流量數據進行逐字節匹配的方法在加密流量上變得不再可行。為克服基于深度包檢測方法存在的問題,研究人員提出一種將特征工程與機器學習算法相結合的檢測方法。不同種類的應用所產生的流量特性有所差異,通過提取能夠體現這些特性的特征數據[8],并結合機器學習的方法進行流量分類。但是基于機器學習的方法在很大程度上依賴于所選取的流量特征,往往很難找到有效區分的特征,從而導致模型分類準確率低下[3]。深度學習則通過端到端的方式,能夠自動從原始流量中提取特征并進行分類,省去了繁瑣的人工提取特征,成為目前檢測惡意加密流量的主流方式。雖然深度學習模型能夠自動提取特征并進行分類,但是不同的模型結構會生成不同的表征,從而致使模型性能有所差異。因此,如何搭建深度學習模型,生成有效表征以提高惡意加密流量的檢測率是值得研究的問題。
為得到更好的特征表示以提高模型的檢測結果,并對惡意加密流量進行區分,本文設計一種融合一 維 Inception 結構和 ViT(One-Dimensional Inception structure and Vision Transformer)的惡意流量檢測模型,并在公開數據集USTC-TF2016 上通過對比變體模型、常見模型來驗證該模型的有效性。
隨著人工智能和大數據的發展,深度學習算法在計算機視覺(Computer Vision,CV)、自然語言處理(Natural Language Processing,NLP)等領域取得了較好的成績,惡意流量檢測領域的研究人員也開始以不同的表示方法處理流量數據,并利用深度學習模型自動提取特征實現檢測。
WANG 等[9]將一維卷積神經網絡(One-Dimensional Convolutional Neural Network,1DCNN)應用到加密流量分類上,并驗證了其假設,即流量是一維的序列數據,1D-CNN 相較于二維卷積神經網絡(2D-CNN)更適合流量特征的提取,此外還創建了一個USTC-TFC2016 數據集,并開發了該數據集上的預處理工具[10]。梁杰等[11]則通過將流量包按照最大內容長度截取并對其進行獨熱編碼,之后再利用GoogLeNet[12]實現流量分類,此外還對比了LeNet[13]等模型,證明該方法的有效性。
除將流量數據表示為圖像數據并根據卷積神經網絡(CNN)進行空間特征提取外,利用網絡流量本身具有的時序性特點,即具有“字節-數據包-數據流”的層次結構,使用循環神經網絡(Recurrent Neural Network,RNN)對流量進行時序特征提取也是一種常見的檢測方式。葉曉舟等[14]利用流量的層次結構,首先對數據包進行獨熱編碼處理,并使用雙向長短期記憶(Bi-directional Long Short-Term Memory,BiLSTM)網絡提取數據包的時序特征,然后將一個網絡流內的數據包特征進行拼接,再利用BiLSTM提取其網絡流時序特征并進行分類。
ZHUANG 等[15]按照五元組(源IP 地址、源端口、目的IP 地址、目的端口、協議)方式對原始流量進行切分并在同一流內選取3 個連續數據包,類比RGB圖像并利用CNN 對其進行特征提取,之后輸入到LSTM 中提取3 個連續數據包的流特征,最終實現分類。該類方法使用CNN 對數據包特征進行提取,再利用LSTM 在CNN 特征提取的基礎上提取流量時序特征,最終融合CNN 與LSTM 提取網絡流量的時空特征。
目前基于深度學習對流量進行特征提取的方法大致可分為3 種方式:將流量數據轉換為圖像數據利用CNN 對流量進行空間特征提取,將流量視為字節-數據包-網絡流序列結構使用RNN 提取時序特征,將CNN 與RNN 融合提取流量的時空關聯特征。此外,劉沖[16]提出了HABBiLSTM 檢測模型,該模型采用同文獻[14]類似的模型結構,但并沒有對數據進行獨熱處理,而是將注意力機制融入到各層次特征提取中,以驗證注意力機制能夠提升模型效果。
盡管上述研究均取得了較好的結果,但目前該領域研究大多在未加密流量上進行實驗。為了更好地提取加密流量表征,有效檢測惡意加密流量,本文通過改進Inception 結構并與ViT[17]相融合,構建一維Inception-ViT 模型,以實現更好地檢測惡意加密流量。
本文模型架構如圖1 所示,通過使用端到端的方式實現惡意加密流量檢測。首先,對原始流量數據集進行預處理,通過會話切分、數據清洗、數據混淆、統一大小、數據轉換等步驟,將其轉換成模型所需格式,方便后續進行處理。其次,將處理好的數據輸入到CNN 特征提取模塊,使用改進的一維Inception 結構來提取更豐富的空間特征信息。最后,將得到的特征向量輸入到ViT 模塊中,利用多層感知機(Multilayer Perceptron,MLP)獲取多個特征組合表示,再計算每個塊特征的權重值并輸出加權特征向量,突出重點特征,迭代多層后,將最終的特征向量輸入到全連接層中得到最終分類結果。

圖1 一維Inception-ViT 模型整體架構Fig.1 Overall architecture of one-dimensional Inception-ViT model
本文所使用的數據集是文獻[10]所設計的USTC-TFC2016 數據集,該數據集包括10 種惡意加密流量和10 種正常網絡應用流量,樣本數據集均為PCAP 文件格式。表1 為本文所使用的數據集,其中,左側為10 種正常網絡流量,由IXIA BPS 仿真設備生成,右側為10 種惡意加密流量,選自CTU 研究人員采集于真實網絡環境中的惡意軟件流量,數量列為經過預處理后生成的樣本數量。

表1 數據集描述Table 1 Dataset description
網絡流量的切分方式可分為5 種[18]:TCP 連接的方式,即按照TCP 協議中的三次握手和四次揮手相應的標志位進行切分;流的方式,即按照五元組(源IP地址、源端口、目的IP 地址、目的端口、協議)進行切分,具有相同五元組的數據包屬于同一個流,也可以通過設置流超時或重置判定結束;會話的方式,會話也可以看作是雙向流,五元組內的源和目的部分可以互換;服務的方式,按照建立服務所使用的端口號對進行劃分,所有使用該端口號對的流量均視為同一組;主機的方式,即按照主機所產生的流量進行切分,即來自主機產生的流量、主機接收來自哪里的流量。
本文對原始PCAP 文件以會話的方式進行切分,相較于其他切分方式,會話能夠保存通信雙方之間的交互流量,攜帶更多的信息。具體處理過程如圖1 中數據預處理模塊所示。
1)會話切分:使用SplitCap[19]將原始PCAP 文件以會話方式切分成小單元。
2)數據清洗:在切分后的數據單元中,部分數據可能丟失了區分惡意加密流量和正常流量的關鍵信息,一個完整的通信會話標志是完成握手、互相進行應用數據的交互[20],因此本文僅保留了有應用數據的會話,以實現數據清洗。
3)數據混淆:Mac 地址和IP 地址并不是區分不同種流量的有效信息,相反模型如果學習了該類信息反而會造成過擬合,因此本文采用隨機替換的方式對Mac 地址和IP 地址進行混淆。
4)統一大小:不同的通信會話,傳遞的網絡數據包數量和大小存在差異,同一網絡結構其輸入網絡的數據形狀是固定的,因此需要將會話統一至相同大小[20]。為了更好地進行對比實驗,本文參考制作USTC-TFC2016 數據集的原始論文數據預處理方式,最終選取784 Byte 作為會話流固定長度。對于切分后會話長度小于784 Byte 的數據則在末尾填充0x00,對于長度大于784 Byte 數據則進行截斷。
5)數據轉換:將原始十六進制的數據轉換成十進制,并以大小為28×28 的灰度圖像進行存儲,對生成的灰度圖像按照類別隨機采樣,如圖2 所示。

圖2 20 類流量的灰度圖像Fig.2 Gray scale image of twenty types of traffic
6)標記標簽:將灰度圖像按照類別存放在標簽命名的文件夾下。
編碼器具體結構如圖3 所示,其中,數字大小即為該層所使用的核參數大小,卷積層、池化層均采用填充的方式,兩者的步長分別為1 和2,然后再將提取后的特征向量轉換成大小為14×14 的特征圖輸入到ViT 模塊,進行下一步的操作。

圖3 一維Inception 結構Fig.3 Structure of one-dimensional Inception
在典型的GoogLeNet網絡中,其特有的Inception結構相較于直接增加網絡深度和卷積層數量[11],在多尺度卷積核上提取圖像的不同尺度特征,能夠在分類時提供更豐富的視野,此外Transformer 編碼器缺少卷積神經網絡內固有的一些歸納偏置[21]。因此,本文添加了CNN 特征提取模塊,對原Inception結構進行改進,使用一維卷積替換原有二維卷積,同時添加池化層在保持特征不變性的前提下去除一些冗余信息[22],防止模型過擬合。
經典ViT 模型主要使用Transformer 編碼器[23],該編碼器由一個多頭注意力(Multi-Head Attention,MHA)和前饋網絡(Feed-Forward Network,FFN)兩個子層構成。其中FFN 層實質上就是兩層線性映射,每個子層前使用層標準化(Layer Normalization,LN),每個子層后使用殘差連接,Transformer 編碼器結構如圖4 所示。

圖4 Transformer 編碼器結構Fig.4 Transformer encoder structure
如圖4(a)所示,在Transformer 塊中對于序列中任何位置的任何輸入X∈Rd,都需要滿足Sublayer(X)∈Rd,以便進行殘差連接X+Sublayer(X)∈Rd,其中Sublayer(X)為子層所實現的函數。層標準化的作用是將神經網絡中某一層的所有神經元進行歸一化,加快模型訓練速度、加速收斂。假設該層有D個神經元,該層輸入X={x1,x2,…,xD},層標準化計算如式(1)所示:

其中:?的作用是為了防止分母為0;μ為均值;σ2為方差。
μ、σ2的計算如式(2)、式(3)所示:

注意力機制就是讓機器對于模型輸入的不同部分賦予不同的權重,以突出關鍵信息。對于輸入的序列X={x1,x2,…,xD},其中,xt為第t個向量,使用多層感知機對xt做三次線性變換,由xt向量衍生出qt、kt、vt。再將所有向量衍生出的qt、kt、vt拼成向量矩陣,并分別記作查詢矩陣Q、鍵矩陣K、值矩陣V:

注意力權重則是通過計算查詢和鍵的相關性并進行softmax 計算得到的,其中本文所使用的ViT 模塊以點積的方式計算兩者的相似性,之后將得到的注意力權重與值矩陣V進行加權求和,最終得到注意力輸出。具體計算過程如式(5)所示:

多頭注意力就是對于輸入序列使用不同的權重矩陣進行h次線性變換,得到不同的注意力輸出hi,最終合并出全局特征H=Concat(h1,h2,…,hh),再利用多層感知機將其轉換至想要的向量維度,如圖4(b)所示。
ViT 模塊通過對圖像數據進行切分,將其轉換為一維圖像塊序列,從而使Transformer 能夠對其進行處理,其模型結構如圖5 所示。

圖5 ViT 模型結構Fig.5 ViT model structure
ViT 模型結構步驟如下:
2)圖像塊嵌入:將圖像塊從(N,P2×C)轉化為(N,D),利用MLP 做一個線性變換。此外,人為追加一個用于分類的可學習向量<class >,方便日后對序列數據進行分類。
3)位置編碼:由于Transformer 編碼器并沒有像循環神經網絡那樣的迭代操作,因此需要將切分后的圖像塊位置信息提供給Transformer 編碼器,即在圖像塊嵌入中添加位置編碼向量。
4)Transformer 編碼器:由多個Transformer 塊組成,對經過步驟1~步驟3 處理后的圖像塊序列進行特征提取。
5)多層感知機(MLP):將經過Transformer 編碼器處理后,用于分類的可學習向量<class >提取,并接入到全連接層進行分類。
本文實驗操作系統為Windows 11 家庭中文版,GPU 型號為GeForce RTX 3070,cuda 版本為11.4,使用Anaconda3-4.10.3 版本編輯環境,python 版本為3.7。
一維Inception-ViT 模型參數設置如下:在預處理過程中,統一會話流大小為784 Byte;在CNN 特征提取模塊,一維Inception 結構卷積核尺寸如圖3 所示,卷積核個數分別為32、[32,64]、[16,32]、32,激活函數為relu,經過該模塊處理后圖片從28×28 大小變成14×14;在ViT 模塊,圖片輸入大小為14×14,圖像塊尺寸為7×7,圖像塊嵌入大小為64,在Transformer 編碼器中Transformer 塊個數為4,多頭注意力的個數為2,多頭注意力線性變換大小為64,其他MLP 維度均為128。模型選擇交叉熵作為損失函數、Adam 優化算法,批大小為50,學習率lr為1×10-4,epoch 大小為10。
由于本文主要對惡意加密流量進行多分類檢測,為了更好地衡量模型對惡意加密流量檢測效果,主要選取平均召回率(Average Recall,AR)、平均F1值(Average F1_Score,AF)作為評價指標。其中平均召回率和平均F1 值為每一類流量的召回率(R)和F1 值(F1_Score,F)的調和平均值,N為數據集中種類總數,TTP為將A類流量預測為A類的樣本數,FFP為將非A類流量預測為A類的樣本數,TTN為將非A類流量預測為非A類的樣本數,FFN為將A類流量預測為非A類的樣本數。計算過程所涉及的精確率(P)等具體計算公式如式(6)~式(10)所示:

3.3.1 一維Inception-ViT 模型參數選擇
不同的Transformer 塊個數m可以組成不同深度的ViT 模型,不同的多頭注意力并行頭個數h形成不同的Transformer 塊。過多或過少的模型深度或并行頭個數均有可能造成有效特征的缺失或干擾[24],從而影響模型的檢測結果。因此,本文設置Transformer 塊個數取值為1、2、3、4、5、6,多頭注意力并行頭個數取值為1、2、4、6、8,在公開數據集USTCTFC2016進行30組實驗。使用平均召回率、平均F1值作為評價指標,以選取最佳超參數組合。實驗最終結果如圖6、圖7 所示,其中,x軸為Transformer 塊個數m,y軸為評價指標值,圖例為多頭注意力并行頭個數h。

圖6 不同超參數組合的平均召回率實驗結果Fig.6 Experimental results of average recall of different superparametric combinations

圖7 不同超參數組合的平均F1 值實驗結果Fig.7 Experimental results of average F1 value of different superparametric combinations
從圖6、圖7 可以看出:當Transformer 塊為4 且并行頭個數為2 時,平均召回率值和平均F1 值分別為99.42%和99.39%,均優于其他超參數組合。固定模型深度即Transformer 塊個數,可以看出隨著并行頭個數的增加,模型性能并非一直提升,過多的并行頭數量可能會加劇噪聲的干擾,反而會使模型性能下降。同樣,固定并行頭數量隨著模型深度的增加,模型性能并非一直上升。合適的Transformer 塊個數與并行頭個數能夠更有效地提取流量特征,因此本文最終選取Transformer 塊個數為4、多頭注意力并行頭個數為2 的ViT 模塊。
3.3.2 不同CNN 特征提取模塊對比實驗
為評估一維Inception-ViT 模型中CNN 特征提取模塊的有效性,設計以下變體模型,除改動外模型其他參數保持一致:
1)ViT 模型。去除CNN 特征提取模塊,僅使用ViT 模塊對流量數據進行分類。
2)一維Inception 模型。去除ViT 模塊,僅使用改進后的一維Inception 結構連接兩層全連接層進行分類,其中全連接層的維度為128。
3)1D-CNN-ViT 模型。替換所使用的CNN 特征提取模塊,具體模塊結構如圖8 所示,采用兩層一維卷積加最大池化結構用于特征提取,其中卷積核個數設置為[32,64]。

圖8 一維卷積結構Fig.8 Structure of one-dimensional convolution
4)2D-CNN-ViT模型。同1D-CNN-ViT 模型結構類似,但使用二維卷積,具體模型結構如圖9所示。

圖9 二維卷積結構Fig.9 Structure of two-dimensional convolution
5)Inception-ViT 模型。使用原始Inception 結構作為CNN 特征提取模塊,模型結構如圖10 所示,此外為將大小統一,添加了核大小為3×3 的最大池化層。

圖10 Inception 結構Fig.10 Structure of Inception
6)No_Pooling-ViT 模型。去除了最大池化操作,具體模型結構如圖11 所示。

圖11 去除池化操作后結構Fig.11 Structure of removing the pooling operation
表2 給出了一維Inception-ViT 模型與其變體模型的對比結果。可以看出一維Inception-ViT 模型性能最好,在平均召回率和平均F1 值指標上分別達到99.42%和99.39%,相較于僅使用單一模塊的ViT 模型和一維Inception 模型有所提升。此外,去除池化操作后的No_Pooling-ViT 模型相較于一維Inception-ViT 模型性能有所下降,說明池化操作的下采樣有助于減少冗余信息,提升模型的檢測結果。對比有無添加Inception 結構的4 種模型(1D-CNN-ViT 和一維Inception-ViT、2D-CNN-ViT 和Inception-ViT),添加Inception 結構的模型均比沒有添加Inception 結構模型性能有所提升,說明多尺度卷積核能夠提取更豐富的特征信息,使得模型分類更為準確。對比一維卷積和二維卷積模型(1D-CNN-ViT 和2D-CNNViT、Inception-ViT 和一維Inception-ViT),使用一維卷積的模型都比使用二維卷積的模型性能要好,甚至1D-CNN-ViT 模型比添加了Inception 結構的二維卷積Inception-ViT 模型效果更好,即在時序性數據上一維卷積比二維卷積更適合。

表2 多分類下不同變體模型AR 和AF 結果對比Table 2 Comparison of AR and AF results of different variant models under multiple classifications %
綜上所述,一維Inception 結構相較于其他CNN特征提取模塊能夠獲取更豐富的特征信息,此外結合ViT 模塊,利用注意力機制突出重點特征,從而提升了一維Inception-ViT 模型的檢測性能。
3.3.3 常見模型性能對比實驗
為進一步驗證一維Inception-ViT 模型的有效性,在相同的訓練次數下,本文選取了8 種模型(1DCNN、2D-CNN、GoogLeNet、ResNet、BiLSTM、HiLSTM、HABBiLSTM、CNN+LSTM)作為基準模型進行對比。其中:1D-CNN[9]模型將經過預處理后的圖像數據轉換成一維序列輸入到一維卷積神經網絡中進行特征提取并分類;2D-CNN[10]模型與1DCNN 模型類似,但其使用二維卷積的方式進行特征提 取;ResNet[25]模型由HE等于2016 年提出,考慮到輸入圖片的大小,本文使用ResNet-14 對其進行分類;BiLSTM 模型使用雙向LSTM 從會話層級對輸入的圖片數據整體提取其時序特征并分類;HiLSTM[14]模型將流量看作“字節-數據包-會話流”結構,同時對數據進行獨熱編碼,將一個流量字節轉換為256 維的向量,使用BiLSTM 在數據包和會話層級分別提取時序特征并進行分類;HABBiLSTM[16]同HiLSTM 模型結構類似,但其不對數據進行編碼,同時在數據包和會話流層分別添加注意力機制,用來計算重要時序特征;CNN+LSTM 模型參考文獻[15]的模型結構,首先利用CNN 提取數據包的空間特征并使用MLP 將提取后的特征變換至指定維度,之后再使用BiLSTM 對數據包層特征組成的序列進一步提取網絡流特征實現分類。
從表3 可以看出:一維Inception-ViT 模型性能最好,在AR 和AF 指標上分別達到了99.42% 和99.39%,相較于其他基準模型在AR 指標上分別提升了0.19、0.52、1.96、0.31、7.13、0.53、0.45、2.00 個百分點,在AF 指標上分別提升了0.17、0.49、1.87、0.27、7.16、0.61、0.44、1.88 個百分點。

表3 各模型AR 和AF 結果對比Table 3 Comparison of AR and AF results of each model %
此外,為進一步驗證所提模型在加密流量多分類上的性能,圖12 所示為各模型的混淆矩陣。從圖12 可以看出:多數模型在Neris 和Virut 兩類上具有一定混淆。一維Inception-ViT 模型預測為Neris類樣本中有23 個屬于Virut 類,預測為Virut 類中樣本有45 個屬于Neris 類,相較于基準模型中性能最好的1D-CNN 模型,減少了16 個樣本混淆。為了更好地進行對比,表4 統計了各模型在Neris 和Virut 兩類上F1 值評價指標結果。從表4 可以看出:一維Inception-ViT 模型在Neris 和Virut 兩類區分上結果最優,相較于基準模型中性能最好的1D-CNN 模型分別提升了0.81 和1.33 個百分點,相較于Neris 和Virut 兩類上分類結果最優的基準模型ResNet 分別提升了0.48 和1.1 個百分點。對于ResNet 模型,從圖12 混淆矩陣可以看出:該模型在對惡意加密流量Shifu 類進行預測時,錯誤地將其他種類流量的8 個樣本預測為該類,而一維Inception-ViT 模型在該類別上僅錯誤預測1 個樣本,對惡意加密流量檢測更為準確。

表4 各模型在Neris 和Virut 上的F1 值Table 4 F1 value of each model on Neris and Virut %

圖12 各模型混淆矩陣Fig.12 Confusion matrix of each model
綜上所述,一維Inception-ViT 模型能夠在加密流量多分類任務上擁有最優性能,同時相較于其他模型能更有效地區分惡意加密流量。
本文構建一種融合一維Inception 和ViT 的惡意流量檢測模型,通過改進GoogLeNet 中的Inception結構,使用一維卷積替換二維卷積并添加池化層去除冗余信息,通過融合ViT 模塊增強特征區分度,提升模型檢測結果。實驗結果表明,該模型在多分類實驗下,平均召回率和平均F1 值相比對比模型均有所提高,同時在惡意加密流量區分度上也有明顯提升,可獲取更有效的加密流量表征,增強了對惡意加密流量的檢測。但本文僅在單一數據集上進行了實驗,且在數據預處理中采用截斷的方式,可能會造成有效信息丟失。后續將考慮采用不同的數據預處理方式,并在多種數據集上進行實驗,以獲取更好的效果。