王 姣 ,蔣 言
(1.南京烽火星空通信發展有限公司IAO江蘇南京210019;2.武漢郵電科學研究院湖北武漢430074)
近年來,隨著移動互聯網浪潮的井噴,科技得以快速發展的同時,一些不良的協議,應用以及網站給互聯網安全帶來了很大的挑戰,例如最常見的的Ddos攻擊;除了惡意流量的攻擊之外,流量爆炸問題也越來越嚴重,根據思科Visual Networking Index(VNI)全球移動數據流量預測報告(2015-2020)中顯示,自2000年首款智能手機上市以來,移動用戶的數量同往期相比已經達到五倍的增長量。報告中顯示,到2020年,全球的上網總數將達55億,幾乎是人口數據的70%。隨著電子設備成本的不斷下降、移動互聯網的全面大規模覆蓋和社交媒體的廣泛普及,各種類型的數據流量將在未來五年內快速大規模的增長。所以對互聯網的控制和管理中,對流量的識別顯得尤為重要[1]。
在業內,應用流量識別也是一個相對很熱門的話題和項目,國內的許多大公司如360,科來,騰訊阿里等都在這個課題投入大量的精力加以研究,對于現在的互聯網公司而言,流量識別確實是一個很實用也很前景的方向,他們意識到網絡分析在很多方面可以滿足多種需求,流量的準確識別不但能洞悉整個互聯網的運行情況,還能針對具體需求對用戶進行大數據進行分析和行為透視。在業務層面上,不僅可以預防各種攻擊斷網事件,還可以保證互聯網的高效運行。另外,隨著加密流量和應用的不斷涌現,這些不利因素將都會對流量識別的準確性產生重大的挑戰。
本文首先分析了目前的流量識別方法及其存在的問題,并針對IM數據這一特定流量,結合報文特征,考慮目前工具的配置以及數據的復雜度,提出了基于SAE(spare auto-encoder)的離線數據的識別模型。想要對互聯網運行狀況有一個良好的把握,網絡流量識別技術是進行流量測量與分析的基礎,但是目前在識別技術上并既沒有標準的數據集,也沒有一個標準的測試程序和算法,針對這一問題,也將在本文中進行一個初步的探討。
最初的應用流量識別,目的是想對P2P應用進行準確的分類和識別[2-17]。P2P應用特殊的非客戶端服務器文件傳輸模式,給流媒體、文件共享等領域帶來便捷的同時,加劇了互聯網的擁塞和不安全性。為了使互聯網的運行更加健壯,流量的有效識別就顯得很有必要,在前期的研究中,很多流量識別是通過提取數據報文的五元組特性進行的識別,如端口或者IP。隨著網絡的逐漸復雜,流量識別往DPIDPI(deap packet inspection)深度數據包檢測的方向發展[3],這一重大轉變,主要是由于后期的應用改變傳統的認知模式,使得固定端口的識別方法大面積失效導致的。同時,大數據概念的廣泛推廣,數據挖掘、模糊統計技術也不斷的改進和發展,相當多的機器學習分類算法等非常規手段在流量識別的問題上有很明顯的效果。很多學者在這方面投入了大量的研究工作。
通過對往期的各種P2P流量分類技術的調查研究[9],將各種流量檢測技術歸納如下。
這一方法靈感來源于因特網的一項核心服務DNS,它方便人們不用記住機器能夠讀取的IP串,而通過域名的方式就可以進行服務器訪問。而恰巧數據報文中能夠直接獲取到報文的源IP目的IP。可以通過對應關系,解析出對應的host,從而進行流量識別,但是要獲得一份完整的全球映射關系表并不容易,同時實時性較差,由此可見,這種識別方法比較局限,應用范圍比較狹窄。
這里的端口是指TCP/IP模型的傳輸層端口,即TCP或UDP端口。這種方法也是十分的簡潔和方便,通過對應兩者之間的對應關系就可以實現流量的分類。但是問題與第一種類似,很多當前的協議并不使用固定端口,為了繞開防火墻的封堵,進而選擇動態的使用端口,這也包括一些知名的服務。
該方法多用于BT的識別控制,這種方法是通過識別URL中的關鍵字從而進行過濾,這個明顯存在很大的局限性,因為很多應用廠商可以改變擴展名或者通過FTP的方式進行規避。
這種方法是通過總結各個應用流量傳輸的特點進行特征識別,例如P2P流量的數據量大,節點之間數據交換頻繁,最突出的特點是不分時段性和長時間持續傳播,其他的流量例如網站類,均是突發的,數據一般都不是上行的。可以通過分析和構建各個維度特征,采用一般的分類算法或模型就可以進行識別,樸素貝葉斯就曾經被使用過,但是這個方法的缺點也是很明顯的,前期需要大量的人工干預,另外,在準確度上面極大的取決于維度的選擇。即使特征選擇恰當,相對其他方法準確度仍然比較低。值得一提的是,該方法的可移植性很好。
深度數據包檢測技術DPI擯棄傳統挖掘對應關系的簡單方法,而是對數據報文的深度解析工作著手,從而判定是何種應用。這種方法的精度度算是很高的,它是充分關聯報文的載荷進行的識別。但是對于加密性的報文,識別精度會明顯下降,可移植性也很差,新的應用出現了,要重新進行訓練和識別。
除了對截獲到的數據包報文進行分析外,也有學者對P2P節點所具有的特性入手,結合源IP地址對P2P流量進行識別檢測。已經有學者對這個方法進行了實驗并取得成功。但是該方法的可用性很差,推廣上面難以進行。
目前的應用流量識別中,對即時通信類的流量識別討論較少,其他比如游戲類、網站類應用更加沒有,但是隨著當前這些應用的極大豐富,對進一步分析用戶行為,創造優質的網絡環境,這種類型的應用識別就顯得非常關鍵。下面將對IM的流量數據如QQ、微信等進行識別分類問題進行研究。
Deep Learning最簡單的一種方法是利用人工神經網絡的特點,假設其輸出與輸入是相同的,然后通過大量的訓練和參數的調整,就得到了輸入I的幾種不同表示。其中每一層中的權重都是不盡相同的。而自動編碼器就是一種盡可能復現輸入信號的神經網絡,從而有效的挖掘數據中隱含的特征。

圖1 AutoEncoder原理圖
算法的原理如圖2所示,將輸入信號I放入一個encoder編碼器中,就可以得到一個code,這個code就是輸入I的另外一種表述。再講前面產生的code輸入到另外的解碼器中(decoder),如果輸出的這個信息O與之前的輸入信號I之間的偏差值最小,那么就可以說明,這個code是可靠的。所以,我們就可以通過逐步調整encoder和decoder的參數,當重構誤差最小時,可以得出結論:輸入信號I可以被code唯一表示。經過這樣逐層訓練。輸入信號I可以被逐層得到的code唯一表示,而輸入信號的特征I就會變得非常明顯。這里誤差的來源就是直接重構后的信號O與原輸入I的絕對值。同時可以說明,輸入信號可以被有效的還原了。如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0),這就是Sparse AutoEncoder法。如圖2所示。

圖2 Sparse AutoEncoder示意圖
稀疏自編碼其實就是限制每次得到的code盡量稀疏。也就是讓特征盡量獨立,從而輸入I可以被有效的表達出來。這個概念類似于線性代數中的基,即O=a1*Φ1+a2*Φ2+…+an*Φn,Φi是基,ai是系數,我們可以得到這樣一個優化問題:

稀疏自編碼算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數據。
結合數據實際情況,識別IM流量模型如圖3所示,該識別模型主要包含4大模塊。

圖3 識別模塊流程圖
通過PC端抓取手機端的APP報文數據,以抓取QQ報文為例,具體步驟如下:
St1:在 pc端建立虛擬 wifi;
St2:將手機連接該虛擬wifi,并開啟wireshark,wireshark選擇虛擬wifi對應的網卡;
St3:在wireshark的過濾框中,輸入相應的過濾條件,并執行該條件;
St4:當沒有新的QQ報文數據產生時,停止抓取,將過濾出的QQ報文數據導出為純文本格式。

圖4 wireshark抓數據包截圖
這里進行識別模型的數據集是通過pc端的軟件wireshark進行手動抓包得到的,不僅需要進行人工干預多次上下線、發送多次消息、建立多次視頻和語音通信等動作來進行豐富的報文集抓取,不僅獲取數據速度慢,并且在報文的獲取中還要嚴格控制減少其他雜質報文的產生,避免過濾條件的復雜化。而前期的研究中使用的ckan等數據集,研究者均是從中直接獲取再用來模型識別,已知存在的數據集,不僅存在數據集老舊的問題,并且數據集內容單一,以P2P流量占多,一些新型的應用流量都需要人為的獲取并降噪。而數據的質量對模型的選擇和調參都及其重要,如果能構建一個分布式的,能在各個應用服務器的分光口進行定期數據采集,對研究界將會產生及其重要的影響和作用。
預處理包括格式整理、MAC層數據剔除、五元組數據提取、傳輸層有效凈載荷提取、數據規范化處理。首先對wireshark保存的txt文件里無效內容進行替換;報文前14個字節為MAC層數據,對于傳輸層、應用層協議識別均無用處,故剔除。
報文第24個字節為傳輸層協議代碼:

表1 協議代碼
其中數據報文都以TCP、UDP為主,剩余夾雜ICMP協議。這里提取五元組主要是對TCP和UDP報文進行的,對于ICMP只提取源IP和目的IP以及自身協議代碼。報文第27~30個字節是源IP、第31~34個字節是目的IP。對于TCP和UDP,報文第35~36個字節是源端口,第37~38個字節是目的端口。
分別根據TCP、UDP、ICMP數據包結構,提取各自的有效凈載荷:
1)TCP:對于TCP數據我們以一次會話報文為基本單位,提取每次會話重組后報文的第55個字節到最后所有數據載荷;
2)UDP:對于UDP數據,我們以每條報文為基本單位,提取每條報文的第43個字節到最后所有數據載荷;
3)ICMP:與UDP類似,提取第71個字節到最后所有數據載荷。
IM數據流量識別主要是對應用層協議的頭部(或尾部)進行識別,內容相關性不大。因此,在構建模型時,只提取數據前固定若干個字節(或數據尾部固定若干個字節)作為特征數據。假設應用層協議頭部長度一般不會大于MTU。選擇截取了數據凈載荷的前1 460個字節作為后面的訓練數據(默認MTU-20-20)。
為提高模型的收斂速度,進而提高模型的準確度,將1 460個字節數據各自除以255(歸一化處理)。SAE是一種無監督學習方法,為了進一步精度的提升和明顯的分類效果,將訓練數據進行標簽化,對各個IM應用類型進行了如下編碼。

表2 APP應用類別One-hot編碼
流量識別選擇SAE(sparse auto-encoder)構建識別模型,隱含層神經元都采用函數作為激勵函數。因為AutoEncoder是學習并獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號,但是該模型并不能用來分類數據。為了實現分類,所以最后一層選擇添加一層logistic回歸層進行分類識別。
依據人工經驗并根據調試結果進行調整,擬定SAE的隱含層個數以及各層神經元個數為:[1460-730-200-50-10-1]。

圖5 SAE算法流程圖
構建SAE時,首次是以誤差二范數作為損失函數,即模型訓練問題轉化為如下的最優化問題:
W*,B*=訓練時,我們首先將有標簽的報文數據進行6∶1∶3(訓練集∶驗證集∶測試集)分割,經過多次調整,訓練參數如下:
learning_rate_ae=0.05 #AE預訓練學習速率
learning_rate_refine=0.05 #反向微調學習速率
training_epochs_ae=5000 #AE預訓練批次
training_epochs_refine=5000 #反向微調訓練批次
mini_batch_ae=1000 #AE隨機選擇訓練數據大小
mini_batch_refine=1000 #反向微調隨機選擇訓練數據大小時,且添加了五元組中協議代碼(TCP0x06、UDP0x11、ICMP0x01)作為一個特征維度,訓練好后的SAE對訓練集、測試集和驗證集進行測試,得到如下結果:

表3 結果表
在各類特征提取的算法中,最大頻繁項集算法也是一種,它偏向于的尋找特征之間的關聯,從而找出最合適的頻繁項,同樣也可以用到識別和提取中。好的特征選擇能夠提升模型的性能,更能幫助我們理解數據的特點、底層結構,下面對這兩種算法的優劣進行初步的討論方便后面的人的研究。
所謂最大頻繁項集,就是交集不為空的最大項集。

原始Apriori算法是通過判斷各項集的頻次是否大于最小支持度來選擇第一層頻繁項集M的。如圖6所示,通常選出來的第一層頻繁項集有兩種情況:高度耦合和低耦合。高耦合即第一層頻繁項集中大部分項集甚至所有項集在大于最小支持度的情況下,存在交集;而低耦合則是少數項集甚至兩兩交集為空。
由于原始Apriori算法是由下至上、由個體項集逐次排列組合生成新的頻繁項集,因此在高耦合的情況下,Apriori算法需要多次逐層迭代,且每次迭代復雜度成指數級增長。在時間復雜度上一般要比SAE要大,SAE隱含層的層數是可選并且有限的,但是Apriori算法存在一個未知循環,當最新的項集支持度超過閾值而下一層的支持度小于閾值才會停止。但是從空間復雜度上來看,從算法概念上來看是類似的。她們都是屬于層次遞進的,高層表達由底層表達的組合而成。但是每種算法的優劣也是多方面的,應用場景不同,算法的優勢表現也是不同的。而項目的應用場景是網絡流量在線實時識別方面,所以要盡量選擇實時性更好,并且這里并不需要深入探討數據特征的關聯性問題,所以在這一方面,稀疏自編碼對IM流量識別模型構建更實用。

圖6 耦合度示意圖
隨著每天新增應用的增多,所帶來的類別也越來越多。在實時應用流量識別的問題上,精度是很重要的,到底是每個應用訓練一個模型還是訓練一個綜合的識別模型的選擇很重要,從機器的角度,綜合緩存堆棧等影響偏向于后者,但是如果新增的和已有的某一應用很相似,而新增的應用之前并沒有被機器學習到,會大大影響識別的正確率,目前業內解決被認錯方案就是利用關聯的方法把它找出來,通過神經網絡每天對模型進行優化,不需要重新訓練。另外可以考慮提高識別門限,將特征模糊的數據給過濾掉或先去處一些垃圾數據,這樣可以有效的解決這種問題,就是會丟失部分數據。未來的識別模型中,是否可以嘗試將應用行為進行粒度細分,例如根據平臺(Android、IOS、Windows、Mac OS、Linux等等)、動作(上線、下線、心跳包、更新、IM數據等)、數據(文本、語音、圖片、視頻)來建立一個綜合的識別將是我們需要考慮的方向,從而真正的實現人工智能。
參考文獻:
[1]李鵬,劉悅.一種基于行為特征和SVM的P2P流量識別模型[J].開封大學學報,2010,24(3):79-84.
[2]喻東陽,陳宏偉,楊莊.基于信任抽樣的P2P流量識別[J].湖北工業大學學報,2013,28(4):24-26.
[3]王煒,程東年,馬海龍.基于趨勢感知協議指紋的Skype加密流量識別算法[J].計算機應用研究,2015,32(1):183-186.
[4]孫瑜玲,林勤花.基于遺傳神經網絡的P2P流量識別系統[J].現代電子技術,2015,38(17):117-120.
[5]王春枝,張會麗,葉志偉.基于混沌粒子群算法和小波SVM的P2P流量識別方法[J].計算機科學,2015,42(10):117-121.
[6]張偉,劉清.基于傳輸層會話行為統計特征的惡意流量識別[J].小型微型計算機系統,2015,36(5):959-963.
[7]劉三民,孫知信.一種新的P2P流量識別模型[J].小型微型計算機系統,2015,36(6):1235-1239.
[8]邢玉鳳,毛艷瓊.基于有督導機器學習的網絡流量識別系統[J].現代電子技術,2015,38(21):109-112.
[9]魯剛,張宏莉,葉麟.P2P流量識別[J].軟件學報,2011,22(6):1281-1298.
[10]劉三民,孫知信,劉余霞.基于K均值集成和SVM的P2P流量識別研究[J].計算機科學,2012,39(4):46-48.
[11]于明,朱超.利用半監督近鄰傳播聚類算法實現P2P流量識別[J].哈爾濱工程大學學報,2013,35(5):653-657.
[12]譚駿,陳興署,杜敏,等.基于自適應BP神經網絡的網絡流量識別[J].算法電子科技學報,2012,41(4):580-585.
[13]HOU Ya-jun.P2P Network traffic identification based on random forest algorithm[J].Journal of Networks,2014,9(9):29-35.
[14]LIU Yan.Analysis of P2P traffic identification methods[J].Journal of Emerging Trends in Computing and Information Sciences,2013,4(5):490-493.
[15]趙晶晶.基于數據挖掘的P2P流量識別算法研究與實現[D].北京:北京郵電大學,2009.
[16]張峰.基于機器學習的VoIP流量識別技術研究[D].武漢:華中科技大學,2013.
[17]彭立志.基于機器學習的流量識別關鍵技術研究[D].哈爾濱:哈爾濱工業大學,2015.