羅漢新,王金雙,伍文昌
(中國人民解放軍陸軍工程大學 指揮控制工程學院,江蘇 南京210007)
近年來,高級持續(xù)性威脅(Advanced Persistent Threats,APT)等復雜攻擊對網(wǎng)絡空間安全提出更大的挑戰(zhàn)。攻擊者不斷改變攻擊模式,尋找新的入侵點,并使用混淆方法保持不被發(fā)現(xiàn)。然而,當前入侵檢測系統(tǒng)通常將系統(tǒng)調用和網(wǎng)絡事件作為依據(jù),只攜帶日志條目之間的順序關系,難以直接提取有效的關聯(lián),因此對于APT的檢測效果不佳[1]。近幾年的研究建議利用溯源圖[2](Provanace Graph)豐富的上下文信息來實現(xiàn)入侵檢測。溯源圖是一個有向無環(huán)圖,圖中節(jié)點表示系統(tǒng)中主體(如進程、線程等)和對象(如文件、注冊表、網(wǎng)絡套接字),有向圖中的邊表示頂點之間的控制流和數(shù)據(jù)流的關系。與原始系統(tǒng)審計數(shù)據(jù)相比,溯源數(shù)據(jù)具有強大的語義表達能力和歷史攻擊關聯(lián)能力。
目前攻擊者更傾向于使用零日攻擊,基于特征的方法[3-4]缺乏檢測未知威脅的能力。基于異常的圖核(Graph Kernel)檢測方法[5-6]對整個溯源圖進行檢測,然而隱蔽入侵活動下生成的溯源圖可能與良性行為活動下生成的溯源圖相似,因此,難以檢測出相似溯源圖之間的異常,同時也無法識別和定位異常節(jié)點。
針對上述問題,本文提出了基于溯源圖節(jié)點級別的APT實時檢測方法。該方法將溯源數(shù)據(jù)作為源數(shù)據(jù)輸入,使用K-Means聚類方法[7]和輪廓系數(shù)相結合的方法對訓練數(shù)據(jù)集中良性節(jié)點進行聚類,得到良性節(jié)點簇以及簇質心。最后通過判斷新節(jié)點是否屬于良性節(jié)點簇來判別是否存在異常,可在節(jié)點級別上進行威脅檢測。
本文的主要工作和貢獻如下:
(1)節(jié)點級威脅檢測。將基于圖核的入侵檢測問題轉化為基于溯源圖中異常節(jié)點的檢測問題。提出了一種基于K-Means和輪廓系數(shù)相結合的方法和來識別和定位異常節(jié)點。
(2)檢測性能高。該方法在Unicorn SC-2和DARPA TC兩個數(shù)據(jù)集上進行實驗,結果表明該系統(tǒng)的準確率達到95.5%以上,并具有識別和定位異常節(jié)點的能力和可接受的運行開銷。
現(xiàn)有的入侵檢測方法主要劃分成基于特征和基于異常的檢測方法。
基于特征的檢測方法是已知攻擊行為,通過與已知攻擊特征匹配實現(xiàn)入侵檢測。Poirot[3]根據(jù)現(xiàn)有網(wǎng)絡威脅報告(Cyber Threat Intelligence,CTI)的專家知識構建查詢子圖,主要解決威脅情報子圖與系統(tǒng)級溯源圖的節(jié)點概念對齊及匹配問題,通過計算出查詢圖和溯源圖之間的圖形對齊分數(shù)來判別異常。Holmes[4]主要實現(xiàn)基于主機威脅的警報生成、關聯(lián)和場景重建。根據(jù)現(xiàn)有TTPs(Tactics,Techniques,and Procedures)的專家知識來定義溯源圖中的惡意行為模型,利用高級場景圖(High-Level Scenario Graph,HSG)實現(xiàn)低層次(日志、警報)信息到高層次的映射以解決語義鴻溝問題。但是上述方法都是基于特征的方法,難以發(fā)現(xiàn)未知的安全威脅。
基于異常的檢測方法是建立基于正常操作模式的特征庫,待檢測行為通過與庫中的行為模式進行匹配從而判斷是否異常。StreamSpot[5]提出通過分析信息流圖來檢測入侵,提取局部圖的特征來學習良性行為模型,并使用聚類方法來檢測異常子圖,能夠實時檢測APT攻擊。Unicorn[6]進一步提出了一種基于Weisfeiler-Lehman(WL)方法[8]來提取整個圖的特征,不斷對特征模型進行優(yōu)化來檢測異常圖。然而,由于圖核方法的主要提取整個溯源圖的特征,很難檢測出隱藏的威脅[9]。ProvDetector[10]提出探索溯源圖路徑來檢測惡意軟件,將路徑嵌入溯源圖中,并使用局部離群因子方法檢測惡意軟件。Pagoda[11]利用訓練數(shù)據(jù)中良性溯源圖中節(jié)點之間的因果關系構建規(guī)則。如果溯源圖匹配規(guī)則與非匹配規(guī)則的比例超過一個預先設定的閾值,則將該溯源圖判定為惡意溯源圖。然而,APT攻擊通常不會出現(xiàn)在完整的路徑中,這使得基于路徑的方法很難檢測到異常。
典型的APT攻擊具有以下特征:一是攻擊隱蔽性。攻擊者故意隱藏攻擊行為而不是簡單地進行攻擊,導致攻擊行為產生的數(shù)據(jù)與大量良性數(shù)據(jù)相混合。二是攻擊持續(xù)性。攻擊行為通常是精心策劃而且會持續(xù)數(shù)月甚至數(shù)年,與傳統(tǒng)攻擊對比存在根本上的差異。三是攻擊未知性。攻擊者更傾向于使用零日漏洞來攻擊系統(tǒng)。因此,本文假設沒有任何攻擊行為的先驗知識來進行訓練。
圖1展示了DARPA TC THEIA案例[12]的攻擊溯源圖。攻擊者利用Firefox54.0.1版本漏洞植入后門程序,攻擊行為持續(xù)了兩天。攻擊者首先將名為/home/admin/profile的文件植入受害者主機。該文件以root權限運行,與攻擊者的控制臺b.b.b.b連接。然后將名為/var/log/mail的文件植入主機,并生成具有root權限的新進程。最后攻擊者對c.c.c.c進行端口掃描。圖中灰色節(jié)點是與入侵活動相關的節(jié)點。
這些攻擊行為產生的偏差將被溯源數(shù)據(jù)采集系統(tǒng)捕獲,溯源圖會生成額外的節(jié)點和邊,攻擊行為下的節(jié)點局部結構不同于良性節(jié)點的局部結構。例如,在圖1中,異常節(jié)點①/var/log/mail有數(shù)千條連接到遠程IP節(jié)點的邊,這與良性節(jié)點②/usr/bin/fluxbox連接邊數(shù)量和類型有很大不同,因此將主機入侵檢測問題轉化為異常節(jié)點檢測問題。
圖1 DARPA TC THEIA攻擊溯源圖
本文提出基于溯源圖節(jié)點級別的APT實時檢測方法。檢測框架包括四個模塊:溯源數(shù)據(jù)生成模塊、溯源數(shù)據(jù)存儲模塊、模型訓練模塊以及檢測與報警模塊。檢測框架如圖2所示。
圖2 檢測框架:①溯源數(shù)據(jù)生成模塊;②溯源數(shù)據(jù)存儲模塊;③模型訓練模塊;④檢測與報警模塊
現(xiàn)有常用的溯源數(shù)據(jù)采集系統(tǒng)包括PASS[13]、Hi-Fi[14]和CamFlow[15]等。本文選擇使用CamFlow系統(tǒng),一是因為CamFlow系統(tǒng)能夠根據(jù)用戶需求調整采集溯源數(shù)據(jù)的策略,不至于數(shù)據(jù)過大而產生大量的內存開銷;二是因為CamFlow采用Linux安全模塊(LSM)框架和Netfilter軟件,能夠高質量、可靠地記錄數(shù)據(jù)對象之間的信息流,保證溯源數(shù)據(jù)的完整性和安全性。
CamFlow使用W3C PROV[16]數(shù)據(jù)模型來存儲數(shù)據(jù)。溯源圖節(jié)點表示實體(Entity)、活動(Activity)和代理(Agent)三大類。在這三種類型節(jié)點之間還有wasDerivedFrom、used、wasGeneratedBy等7種 邊 類 型。在操作系統(tǒng)中,實體是內核數(shù)據(jù)對象(文件、消息和數(shù)據(jù)包等),活動通常是對實體執(zhí)行操作的過程,代理是指開展活動的個人或組。溯源圖中的有向邊表示信息流上的系統(tǒng)調用。
溯源數(shù)據(jù)存儲模塊將前一個模塊生成的圖數(shù)據(jù)存儲在磁盤和內存中。溯源子圖的維護策略在訓練階段和檢測階段不同,在訓練階段,當節(jié)點的數(shù)量到達預定數(shù)值時,開始在內存中構建溯源子圖。在流式圖模式中,當邊的數(shù)量到達預定數(shù)值時,在內存中構建溯源子圖并開始檢測,即在內存中只需存儲一個大小有限的溯源子圖即可。
使用GraphChi[17]當做溯源數(shù)據(jù)存儲器。GraphChi是一個基于磁盤的系統(tǒng),可以在一臺計算機上高效地計算具有數(shù)十億條邊的大型圖形。利用并行滑動窗口(Parallel Sliding Windows,PSW)技術將圖存于輔存(SSD或者磁盤)中,只需要很少次數(shù)的非連續(xù)讀寫輔存便可以實現(xiàn)每秒達百萬次的圖更新計算,并且支持異步計算模型,大大減少了圖更新時間。
(1)預處理階段
利用節(jié)點連接邊的類型和數(shù)量構造節(jié)點的特征向量。在特征構造之前,先計算不同邊的類型(如read,write,fork等)的數(shù)量為Ne,將不同的邊類型分別映射成整數(shù)從0到Ne-1,節(jié)點的特征向量可以表示為:
式中,前Ne個fi代表v節(jié)點連接入邊類型i的數(shù)量,后Ne個fi代表v節(jié)點連接出邊類型i的數(shù)量。
由于某些進程會重復對某一文件進行讀寫,導致該進程節(jié)點的邊數(shù)量一直增加。對進程的特征向量進行歸一化減少對檢測結果的影響,歸一化公式如式(2)所示:
其中為e自然常數(shù),fi為特征向量中的某一特征值,而k為常數(shù)系數(shù)。
不同的溯源數(shù)據(jù)采集系統(tǒng)有不一樣的邊類型,因此定制節(jié)點更新算法來獲取不同數(shù)據(jù)類型的節(jié)點特征向量,算法如下:
(2)訓練階段
因為數(shù)據(jù)集一般較龐大,所以內存開銷和運行時間需要著重考慮。首先,利用PSW方法將整個溯源圖拆分為幾個子圖,不同子圖中的節(jié)點集是不相交的,不需要使用整個溯源圖進行訓練。然后,根據(jù)每個子圖的順序進行K-Means聚類學習得到良性節(jié)點簇。最后,利用輪廓系數(shù)確定簇數(shù)量K的最佳值,輪廓系數(shù)越接近于1表示該聚類效果越好。生成的多個簇可理解為不同類型節(jié)點的行為。
(1)檢測原理
模型訓練模塊得到多個良性節(jié)點簇。對每一個簇的質心和該簇中的節(jié)點計算歐式距離,以最遠的歐式距離來當做簇的半徑。如果測試數(shù)據(jù)集中的節(jié)點與簇的質心之間的歐氏距離少于該簇的半徑,則將節(jié)點分類到該良性節(jié)點簇中。測試節(jié)點至少正確分類到一個良性節(jié)點簇,則該節(jié)點視為良性節(jié)點。歐式距離公式如(3)所示:
式中,X=(x1,x2,…,xn)為測試向量,Y=(y1,y2,…,yn)為簇質心向量。
(2)實時檢測
在流式溯源圖中,當邊的數(shù)量到達ES參數(shù)大小時,在內存中構建溯源子圖并開始檢測。節(jié)點的特征向量隨著邊的加入而改變,因此,良性節(jié)點在到達最后階段之前可能會被檢測為異常,異常節(jié)點也有可能被檢測為良性節(jié)點。將檢測出的異常節(jié)點存儲在集合S中,并設置等待時間閾值T。如果異常節(jié)點沒有在時間T內變?yōu)榱夹?,從S中彈出該節(jié)點,并將其視為異常節(jié)點。在流式溯源圖中可以多次檢測某一節(jié)點,因此一個異常節(jié)點可能在初期被檢測為良性,當它開始執(zhí)行惡意活動時,它將被檢測為異常節(jié)點。當異常節(jié)點的數(shù)量超過閾值時會發(fā)出警報。
(1)數(shù)據(jù)來源
Unicorn SC-2數(shù)據(jù)集[18],該數(shù)據(jù)集包含125個良性行為的溯源數(shù)據(jù)和25個包含惡意行為的溯源數(shù)據(jù)。該溯源數(shù)據(jù)是通過在持續(xù)集成(CI)平臺上模擬APT供應鏈攻擊,通過CamFlow(v0.5.0)采集整個系統(tǒng)的溯源數(shù)據(jù),每個場景都持續(xù)運行三天。數(shù)據(jù)集描述如表1所示。
表1 Unicorn SC-2數(shù)據(jù)集
DARPA TC數(shù)據(jù)集[12]是DARPA TC項目中在為期兩周的攻防對抗期間從主機系統(tǒng)中采集而來的。參與的各個團隊負責從不同平臺(如Linux、FreeBSD)采集惡意和良性的溯源數(shù)據(jù)。數(shù)據(jù)集的描述如表2所示。
表2 DARPA TC數(shù)據(jù)集
實驗使用Ubuntu18.04操作系統(tǒng),CPU為Intel?i7-9750H,32 GB內存和120 GB SSD。
(2)性能指標
本文分類模型使用了準確率Precision、召回率Recall、F-score和 假 正 率FPR來 檢 測 性 能。其 計 算方法如下:
其中相關性能指標定義如表3所示。
表3 性能指標
在Unicorn SC-2數(shù)據(jù)集上研究該方法設計的參數(shù)如何影響檢測性能。測試的參數(shù)是NS、ES、Tt、T,如表4所示。表4中的參數(shù)值構成了基線,當測試其中一個參數(shù)時,將其他參數(shù)保持與基線相同。
表4 參數(shù)表
(1)NS和ES。在訓練階段中,當內存中的節(jié)點個數(shù)達到NS時,開始訓練K-Means模型并生成多個良性節(jié)點簇以及簇質心。在檢測階段中,當邊個數(shù)達到ES時,開始在內存中構建子圖并檢測。ES參數(shù)越大節(jié)點到達最終狀態(tài)的時間越短,但是內存的使用量更大,而CPU的使用率降低。如圖3所示,說明該方法具有可接受的運行開銷。
圖3 ES參數(shù)對運行開銷的影響
(2)Tt和T。這兩個參數(shù)影響檢測與報警階段。實驗結果如圖4所示,T是為良性節(jié)點設置的等待時間閾值,以期達到最終階段。在實時流溯源圖的檢測模式下,良性節(jié)點可能在到達最后階段之前被檢測為異常。因此,T越大,節(jié)點具有更多的“進化時間”,導致了更高的準確率、更低的召回率和假正率。雖然較大的T減少了誤報的數(shù)量,但也降低了盡早檢測入侵的能力。Tt是異常節(jié)點的數(shù)量閾值,當異常節(jié)點個數(shù)達到Tt時會進行報警。較大的Tt將導致更高的準確率和更低的假正率。
圖4 參數(shù)設置的影響
在Unicorn SC-2和DARPA TC數(shù)據(jù)集上使用K折交叉驗證(K=5)進行實驗并記錄結果,并與Unicorn和ProDetector兩種方法進行比較。當設置參數(shù)NS為80 000,Tt為2,ES為150 000,時 間T為500時取得了最好性能。圖5是在Unicorn SC-2數(shù)據(jù)集上的檢測結果。表5是在DARPA TC數(shù)據(jù)集上節(jié)點級別的檢測結果,表6是在DARPA TC數(shù)據(jù)集上基于圖級別的檢測結果。
圖5 三種入侵檢測算法的檢測率
表5 DARPA數(shù)據(jù)集基于節(jié)點級別的檢測率
圖5的實驗結果表明該方法通過調整參數(shù)準確率能達到95.83%以上,召回率和F-score為92%,且假正為4%,這對緩解威脅疲勞(threat fatigue)問題具有很大的幫助。與Unicorn和ProDetector兩種檢測方法比較,準確率提升了20%~28%。表5中數(shù)據(jù)說表明該方法具有檢測異常節(jié)點的能力。考慮到數(shù)據(jù)集的不平衡,檢測結果是可以接受的。由于Unicorn和ProvDetector不進行異常節(jié)點檢測,因此該方法并沒有與這兩種方法在節(jié)點級別上進行對比。表5、表6實驗結果表明該方法在兩種檢測級別上都具有較好的檢測性能。
表6 DARPA數(shù)據(jù)集基于圖級別的檢測率
DARPA TC數(shù)據(jù)集是在攻擊持續(xù)很長一段時間內采集得到的,所以在整個溯源圖中異常節(jié)點只占很小一部分(不到1%)。該方法還是能夠檢測出重要異常節(jié)點,如圖1中①和③節(jié)點,但無法檢測到某些異常節(jié)點,如④惡意IP地址等。這些節(jié)點在攻擊期間并沒有表現(xiàn)出顯著的影響,這些節(jié)點更像是輔助攻擊的角色。該方法在DARPA TC數(shù)據(jù)集中引起許多誤報,可能與大量良性節(jié)點有關,后續(xù)還可以使用誤報節(jié)點來訓練更多的子模型,避免將來出現(xiàn)同樣的誤報。
針對以前方法對異常節(jié)點識別和定位研究較少,本文提出了一種基于溯源圖節(jié)點級別的APT實時檢測方法。利用聚類方法和輪廓系數(shù)對良性節(jié)點進行聚類,構建良性節(jié)點簇,后續(xù)對待檢測節(jié)點是否屬于良性節(jié)點簇來判別異常。在Unicorn SC-2和DARPA TC兩種公共數(shù)據(jù)集上進行測試,實驗結果表明該方法達到了95.83%的準確率和4%的假正率,并且能夠準確識別和定位異常節(jié)點。
該方法是基于異常檢測,可以有效地檢測未知攻擊,但是由于用戶行為收集不完整,極易出現(xiàn)誤報情況。后續(xù)可以使用誤報節(jié)點來訓練更多的聚類模型,避免將來出現(xiàn)同樣的誤報。本文的方法都依賴于閾值的選擇,閾值可能對用于評估的基準數(shù)據(jù)集中的場景非常有效,但可能對其他場景無效。因此,需要對自適應閾值或上下文閾值的選擇進行更多研究,以使入侵檢測方法對真實環(huán)境更具魯棒性。