郭益民,張愛新
(上海交通大學 信息安全工程學院,上海 200240)
智能手機應用程序已成為訪問電子郵件、銀行等個性化計算服務的主要手段。然而,這種快速部署和廣泛可用的移動應用已經使它們成為各種惡意網絡流量的目標。惡意流量數據通常利用移動應用的更新機制,用惡意代碼感染現有的移動應用程序,從而危及智能手機的安全。最近的統計數據顯示,基于Android平臺的惡意流量占移動惡意流量的97%。用戶的私有數據如IMEI、聯系人列表和其他特定于用戶的數據是攻擊者的主要攻擊目標,對移動用戶的安全和隱私構成了嚴重威脅。因此,迫切需要識別和處理Android平臺的惡意流量數據。
流量分類在網絡流量工程中具有重要意義。通過將流量準確分類,可以實現服務質量保證(Quality of Service,QoS)、資源合理化使用、惡意軟件檢測以及入侵檢測等目的[1]。近年來,對于流量分類工作的研究在不斷發展。最初的方法是基于端口的流量分類方法,雖然簡單高效,但由于出現了很多應用程序偽裝端口號或不使用標準注冊端口號的情況,使得這種分類方法的準確度不斷下降[2]。文獻[3]提出使用深度包檢測機制(Deep Packets Inspection,DPI)進行流量分類的研究方法,解決了基于端口的分類方法帶來的問題。然而,這種基于數據包中載荷信息進行流量分類的方法只適用于未加密流量且計算開銷很高。因此,基于統計特征的新一代方法應運而生。這種分類方法依賴于統計特征或時間序列特性,能夠處理加密和未加密流量。基于統計特征的分類方法通常采用經典的機器學習(Machine Learning,ML)算法,如文獻[4]提出使用無監督聚類算法(K-means)進行流量分類,取得了90%的分類準確度。后來的文獻相繼使用監督式分類算法(如C4.5、隨機森林(Random Forest))與半監督式分類算法進行流量分類,取得了較高的分類準確度[5]。基于機器學習的流量分類方法由于依賴特征的選取,限制了它們的可推廣性。
隨著人工智能和大數據時代的到來,深度學習算法在圖像識別、自然語言處理以及情感分析等各大領域都取得了很好的應用。這種學習算法通過訓練過程自動選取特征,可以用來解決使用機器學習算法進行網絡流量分類的特征選取問題。文獻[6]使用多層感知機(Multilayer perceptron,MLP)進行流量分類,并與傳統機器學習算法的流量分類效果作比較,但是由于文中各分類器使用的分類數據集并不相同,其最終結果無法比較深度學習算法與機器學習算法對于流量分類的準確度。文獻[7]首次提出一種端到端的流量分類模式,使用傳統一維卷積神經網絡結構將數據處理為特定的文件形式,通過卷積神經網絡構造特征空間,然后使用分類器進行分類,取得了較好的分類結果。本文在其研究基礎上重新設計了一維卷積神經網絡模型,從神經網絡結構、數據預處理方式、代價函數以及梯度優化方面,提高了一維卷積神經網絡對于加密應用程序的流量分類效果。
本節提出將卷積神經網絡直接應用在原始流量數據上進行惡意流量分類,而不需要進行流量特征提取。該方案包括Android流量數據處理和卷積神經網絡訓練兩個關鍵流程。
數據預處理是指將采集到的流量數據文件從原始流量(pcap格式)轉換至CNN輸入數據(idx格式)的處理流程。本文運用文獻[8]提出的數據處理流程,將數據處理過程分流量切分、流量清理、圖片生成和IDX轉換4個部分。
1.1.1 流量切分
將一份原始流量數據切分為多個流量數據,輸入格式為pcap。如果輸出形式為“會話數據+所有協議層數據”或“流數據+所有協議層數據”,則輸出流量數據格式還是pcap;如果輸出形式為“會話數據+應用層數據”或“流數據+應用層數據”,則輸出流量數據格式為bin。
1.1.2 流量清理
該步驟將經切分后的數據流量進行流量清理。首先進行流量匿名處理,分別在數據鏈路層和IP層的數據中隨機分配MAC地址和IP地址;由于bin格式的流量數據中只有應用程序層,沒有數據鏈路層和IP層數據,所以經匿名處理后的結果文件是空。另外,內容相同的流量切分信息包經流量清理后會生成相同的文件,而重復的數據在訓練CNN時會產生偏差,因此需要刪除空的和重復的文件。
1.1.3 圖片生成
將流量數據進行可視化處理,并以位圖格式存儲、顯示。具體地,將清理過的流量數據文件按照28×28=784 Bytes進行統一長度處理。如果文件長度大于784 Bytes,則截取其前784 Bytes數據,小于784 Bytes的文件在后面補充0x00。統一長度后的文件轉換為bmp圖像,即一個字節對應一個像素,如0x00表示黑色,Oxff為白色,輸出位圖為png格式。本文對惡意廣告產生的流量、惡意勒索軟件產生的流量、惡意恐嚇信息流量以及惡意短信SMS流量進行可視化處理。在這4類流量中隨機選取一幅圖片,如圖1所示。試驗表明,不同種類流量的圖片區分度均較為明顯,使用圖片分類的方法可以取得良好效果。


圖1 流量數據位圖可視化效果
1.1.4 IDX格式轉換
應將上文所述的位圖格式文件成功轉換為IDX格式。IDX格式是大多數CNN格式輸入文件的標準格式,因為在每一個IDX文件中都包含一個圖片集的像素信息和統計信息。
卷積神經網絡的特點主要表現在3個方面[9]。
(1)在生物視覺神經系統局部感受野的啟發下,提出各層神經元的部分連接或稀疏連接思路。下一層的某個神經元只與上一層的部分神經元連接,而不是傳統的全連接方式,極大地減少了連接數量。這表現在圖像上,即為每個像素只與周邊若干像素的關系是最緊密的。
(2)權值共享或參數共享。即每個神經元與前一層的所有連接都采用相同的權重值,進一步減少了要訓練的參數數量。每一組相同的連接常被稱為一個過濾器或卷積核,用以生成一個特征映射,對應一種特征的提取。實際應用中,通常會使用多個過濾器,可以提取多個特征,生成多個特征映射。
(3)池化或下采樣。池化的作用是為了得到更具代表性的特征值。對于卷積層獲得的特征映射,通常會將其分割成多個相鄰小區域并進一步簡化為一個單值,這個簡化過程即為池化。
通過上述過程,卷積神經網絡可以大幅度減少訓練參數的使用,并且其產生的圖像在性能上有所改善。經過上述過程生成的圖像具有3個特性,分別為位移不變、尺度不變以及旋轉不變。
流量數據的實際概念是按層次結構組織的一維字節流。這類數據主要由字節、數據包、會話和結構信息組成。這類序列類型數據非常適合采用卷積神經網絡進行流量分類。進一步地,預處理后的流量數據規模和每張圖片的尺寸都類似于MNIST手寫體識別數據信息,因此本文采用LeNet-5[10]的CNN結構,模型結構如圖2所示。

圖2 Android流量數據處理的卷積神經網絡結構
流量數據處理的具體過程如下。首先輸入層接收IDX格式的流量圖像信息,并適當調整像素值,讓其由0~255直接轉換為0~1,實現歸一化。在卷積層C1運算處理時,流量數據經過卷積層C1,由尺寸為5×5的卷積核進行處理。由于C1層共具有32個通道,所以最終會生成32個尺寸為28×28的特征圖。經過處理的特征圖進入池化層P1,該層會對特征圖進行一次2×2的最大值池化處理,最終生成為32個尺寸為14×14的特征圖。經過池化操作的特征圖進入第二個卷積層C2,該卷積層的卷積核尺寸與C1相同,都是5×5,但是該層共具有64個通道,所以最后會生成64個尺寸為14×14的特征圖。然后進入第二個池化層P2,在此層會對特征圖進行2×2的最大值池化操作,與P1層操作相同,所以共生成64個7×7的特征圖;接著會被兩個全連接層處理,最后輸出數據其輸出節點數分別為1 024和10。最后,使用一個Softmax函數將輸出結果轉換為0~1的概率值。CNN各層輸入、輸出及參數設置如表1所示。

表1 惡意流量分類CNN結構及參數設置
對上述基于卷積神經網絡的Andriod惡意流量分析方案進行仿真測試與分析。仿真實驗平臺采用TensorFlow深度學習框架,運行在Ubuntul6.04,64位操作系統上;實驗數據集為CICAndmal2017[11]。訓練時,應將步長調整參數mini-batch調整為50,其損失函數應該采用交叉熵函數,具體優化方法應采用梯度下降分析法。由于本文主要是將網絡流量區分為惡意流量和正常流量,因此進行2分類實驗。
實驗結果數據如表2和表3所示,其中表2為基于本文方案在樣本數據與實驗數據在不同比值下的惡意流量分類識別效果,表3則將本文方案與傳統機器學習方案支持向量機(Support Vector Machine,SVM)、邏輯回歸(Logistic Regression,LR)、樸素貝葉斯(Naive Bayes,NB)以及深度信念網絡(Deep Belief Network,DBN)[12]進行了對比分析。

表2 基于卷積神經網絡的惡意流量分類測試結果

表3 與傳統機器學習提取特征算法對比
本文采用以下標準評價卷積神經網絡的流量分類方法:精確度(Accuracy,A)、查準率(Precision,PRE)、查全率(Recall,REC)、F1值(F1-Score,F1)。精確度A被用來檢測實踐方法的整體應用效果,查準率P、查全率R以及F1值被用來分析某一種流量的識別效果。表4為預測分類與實際分類正例負例的混淆矩陣。

表4 正例負例混淆矩陣
查準率是指測試集提取出的正確信息與訓練集和測試集提取出的信息比值:

查全率是指測試提取的正確信息數與訓練樣本中信息數的比值:

F1值是指預測準確率與查準率的調和平均值:

準確率是指正確信息數占所有訓練集以及測試集的數目:

正常流量與惡意流量的各種形式的效果有一定差別。惡意流量產生的4種效果與正常流量產生的4種效果相比更加均勻,正常流量產生的4種效果差別較大。產生這種現象的主要原因是兩種流量的來源不同:通常正常流量的來源為部分設備的仿真,而惡意流量來自于真實的網絡環境。這個差別產生的具體原因至今未知,相信未來會有進一步的探究。
分析結果可知:CNN與支持向量機的分類方法相比具有更好的效果,其查準率和查全率與之前最好結果相比分別提高2.13%和5.87%;CNN在與樸素貝葉斯的流量分類方案相比也取得了非常好的效果,查準率和查全率分別提高了2.93%和11.87%;CNN在與DBN的流量分類方案中的實施結果也比以往的方法有所提高,其查準率和查全率分別比以往提高了2.9%和0.9%;但是,CNN在與邏輯回歸的流量分類方案中,流量分類方面表現并不突出,即使查全率提高了9.8%,但是應用效果并不好,查準率下降0.7%。由此可知,在邏輯回歸方面的方案的實施效果并不好,其流量分類效果一般,這與流量的性能大幅度提高形成了鮮明對比。經過查看最后生成的圖片發現,本次生成圖片的區分度比以往生成圖片的區分度效果好,具體原因還未可知,需要進一步探究分析。
綜上所述,本次的4個實驗基本上都已經取得較好的實驗效果,可以驗證本文提出的觀點,即基于CNN的端到端的加密流量分類方法具有有效性。
本文主要研究分析傳統的流量分類技術,并且根據實際應用情況做適當改進,提出新的使用卷積神經網絡學習方法。該方法可以將惡意流量進行分類,在實際應用中可以將其直接運用到移動端(Android)領域。這種方法打破常規,可以不需提前得知流量特征,在應用中直接將原始流量看作數據輸入,使卷積神經網絡模型自動學習流量特征并執行分類,達到了自動學習流量特征的目的,更有可能獲得全局最優解。實驗結果表明,本方法在公開數據集CICANDMAL2017上改進了目前的最好結果,驗證了本方法的有效性。
現實生活中,可以對網絡流量進行異常檢測的方法有很多,常見的方法可以分為4類,分別為基于分類、基于統計、基于聚類和基于信息論。本文應用的是基于分類的檢測方法,是最常見的一種方式。這種對網絡流量的惡意檢測方法屬于機器學習中有監督學習的一種。實驗過程中,有監督學習的一個難點是訓練數據必須為有標簽數據。但是,在現實應用過程中,帶有標簽的網絡流量數據是不常見的,所以其采集具有一定難度,有時無法采集有標簽的網絡流量數據。在實際采集過程中,多數情況獲取的流量都是無標簽流量[13],不具備應用價值。部分傳統對網絡流量進行異常檢測的方法,如基于聚類方法更加適合現實生活的應用。因此,在充分借鑒傳統方法的基礎上,如何采用少量有標簽流量數據和大量無標簽流量數據進行半監督的訓練模型,甚至完全不采用帶有標簽的流量數據,只采用無標簽流量數據進行無監督的訓練模型[14],是基于深度學習的網絡流量異常檢測方法在實際應用過程中急需破解的難題。因此,后續工作將利用其他機器學習的方法解決使用少量標簽的數據問題。