端到端的基于深度學習的網絡入侵檢測方法
摘 要:
當前網絡入侵檢測大多使用人工特征,但是人工特征往往不能適應新型攻擊,重新設計人工特征又需要專家知識。對此,提出了一種算法,該算法從網絡流量數據中提取會話作為樣本,并將樣本送入兩個神經網絡,會話的一系列有時間順序的數據包視為一維序列送入門控循環單元,融合會話的一系列數據包視為二維圖像送入卷積神經網絡。分別在兩個網絡提取特征,最后融合這兩個特征送入全連接網絡執行入侵檢測。所提算法同時關注了會話的時序信息和整體空間信息,自動從流量數據中學習特征。使用 CICIDS-2018 網絡流量數據進行實驗,實驗表明該算法識別僵尸網絡、分布式拒絕服務攻擊的效果優于人工特征。
基于網絡的入侵檢測的目標是識別那些企圖通過網絡跨越被保護系統安全邊界的行為,任何損害系統安全性的網絡入侵行為都應被識別,從而讓系統快速做出響應。異常入侵檢測對于網絡安全有著重要的意義,通過對正常用戶行為的建模它可以識別出異常的流量,從而檢測新型的攻擊。在檢測過程中,研究者面對的是網絡上捕獲的網絡流量數據,對于這些數據,其中一種處理方法是根據專家知識和統計學提取人工特征,形成特征集,然后基于人工特征數據執行入侵檢測,識別某條記錄是異常流量還是正常流量。
KDDCup-99 數 據 集 是 1999 KDD 杯 挑 戰 賽提出的入侵檢測數據集,該數據集對網絡流量進行預處理,提取了基本特征、內容特征、基于主機的流量特征、基于時間的流量特征 4 大類人工特征,共計 41 個小特征,含有 4 種攻擊類型,總計包含 400 萬條記錄,保存為 txt 文件。然而,使用KDDCup-99 數據集來驗證檢測方法存在著諸多的不足,如存在攻擊類型定義模糊、冗余的記錄過多等問題。針對 KDDCup-99 數據集的缺點,Tavallaee等人 在該數據集的基礎上,刪除了冗余項,規劃了訓練集和測試集的比例,提出了 NSL-KDD 數據集,此數據集對于 41 維特征沒有做出改變,主要優點是類別分配平衡,是用于入侵檢測方法比較的基準數據集。
上述兩種數據集并沒有提供網絡流量數據文件,而在 2015 年公開的 UNSW-NB15 和 2018 年公開的 CICIDS-2018 數據集則提供了網絡流量數據 pcap 文件和已經預處理提取好特征的 csv 文件。Moustafa 等人對 UNSW-NB15 數據集做了評估分析,認為其包含新型的攻擊方式,更具復雜性,可以取代 KDDCup-99 數據集成為新的基準數據集。上 述 3 種 數 據 集(KDDCup-99 和 NSL-KDD 算 一種)人工提取的特征有著高度的相似性,均包含數據流的持續時間、目的端口、協議、數據包發送速率、傳輸控制協議(Transmission Control Protocol,TCP)數據流中設置為 PSH 和 URG 的次數、數據包大小,以及一些其他的流統計特征,如流數據包數目、到達時間偏差、其他基于時間的(如最近100 個連接中具有相同源地址的個數)統計特征。不同的是,不同的數據集中有一些獨特設計的人工特征。值得注意的是,這些特征往往需要整體的流量情況做支撐,才能計算出統計學特征。
對 于 深 度 學 習 方 法, 如 卷 積 神 經 網 絡(Convolutional Neural Network,CNN)和循環神經網絡(Recurrent Neural Network,RNN)等,其強大的地方在于可從復雜的原始數據如圖像、文本等數據中自動提取特征,并用這些人類無法確切解釋,但是十分有效的特征進行一些人工智能(ArtificialIntelligence,AI)任務,如對象檢測或者語音識別、機器翻譯 等。將人工特征送入 CNN 或 RNN 中進行分類,只是將其作為一個強大的分類器,沒有利用到深度學習方法強大的表示學習能力。盡管目前研究者所提出的方法在入侵檢測分類上得到了良好的效果,但是面對各種新型的攻擊類型,人工提取的特征是否還能勝任檢測工作還存在疑問,以及對檢測方法的實時性要求,也需要檢測方法可以快速獲取依賴的特征,而不是在整個流量都得到之后再進行計算,因此研究者開始探索直接監測網絡流量的方法。
1 相關工作
隨著深度學習的興起,使用深度學習方法替代傳統機器學習算法開展入侵檢測的趨勢逐漸形成,但也正如引言中的描述,這些方法很多是基于已有的人工特征的分類算法,很少直接針對網絡流量數據進行設計,或者忽視了網絡流量數據某一方面的特征。本節將簡要介紹其他研究者在入侵檢測領域所做的工作。
Hu 等 人 研 究 了 傳 統 支 持 向 量 機(Support Vector Machine,SVM)、 魯 棒 SVM、K 最 近 鄰(K-Nearest Neighbor,KNN) 在 KDD-99 數 據 集上的性能表現,實驗表明使用魯棒 SVM 在準確率和誤報率上表現更好。Dong 等人則對 SVM、決策樹 C4.5、貝葉斯(Naive Bayes)和使用了玻爾茲曼 機(Restred Bolzman Machine,RBM) 的 SVM RBM 進行了比較,實驗表明結合了 RBM 技術的SVM 在 KDD-99 數據集中具有最好的性能。Ravi 等人 則綜合評估了卷積神經網絡 CNN 和循環神經網絡 RNN,包括長短期記憶網絡(Long Short Term Memory,LSTM)、 門 控 循 環 單 元(gate recurrent unit,GRU),以及結合使用 CNN 和 RNN 的深度神經網絡。他們將這些在 KDD-99 上表現良好的深度神經網絡(Deep Neural Network,DNN)模型應用于其他數據集,例如 NSL-KDD、UNSW-NB15、Kyoto、WSN-DS 和 CICIDS-2017,并對其進行了全面而完整的分析。實驗結果表明,使用深度學習作為分類器學習人工特征所含信息做出決策的能力要比傳統機器學習更好。此外,Xu 等人詳細對比了采用 LSTM 和 GRU 的循環神經網絡在入侵檢測數據集 NSL-KDD 和 KDD 99 上的性能表現,實驗表明采用雙向 GRU 能夠達到更好的性能,當然這只是在特定領域里,比如 Chung 等人的研究表明了在復調音樂建模和語言信號建模兩種任務上,這兩種網絡性能相當。
雖然深度學習方法在人工特征集上的任務中表現出優越的性能,但是不能忽略其更強大的能力,即從原始低級數據習得高級抽象(自動特征)即表示學習的能力。Wang 等人將網絡流量數據表示成 1 000 長的一維序列,采用堆疊的自動編碼器(Stacked Auto Encoder,SAE)做網絡協議識別,取得了良好的效果。Wang 等人 第一次嘗試將網絡流量轉化為圖像,使用卷積神經網絡進行惡意軟件流量分類,在他們自建的數據集 USTC-TFC2016上,取得了平均準確率 99.41% 的好成績。他們還對如何表示網絡流量取得最佳性能做了對比實驗,實驗結果表明,采取會話即雙向流和所有數據包層的流量表示類型會取得最好的結果。此外,他們還使用一維卷積神經網絡來鑒別加密流量和未加密流量。也有研究者采用網絡流量數據做入侵檢測的流量識別,Peng 等人將網絡流量作為圖像,送入卷積神經網絡中檢測該流量是否是安卓惡意軟件流量。此外,基于循環神經網絡,Radford 等人將流量數據視為機器之間對話的語言,使用 LSTM進行序列建模,并提出了一個簡單的基于頻率的模型,采用受試者工作特性曲線(Reciver Operating Characteristic,ROC) 下 面 積(Area Under Curve,AUC)為評估指標,實驗在 IDS-2017 上進行,取得了不錯的效果。
本文從網絡流量中提取會話樣本后,首先將會話中數據包含有的字節作為一個一維長序列送入門控循環單元 GRU 中,類似于自然語言處理中一句話中的一個個單詞,利用 RNN 提取數據包的時序相關特征;其次整個流中各個數據包被合并為一個固定尺寸的二維圖像,被送入一個卷積神經網絡提取空間特征;最后結合這兩種特征做入侵檢測。相比于先經過卷積然后經過 RNN 處理的線性方法,這種方法是雙線并行的。先提取空間特征可能由于卷積層和池化層的存在送入 RNN 后會損失一部分信息,本文方法則避免了這種可能性,并且關注整個流的空間特征。本文算法直接從原始字節流量學習深層抽象特征,完成入侵檢測任務,是一種端對端的入侵檢測算法,一端是數據,一端是任務,無需人工特征提取,并且具有實時檢測的優點。
2 算 法
本文提出的算法的重點在于處理網絡流量數據生成可用于深度學習的流量樣本,以及構建神經網絡模型,從這些流量樣本中提取出良好的特征用于檢測流量是正常流量還是異常流量,整體流程如圖 1 所示,最后得到一個可用于入侵檢測的模型。圖 1 還顯示了本文算法的一個重要優點是無需人工設計特征,無需專家知識,由模型自動提取特征。

圖 1 算法流程
2.1 流量分割
在計算機網絡中,定義 5 元組(源 IP,目的IP,源端口,目的端口,協議)相同的一系列數據包同屬于一個流,源 IP 和目的 IP 相反,源端口和目的端口相反,協議相同的另一個流是它的反向流,前向流和反向流就構成了一個雙向流即會話,以下統稱會話。在這樣的定義下,網絡數據基本上分為 TCP 會話和用戶數據報協議(User Datagram Protocol,UDP)會話兩大類,當然,根據應用層協議的不同在這兩類上會衍生出很多小類,如網絡流中最多的超文本傳輸協議(Hyper Text Transfer Protocol,HTTP) 會 話。對 于 TCP 會 話, 第 1 個SYN 報文標志著會話開始,而 FIN 包之后的 ACK包表示會話的結束。對于 UDP 會話,定義在最初始的數據包之后 600 s(已經能夠包含絕大多數的數據包)內的會話是同一個會話,超時過后即使 5元組相同也將其劃分為一個新會話,同樣對于 TCP會話也有超時的設定。流量分割的流程如圖 2 所示。

圖 2 流量分割流程
值得注意的是,在收到 TCP-FIN 數據包之后,根據 TCP4 次握手的規則,還需要再收到一個 ACK包才算是結束了整個 TCP 會話,5 元數組只會記錄該會話第 1 個數據包的接收時間,用于判斷與該 5元組相同的數據包加入該會話時是否超時。
2.2 模型構建和特征提取
在流量分割后,獲得了以張量形式存儲的會話樣本 x,x 是一個二維張量 n×m,其中 n 表示該會話中數據包的個數,m 是最大字節數,因此 x 是一個 n 行 m 列的矩陣。對于字節數超出 m 的數據包只能截取 m 個字節,少于 m 則空缺處填 0。如圖 3所示,對于每個會話樣本張量 n×m,按順序取出 n個 m 長的一維序列送入 GRU 中,GRU 將在這 n 個序列中共享權重、記憶相關信息,不需要理會這個 n 長序列的具體位置情況,最后在經過 n 個時間步后得到一個 1×f 的向量。將會話樣本 n×m 組成一個固定大小為 w×w 的二維矩陣,類似于只有一個顏色通道的灰度圖像,如果 n×m 大于 w×w,則丟棄樣本 x 的多余數據,小于 w×w 則在剩余位置填 0,將其送入卷積神經網絡CNN中,最后也會得到一個1×f的向量。最后將這兩個特征向量在第一維拼接起來,得到一個 1×2f 的特征向量,至此,完成了特征提取。
圖 3 上半部分所示的 CNN 卷積網絡中,依順序分別是3×3的卷積層、2×2的池化層、3×3的卷積層、2×2 的池化層、2×2 的卷積層,最后是一個全連接層,共計 3 個卷積層,2 個池化層,1 個全連接層,最后輸出 1×128 的向量。下半部分為一個循環神經網絡的展開圖,采用的是 LSTM 的一個較為輕量的網絡變種——門控循環單元 GRU。一個流的所有數據包按順序依次作為 1 個 m 長向量送入 GRU,采用最后輸出的 output 作為特征向量,是 1 個 1×128 的向量。最后,將這兩個向量連接,就得到 1 個 1×256 的總特征向量,就是全連接網絡所期望的輸入值。

圖 3 會話樣本特征提取流程
2.3 分 類
不同于人工設計特征,在執行任務前,提取的特征需要專家知識,而且后續使用傳統機器學習也無法對該特征工程進行指導優化,這是因為沒有明確的方法改進特征的優化提示,且如果模型效果不好,不能判斷是特征不好還是模型不好;而本文算法模型所得到的特征向量和所執行的任務是一體的,提取的特征會在訓練過程中通過優化算法不斷改進,從輸入網絡流量數據到模型執行入侵檢測任務的過程,整個模型是端到端的。
將前面特征提取網絡輸出的 1×256 向量作為輸入,經過兩層的全連接層,最后輸出 1×Categories(類別數)張量,使用 Softmax 函數概率化每個類別的置信度,取最高置信度所在下標的類別即為神經網絡輸出的類別。兩個全連接層的網絡結構為,1 個 (256,64) 的全連接層和 1 個 (64,2) 的全連接層,最后使用 softmax 輸出置信度。
3 實驗證明
實驗目的:對比本文提出的基于深度學習建立的端到端的入侵檢測算法和基于人工規則特征的入侵檢測算法的入侵檢測性能,證明算法有效性。本文 實 驗 環 境:Windows10-21H1,Python-3.8.10,Pytorch-1.9,scikit-learn-0.24.2,CPU i5-10400,GPU 1060。
3.1 處理數據
為了獲得算法對當前網絡流行攻擊的檢測效果,本文選擇了 CICIDS-2018 數據集 ,該數據集是加拿大通信安全機構和網絡安全研究所的合作項目成果,涵蓋了如暴力攻擊、Heartbleed 漏洞攻擊、DOS 攻擊、分布式拒絕服務(Distributed Denial of Service,DDoS)攻擊、Web 攻擊(跨站腳本攻擊)、結構化查詢語言(Structure Query Language,SQL)注入、僵尸網絡、滲透攻擊共 7 種攻擊場景。該數據集雖然不是真實場景的攻擊流量數據集,但是該數據集通過機器學習技術統計分析正常用戶的網絡行為,從而模擬正常用戶流量,使用上述攻擊場景模擬異常流量,并使用配置文件的方式生成了一個較為全面、一定程度上真實可靠的異常檢測流量數據集。
CICIDS-2018 數 據 集 針 對 捕 獲 的 原 始 流 量,使 用 CICFlowMeter-V3 的 工 具, 從 統 計 分 析 的 角度,按照人類專家規定的特征提取了 80 維特征,本文算法需要與該人工特征做對比。本文選取了Wednesday-21-02-2018_Traffic 和 Friday-02-03-2018_Trafficr 兩天的網絡流量數據,其包含正常流量和 Bot、DDoS-LOIC-UDP、DDoS-HOIC 3 種攻擊流量,其中 LOIC(Low Orbit Ion Cannon)是低軌道離子炮,對該網絡流量進行流量分割,其異常流量分布如表 1。
表 1 CICIDS-2018 人工提取特征和本文分割流量攻擊類別分布

CICIDS-2018 提供了基于主機的收集的眾多流量 pcap 文件,對于這些文件,需要先篩選數據,選取攻擊流量攻擊目標主機的 pcap 文件分割得到攻擊會話樣本,并選取其他正常通信主機得到正常會話樣本,提取數據后需要對樣本進行標記,詳情需要參考 CICIDS-2018 的具體實施攻擊場景,按照攻擊時間、端口、協議、IP 等信息匹配樣本,進行標簽分配,該工作較為繁瑣,需要格外仔細。
CICIDS-2018 提供的已經提取好特征的數據集為 csv 文件,它的每一條記錄就是一個會話(雙向流),所有的特征是基于雙向流的統計特征得出的,如流持續時間、正向包數、反向包數、正向字節數、反向字節數等,兩天共計 2 097 150 條數據。本文基于 2.1 節所提出的流量分割算法切割 網 絡 流 量, 對 于 Friday-02-03-2018 含 有 僵 尸網絡的流量進行分割,提取出雙向流會話,共計100 000 個會話,會話分布如表 1 第 4 列所示,對Wednesday-21-02-2018 分割了共計 100 000 個會話,會話分布如表 1 列 5 所示。

圖 4 異常會話可視化
提取的會話數據以張量的形式存儲,一個會話最后的張量形式為 n×256,n 是數據包的個數,根據每個會話的情況動態變化,256 個字節是每個數據包最大接受的字節數,在對網絡流量數據進行處理的時候,發現數據包的平均字節數為 213(Bot)、74(DDoS -LOIC-UDP)、179(DDoS -HOIC),最后選取了 256 字節的數據長度存儲數據包,超出256 就截取前 256 個字節,少于 256,空余位置填 0。
圖 4 是各種異常會話的可視化圖像,其中每一張圖片都是一個會話的整體圖像,尺寸為 28×28。對于數據包數 n,實際網絡中 n 可能極大,而在本文分割出的 DDoS-LOIC-UDP 異常會話中,按照既定規則該會話的數據包數高達十幾萬個,同時這也是 DDoS-LOIC-UDP 的特點,該攻擊使用多臺計算機針對目標服務器開放的端口,短時間內發送了大量偽造源 IP 地址的 UDP 數據包,消耗服務器的資源,網絡充滿無用數據,使其癱瘓,從而不能正常提供服務。通常來說 UDP 會話在正向流和反向流中數據包數相等,而在該攻擊中只會在發送方一側出現大量數據。當 DDoS 攻擊者已經發送了大量數據包的時候,攻擊的目的已經基本完成時,服務器根據網絡狀況和自己負載狀態等條件,很容易就可以判斷自己受到了 DDoS 攻擊,然而此時檢測到攻擊已經過于遲鈍了,因此對于 DDoS 攻擊最好的檢測狀態是能夠提前發現攻擊。本文采用的最大數據包數為 32,對于大于 32 的會話會只截取一部分,對于有大量數據包的會話,可以根據局部特征識別該類攻擊,在攻擊初見跡象的時候就可以識別它,并作出警示。如圖 4 所示,LOIC-UDP 攻擊可視化完整圖像基本就是下半部分的重復。
在實際訓練中,數據包并沒有出現由于冗余而造成計算資源浪費的現象,因為對于實際為空的數據包,其實并不參與實際計算,該種形式是為了樣本統一格式,方便處理。
3.2 訓 練
3.1 節中得到的會話總計 100 000 個,將其打亂,按照 7 ∶ 3 的比例,分出 70 000 個會話作為訓練集,30 000 個數據作為測試集。損失函數是交叉熵損失函數 CrossEntropyLoss,用于衡量模型分布和經驗分布之間的距離,距離越小,模型就越接近經驗分布。優化算法是基于梯度下降的后向梯度傳播算法 Adam,訓練集被循環使用 10 個 epoch(時期),可以看到訓練集在大概第 8 個 epoch 的時候就開始收斂。
學習率參數設置:在使用 Adam 優化算法時,本文算法設置初始的學習率為 0.001,在訓練中,開始時學習率可以設置得適當大些,以讓模型更快地接近最優點,之后應該將學習率減少,以避免跳過最優點,因此本文使用余弦曲率衰減計劃,它會按照余弦曲線,即初始緩慢減少學習率,之后快速減小學習率,余弦曲線的周期可以指定,本文指定其為 10,與訓練集的循環次數一致,最低學習率選擇默認為 0。
3.3 結果與分析
對于模型性能的指標,本文采用混淆矩陣的方式進行計算,表 2 為二分類混淆矩陣,可以基于將某一類視為正類,其他類視為負類的方式將混淆矩陣擴展到多分類。
表 2 混淆矩陣

準確率 acc:模型預測正確的數目占所有樣本的比例,如式(1)所示。在各個類別平衡時,該指標能夠表明模型性能,但是在極端類別情況,如正類 10 個、負類 90 個,模型只需要輸出全負類,就可以達到 90% 的準確率,然而其對正類的預測能力為 0。

精確率 p:模型預測為類別 C 的樣本中其實際類別為 C 的樣本所占比例,如式(2)。

召回率 r:實際類別為 C 的樣本中模型預測為C 的樣本所占比例,如式(3)。在上面闡述的類別不平衡分類中,就可以計算出正類的召回率為0/10=0,由此可以判斷模型的預測能力完全無效。

F1 值 F1-score:精度 p 和召回率 r 的調和平均值,如公式(4),它綜合考慮了準確率和精確率的值,F1 值越高,模型性能越好。

本文針對 3.1 節中所提取的網絡會話做實驗,具體是對 Friday 提取的 100 000 個會話的含有僵尸網絡 Bot 的數據集進行實驗,其結果如圖 5 所示,其準確率為 99.996 7%,精確率為 100%,召回率為99.995 0%,F1 值為 99.997 5%。

圖 5 異常流量實驗結果
對 Wednesday 提 取 了 正 常 會 話(Benign) 和DDoS-LOIC-UDP、DDOS-HOIC 兩 種 攻 擊 會 話,總計 100 000 個會話。對這些會話進行實驗,其結果如圖 5 所示。實驗對總體樣本識別的準確率為99.99%,對正常流量的識別,以及對 LOIC-UDP和對 DDoS-HOIC 的識別在各項指標上成績也為99.99%,錯誤識別的樣本數極少。在對 LOIC-UDP的檢測攻擊中,即使由于最大數據包數的限制,導致算法無法取得該攻擊高達十幾萬個的數據包,并整體作為數據輸入神經網絡中,但是對該攻擊的局部特征識別非常成功。
同 時, 本 文 也 對 CIC-IDS-2018 提 供 的 基 于專 家 知 識 和 統 計 學 的 人 工 特 征 數 據 集( 只 包 含Friday-02-03-2018.csv 和 Wednesday-21-02-2018.csv 這兩個文件)在決策樹、隨機森林、AdaBoost集成學習、貝葉斯、SVM、KNN 最近鄰這 6 種傳統機器學習中的表現進行了評估,其結果如表 3 所示。
表 3 CIC-IDS-2018 人工特征數據集在傳統機器學習上的表現

從表 3 結果分析,本文算法對 Bot 僵尸網絡的準 確 率 為 99.99%,F1 值 為 99.99%, 對 DDOS 的兩 種 攻 擊 LOIC-UDP 和 HOIC 的 各 項 指 標 均 高 達99.99%。而人工特征數據集中對 Bot 的檢測效果最好的是決策樹算法,其準確率為 99.98%,F1 值為99.92%。對 LOIC-UDP 和 HOIC 的檢測準確率最高的是決策樹算法,分別為 100% 和 99.99%。可以看到本文算法提取的特征檢測攻擊效果與人工特征持平,在 Bot 檢測中略有優勢。需要指出的是,這些指標較高的原因有可能是攻擊類別較少,或者是該類攻擊特征判定條件較為簡單。
此外,本文在研究初期,采用提取單向流的流量分割方式,對 Friday-02-03-2018-Trafficr 提取的包含 Bot 僵尸網絡的單向流樣本數據進行實驗。該方法對 Bot 的準確率為 99.98%,F1 值為 99.98%,性能表現不如會話,最后調整策略,采取了提取會話的樣本分割方式。
4 結 語
傳統的機器學習入侵檢測算法多依賴于人工設計特征,本文提出基于深度學習的異常入侵檢測算法,采用端到端的架構,自動學習會話中潛在的高級抽象特征,無需人工設計特征,并且由于樣本可由流量數據實時構造,具有實時檢測的優點。實驗證明本文算法是有效的,并且效果好于人工設計的特征。此外,本文還詳細研究了網絡流量切割的方法,遵循一般會話的定義來提取雙向流,并給出了詳細的會話分割流程。
本文方法還存在一些可改進之處,比如本文將算法提取的網絡流量表示為單純的數字向量,然而從可視化圖像中可以看到,每一種攻擊都有較為明顯的圖形特征,如果攻擊者將自己的攻擊流量的數據包大小重新設計,添加一些無用數據,打亂其原本的圖形特征,那么基于將網絡流量視為圖像的檢測算法是否還可以達到檢測的目的還需要驗證。此外,未將 CICIDS-2018 數據集的所有攻擊類型囊括,需要做更多工作。未來可以研究結合人工規則和深度學習的入侵檢測算法,這樣可以彌補兩者的缺點,取得更高的準確率,降低誤報率。此外,近幾年,圖神經網絡開始興起,采用圖的結構來表示數據可以承載更加復雜的數據形式,如將主機和會話表示為結點,而邊是流與主機之間的聯系 ,這也是異常入侵檢測研究的另一個方向。