肖喜生,龍 春,杜冠瑤,魏金俠,趙 靜,萬 巍
1(中國科學院 計算機網絡信息中心,北京 100190)
2(中國科學院大學 計算機科學與技術學院,北京 101408)
根據僵尸網絡威脅報告Spamhaus Botnet Threat Update Q1-2020[1]調研,傳統(tǒng)的C&C 相關的僵尸網絡數量減少了一半,但新的惡意軟件已大量涌現,這些新興惡意軟件利用特定的云基礎設施進行非法活動.黑客利用僵尸網絡進行點擊欺詐、分布式拒絕服務攻擊(DDoS)、發(fā)送垃圾郵件和竊取個人信息等惡意活動,僵尸網絡中的主機通常在所有者不知情、未授權的情況下被黑客劫持.然后,黑客通過控制這些主機一起攻擊更多主機.僵尸網絡也可以通過在網絡空間中傳播惡意軟件或勒索軟件達到攻擊的目的.因此,檢測僵尸網絡并防范其攻擊是網絡安全研究的重要任務.
隨著技術的發(fā)展,用于感染主機和運行僵尸網絡的惡意軟件為了逃避檢測也迅速發(fā)展,從而令許多常用的僵尸網絡檢測技術失效.例如,僵尸網絡通過改變其通信協議來逃避檢測[2].在一開始,僵尸網絡使用IRC (Internet Relay Chat)協議來控制其他主機.此后,網絡空間中逐漸出現采用P2P 協議通信的僵尸網絡,其中每個主機都充當客戶端和服務器;然后基于HTTP協議的僵尸網絡開始流行[3].2016年,Methbot 僵尸網絡成為有史以來最大的數字廣告惡意軟件,該惡意軟件通過位于美國的ISP 獲得了數千個IP 地址.Mirai 僵尸網絡[4]在同年年底席卷了整個互聯網,Mirai 發(fā)動了幾次大規(guī)模DDoS 攻擊破壞了大量主流站點.還有一些更復雜更隱蔽的僵尸網絡通過更改其通信模式來長時間隱藏而不被發(fā)現.因此,僵尸網絡檢測算法需要與時俱進,要能迅速適應不斷進化的僵尸網絡.
現有的僵尸網絡檢測技術仍存在以下問題:
(1)大多數檢測方法能夠很好的擬合訓練數據,然而在測試數據上顯現出效果不佳的問題,普遍存在著模型過擬合的情況;
(2)檢測模型泛化能力差,針對已知的單一類型的僵尸網絡檢測效果較好,但面對未知類型僵尸網絡乏力;
(3)大部分檢測方法忽略了網絡流量中的時序通信模式,導致在實際網絡環(huán)境中檢測效果不佳,應用性不強;
考慮到上述問題,本文提出了基于流量摘要的僵尸網絡機器學習檢測方法,首先將原始流數據按照源主機IP 地址聚合,劃分適當的時間窗口,利用Spark 計算所選原始特征的統(tǒng)計特征生成流量摘要記錄,對時間窗口內該主機的通信行為進行建模,然后構建機器學習分類模型用于檢測僵尸流量.最后利用CTU-13數據集對本文提出的方法進行驗證,實驗結果表明本文提出的方法能夠有效檢測僵尸流量,并且能夠檢測未知僵尸網絡.
目前,僵尸網絡檢測領域已有大量的國內外學者開展了相關方面的研究,傳統(tǒng)的方法有人工分析或黑白名單過濾,或通過手動維護相應的簽名數據庫進行簡單的匹配.
Gadelrab 等[5]通過分析已知僵尸網絡的幾種惡意軟件樣本,確定了一組特征,這些特征可以幫助區(qū)分正常和僵尸網絡流量.Gu 等[6]在他們的工作中研究了僵尸網絡惡意軟件感染的生命周期.2008年,他們在后續(xù)的研究[7]中提出了一種基于網絡的異常檢測方法來識別局域網中的C&C 僵尸網絡,而無需先驗簽名數據庫和C&C 服務器地址.他們的方法能夠識別網絡中的C&C 服務器和受感染的主機.他們通過部署蜜罐來驗證其方法的有效性.其他一些文獻[2,8,9]論述了基于蜜罐的僵尸網絡檢測方法的局限性.蜜罐在檢測多種漏洞利用方面存在局限性,無法擴展到其他惡意攻擊,也不能實時檢測攻擊.此外,在自己的環(huán)境中構建的蜜罐不是開源的,并且由于公開僵尸網絡數據集的缺乏,無法比較實驗的結果.Garcia 等[10]認為先前僵尸網絡檢測方法沒有進行任何對比,因此他們采集并開源了一個具有標簽的僵尸網絡數據集CTU-13,其中包括僵尸流量、正常流量和背景流量.他們?yōu)榻┦W絡檢測方法設計了一種新的評價指標并且比較了(BClus和CAMNEP)與BotHunter[6]的檢測結果.由于一些僵尸程序的預先編程性質,致使僵尸網絡流量表現出重復的行為模式,仍有大多數研究沒有考慮到網絡流量中的時序模式[11,12].盡管有其他一些論文考慮了時間模式,但仍然有一定的局限性.他們只考慮某些特定源IP 地址中的時間特征,而沒有考慮整體的網絡流量,使得在實時僵尸網絡檢測中效果不佳[13,14].另外,一些現有的研究僅限于傳統(tǒng)的基于IRC、P2P和HTTP 協議的僵尸網絡.因此,這些方法無法檢測各種類型的僵尸網絡或未知的僵尸網絡.
基于機器學習的方法是最近比較流行的僵尸網絡檢測方法,安全管理員可以使用訓練好的機器學習模型識別僵尸網絡.基于機器學習的方法可從僵尸網絡數據集中自動提取代表性和容易區(qū)分的特征,不需要有關僵尸網絡流量的任何先驗信息.
支持向量機(SVM)由于其出色的泛化性能被廣泛用于許多安全應用中[15,16].Hoang 等[17]提出了一個基于機器學習的僵尸網絡檢測模型,論文使用域名服務查詢數據并使用KNN、決策樹、隨機森林和樸素貝葉斯算法.實驗結果表明,隨機森林算法的準確率最高,達到了90.80%.但是同時假陽性率也相對較高.Haddadi 等[18]比較了5 種不同的僵尸網絡檢測方法,其中包括兩種基于簽名的方法BotHunter和Snort,其余方法將機器學習算法應用于不同的特征集,包括基于數據包有效負載和基于網絡流的特征.他們在包含25 個僵尸網絡的數據集上執(zhí)行多分類和二進制分類測試,實驗結果表明,基于流的特征是對僵尸網絡通信進行建模的最具代表性的特征,C4.5 算法則達到了最高的分類準確性.Dra?ar 等[19]詳細說明了檢測異常的特征選擇方法,他們評估了基于流的特征對檢測精度的影響.Stevanovic 等[20]提出了基于流的僵尸網絡檢測方法,選擇了39 個流特征(例如源端口、目標端口、數據包大小的標準差和流持續(xù)時間)用于對惡意流量進行建模.他們評估了8 種監(jiān)督機器學習算法,包括樸素貝葉斯、決策樹、SVM、貝葉斯網絡分類器和邏輯回歸.結果表明,隨機森林算法識別僵尸網絡的準確率最高,達到了95.7%.Chen 等[21]通過監(jiān)督式機器學習算法快速檢測復雜網絡中的僵尸網絡.他們將基于流和基于會話的特征組合以建立分類模型,并在CTU-13 數據集上進行了實驗,同時分析了各種算法的性能,其中隨機森林算法達到了94%的精度.Niu 等[22]使用XGBoost 算法在HTTP 流量上檢測受感染的主機,檢測準確率達到98.72%,假陽性率小于1%.
分析以上研究發(fā)現,現有的檢測方法只針對特定的僵尸網絡,并且會遺漏一些僵尸網絡主機之間特定的時序通信模式.此外,針對單條流或單個主機的處理會導致較高的時間和計算開銷,此類檢測技術也就無法應用于實時僵尸網絡檢測.如何更加有效地提取僵尸網絡流特征,如何提高檢測方法的泛化性并提高檢測效率及精度,需要進一步研究.因此,本文提出基于流量摘要的僵尸網絡機器學習檢測方法,以改善上述問題.
機器學習是人工智能的一種應用,它使學習系統(tǒng)能夠自動學習并從歷史經驗中進行改進.機器學習算法是一類從數據中自動分析獲得規(guī)律,并利用規(guī)律對未知數據進行預測的算法[23].在本文中,僅考慮了監(jiān)督學習技術在僵尸網絡檢測中的性能,這里本文選擇在之前研究中被證明具有較好性能的監(jiān)督機器學習算法,包括決策樹、隨機森林和XGBoost.
(1)決策樹
決策樹(Decision Tree,DT)是一種預測模型,代表的是對象屬性與對象值之間的一種映射關系.決策樹通過創(chuàng)建一組決策規(guī)則來對對象進行分類,這些規(guī)則是根據訓練數據的特征集提取的.在決策樹中,葉子代表類,樹中的每個子節(jié)點及其分支代表導致分類的特征的組合.因此,對對象進行分類時首先檢查根節(jié)點的值,然后在對應于那些值的樹下繼續(xù)向下.對每個節(jié)點重復執(zhí)行此過程,直到遍歷到葉節(jié)點為止.決策樹通常使用信息增益(IG)和基尼系數來選擇決策樹的特征.本文的實驗使用的決策樹算法是優(yōu)化的CART 算法.
(2)隨機森林
隨機森林(Random Forest,RF)是一個包含多個決策樹的分類器,并且其輸出的類別是由個別樹輸出的類別的眾數而定.該算法的核心思想是創(chuàng)建一系列決策樹,這些決策樹單獨訓練并得出獨立的結果,隨機森林選擇選擇的結果即為最多的樹預測的結果.
(3)XGBoost
XGBoost 模型是為在不平衡的數據集上運行而構建的,因為重新采樣是在內部進行的,因此它可以抵抗數據不平衡.XGBoost 被稱為極限梯度提升,是一種順序決策樹.通過不斷地添加樹,不斷地進行特征分裂來生長一棵樹,每次添加一個樹,擬合上次預測的殘差.XGBoost 方法不同于傳統(tǒng)的基于決策樹的集成學習方法,它在損失函數里加入了葉子結點權重和單個決策樹模型復雜度等正則項,這樣可以防止決策樹模型過于復雜,進而防止過擬合.
為了準確地描述特定時間窗口內主機的流量行為,本文提出了一種基于統(tǒng)計特征的網絡流量摘要方法,利用該方法得到的流量摘要記錄包括特定時間窗口內主機發(fā)送流量的統(tǒng)計特征.
首先,根據網絡流數據集中的源IP 地址對流進行分組.然后,提取傳輸層協議的特征,包括TCP和UDP協議,這是上層應用層協議的基礎.本文選擇的4 個流特征為:Dur,TotPkts,TotBytes和SrcBytes.表1列出了從網絡流量數據中提取的基于TCP 協議的流特征及其描述.針對UDP 協議的流特征提取這里不再贅述.
表1 基于TCP的流特征集描述
針對根據源IP 地址聚合后的網絡流,具體的流量摘要方法如下:給定一個時間窗口值t,計算t內基于TCP和UDP 協議選擇的上述4 個特征計算4 個統(tǒng)計值,包括最小、最大、均值和標準差值.對于每個新特征名稱,其前綴反映其統(tǒng)計特征,然后描述協議類型.例如,特征名稱Mean_TCP_Dur 表示在時間窗口t內使用TCP 協議通信的持續(xù)時長平均值.在處理了每個源IP 地址的每個時間窗口之后,獲得了流量摘要記錄的集合,其中共包含32 個提取的特征.圖1詳細描述了流程摘要過程.通過對給定時間窗口的網絡流進行流量摘要,計算傳輸層協議統(tǒng)計特征,以獲取時間窗口內該主機的時序通信行為模式,為之后的僵尸流量檢測提供數據支撐.
圖1 流量摘要過程描述
上述的流量摘要任務涉及到復雜的聚合和統(tǒng)計任務,使用傳統(tǒng)的單機處理方法非常耗時,一種有效的方法是使用分布式大數據處理技術[24],將任務分配給不同的計算節(jié)點,然后對結果進行匯總.因此本文使用流行的大數據處理框架Apache Spark 來進行流量摘要任務處理.
本文提出了一種基于流量摘要的僵尸網絡機器學習檢測方法,如圖2所示.本文的方法分5 個步驟:流采集、流量摘要、數據預處理、分類和評估.第1 步,流采集可以從某些路由器或其他網絡流采集器(例如NetFlow 采集設備)收集網絡流數據.本文使用開源的僵尸網絡數據集.在第2 步,本文為流量摘要任務部署了一個Spark 集群環(huán)境,利用Spark 技術快速完成流量摘要記錄生成.第3 步,將流量摘要記錄匯總成新數據集,并對其進行重新標記,然后進行特征預處理,這里由于生成的特征都是數值型特征,因此進行歸一化處理,特征預處理后將數據集劃分為訓練集和測試集.在第4 步,基于流量摘要記錄數據集訓練不同的機器學習分類模型,所用的分類算法為決策樹,隨機森林和XGBoost,用于分類僵尸流量和非僵尸流量.最后一步,通過實驗驗證本文提出的檢測方法,利用分類評價指標評估比較不同分類算法在流量摘要數據集的檢測性能,并討論不同時間窗口值對檢測結果的影響.
圖2 基于流量摘要的僵尸網絡檢測流程
為了驗證本文檢測方法的效果,本節(jié)在流量摘要生成的新數據集上比較了決策樹、隨機森林和XGBoost算法的分類性能,然后驗證了不同時間窗口值對分類結果的影響.
本文使用開源的僵尸網絡數據集CTU-13[10],該數據集包含13 種僵尸程序感染場景.原始流量為PCAP格式,由多個數據包組成,對PCAP 文件進行進一步處理可以獲得NetFlow 文件,這些文件包含標簽并可以很好地區(qū)分客戶端和服務器.文獻[10]使用單向NetFlow表示流量并標記標簽,但作者認為不應該使用這些單向NetFlow 文件,因為使用雙向NetFlow 文件效果更好.雙向NetFlow 相對于單向NetFlow 具有幾個優(yōu)點.雙向NetFlow 文件解決了客戶端和服務器的區(qū)分問題,包含了更多的信息,并且包含了更詳細的標簽.因此,本文也使用雙向NetFlow 文件進行實驗.
根據前文對流量摘要的描述,原始流數據首先根據預先給定的時間窗口(例如10 s的時間窗口)按源IP 地址進行分組,此過程還包括計算該時間窗口下不同的協議的統(tǒng)計特征生成流量摘要記錄.分別處理了13 個CTU-13 數據集的攻擊場景之后,獲得了13 個流量摘要記錄組.然后根據源IP對流量摘要記錄重新標記.例如在場景1中,主機147.32.84.165是被感染的僵尸主機,因此由該IP 聚合的流量摘要記錄將被標記為僵尸流量.本文選擇不同的時間窗口進行聚合,包括5 s、10 s、15 s、30 s和60 s,以驗證不同時間窗口值對分類結果的影響.表2顯示了整個CTU-13 數據集進行流量摘要后標簽分布結果,其中數字0 表示正常流量或背景流量,數字1 表示僵尸流量.
表2 流量摘要數據集標簽分布
由于流量摘要數據集包含的32 個特征都是數值型特征,在數據處理過程中需要處理數值分布區(qū)間較大的情形,因此需要對數據進行歸一化處理,將原本隨機分散的數據經過處理壓縮到一個較小的分布區(qū)間,避免離散點對檢測結果產生較大的影響.
CTU-13 數據集存在嚴重的類別不平衡問題,尤其是在流量摘要處理之后,這種不平衡現象更加嚴重,如表2所示,僵尸流量在整個網絡流量中占比極少.為了解決類別不平衡的問題,本文采用了一種稱為SMOTE(Synthetic Minority Oversampling TEchnique)[25]的過采樣技術來克服極端的類別不平衡問題.SMOTE的核心思想是在少數類樣本及其鄰居之間插入隨機生成的新樣本,這可以增加少數類樣本的數量并改善類別不平衡的狀況.
本文實驗在準確率(Acc)、精確率(Pre)、召回率(Rec)和F1 值上進行對比,各性能指標公式如下所示:
其中,TP代表著真實值屬于正類,預測值屬于正類的數量;TN代表著真實值屬于負類,預測值屬于負類的數量;FP代表著真實值屬于負類,預測值屬于正類的數量;FN代表著真實值屬于正類,預測值屬于負類的數量.
本文首先分別在數據集的所有場景上進行實驗,時間窗口為10 s,3 種機器學習算法的分類結果如表3所示.結果表明,所有算法均具有較好的分類效果,其中XGBoost 在各種指標上具有最穩(wěn)定的性能.
表3 各個場景下的分類結果
為了進一步驗證本文方法的檢測性能,對比文獻[26]中使用隨機森林對Neris 僵尸網絡進行檢測的結果,本文同樣使用隨機森林算法進行對比實驗,Neris 僵尸網絡包括場景1、2和9,輪流選擇1 個場景用于測試,剩下兩個場景用于訓練,10 s 時間窗口的實驗結果如表4所示,其中本文的實驗結果用*標記.
從表4可見,本文的方法在所有分類指標上均有提升,上文的實驗在單一類型惡意軟件的僵尸網絡檢測上具有良好的效果,為了檢測未知的僵尸網絡,必須考慮更多類型惡意軟件的僵尸網絡.參考文獻[9]建議,本文將場景1、2、6、8、9 組合用于測試,將其他場景用于訓練.訓練集中的僵尸程序包括Rbot,Virut,Sogou和NSIS.ay,測試集中的僵尸程序Neris,Menti和Murlo.以10 s的時間窗口對整個數據集進行的實驗結果如圖3所示.
表4 Neris 僵尸網絡分類結果
從圖3可以看出,XGBoost 分類器在檢測未知僵尸流量上具有最優(yōu)的檢測性能,其中精確率達到了96.50%,F1 值也達到了79.55%,由于使用分類器的默認參數,因此以后的工作可以研究針對參數進行優(yōu)化,進一步提升分類器的檢測性能.
圖3 全數據集分類結果(10 s 時間窗口)
為了進一步驗證不同時間窗口值對分類結果的影響,本文選擇了5 s,10 s,15 s,30 s和60 s 等不同的時間窗口,利用分類性能較好的XGBoost 進行實驗.結果如表5所示.
從表5可以看出,10 秒的時間窗口下進行流量摘要得到的綜合結果最好,其中準確率(Acc) 達到了82.60%,召回率(Rec) 達到了67.66%,F1 值達到了79.55%,這3 項指標為所有時間窗口實驗下的最大值.綜上所述,由于時間窗口較小,無法捕獲僵尸網絡流量的時序特征,時間窗口較大則無法滿足現實應用中近實時檢測的需要,導致檢測結果不佳,在實際應用中可劃分更加細粒度的時間區(qū)間進行實驗以確定最佳的時間窗口值.
表5 不同時間窗口下的全數據集分類結果
本文提出了基于流量摘要的僵尸網絡機器學習檢測方法,首先將原始流數據按照源主機地址聚合,劃分適當的時間窗口生成流量摘要記錄,然后構建決策樹、隨機森林和XGBoost 機器學習分類模型.在CTU-13 數據集上的實驗結果表明,本文提出的方法能夠有效檢測僵尸流量,并且能夠檢測未知僵尸網絡,此外,借助Spark 大數據技術也能滿足現實應用中快速檢測的需要.未來的工作將研究針對分類器參數的優(yōu)化方法,以進一步提高檢測未知僵尸網絡的檢測能力.