鄒 源 張 甲 江 濱
(清華大學網絡科學與網絡空間研究院 北京 100084)
加密流量已經成為互聯網中的主要流量,根據思科統計,截至2018年,互聯網中超過60%的網絡流量使用了加密技術。Chrome等主流瀏覽器對于不加密的網站進行報警的做法也加速了Web服務中HTTPs技術的部署。與此同時,惡意軟件與控制服務器的通信方法從傳統的HTTP請求逐漸向加密流量轉變,截至2018年,超過70%的惡意軟件通信流量使用了TLS加密技術[10]。在這一背景下,對加密流量中的惡意流量檢測有著迫切的需要。
TLS加密技術位于傳輸層和應用層之間,用于在兩個通信應用程序之間提供保密性和數據完整性。一方面,它為主機之間的通信提供加密與安全保護,有效防止了中間人攻擊,保證了數據的可靠性傳輸。另一方面,它讓基于流量內容的檢測方法變得困難,讓一些惡意流量有了可乘之機。攻擊者在成功入侵主機后,為了繞開防火墻的限制,通常會控制失陷主機主動連接攻擊者建立的服務器(控制與命令服務器),接收攻擊者發(fā)布的指令,這一類的流量稱為命令與控制流量。由于服務端主機由攻擊者搭建,攻擊者為了搭建方便,使用與正常網絡服務相似的網絡協議和服務框架,比如HTTP和HTTPs,這使得區(qū)分惡意流量和正常流量變得困難。
在加密環(huán)境下檢測方法依賴于識別流量的行為模式,從流量的傳輸包大小和時間序列中分析和尋找惡意流量的特征,然后建立機器學習的模型對正常流量進行區(qū)分。其中的特征提取是一個基于直覺和專業(yè)知識的手動過程,它比最終分類算法的選擇更加重要。但是,在攻擊者變更攻擊代碼后,流量的行為模式在特征集上會隨之變化,檢測方法需要人工分析新的流量特征檢測惡意流量。
本文提出一種基于長短時記憶(LSTM)神經網絡的惡意流量檢測方法,它可以使用深度學習自動提取流傳輸模式的特征,在此基礎上建立分類器對惡意流量進行檢測。
惡意流量的檢測是網絡安全領域一個常見問題,包括攻擊階段的滲透測試流量檢測、拒絕服務攻擊檢測、暴力破解攻擊檢測,以及控制主機后的隱蔽隧道通信檢測、命令與控制流量(C&C)檢測等。本文研究目標是檢測C&C流量,現有的檢測方法主要可以分為三類:(1) 依賴于對傳輸內容的檢測,通過深度包解析的方法匹配傳輸流量中的惡意關鍵詞,比如文獻[10]提出的基于HTTP模板檢測botnet通信的方法,這類方法在不對應用流量解密的情況下無法提取流量中的關鍵詞,因此不能檢測加密通信;(2) 基于上下文流量進行檢測的方法,比如文獻[9]和文獻[11]提出的惡意域名檢測,針對失陷主機在DNS請求中使用的DGA域名進行檢測,這類方法無法檢測直接使用IP地址或者以P2P形式構造的僵尸網絡;(3) 基于TCP/IP層的傳輸信息提取統計特征,包括包長的均值、方差、峰值等,利用特征建立檢測模型,包括文獻[3]提出的基于包長統計信息檢測視頻流量中的隱蔽隧道、文獻[12]提出的對移動APP流量類型進行分類的方法。
綜上,在惡意加密流量檢測的場景下,目前的方法中只有基于流量行為模式進行識別的方法依然可以全面地檢測加密后的惡意通信流量。但是這一方法依賴人工特征提取,在攻擊者更新代碼后需要重新選擇分類器的模型,否則檢測的準確率會快速下降[5]。同時人工方式提取的特征并不能包含原始序列的所有信息,會丟失一些重要的信息,而且一些復雜的隱含特征可能和最終的結果具有很強的相關性很難通過特征工程提取。
深度學習除了在語音識別、計算機視覺領域應用成功外,在信息安全中也有成功的案例。文獻[6]提出使用神經網絡來發(fā)現系統事務日志中的安全問題,文獻[2]提出使用循環(huán)神經網絡來識別TOR的流量訪問的具體的服務端網站指紋。
本文使用加密會話中的包長傳輸模式與包傳輸時間序列進行訓練,不依賴人工提取傳輸特征,利用時間序列預測的LSTM模型自動進行特征提取,對惡意加密流量和正常流量進行分類,避免人工提取的特征不包含原始序列中一些重要信息。
循環(huán)神經網絡(RNN)是基于時間序列的模型,與傳統的前饋神經網絡不同,它能夠建立先前信息與當前環(huán)境的時間相關性,是一個對序列化數據進行特征提取和分類的有效方法。原始的RNN方法存在梯度爆炸和梯度彌散問題:隨著網絡層數的增加,后面節(jié)點對于前面節(jié)點的感知能力變弱,直到忘記前面的有效信息。
為了提高神經網絡的長期記憶能力,Hochreiter等[1]在1997年提出了長短時記憶(LSTM)神經網絡。LSTM是RNN的一個變種,主要應用在數據分類問題中,包括自然語言翻譯、智能語音和文本分類等多個方面,由于可以完美模擬多個輸入變量的問題,故還可以用于時間序列檢測。
LSTM添加了記憶單元專門用于保存歷史信息,記憶單元的結構如圖1所示。每一個記憶單元含有三個輸入:來自原始輸入序列中當前時刻t傳入模型的所有有用數據xt,到t-1時刻模型記錄的歷史狀態(tài)Ct-1和所有有用信息的隱藏向量ht-1。每一個記憶單元的輸出包括當前時刻記錄的所有有用信息ht和當前狀態(tài)ct。
圖1 LSTM單元標準結構
為了歷史信息中的有效內容,輸入數據要通過三個門:遺忘門(f)、輸入門(i)、輸出門(o)。輸入門負責判斷是否丟棄歷史信息,它的輸入是歷史隱藏信息ht-1以及當前序列節(jié)點信息xt-1,使用sigmoid函數輸出一個0~1之間的值,表示是否遺忘歷史流量傳輸模式的信息,1表示保留歷史信息,0表示遺忘歷史信息,遺忘門的計算公式如下:
ft=σ(Wfx·xt+Wfh·ht-1+bf)
(1)
式中:W表示神經單元中的權重矩陣,其第一下標表示運算門,第二下標表示運算參數,比如Wfx表示遺忘門對序列輸入x的權重矩陣。b是對應的權重偏置,下標表示對應的門,比如bi表示對輸入門的權重偏執(zhí)。
同理,輸入門和輸出門對應的計算公式如下:
it=σ(Wix·xt+Wih·ht-1+bi)
(2)
ot=σ(Wox·xt+Woh·ht-1+bo)
(3)
最后,候選狀態(tài)gt和當前狀態(tài)st決定在傳輸包中可以保留哪些新的信息到下一個神經元。
gt=σ(Wox·xt+Woh·ht-1+bo)
(4)
st=gt·it+st-1·ft
(5)
最終根據傳輸包的狀態(tài)確定輸出值,以tanh函數處理當前單元狀態(tài),并與輸出門相乘得到當前單元的隱藏向量ht,再傳遞給下一個單元。
ht=tanh(st)·ot
(6)
通過這樣的方式將流量傳輸序列的前后信息進行學習,得到連接中的前后包之間的關聯信息,實現流傳輸特征信息的提取。
本文針對網絡流量進行檢測,對于數據的處理如圖2中的數據處理模塊所示,流量通過流量探針轉化成網絡日志,再經過數據預處理與測試集合劃分后輸入到神經網絡分類器中。
圖2 數據探針和神經網絡分類器的框架
探針系統負責采集出每一個加密流的傳輸日志,其日志信息包括:客戶端IP、服務端IP、客戶端端口、服務端端口、傳輸包到達時間、傳輸包大小,以及從TLS密鑰協商過程中解析出的客戶端密鑰套件、服務端證書信息。
每一個加密連接序列由不同流量包的日志信息組成,在探針中使用了五元組(客戶端IP、服務端IP、客戶端端口、服務端端口、協議)與TCP層的ACK字段對包序列進行排序,從而避免由于網絡環(huán)境不穩(wěn)定造成包序列的混亂。序列中每一個傳輸包都保留了傳輸時間間隔、傳輸包大小、傳輸方向。傳輸時間間隔是當前包與上一個包到達時間之間的差值,統計單位是毫秒。由于網絡環(huán)境的原因,可能出現先發(fā)包后到,因此時間間隔包括負值。傳輸包大小的統計單位是字節(jié),傳輸方向用發(fā)送和接收兩個變量表示,比如客戶端發(fā)送表示為(0,1),服務端發(fā)送表示為(1,0)。
由于不同連接持續(xù)的時間不一致,外加探針緩存流量在性能上的限制,對于每一個加密流量只能存儲有限長度的包序列。通過實驗比較,最終選擇保留連接中前50個包。對于長度不滿的序列進行了填充,填充的內容是傳輸包中不會出現的異常值(比如0x0fffffff),最后在訓練算法模型時過濾掉這些異常值。
一部分惡意流量在連接控制服務器時進行了大量的重復嘗試,產生了大量重復流量,需要對這部分流量進行去重,避免訓練數據不平衡造成訓練過擬合;另一方面,在真實網絡環(huán)境下,惡意流量相對正常流量占有的比例不高,通過沙箱采集的流量數量也遠遠少于現實環(huán)境采集到的白流量數量。為了在實驗中驗證模型的有效性,對惡意流量進行了樣本過采樣,使用8倍數量的原始數據加入到訓練集合。
構建的神經網絡分類器的整體框架如圖2所示。數據處理輸出的加密流序列將由LSTM網絡中自動選取有效的特征?;贚STM的預測模型由輸入層、隱藏層、輸出層組成,如圖2所示。其核心設計是中間的隱藏層,通過實驗比較,選擇保留了20個神經元。訓練過程中,通過向前操作,將LSTM上一時刻的信息以記憶流的形態(tài)不斷向后傳遞,影響每個新輸入數據的處理和每個階段的輸出。輸入層的輸入數據包含每一個流量包的大小、到達時間與上一個到達包的時間間隔絕對值以及傳輸方向。
LSTM提取完隱藏特征后發(fā)送到Softmax神經網絡分類器。Softmax本質上是一種神經元輸出的概率分布形式,最后一個輸出層的節(jié)點個數與分類任務的目標數相等。對于每一條加密連接的行為特征,神經網絡生成一個二維的數組作為輸出結果,分別表示屬于黑流量和白流量的概率。
實驗基于CentOS7的操作系統,Python 3.6的環(huán)境,利用Pandas進行數據預處理,采用Keras和Tensorflow的深度學習框架構建惡意流量檢測模型。作為對比的特征提取與監(jiān)督學習方法使用Sklearn機器學習框架搭建。
在惡意流量分類領域公開的訓練數據集很少,本文通過某個大型校園網絡進行正常流量的數據采集,使用沙箱對惡意流量進行數據采集。本實驗使用23 145個惡意程序在沙箱中收集了120萬條惡意TLS流量;在清華的校園網邊界收集了來自3 132個客戶端設備的1 000萬條正常TLS流量。為了保障白樣本的可靠性,我們使用白名單證書與安全客戶端列表對邊界網絡進行了過濾。為了保障黑樣本的豐富性,我們收集了來自276個惡意家族的24 786個有效二進制樣本。
為了保證驗證算法的有效性,數據集使用隨機劃分法分為訓練樣本集和測試樣本集,為了充分利用數據,采用十折交叉驗證的方式來進行訓練和驗證。
實驗以黑流量為正樣本,正常流量為負樣本。分類混淆矩陣如表1所示,評價指標包括準確率(AC)、召回率(Recall)、誤報率(FA),其計算方法如下:
(7)
(8)
(9)
圖3反映了訓練過程中檢測的準確率與訓練迭代次數的關系。由實驗結果可以看出,模型在迭代到10次以后基本收斂,訓練集準確率最終達到了99.93%,驗證集準確率達到了99.76%,說明模型能成功的從流量序列中提取行為特征區(qū)分惡意流量。
圖3 準確率和迭代次數的關系曲線
為了比較LSTM的檢測效果與人工提取特征的分類器的檢測效果,本文根據文獻[3]中提出的22個TCP層流量統計特征以及常見的機器學習構造了多個分類器用于對比。
由表2可以看出,本文提出的基于LSTM的惡意流量檢測算法表現優(yōu)于傳統的決策樹(DT)、支持向量機(SVM)和隨機森林(RF)算法。盡管從準確率數值上看提升不多,但是LSTM的誤報率只比傳統的檢測模型低了0.01左右。由于現實網絡中流量數量非常龐大,這一點提升可以減少大量的誤報。以清華的邊界流量為例,每天三千萬條加密流量在誤報率降低0.01的情況下每天會減少30萬條錯誤的報警。
表2 惡意流量檢測結果 %
在圖4中,不同檢測模型的ROC曲線下方的面積(Area Under Curve,AUC)越大,模型的檢測效果越好,可以看到LSTM具有最大的AUC值,檢測效果最好。
圖4 LSTM模型對惡意流量的檢測效果
由于現實中網絡流量很多的原因,對于惡意流量的檢測通常會限制誤報率,當所有模型的誤報率都限制在1%以下時,從圖4中可以看到,LSTM的檢測準確率高出其他模型很多。
本文提出了一種基于LSTM的在加密環(huán)境下檢測惡意網絡流量方法。該方法首先利用網絡探針從原始網絡流量數據中提取流量日志,并通過TCP發(fā)送順序還原了包序列。接著以日志中的包長、方向和傳輸時間間隔作為輸入,使用LSTM分析流量傳輸模式的長距離依賴關系,在惡意加密流量檢測中取得了比較好的效果。該算法以沙箱采集的惡意程序流量和現實網絡中的正常Web流量作為研究對象,驗證了LSTM方法對網絡流量數據的非線性表示和分類能力。
在加密技術廣泛應用的互聯網環(huán)境下,如何有效地檢測出失陷主機是對網管人員的一大挑戰(zhàn)。本文提出的檢測方法具有較低的誤報率和自動提取特征的優(yōu)勢,可以更好地應用于現實網絡環(huán)境。