李小劍,謝曉堯,,徐 洋,張思聰
(1.貴州師范大學 數學科學學院 貴陽 550001;2.貴州師范大學 貴州省信息與計算科學重點實驗室 貴陽 550001)
惡意軟件利用加密信道和流量加密技術實施惡意行為,該惡意行為隱藏較深且變種頻繁,難以被發(fā)現(xiàn)。2018 年Cisco 發(fā)布的安全報告指出,為避免攻擊行為的暴露,有超過70%的惡意軟件通信流量使用了TLS(Transport Layer Security)加密技術[1]。由于勒索病毒、廣告木馬、挖礦程序等惡意軟件與命令控制服務器的通信方法從傳統(tǒng)的HTTP 協(xié)議請求逐漸向加密流量技術轉變,因此基于明文的DPI、DFI[2]檢測方法已不再適用。解密行為需耗費大量計算資源和時間,在不對流量解密的前提下如何精準識別和快速分類惡意軟件加密流量成為當前研究熱點之一。
TLS 加密協(xié)議位于傳輸層與應用層之間,由于其具有良好的擴展性和兼容性,常用于HTTP、SMTP、POP3等應用層協(xié)議中以保護2 個通信應用進程間數據的完整性和保密性。加密技術的初衷是保護信息內容安全與用戶隱私,但也容易被不法分子用以掩飾其網絡違法活動,這給網絡安全監(jiān)管帶來了新的挑戰(zhàn)。由于加密后流量的上層封裝信息不可見,因此研究人員將研究重點轉向基于流量行為模式的機器學習技術上。已有研究表明,雖然惡意加密流量也采用標準的TLS 協(xié)議傳輸,但其在TLS 流協(xié)商機制、分組長度、幀到達時間、字節(jié)分布等方面與正常流量有明顯區(qū)別[3]。基于上述關鍵特征,可以利用隨機森林、SVM[4]等經典的機器學習方法區(qū)分惡意流量與正常流量,但機器學習方法通常需要人工選擇流量特征,要求研究人員具有相關專業(yè)背景和豐富的機器學習經驗,且特征選擇優(yōu)秀與否將直接影響檢測模型最終性能的好壞。近年來,有研究人員使用深度學習技術提高惡意TLS 流量檢測準確率,1D_CNN[5]、CNN-LSTM[6]、BotCatcher[7]等深度學習模型被陸續(xù)提出。這些模型雖然在一定程度上改善了識別效果,但仍存在流量表征不足、模型結構復雜、參數眾多等問題,無法同時滿足流量檢測實時性與效果要求,也難以落實到資源配置有限、對實時性要求較高的應用場景中。
針對上述問題,本文提出一種基于CNN-SIndRNN端到端的惡意TLS 流量自動檢測方法。利用卷積神經網絡(Convolutional Neural Network,CNN)與循環(huán)神經網絡(Recurrent Neural Network,RNN)各自的優(yōu)點,充分學習原始流量數據的局部相關特征與時序特征。同時,從具體循環(huán)單元結構和網絡計算方式2 個層面對傳統(tǒng)RNN 網絡模型改進,采用獨立循環(huán)神經網絡(Independently Recurrent Neural Network,IndRNN)單元結構作為循環(huán)單元,改善傳統(tǒng)RNN 存在的長期依賴問題。在此基礎上,采用切片循環(huán)神經網絡(Sliced Recurrent Neural Network,SRNN)并行計算方式代替?zhèn)鹘y(tǒng)RNN 串行計算方式,在保證檢測性能的前提下,大幅提高模型訓練和檢測速度,最終構建完成CNNSIndRNN 檢測模型。
目前對基于TLS 加密協(xié)議的惡意流量檢測仍以識別流量行為模式為主。主要有2 種檢測方法:
1)利用TCP/IP 層數據流元數據,包括分組平均長度、分組到達時間間隔、客戶端公鑰長度、服務器證書有效天數等統(tǒng)計特征進行學習建模,檢測惡意TLS 流量。文獻[8]從流量行為、TLS 明文信息、證書3 個維度出發(fā),構建在線隨機森林模型以實時區(qū)分惡意加密流量。文獻[9]結合報文負載和流指紋特征,在不依賴五元組信息的條件下,基于邏輯回歸模型提高了復雜網絡環(huán)境下加密惡意流量檢測率。上述方法利用統(tǒng)計特征進行機器學習建模。在攻擊者對惡意代碼進行更新升級后,流量的行為模式在特征集上也隨之變化,可能會使部分依據專家經驗挑選出的特征失效,導致識別率下降。此外,原始流量數據中隱含的與識別結果強相關的抽象特征難以被特征工程提取。
2)基于惡意TLS 加密協(xié)議上下文相關流量,如DNS、HTTP 等特征檢測方法。文獻[10]通過檢測算法生成DGA 域名的方式對失陷主機DNS 請求報文中的惡意域名進行分析檢測,但該類方法無法檢測直接使用IP 地址或以P2P 形式構造的僵尸網絡。
深度學習作為一種端到端的學習框架,在計算視覺任務和自然語言處理等領域有著出色的表現(xiàn)。在惡意流量識別領域,越來越多的研究人員開始構建各種類型結構的神經網絡,并采取不同的訓練機制以自動提取流量特征。WANG 等[11]將惡意軟件流量數據轉化為灰度圖,提出基于CNN 的流量分類方法,該項工作是將學習方法應用于惡意軟件原始流量分類任務的首次嘗試。CHENG 等[12]利 用Word2vec 模型將流量負載轉換為句子向量并通過多核一維卷積實現(xiàn)惡意加密C&C 流量識別。CNN 善于捕捉序列數據的局部模式特征,但卻難以獲取動態(tài)時序信息和進行長距離記憶。ZHOU 等[13]對加密會話中包長傳輸模式與包傳輸時間序列進行訓練,利用長短期記憶(Long Short-Term Memory,LSTM)網絡模型進行自動特征提取,并對惡意加密流量和正常流量進行分類,其準確率超過傳統(tǒng)的基于流量統(tǒng)計特征的機器學習方法。但由于循環(huán)神經網絡依賴前一時間步的計算結果,無法充分利用GPU 實現(xiàn)大規(guī)模并行運算,訓練和檢測速度較慢。上述檢測方法的檢測精度和效率仍存在較大的上升空間。
本文所提TLS 惡意流量識別方法主要包含3 個階段:1)流量數據預處理;2)網絡流量局部相關性與時序特征挖掘;3)流量分類檢測。首先從原始網絡流量文件中提取網絡流量字節(jié),對16 進制表示的字節(jié)字符采用Tokenizer 分詞器進行字節(jié)級分詞處理后,經過Embedding(詞嵌入)轉換為字符向量序列;然后利用連續(xù)2 個卷積層自動提取字符間局部組合信息以增強流量表征,并使用并行的SIndRNN 網絡捕獲會話流時序特征;最后將2 個深度神經網絡挖掘出的特征進行拼接,輸入到softmax/sigmoid 分類器中完成惡意TLS 流量的識別與分類。模型總體框架如圖1 所示。
圖1 CNN-SIndRNN 模型總體框架Fig.1 Overall framework of CNN-SIndRNN model
本文主要關注隱藏于TLS 加密協(xié)議的惡意軟件通信行為流量。以TLS 加密數據傳遞之前的握手協(xié)商的數據報文,及與其前向相關的DNS 請求響應報文組成TLS 會話流,作為特征挖掘空間,主要原因是:1)傳輸內容已被TLS 協(xié)議加密,分析流量負載內容難以發(fā)現(xiàn)惡意行為;2)TLS 握手協(xié)議中的ClientHello、ServerHello、Certificate、ClientkeyExchange 等消息中所包含加密套件、客戶公鑰長度、證書有效期、證書是否自簽名、前向相關DNS 報文中的請求域名、TTL 值等信息對識別惡意TLS 流量具有重要區(qū)分作用[14]。因此,流量預處理主要包含以下步驟:
步驟1完成原始流量切分與數據包重組,并依據服務器端口和傳輸層協(xié)議從原始網絡流量中提取2 類通信流,一類是服務器端口號為53 的UDP 通信流即DNS 流,另一類是服務器端口號為443 的TCP通信流即TLS 通信流。
步驟2根據2 類流中數據幀五元組信息進行關聯(lián)匹配,最終將TLS 握手協(xié)商的9 個數據包(包含TCP 建立連接3 次握手)與前向關聯(lián)2 個DNS 報文按照通信時間先后順序合并為一條TLS 會話,握手協(xié)商過程如圖2 所示。
圖2 TLS 加密會話流握手協(xié)商過程Fig.2 Handshake negotiation process of TLS encrypted session flow
步驟3刪除數據包中特有的MAC 地址、IP 地址等對分類結果產生干擾的相關字符串。
步驟4統(tǒng)一輸入大小。使用深度神經網絡進行訓練需固定維度地輸入數據,經過對數據分組長度進行統(tǒng)計分析發(fā)現(xiàn),TLS 會話流中每個數據包平均字節(jié)數約為200。為縮減計算規(guī)模并保留分組頭部關鍵信息及方便后續(xù)使用切分循環(huán)神經網絡進行分層切片,提取會話流中每個數據包的前121 個字節(jié),超出長度則截斷,不足則在末尾補充0X00,并標記其所屬類別。
深度學習網絡模型輸入要求為數值型張量,需將TLS 會話流基于字節(jié)向量化。文獻[15]對每個數據分組向量進行one-hot 編碼,并將每個字節(jié)編碼為256 維向量,但這種編碼方式容易造成生成的二維矩陣數據過于稀疏,且不能表達2 個字節(jié)間的有效關聯(lián)。本文利用Tokenizer 分詞器對每條會話流進行分詞編號,統(tǒng)計流量中出現(xiàn)的所有字節(jié)字符并生成字典,并對任意給定的會話流輸入,轉換為長度為n的向量表示,n為會話流最大截斷長度,向量中的每一位元素表示字節(jié)在字典中的索引值。這種編碼方式簡單高效,同時也保存了字節(jié)間的前后順序信息。在此基礎上,利用Word Embedding 詞嵌入技術轉換為一個字節(jié)向量序列s1:n=w1⊕w2⊕···⊕wn。其中:wi∈Rk;k為嵌入層向量的維度;⊕表示拼接操作。這樣任一TLS會話流s可表示成一個n×k二維的稠密矩陣向量。
經2.1 節(jié)預處理后的網絡流量數據可視為按層次結構組織的字節(jié)流序列。字節(jié)、數據分組、會話流與自然語言處理領域中的單詞、句子和文檔結構非常相似。數據分組中特定的位置代表特定的語義信息,如Client Hello 分組的第55、56 字節(jié)0X0303 表示客戶端所支持TLS 協(xié)議版本號為1.2。在NLP 任務中,CNN 可以從句子中提取局部單詞組合信息。本文將一維卷積看作自然語言模型中的n元語法器(n-gram),自動從TLS 會話流中提取字節(jié)組合信息。由于數據包內部分字節(jié)之間具有前后相關性,聯(lián)系較為緊密,若采用傳統(tǒng)CNN 結構中的卷積操作后緊接池化操作,有可能會過濾掉相關特征,造成信息損失。為此,連續(xù)采用2 個卷積層進行特征提取,并從元語法的角度分析,多層卷積可以擴大感受野,獲得更大值的語法信息[16]。在進行第一層卷積操作時,卷積核的寬度必須設置與會話流中字節(jié)向量表示的維度一致,卷積核只在流量矩陣s∈Rnxk垂直方向上自上而下滑動遍歷。2 次卷積操作可表示為:
其 中:l1、l2為卷積核的尺寸;step 為卷積步長;W1∈,W2∈為卷積核權值矩陣;f為非線性函數,這里采用Relu 函數。2 層卷積計算后,使用全局最大池化(Global Max Pooling,GMP)代替全連接層以減少參數量。在傳統(tǒng)的卷積神經網絡中,卷積層經過下采樣操作后,通常會將結果打平并送入多個全連接層,這樣做會造成整個網絡模型參數量大,參數更新困難,且容易造成過擬合。假設經過最后一次卷積操作后得到W×H×C個特征圖,全連接層有M個神經元,僅全連接層需要更新的參數就達W×H×C×M個。全局池化是將池化的窗口大小設置成與特征圖大小一致,一張?zhí)卣鲌D輸出一個特征值。相比全連接層,其參數量為1×1×C=C。由于沒有參數設置且不需要優(yōu)化算法進行調參,全局池化能夠降低模型過擬合風險。本文選擇全局最大池化來提取每張?zhí)卣鲌D中的最重要區(qū)域。
CNN 善于捕捉序列型數據的局部模式特征,卻難以提取鏈式結構輸入集中的的的各單元之間依賴關系。在網絡流量層次結構中,最底層為依時間順序排列的字節(jié)序列,字節(jié)序列又按照網絡協(xié)議類型聚合為上層的分組序列。為更深入挖掘TLS 數據流在時間序列上的特性以加強流量表征,本文在提取序列局部組合特征的同時,并行設計了一種改進的循環(huán)神經網絡進行時間特征學習。經預處理步驟得到的單個TLS 會話流字節(jié)序列長度達11×121=1 331,若采用經典的RNN 網絡學習,容易出現(xiàn)長期依賴關系能力差和訓練時間過長2 大問題。LSTM 和GRU 網絡通過增加門控機制對RNN 循環(huán)單元進行改進,雖在一定程度上改善了梯度消失和梯度爆炸問題,但由于使用tanh 和sigmoid 作為激活函數,層與層之間梯度易衰減,因此構建和訓練深層循環(huán)神經網絡存在困難。為解決惡意TLS 會話流字節(jié)序列輸入過長造成訓練時間過長等問題,本文從具體循環(huán)單元結構和網絡計算方式2 個層面對傳統(tǒng)RNN進行改進,提出一種基于SIndRNN 的網絡模型挖掘字節(jié)序列長距離依賴關系。此外,本文選擇獨立循環(huán)神經網絡的單元結構代替?zhèn)鹘y(tǒng)RNN 循環(huán)單元,IndRNN[17]單元結構如圖3 所示。
圖3 IndRNN 單元結構Fig.3 IndRNN unit structure
與傳統(tǒng)RNN 網絡最大區(qū)別在于,IndRNN 算法中同一層的各神經元之間相互獨立,每個神經元僅接受當前時刻的輸入信息和上一時間步的隱層狀態(tài)信息,以避免被同一時刻特征間關系所影響,同時消除同一時刻的冗余特征。當堆疊2 層或多層神經元時,下一層每個神經元獨立處理前一層所有神經元的輸出,每個神經元獨立處理一種類型的時間模式,增強了對更長序列的建模能力。IndRNN 在t時刻第n個神經元狀態(tài)如式(3)所示:
其中:xt、ht-1,n分別是t時刻的輸入和t-1 時刻的隱層狀態(tài);Wn表示輸入層到隱層權值;Un表示上一時刻隱層到當前時刻隱層權值;⊙表示哈達馬積(hadamard product);σ為非飽和激活函數Relu。
使用IndRNN 循環(huán)單元的另一個原因是其可以進一步精簡神經網絡的訓練參數量。假設輸入序列向量表示維度為M,對于只有N個隱層單元的單層循環(huán)神經網絡而言,RNN參數量為N(M+N),LSTM引入了4個門控單元,參數量為4N(M+N),而IndRNN 由于結構上同層各神經元間彼此獨立,沒有與上一時間步所有神經元相連,參數量只有N(M+1)。使用切片循環(huán)神經網絡SRNN[18]并行計算結構代替經典RNN 串行結構。SRNN 將輸入序列切分為若干個等長子序列,每個子序列內的循環(huán)單元并列工作,這樣可以減少同層相鄰循環(huán)單元之間的計算依賴時間。本文基于SRNN 網絡結構建立SIndRNN 網絡模型。假設輸入序列X=[x1,x2,···,xT],其中:xi∈Rk表示每一時刻的輸入;T表示序列的總長度。對長度為T的序列X進行k次分割,可分為若干個長度為n的子序列,此時有:
對于原始網絡流量數據而言,數據分組與分組之間,分組內字節(jié)之間存在前后依賴的時序關系。本文提取的TLS 會話流序列長度為1 331,選擇先從會話層進行切分,再從數據分組層進行切分,如此可得到3 個隱藏層。由式(4)可知,當T=1 331,k=2時,可得各隱藏層子序列長度n=11。第一次切分得到長度相等的11 個子序列,每個子序列長度為121,恰好對應TLS 會話流中的11 個數據分組。再對每個子序列執(zhí)行相同的切分操作,得到最底層的最小子序列數s0=nk=112=121,每個子序列長度=11,SIndRNN 網絡結構如圖4 所示。
圖4 SIndRNN 網絡結構Fig.4 SIndRNN network structure
對第0 隱藏層121 個最小子序列進行并行訓練,將得到的121 個最小子序列訓練結果作為第1 隱藏層網絡的輸入。第1 隱藏層子序列的數量為11,同樣,將得到的11 個子序列并行訓練的結果作為第2 隱藏層網絡的輸入。第2 隱藏層子序列的數量為1,通過3 層隱藏層計算后最終得到隱狀態(tài)F,以此作為整個SIndRNN網絡的輸出。這種切片計算方式,既保留了子序列內部時序關系,也保留了子序列之間的時序信息,即網絡流中的數組分組間和數據分組內字節(jié)間的時序特征。SIndRNN 網絡訓練算法如下:
SIndRNN訓練速度優(yōu)勢分析:假設每個IndRNN單元處理數據的時間為t,輸入序列的長度為T,則IndRNN網絡訓練所花費的時間tIndRNN=T×t,SIndRNN 層子網訓練所花費的時間分別為n2×t、n×t、t,因此SIndRNN 網絡總訓練時間tSIndRNN=n2×t+n×t+t=(n2+n+1)×t,相比于IndRNN,理論上可節(jié)約的訓練時間treduce=tIndRNN-tSIndRNN=T×t-(n2+n+1)×t=(nk+1-n2-n-1)×t(已知T=nk+1)。在本文T=1331,k=2,n=11 的情況下,SIndRNN 與IndRNN相比,理論上訓練時間下降了再加上IndRNN 相比于LSTM、RNN 訓練參數量更少,因此SIndRNN 的訓練速度具有較大的優(yōu)勢。
在進行分類之前,需要將CNN 網絡與SIndRNN網絡輸出的2 種類型表征進行聚合,為豐富原始流量表征,本文采用拼接方式將2 種類型的特征向量進行串聯(lián),再輸入到分類函數中。對于二分類任務,基于數據流特征,使用sigmoid 分類器判斷輸入數據流為正常加密流量還是惡意加密流量。代價函數選擇更適用于二分類場景的二元交叉熵損失函數,函數公式如式(5)和式(6)所示:
對于多分類任務,輸出層神經元激活函數選擇softmax 函數,它將多個神經元的輸出映射到(0,1)區(qū)間內,各個輸出之和為1,對應于劃分到各個類別的概率。代價函數選擇適用于多分類場景的多元交叉熵損失函數Categorical Cross Entroy,函數式如式(7)和式(8)所示:
其中:c表示分類類別數。
模型訓練采用Adam 優(yōu)化器,通過計算梯度一階矩估計和二階矩估計,自適應調整學習率,并根據損失函數計算偏導數以更新模型權值W與偏置b。設網絡模型第l層權值與偏置分別為W(l)、b(l),參數更新過程如式(9)和式(10)所示:
其中:η為學習率。
本文提出基于CNN_SIndRN 的惡意TLS 加密流量識別模型的算法流程分為4 個步驟:
本文實驗環(huán)境運行在Windows10操作系統(tǒng)上,CPU為Intel酷睿i5-9400 F/2.9 GH/6 cores,內存16 GB,顯卡為英偉達GeForceGTX1660。網絡模型創(chuàng)建以及訓練參數調優(yōu)采用深度學習平臺keras2.25,后端調用tensorflow-GPU1.8完成并行加速運算,開發(fā)環(huán)境為python3.7.3。IndRNN 算法實現(xiàn)部分參考鏈接:https://github.com/titu1994/Keras-IndRNN/blob/master/ind_rnn.py。
CNN_SIndRNN 模型網絡結構如表1 所示。超參數設置經過多次實驗調整,最終選擇結果如表2所示。實驗結果采用五折交叉驗證,將樣本平均分為5 份,輪流將其中4 份作為訓練集,剩余1 份作為測試集,最終結果取5 次測試均值,訓練集、驗證集和測試集比例設置為8∶1∶1。
表1 CNN_SIndRNN 模型網絡結構Table 1 CNN_SIndRNN model network structure
表2 模型參數設置Table 2 Model parameter setting
本文實驗數據中惡意樣本來源為CTU-Malware-Capture[19]和Malware-Traffic-Analysis[20]2 個公開的實驗項目,樣本是通過在沙盒隔離環(huán)境內運行多款惡意軟件,并捕獲其在運行過程中發(fā)送給遠端控制服務器的網絡流量生成。正常流量使用CTU-Normal-Capture[21]數據集。原始流量文件格式為pcap,但并非完全都屬于TLS 類型流量。由于TLS 握手協(xié)商報文使用明文傳輸,因此在數據預處理階段,通過調用scapy 庫對捕獲的數據報頭部信息進行解析,對于一個完整的TLS 會話,其通信過程一定包含ClientHello、Server Hello、Certificate、ServerKeyExchange 等特定類型消息。如果某個數據流中沒有檢測到以上消息,則可將其判定為非TLS 流。若數據流中檢測到以上部分消息,但由于網絡環(huán)境不穩(wěn)定,出現(xiàn)TCP、TLS 握手過程不完整、丟包等現(xiàn)象導致TLS 連接建立失敗,這類流量也被判定為非TLS流。經過濾后得到的實驗數據具體分布如表3所示。
表3 數據集樣本分布Table 3 Data set sample distribution
實驗采用精確率(Precision),召回率(Recall)、調和平均數(F1 值)、整體準確率(Overall_ACC)及ROC 曲線來評估模型性能的指標。計算公式如式(11)~式(14)所示:
其中:TTPi表示屬于類別i的加密流量被正確識別為該類別數量表示不屬于類別i加密流量被識別為類別i的數量表示屬于類別i的加密流量被識別為非該類別的數量。ROC曲線的橫坐標、縱坐標分別由假陽率(FPR)和真陽率(TPR)繪制而成,對于二分類實驗,ROC 與坐標軸圍成的面積(AUC)越大,表示分類模型性能越好。
為評估CNN_SIndRNN 模型各模塊設計合理性,在CTU-Malware-Capture 數據集上對訓練損失函數的收斂性進行對比。實驗時,序列長度T設置為1 331,時序特征提取子模塊分別采用RNN、GRU、LSTM 與IndRNN 循環(huán)單元。結果如圖5 所示,各循環(huán)單元采用相同參數設置與相同的切片分層方式。IndRNN 在4 種循環(huán)單元中收斂速度最快且趨勢較為平穩(wěn),GRU 及LSTM 均有小幅度振蕩,RNN 則出現(xiàn)收斂困難,性能最差,這說明IndRNN在多層循環(huán)神經網絡捕獲長序列數據特征的優(yōu)勢。圖6 為消融實驗中單獨使用CNN、SIndRNN及同時使用CNN 與SIndRNN 模塊訓練準確率對比,可以看出組合局部模式特征與時序特征在識別惡意TLS 流量時,比單獨使用CNN 或SIndRNN更有效。
圖5 訓練誤差迭代對比Fig.5 Comparison of training error iterations
圖6 訓練準確率對比Fig.6 Comparison of training accuracy
3.4.1 二分類結果對比
為驗證本文所提CNN_SIndRNN模型在識別惡意TLS流量時的效果,在CTU-Malware-Capture數據集上與已有的自動挖掘特征深度學習基準模型1D-CNN、BotCatcher和經典機器學習模型SVM、隨機森林進行實驗對比。在基于1D_CNN的分類實驗中,采用文獻[5]提出的1D_CNN分類結構,提取TLS會話流前784個字節(jié),輸入2層一維卷積網絡提取字節(jié)序列局部特征組合。BotCatcher模型采用文獻[7]提出的分類模型,分別截取TLS會話流前1 024個字節(jié)和前10個數據包(不包含上關聯(lián)2個DNS數據包,每個數據包取前80個字節(jié)),分別輸入CNN與LSTM網絡,其中LSTM采用2層雙向網絡結構。SVM、隨機森林模型采用文獻[4]提出的基于TCP、UDP連接、TLS、X509證書日志三個維度共15個統(tǒng)計特征構建分類器,其中SVM核函數采用線性核,隨機森林基分類器n_estimators設置為100,對惡意樣本的實驗結果如表4所示,表中加粗數據表示該組數據的最大值。
表4 二分類實驗結果對比Table 4 Comparison of two classification experiment results
由表4 可知,CNN-SIndRNN 模型的召回率、F1 值分別為0.971 7、0.965 7,在5 種模型中最高,檢測出惡意樣本的效果最好。雖然經典機器學習算法也能取得較好的檢測結果,但需要依據專家經驗構建具有強分辨力的特征以區(qū)分惡意樣本與良性樣本,特征工程耗時復雜。而深度學習方法能夠自主選擇特征,不僅減少了工作量而且提升了分類效果。為更直觀評估本文模型在二分類實驗性能,根據測試結果中的假陽率(FPR),真陽率(TPR)繪制ROC 曲線圖,結果如圖7 所示。CNN-SIndRNN 模型的ROC_curve 面積為0.994 5,在5 種模型中面積最大,說明本文所提出模型對二分類測試數據集的ROC 擬合程度最好。
圖7 二分類ROCFig.7 ROC of two classification
3.4.2 多分類結果對比
在實際應用中不僅需要通過通信流量鑒別惡意軟件,還需要對其所屬類別進行標記,并劃分至相應家族以供安全人員研究。為此,在Malware-Traffic-Analysis數據集上對1D_CNN、BotCatcher、CNN-SIndRNN模型進行多分類實驗,以驗證模型的泛化能力。對3種模型采用早停(Early Stopping)策略動態(tài)控制模型訓練迭代次數,容忍度統(tǒng)一設置為20,即訓練模型過程中連續(xù)20次迭代后驗證集損失函數值仍在上升則停止訓練。3種模型訓練迭代輪數平均值分別為21、23、22,取模型前20輪的訓練準確率變化進行對比,結果如圖8 所示。BotCatcher、CNN-SIndRNN模型的初始驗證集準確率高于1D_CNN模型,對訓練數據的擬合能力更強,且隨著訓練輪數增加,CNN-SIndRNN模型的準確率達到最高。
圖8 3 種模型前20 次訓練過程驗證集準確率對比Fig.8 Comparison of accuracy rate of validation set in first 20 training processes of three models
圖9 是3 種模型在測試集上進行分類后輸出的8 維混淆矩陣,混淆矩陣主對角線上的數值為各類別被預測正確的比重(召回率,精確到小數點后2 位),惡意軟件家族識別結果F1 值及各模型整體準確率如表5 所示,表中加粗數據表示該組數據的最大值。1D_CNN 模型由于缺乏對流量層次結構和上下文時序信息特征表達,因此各類家族樣本的召回率和F1 值均低于BotCatcher 與CNN_SIndRNN 模型,整體準確率也只有0.795 8。本文所提模型整體準確率達0.848 9,比1D_CNN、BotCatcher 模型分別高出5.31%、0.32%,說明本文提出的組合模型在構建的流量特征空間中,自動挖掘惡意TLS 流量特征方面更有效。3 種深度學習模型對WannaCry 惡意樣本家族的識別率均較低,這是因為WannaCry 和ZBot 木馬變種在與C&C 服務器建立連接時通信行為較為相似,相當數量的WannaCry 樣本被誤判為ZBot,且該類別樣本數量較少,深度學習模型無法充分學習其隱含的高級抽象特征,導致識別效果欠佳。
圖9 3 種模型測試集預測結果混淆矩陣Fig.9 Confusion matrix of prediction results of three models on test data
表5 多分類實驗F1 值與整體準確率Table 5 F1 value and overall accuracy of multi classification experiment
表6 為3 種模型參數量、訓練、測試時間和模型大小對比結果,表中加粗數據表示該組數據的最大值。訓練時間是在約1 萬條訓練樣本上單次迭代時間的平均值,測試時間表示在所有測試樣本(1 389 條)單次測試平均值。1D_CNN算法所用時間最少,CNN_SIndRNN訓練時間和測試時間分別為7.499 s、0.453 s,比1D_CNN算法耗時稍長,說明影響模型整體運行速度的主要因素為時序特征提取模塊,但本文的SIndRNN模塊對CNN并行處理速度影響較小。BotCatcher 模型訓練耗時達489.902 s,在3 種模型中耗時最長,這是因為其LSTM采用循環(huán)輸入方式,對流量字節(jié)逐個處理,每步計算依賴上一時間步計算結果。而SIndRNN 采用的IndRNN循環(huán)單元在每個子序列內是并行工作的,在保證獲取長距離依賴關系前提下可大幅提高運行速度,減少計算等待時間,與BotCatcher 相比,訓練時間與測試時間分別節(jié)省了98.47%和98.28%。此外,本文還設計了變體模型CNN_IndRNN,即將流量字節(jié)視為整體處理,采用分層切片方式逐個輸入到IndRNN 模塊中,訓練時間約為49.99 s。與之相比,本文模型訓練時間可節(jié)省約85%,這也與2.2 節(jié)理論推算基本相符。本文設計的輕量級模型CNN_SIndRNN 模型 參數共有193 480 個,模型大小僅為785 K,遠低于1D_CNN與BotCatcher模型,在保證分類性能的前提下,縮短了模型訓練、檢測時間,并簡化了模型結構,有效地做到了分類精度和運行時間的均衡。CNN_SIndRNN 模型在計算實驗環(huán)境中每秒可處理3 066 條TLS 會話流,可以滿足校園網級別的惡意TLS 流量實時檢測要求。
表6 模型效果對比Table 6 Comparison of effect of models
本文基于CNN_SIndRNN 模型提出一種惡意TLS 流量快速識別方法,使用多層一維卷積在流量字節(jié)序列中提取局部模式特征,在不同層采用不同卷積核值以獲取更大局部感受野。為增強流量表征,并行設計一個IndRNN 網絡層用以挖掘流量字節(jié)間長距離依賴關系。此外,采用切片循環(huán)神經網絡并行計算結構代替經典RNN 串行結構,從而大幅提高模型訓練和檢測速度。實驗結果表明,與BotCatcher相比,該方法在保證惡意TLS 識別效果的前提下,訓練時間和檢測時間分別節(jié)省了98.47%和98.28%,并降低了模型復雜度。由于目前專門用于惡意軟件加密流量數據集相對較少,本文方法對少數類惡意加密流量的識別率及泛化能力仍有待提升。下一步將從數據層面處理樣本不均衡問題,對于少數類樣本采用上采樣方法并結合SMOTE 算法,根據Tomek link 距離合成新樣本。此外,嘗試在其他數據集上進行測試,以提高模型的泛化能力。