來源:《Malware Traffic Classification Using Convolutional Neural Network for Representation Learning》,ICOIN 2017
一、引言
流量分類是將網絡流量與生成應用程序關聯起來的任務,它是網絡管理特別是網絡安全領域中至關重要的任務。在網絡安全領域,流量分類實際上代表了對網絡資源惡意使用的異常檢測等活動的第一步[1]。
有四種主要的流量分類方法[1]:基于端口的、深度數據包檢查(DPI)、基于統計的、基于行為的。從人工智能的角度來看[2],基于端口和基于dpi的方法是基于規則的方法,它通過匹配預定義的硬編碼規則來執行流量分類。基于統計和行為的方法是典型的機器學習方法,它通過使用一組選擇性特征從經驗數據中提取模式來對流量進行分類。雖然經典的機器學習方法解決了許多基于規則的方法無法解決的問題,例如加密的流量分類和高計算成本,但是它面臨著設計適當特性的新挑戰[3]。
表征學習是近年來快速發展的一種快速發展的機器學習方法,它從原始數據中自動學習特征,在一定程度上解決了手工設計特征的問題[4]。特別是在圖像分類和語音識別等多個領域,深度學習方法是表征學習的一種典型方法,取得了很好的效果[5] [6]。本文的主要目標是嘗試將表征學習應用于惡意軟件流量分類領域,并證明其有效性。圖1展示了人工智能視角下的流量分類分類。圖2顯示了這些方法的不同工作流程,陰影框表示能夠從數據中學習的組件[2]。
本文所使用的技術是卷積神經網絡(CNN),它是目前最流行的表征學習方法之一。我們沒有從流量中提取特征,而是將原始的流量數據作為圖像,然后使用CNN進行圖像分類,這是CNN最常見的任務[7],最終實現了惡意軟件流量分類的目標。據我們所知,這一有趣的嘗試是第一個使用原始流量數據的表征學習方法在惡意軟件流量分類領域的應用。由于交通數據的連續性和圖像數據的離散性的不同,研究了多種流量表示類型,并通過實驗找到了最佳類型。為了證明我們所提出的方法的可擴展性,我們使用三種類型的分類器進行兩種場景的實驗,最終的平均精度為99.41%,符合實際應用標準。此外,還創建了一個流量數據集USTC-TFC2016,并開發了一個數據預處理工具包USTC-TK2016。他們和我們的訓練和測試源代碼都將在GitHub上發布給感興趣的研究人員。
二、相關工作
基于規則的流量分類方法在行業中比較成熟,相關工作主要集中在如何準確提取映射規則和提高性能。Finsterbusch等[8]總結了當前基于dpi的流量分類方法。傳統的流量分類機器學習方法吸引了學術界的大量研究,相關工作主要集中在如何選擇一個更好的特征集上。Dhote等[3]提供了一項關于網絡流量分類特征選擇技術的綜述。
現在有一些關于表征學習的研究。Gao等[9]提出了一種使用深度信念網絡的惡意軟件流量分類方法。Javaid等[10]提出了一種使用稀疏自動編碼器的惡意軟件流量識別方法。這些研究都采用了深度學習技術,并應用于基于網絡的入侵檢測系統的設計。但是在他們的研究中也存在一個同樣的問題,他們都使用手工設計的流特征數據集作為輸入數據[11]。表征學習最大的優點是能夠直接從原始數據中學習特征,并且在圖像分類領域和語音識別領域的成功應用已經充分證明了這一點。不幸的是,上述兩項研究剛剛放棄了這一優勢。Wang[12]提出了一種基于原始數據的多層自動編碼器(SAE)網絡協議識別方法,實現了較高的精度。流量分類和協議識別是非常相似的任務。因此,認為表征學習方法能夠在惡意軟件流量分類任務中取得良好的效果是合理的。
在本文中,我們使用原始的交通數據進行惡意軟件流量分類任務的研究,我們使用的表征學習方法是CNN,在圖像分類任務中優于SAE。
三、方法
3.1數據集
正如Dainotti et al.[13]所指出的那樣,缺乏各種可共享的跟蹤數據集作為測試數據是在流量分類上取得進展的最明顯的障礙。許多關于惡意軟件流量分類的研究使用了自收集的流量或安全公司的私人流量,從而破壞了其結果的可信度。由于經典的機器學習方法側重于特征選擇技術,許多當前的公開流量數據集都是流特征數據集,而不是原始的流量數據集[11]。[14]。這些數據集不能滿足我們對原始流量的要求。在提供原始流量的數據集中,幾乎沒有包含足夠的正常和惡意軟件流量數據,比如[15]。
為了解決這些問題,創建了一個數據集USTC-TFC2016。數據集由兩部分組成,如表1和表2所示。第一部分,從2011年到2015年CTU研究人員從真實的網絡環境中收集到的10種惡意軟件流量[16]。對于一些太大的流量,只使用了一部分。對于一些規模過小的流量,我們將它們合并在同一個應用程序中。第二部分包含了使用IXIA BPS[17]采集的10種正常流量,這是一種專業的網絡交通仿真設備。關于模擬方法的信息可以在他們的產品網站上找到。為了盡可能地反映更多的流量,十種流量包含八個類的通用應用程序。USTC-TFC2016數據集的大小為3.71GB,格式為pcap。它將會在GitHub上發表給感興趣的研究人員。
3.2網絡流量表示
基于機器學習的流量分類方法首先需要根據一定的粒度將連續的流量分割為離散單元。另一方面,可以在每個包中選擇不同的OSI或TCP/IP層。下面介紹如何在我們的方法中選擇流量粒度和包層。
1)流量粒度
網絡流量分割粒度包括:TCP連接、流、會話、服務和主機[13]。不同的分割粒度會導致不同的流量單元。我們的方法使用的是流和會話,這也是大多數研究人員使用的方法。流被定義為具有相同5元組的所有包,即源IP、源端口、目的地IP、目的端口和傳輸層協議。會話被定義為雙向流,包括流量的兩個方向。正式描述如下:
不同的流量或會話可能有不同的大小,但是CNN的輸入數據大小必須是一致的,所以只使用每個流量或會話的前n個字節(本文中的n=784)。我們可以對這個選擇給出一個直觀的解釋。通常,流或會話的前面部分通常是連接數據和一些內容數據,應該最好地反映流或會話的固有特性。這一選擇與[18,19]非常相似,它研究了典型的機器學習方法的惡意軟件流量識別。此外,由于只使用了前數百個字節,所以這種方法比許多基于規則的方法更輕量級。
2)包層
從包層分析的角度來看,直覺的內在特性應該反映在TCP / IP模型的應用層,即OSI模型的第7層。例如,STMP協議代表電子郵件通信,HTTP協議代表瀏覽器流量。基于這個假設,Wang[12]只選擇了第7層,并將其稱為TCP會話有效負載。另一方面,其他層的數據也應該包含一些流量特征信息。例如,傳輸層中的端口信息可以使用標準端口號識別大多數應用程序。有時,標記信息可以識別網絡攻擊,例如SYN攻擊和RST攻擊。因此,使用了兩種類型的包層:所有層(全部)和第7層(L7)。應該注意的是,會話或流中的IP和MAC信息可能會損壞特征提取過程。為了消除這種負面影響,我們必須通過隨機化(通常被稱為流量匿名化或凈化處理[20])來移除這些信息。
綜上所述,有四種類型的流量表示:Flow+ All、Flow + L7、Session + All、Session + L7。他們的性能測試使用了1)部分介紹的兩種類型的流量數據集,最后確定了最佳的表示類型。本研究共進行了8次實驗,結果與分析見第四節。
3.3數據預處理
數據預處理是將原始流量數據(pcap格式)轉換為CNN輸入數據(idx格式)的過程。它包括四個步驟:流量分割、流量清除、圖像生成和IDX轉換,并相應地開發了一個toolkit USTC-TL2016。圖3顯示了數據預處理的全過程。
步驟1(流量分割)。這一步分割了連續的原始流量,以增加離散的流量單元。輸入數據格式為pcap。如果表示類型是Flow + All或Session + All,則輸出數據格式為pcap。如果表示類型為Flow + L7或會話+ L7,則輸出數據格式為bin。
步驟2(交通清潔)。該步驟首先執行流量匿名化/清洗,在數據鏈路層和IP層分別隨機化MAC地址和IP地址。這是可選的,例如,當所有流量來自同一網絡時,MAC和IP可能不再是區分信息,在這種情況下,我們不需要執行它。流量清洗的第二個作用是清除文件。有些包沒有應用程序層,所以結果bin文件是空的。有些包在具有相同內容時生成相同的文件,而重復的數據在訓練CNN時可能導致偏差。那些空的和重復的文件需要刪除。此步驟中的數據格式沒有變化。
步驟3(圖像生成)。這一步首先將所有文件整理成均勻長度。如果文件大小大于784字節,則將其裁剪為784個字節。如果文件大小小于784字節,則在末尾添加0x00以補充到784字節。使用相同大小的結果文件被轉換為灰色圖像。原始文件的每個字節表示一個像素,例如,0x00是黑色的,0xff是白色的。實際上,這種轉換是可選的,我們可以直接將文件轉換為IDX文件。這種轉換只是為了向研究人員展示視覺圖像,所以他們可以以視覺的方式進行分析。
步驟4(IDX轉換)。此步驟將圖像轉換為IDX格式文件。IDX文件包含一組圖像的所有像素和統計信息。IDX格式是機器學習領域常見的文件格式[21]。
USTC-TFC2016流量數據集使用USTC-TK2016工具包進行處理,共生成752,040條記錄。表三顯示了結果。因為會話包括雙向流,會話的數量通常少于流。
3.4可視化分析
在此部分分析了數據預處理過程步驟3后生成的圖像。每個灰色圖像的大小為784(28*28)字節。Session +all的可視化結果如圖4和5所示。其他三種表示形式的結果通常與它們相似。
圖4顯示了所有類的可視化結果。很明顯,他們很容易區分。只有很少的圖像是非常相似的,例如FTP和SMB。圖5顯示了同一流量類中的一致性。在一個類中隨機選取9個圖像,隨機選取4個類。同樣明顯的是,微博、魔獸和Neris的圖像紋理非常相似。只有Geodo圖像可以被劃分為兩個子類,但即使在各自的子類中圖像的紋理仍然非常相似。其他16個類的一致性大體相似。通過可視化分析,我們得出結論:不同的流量類別具有明顯的歧視程度,每一類流量都具有高度的一致性,因此我們有理由認為我們的方法可以取得良好的效果。
3.5CNN架構
預處理數據集的大小和每個圖像的大小都非常類似于經典的MNIST數據集[21],因此使用了類似于LeNet-5[22]的CNN體系結構,但是在每個卷積層中使用了更多的通道。
CNN首先從IDX文件中讀取28*28*1的流量圖像。這些圖像的像素從[0,1]被歸一化到[0,1]。第一個卷積層C1執行一個卷積運算,有32個大小為5*5的內核。C1層的結果為32個特征圖,大小為28*28。在 C1層之后,在P1層中有一個2*2的max池操作,結果是32個特征圖,大小為14*14。第二個卷積層C2的內核大小也是5*5,但有64個通道。結果是64個尺寸14*14的特征圖。在第二個2*2的max池層P2之后,生成了64個大小為7*7的feature map。最后兩個層是完全連接的,結果大小分別為1024和10。一個softmax函數用來輸出每個類的概率。此外,輟學是用來緩解過度擬合的。在F部分中引入的三種類型的分類器中都使用了CNN架構。
3.6可擴展性的研究
兩種應用場景,包括三種類型的CNN分類器,用于驗證所提議方法的可伸縮性:二進制分類器,10級分類器,20級分類器。圖6顯示了兩個場景的實驗設置。我們使用了b部分確定的最佳流量表示類型(二進制和10級分類器)。在實際應用的流量分類中,最常見的要求是惡意軟件的流量識別,這也是NIDS的主要目標。如果必要的話,可以進行更精細的流量分類來識別每一類惡意軟件和正常的流量。在這種情況下,首先執行一個二進制分類來識別惡意軟件或正常,然后分別執行兩個10級分類來識別每一類流量。場景B(10級和20級分類器)。在某些應用中,我們需要對所有類型的流量進行一次分類,這就要求對分類器進行比較高的性能。執行了一個20級的分類,使用所有類型的流量。
4評估
4.1實驗步驟
TensorFlow[23]被用作實驗軟件框架,運行在Ubuntu 14.04 64位操作系統上。服務器是戴爾R720,有16核CPU和16GB內存。一個Nvidia Tesla K40m GPU被用作加速器。有十分之一的數據被隨機選擇作為測試數據,其余的是訓練數據。小批量是50,成本函數是交叉熵。在TensorFlow中構建的梯度下降優化器被用作優化器。學習率為0.001,訓練時間約40個。
4.2評價指標
使用了四個評價指標:準確性(A)、精度(P)、召回率(R)、f1值(f1)。精度用于評價分類器的整體性能。精度、召回率和f1值被用來評估每一類流量的性能。
TP是正確分類為X的實例數,TN是正確分類為非X的實例數,FP是錯誤分類為X的實例數,而FN是錯誤分類為非X的實例數。
4.3表示實驗結果和分析。
進行了八項實驗以確定最佳的流量表征類型。圖7顯示了惡意軟件和正常流量數據集的四種表示類型的準確性。從4個比較中可以發現,所有層的流量類的準確性總是高于L7層。除了在正常流量中L7的會話和流的準確性是相等的,其他三個比較都表明,使用會話的流量類的準確性總是高于使用流。圖8顯示了nsi -ay的精度、召回率和f1值,它是20種流量類型之一。我們可以看到圖7所示的模式。在所有的12個比較中,除了使用所有層的會話召回率比使用所有層的流量稍微低(0.24%),其他11個比較顯示了如下模式:所有層的流量類的精度、召回率、f1值都比只有L7層的高,而且使用會話的精度、召回率、f1值都比使用流要高。不僅如此,同樣的模式也可以在其他19類流量結果中找到。總之,所有的都比L7好,而且會話比流更好。
對于這種模式,可以給出一個直觀的解釋。因為會話包含雙向流,因此包含更多的交互信息,而不是單向流。因為所有層表示都包含了比L7層更多的層,特別是包含端口和標記信息,所以它可以代表更多的關鍵信息,這證明了我們在第三節的B部分的假設。需要注意的是,許多類流量的L7層預處理結果記錄要比所有層的預處理結果記錄少得多,例如CTU 107-1的L7層記錄只有8,但所有層記錄都是16386。當生成相同數量的訓練數據時,需要使用L7比所有層表示更多的流量數據。因此,我們可以看到,所有層表示都比L7層表示更靈活。
綜上所述,可以發現最佳類型的流量表示是會話+ All,只有這種類型的流量表示被用來進行可伸縮性實驗。
4.4可擴展性實驗結果與分析
表4顯示了使用會話+所有流量表示的兩種場景中三種類型的分類器的總體準確性。表V和VI顯示了每一類流量的精度、召回率和f1值。由于二進制分類器的精度為100%,所以不需要顯示二進制分類器的精度、召回率和f1值。
表4顯示四種分類器的準確度很高,即使是最低準確度也達到了98.52%。表V顯示Neris和病毒流量的精度、召回率和f1值稍低(90% ~ 96%),但其他18類流量均達到非常高的精度、召回率和f1值(高于99%)。表VI顯示了相似的模式,Neris和病毒流量的指標值稍低一些(89% ~97%),但是其他18個級別的流量都達到了很高的指標(高于99%)。為什么Neris和病毒會出現一些較低的指標,這可能是它們的特殊特征,需要進一步研究。綜上所述,這三種分類器的平均準確度已經達到了99.41%,滿足了實際使用的準確度要求。
4.5比較
由于交通數據集、軟件設置和實驗環境的不同,在各種惡意軟件流量分類方法中進行公平的比較是不容易的。另一方面,三種類型的分類器都實現了相當高的精度。因此,我們不是在我們的方法和其他現有方法之間進行性能比較,而是將它們與一些重要的特性進行比較。表7顯示了我們的方法和基于規則的Snort之間的一般比較,這是一個著名的NIDS,基于傳統機器學習的Celik[18],前面提到的Gao[9]和Javaid[10]都使用了手工設計的流特性。
我們的方法具有早期惡意軟件流量檢測的能力,因為僅使用前幾百個字節的每個會話。Snort需要匹配其位置不確定的流量指紋。Gao和Javaid需要從整個交通流中提取特征。所以它們都沒有早期的檢測特性。實驗結果表明,該方法具有較低的誤報率,且由于某些問題如難以精確地提取惡意軟件的流量,使Snort的誤報率較高。我們的方法是協議獨立的,因為使用圖像分類方法,而Snort需要為每個協議設計匹配規則。我們的方法可以自動提取特征,而Celik則沒有這樣的能力,這是基于典型的機器學習方法,如SVM。最后,我們的方法直接使用原始的流量數據集,相比之下,Gao和Javaid都使用手動設計的流特性數據集。
5局限性和未來的工作
關于我們的工作有三個限制和相關的未來工作。首先,本文的主要目的是利用表示學習方法來證明惡意軟件流量分類的有效性,因此我們沒有研究CNN參數的調優。在實際應用中,流量大小和類數肯定不是固定的,所以在機器學習術語中,我們的方法的泛化能力需要進一步驗證。其次,傳統的流量分類方法采用經典的機器學習方法,使用了許多時間序列特征,證明了它們的高效率[24]。我們的方法實際上只使用了流量的空間特性,并且完全忽略了時間特性。我們將研究如何在未來的工作中加入這些時間特征,例如使用遞歸神經網絡(RNN)。最后,本文的工作只對已知的惡意軟件流量進行分類。識別未知惡意軟件流量的能力對于NIDS[25]來說也是非常重要的,如何在未來的工作中進一步研究如何增加未知的惡意軟件流量的能力。
6結論
在對傳統惡意軟件流量分類方法進行系統總結的基礎上,提出了一種新的惡意軟件流量分類方法。我們的方法不需要預先設計流量特性。原始流量數據是流量分類器的輸入數據,分類器可以自動學習特征。在實驗中,CNN被用作我們的表征技術。創建了USTC-TRC2016流量數據集,并開發了一個名為USTCTK2016的數據預處理工具包。在數據集和工具箱的基礎上,通過對8個實驗結果的分析,找到了最佳的流量表示類型。實驗結果表明,在兩種情況下,采用三種類型的分類器,實現了實際應用的精度要求,具有較高的可擴展性。在今后的工作中,我們計劃進一步研究本文提出的方法,以提高惡意軟件的流量識別能力。