張呂軍
(北京安帝科技有限公司,北京 100142)
近年來,物聯(lián)網(wǎng)(IoT)設備的應用越來越廣泛,IoT設備部署的最新統(tǒng)計信息如圖1所示。其中,智能城市占28.6%;工業(yè)物聯(lián)網(wǎng)占26.4%;電子醫(yī)療占22%;智能家居占15.4%;智能車輛占7.7%[1]。可以說,物聯(lián)網(wǎng)設備在日常生活中具有越來越大的可用性和便利性。目前來看,大部分廠商都在積極部署其關(guān)鍵基礎架構(gòu)以幫助執(zhí)行專業(yè)任務。

圖1 物聯(lián)網(wǎng)應用范圍
物聯(lián)網(wǎng)技術(shù)的應用已向用戶證明了各種好處。但是,物聯(lián)網(wǎng)設備仍存在許多漏洞,這些漏洞暴露于網(wǎng)絡環(huán)境中是非常危險的。設備部署中各種物聯(lián)網(wǎng)協(xié)議的復雜性也阻礙了物聯(lián)網(wǎng)通用網(wǎng)絡安全解決方案的發(fā)展[2]。例如,MQTT協(xié)議是物聯(lián)網(wǎng)中普遍部署的應用程序協(xié)議,但是該協(xié)議本身存在多個漏洞,這些漏洞很容易受到如設備泄露、數(shù)據(jù)盜竊、節(jié)點盜竊、拒絕服務以及中間人(MiTM)攻擊[3-4]。
本文提出了一種基于深度學習的網(wǎng)絡流量分類的入侵檢測系統(tǒng)的新穎設計。多分類器包括帶有嵌入層的前饋神經(jīng)網(wǎng)絡模型,以識別四種攻擊類別,即拒絕服務(DoS)、分布式拒絕服務(DDoS)、數(shù)據(jù)收集和數(shù)據(jù)盜竊,同時區(qū)分攻擊的流量。另外,通過嵌入層編碼的概念提取了高維分類特征的編碼,然后基于遷移學習將其應用于二元分類器上。本文的貢獻如下:
(1)基于深度學習和遷移學習的概念,設計用于物聯(lián)網(wǎng)的入侵檢測系統(tǒng)。
(2)根據(jù)原始網(wǎng)絡流量處理和生成數(shù)據(jù)包級別的特征(即包頭字段信息)。
(3)通過公開的數(shù)據(jù)集評估提出的二進制和多分類器,其中包括模擬的IoT跟蹤和實際攻擊流量。
本文的方法分為5個步驟:數(shù)據(jù)收集、特征抽取、特征預處理、模型訓練和測試/分類,如圖2所示。

圖2 基于深度遷移學習的物聯(lián)網(wǎng)入侵檢測框架圖
第一次迭代是收集原始網(wǎng)絡流量。本文使用由Koroniotis等人開發(fā)的可公開獲得的數(shù)據(jù)集(BoT-IoT數(shù)據(jù)集)[5]。需要使用數(shù)據(jù)集的原因有很多,包括部署實際的測試平臺、生成模擬的IoT流量和實際的攻擊流量以及插入標記的數(shù)據(jù)。
本文通過網(wǎng)絡分析器工具(即tcpdump)以PCAP文件的格式收集了BoT-IoT數(shù)據(jù)集中的原始流量,并在收集流量時對其進行了標記;然后使用Argus工具生成了網(wǎng)絡流量[6]。處理后的流量存儲在Argus文件中,并進一步轉(zhuǎn)換為CSV文件。
第二次迭代是檢索數(shù)據(jù)包級別的標簽,并從原始網(wǎng)絡流量中的這些數(shù)據(jù)包中提取相關(guān)字段,每個字段都對應于一個特征。在這項工作中采用的特征是基于來自各個數(shù)據(jù)包的包頭字段信息,而不是基于聚合數(shù)據(jù)包。本文使用TShark工具從收集的344個PCAP文件中提取單個數(shù)據(jù)包的包頭字段,將其標記為數(shù)據(jù)包,并將其存儲在CSV文件中。然后,本文將架構(gòu)統(tǒng)一到CSV文件中,將文件轉(zhuǎn)換為單個ApacheParquet文件,并選擇大約2%的已處理數(shù)據(jù)集。下面解釋每個步驟的細節(jié)。
特征描述:本文僅考慮了IP數(shù)據(jù)包,并從PCAP文件中提取了總共29個數(shù)據(jù)包包頭字段。但是ARP數(shù)據(jù)包被排除在外,因為ARP用于將IP地址轉(zhuǎn)換為MAC地址,與本文關(guān)注的攻擊無關(guān)。
標簽映射:本文使用數(shù)據(jù)集中的標簽分析了網(wǎng)絡流,并將相同的標簽映射到這些網(wǎng)絡流中的各個數(shù)據(jù)包。由于不同子類別的攻擊流量是在不同的時間間隔執(zhí)行的,而正常流量則是后臺生成的,這使得區(qū)分攻擊更加容易。此外,還部署了四臺攻擊機來發(fā)起攻擊,這使本文能夠根據(jù)攻擊機的IP地址區(qū)分正常流量和攻擊流量。因此,本文開發(fā)了一個腳本,用于根據(jù)攻擊機的IP地址為每個攻擊子類別標記數(shù)據(jù)包。本文將帶有標簽的數(shù)據(jù)包存儲在CSV文件中,并將這些文件與具有不同攻擊子類別的文件放在不同的文件夾中。
文件格式統(tǒng)一:本文統(tǒng)一使用CSV文件,并將文件轉(zhuǎn)換為單個Parquet文件以減小文件大小并提高處理速度。本文將字符串類型轉(zhuǎn)換為雙精度等類型以保持一致性。
數(shù)據(jù)集提取:選擇了大約2%具有提取特征的處理數(shù)據(jù)集(數(shù)據(jù)包總數(shù)為11 252 406)。對于正常流量,從所有正常數(shù)據(jù)包中選擇2%。對于每個子類別的攻擊流量,選擇100萬個數(shù)據(jù)包作為閾值。如果數(shù)據(jù)包數(shù)量低于閾值,則選擇所有數(shù)據(jù)包;否則,將隨機選擇100萬個數(shù)據(jù)包。
第三次迭代是通過刪除和組合特征列以及對分類列特征編碼進行字段信息提取,以將其輸入到深度神經(jīng)網(wǎng)絡模型中。本文刪除了五列,包括時間戳列(即frame.time_epoch)以及包含源IP地址(即ip.src/ipv6.src)和目標IP地址(即ip.dst/ipv6.dst)的列。本文觀察到四對TCP/UDP相關(guān)列中的值在每對中彼此不重疊(即tcp.len和udp.length、tcp.stream和 udp.stream、tcp.srcport和 udp.srcport、tcp.dstportand和upd.dstport)。因此,本文將這四對列組合在一起,并將它們分別命名為length、stream、src.port和dst.port。對于每個具有逗號分隔值的列(即ip.ttl、ip.id、ip.hdr_len和ip.len),本文生成了一個新列,將逗號分隔值分為兩列,并使用NaN值填充空白行在新列中。
本文在所有特征列中確定了分類特征列。對于具有低維分類變量的列(即ip.proto、tcp.flags、ip.flags.df和http.response.code),本文應用onehot編碼并刪除了原始列;將這些列和其他具有非分類值的列稱為輸入列。對于具有高維分類變量的列(即src.port、dst.port和http.request.method),本文將它們與其他列分離,并將在深度神經(jīng)網(wǎng)絡模型中用編碼方式來計算端口和表示HTTP請求方法。
本文將預處理后的數(shù)據(jù)分為訓練集和測試集,分別用于訓練次迭代和測試次迭代。
訓練次迭代從訓練集中獲取處理后的數(shù)據(jù),并將其饋入前饋神經(jīng)網(wǎng)絡模型。既考慮了二分類又考慮了多分類。本文采用具有嵌入層的前饋神經(jīng)網(wǎng)絡模型進行多分類,其中除了正常流量類別外,一系列攻擊類別還被視為單獨的類別。然后,從嵌入層提取權(quán)重以對高維分類特征列進行編碼,并構(gòu)建第二個前饋神經(jīng)網(wǎng)絡模型以執(zhí)行二分類。測試次迭代是評估指定測試集上的分類器。二元分類器為測試集中的每個數(shù)據(jù)實例輸出正常或攻擊標簽,而多分類器則輸出類標簽(即它所屬的常規(guī)或特定攻擊類)。
本文考慮使用前饋神經(jīng)網(wǎng)絡(FNN)模型,在這項工作中采用FNN的原因是它被認為是第一種也是最簡單的人工神經(jīng)網(wǎng)絡。本文將多分類FNN模型表示為mFNN模型,將用于二分類的FNN模型表示為bFNN模型,并分別詳細說明這兩種模型以及遷移學習的概念[7]。
mFNN模型:使用三個數(shù)組作為輸入,其中兩個是嵌入層的輸入。端口嵌入層的輸入維數(shù)為65 537(所有正式和非官方端口的0和65 535~65 536之間的NaN值均已編碼),輸出維數(shù)為16;而HTTP請求方法嵌入層的輸入維數(shù)為93(其中92種為正式請求方法,并且為無值編碼的字符串),輸出維數(shù)為4。兩個嵌入層的權(quán)重都將通過模型訓練來學習。全局平均池層應用于端口嵌入層,以計算源端口和目標端口的平均值。然后,將返回的向量與HTTP請求方法嵌入層和輸入數(shù)組連接在一起。最后與全連接層連接。
遷移學習:通過在mFNN模型中的嵌入層來提取高維分類特征的編碼,并將該編碼應用于bFNN模型中相同的高維分類特征。將特征編碼表示從mFNN模型遷移到bFNN模型是可行的,因為bFNN模型是在mFNN模型使用的數(shù)據(jù)子集上訓練的,所以保證了編碼的通用性。更重要的是,bFNN模型不需要通過添加嵌入層來對高維分類特征進行編碼,因為它會增加訓練時間并導致失去特征表示的通用性。具體而言,提取mFNN模型的兩個嵌入層的權(quán)重并將其存儲在兩個數(shù)組中,以用作bFNN模型中的端口和HTTP請求方法的編碼。
bFNN模型:使用mFNN模型中兩個嵌入層的權(quán)重(存儲為兩個數(shù)組)對源/目標端口和HTTP請求方法(即src.port、dst.port和http.request.method)進行編碼。然后,將已編碼的列與其他特征列合并,并作為模型的輸入。bFNN模型包括三個具有512個神經(jīng)元的全連接層,并且在前兩個全連接層(即輸入層和隱藏層)中使用ReLU函數(shù),在最后一個全連接層(即輸出層)中使用兩個神經(jīng)元和一個Softmax函數(shù)。bFNN模型使用與mFNN模型相同的超參數(shù)(即隱藏的全連接層數(shù)量和隱藏的全連接層中的神經(jīng)元數(shù)量)
本文使用不同超參數(shù)和三種正則化技術(shù)對mFNN模型進行了調(diào)整。將相同的超參數(shù)和正則化優(yōu)化用于bFNN模型,旨在將模型的泛化應用于不同的分類問題。本文使用的FNN模型由三個全連接層組成,前兩個全連接層中具有512個神經(jīng)元,默認的Adamoptimiser學習率(即0.001)作為基線模型[8]。使用512個神經(jīng)元作為起點有兩個原因:(1)提取的數(shù)據(jù)集已足夠(具有9 163 751條記錄),因此過擬合問題就不會發(fā)生(當神經(jīng)網(wǎng)絡具有處理能力但訓練數(shù)據(jù)中包含的有限信息量不足以訓練隱藏層中的所有神經(jīng)元時,就會出現(xiàn)問題);(2)本文的深度神經(jīng)網(wǎng)絡是在GPU上訓練的,可以以較高效率運行。
正則化:本文嘗試了三種常用的正則化技術(shù),分別是L1、L2和Dropout。結(jié)果表明,分類精度沒有變化。已有研究證明,進行正則化可以有效避免過度擬合的風險。由于用于訓練模型的數(shù)據(jù)集很大,因此過擬合問題并不是一個大問題[9]。
超參數(shù)調(diào)整:本文探索了神經(jīng)網(wǎng)絡的不同架構(gòu)。具體來說,本文添加/減少了隱藏層(從2到4),減少了神經(jīng)元的數(shù)量(128個或256個神經(jīng)元),增加了神經(jīng)元的數(shù)量(1 024個神經(jīng)元,不包括最后一個全連接層),并添加了Dropout率為0.1的Dropout層(不包括最后一個全連接層)。結(jié)果表明,基線神經(jīng)網(wǎng)絡模型具有最佳性能。在基線模型的變體上,分類準確性不會提高。這可能是由于模型復雜度低/高引起的。如果模型復雜度太低,則該模型可能無法捕獲類的變化;如果模型復雜度太高,則該模型可能會在類上產(chǎn)生過度擬合問題,并且需要更多時間進行訓練。因此,在具有太低/太高復雜度的模型下,分類性能可能會變差。本文對Adam優(yōu)化器的不同學習率(即0.01、0.001、0.000 1和0.000 01)進行了實驗,并選擇了0.000 1作為獲得最高準確性的最優(yōu)學習率。
對于本文所有的實驗,本文使用了帶有TeslaV100GPU和93GRAM的高性能計算(HPC)集群以及TensorFlow庫和Keras庫。本文將提取的數(shù)據(jù)集劃分如下:64%用于訓練,16%用于驗證(在調(diào)整模型超參數(shù)時提供對訓練數(shù)據(jù)的模型擬合的無偏評估),20%以分層方式進行測試。由于訓練數(shù)據(jù)中的類別不平衡,本文在訓練期間對各類別應用了權(quán)重,針對代表性不足的類別(即數(shù)據(jù)包數(shù)量少)獲得更高的權(quán)重值[10]。本文通過將類別中的數(shù)據(jù)包總數(shù)除以訓練數(shù)據(jù)中的數(shù)據(jù)包總數(shù),然后將商值取反來計算每個類別的權(quán)重,實驗結(jié)果如圖3所示。
圖3中展示了mFNN模型在訓練集(training)和驗證集(validation)上的性能。采用了early stoping技術(shù),讓訓練和驗證過程在第15次迭代結(jié)束,進行了5次迭代以減少驗證集損失Loss減低過擬合問題。訓練損失從第1次迭代的0.042 6下降到第2次迭代的0.013 9,然后穩(wěn)定下降直到第15次迭代;而第1次迭代的驗證損失為0.009 3,然后在0.009到0.005之間波動。訓練精度Accuracy起初從0.992 3提高到0.996 9,然后穩(wěn)步提高直到第15次迭代;而驗證集準確性在0.996和0.998之間略有變化。

圖3 多分類模型測試結(jié)果
如圖4所示,二進制分類的評估指標采用了Accuracy、Recall、Precision和F1 score這4種。顯而易見的是,其中所有值均高于0.999 9。bFNN模型可實現(xiàn)高Accuracy、Recall、Precision和F1 score(即99.99%),而只有少數(shù)數(shù)據(jù)包被錯誤分類。關(guān)于每個攻擊子類別的分類所運行的時間,bFNN模型在5~10 min內(nèi)完成了訓練和驗證任務。

圖4 二分類模型測試結(jié)果
深度學習技術(shù)已顯示出它們能夠在各種研究領域準確地進行模式識別的能力。在物聯(lián)網(wǎng)應用中,此類技術(shù)可用于檢測網(wǎng)絡入侵。本文提出了一種針對物聯(lián)網(wǎng)的網(wǎng)絡入侵檢測系統(tǒng)架構(gòu),該設計基于包括定制前饋神經(jīng)網(wǎng)絡的深度學習模型。本文將流量包頭字段視為通用參數(shù),并采用嵌入編碼和遷移學習的概念對從數(shù)據(jù)集獲取的數(shù)據(jù)的高維分類特征進行降維編碼。本文已經(jīng)在包含實際網(wǎng)絡流量的數(shù)據(jù)集上測試了用于二進制和多分類的模型。獲得的結(jié)果表明了所提出技術(shù)的有效性;特別地,發(fā)現(xiàn)對于二元分類器,檢測精度接近99.99%,而對于多分類器,則達到了約99.79%。因此有必要據(jù)此對物聯(lián)網(wǎng)網(wǎng)絡入侵檢測系統(tǒng)設計進行更深入的研究。