王曉東,趙一寧,肖海力,王小寧,遲學斌
1.中國科學院 計算機網(wǎng)絡信息中心,北京 100190
2.中國科學院大學,北京 100049
中國國家高性能計算環(huán)境是由國內(nèi)眾多超算中心和高校的計算集群組成的國家級大型高性能計算環(huán)境,采用中國科學院計算機網(wǎng)絡信息中心自主研發(fā)的網(wǎng)格環(huán)境中間件SCE[1]聚合了大量的通用計算資源,為全國眾多高校和研究機構(gòu)的用戶提供了優(yōu)質(zhì)的計算服務。環(huán)境中Linux 系統(tǒng)的syslog 服務會產(chǎn)生大量日志,用于記錄系統(tǒng)中發(fā)生的各類事件信息,這些信息包含各種潛在的異常情況,對其進行分析具有重要意義。由于環(huán)境中的每個節(jié)點都會產(chǎn)生大量的系統(tǒng)日志,這使得最終的日志文件變得極為龐大,直接采用人工觀察的方法處理這些日志顯然是一項不可能完成的任務,因此需要使用一些機器學習方法對環(huán)境中的日志進行檢測分析。
基于機器學習的檢測分析技術主要分為兩大類:誤用檢測和異常檢測[2]。誤用檢測屬于機器學習中的有監(jiān)督算法,建模時需要人工將所有訓練樣本標記為“正?!焙汀爱惓!焙蟛拍苓M行學習訓練并更新模型參數(shù)。異常檢測屬于無監(jiān)督學習算法。其主要思想是根據(jù)已知的大量數(shù)據(jù)建立模型基線,然后找到偏離模型基線的少量數(shù)據(jù)作為異常。大規(guī)模分布式環(huán)境中多節(jié)點產(chǎn)生的日志比較復雜,因為這些日志通常是開發(fā)人員為了開發(fā)方便而打印的一些原始想法,其中包括錯誤、跟蹤和程序內(nèi)部狀態(tài)等信息,因此利用這些信息是非常困難的。同時這些信息都是非結(jié)構(gòu)化的,不利于機器識別。此外,日志的數(shù)據(jù)量非常龐大,人工標注后再使用機器學習方法進行分析顯然是難以完成的任務,因此使用無監(jiān)督的異常檢測方法較為合適。在先前的工作中已經(jīng)初步實現(xiàn)了使用機器學習算法對環(huán)境中的日志流量進行檢測,然后針對異常日志流量進行聚類。然而該方法屬于離線算法,并且在異常結(jié)果分析時使用的聚類算法需要人工參與并設定聚類參數(shù),而本文方法在建模時可以更加精細地自動化確定模型參數(shù),并更進一步探索如何進行模型持久化以及如何進行線上檢測。
系統(tǒng)的整體流程除了設定少量閾值以及流量模式的定義需要人工參與外,得到異常日志流量模式的過程全自動化進行,并且在線上檢測時也能自動化得到異常結(jié)果并將其進行分類歸納,這樣使得系統(tǒng)管理員對系統(tǒng)日志流量的監(jiān)控變得簡單。具體來說,本文有兩個貢獻點:
第一,實現(xiàn)了兩階段異常檢測的方法,包括線下模型自動化建立和線上實時結(jié)果分析。在線下模型建立的過程中無須人工參與即可找到流量異常情景。在線上分析時,可將結(jié)果實時自動化展示。整個處理過程對操作者的要求不高,進行檢測時不需要有機器學習的專業(yè)知識。
第二,在線下建模和線上預測時使用了國家高性能計算環(huán)境中產(chǎn)生的真實日志進行實驗,實驗結(jié)果證明了該方法顯著降低了人工分析的工作量。
本章簡單討論一下日志模式分類、數(shù)據(jù)挖掘相關的日志分析以及在線日志分析的相關研究。
Vaarandi[3]在對日志文件數(shù)據(jù)進行模式分類時使用了一個名叫SLCT(simple logfile clustering tool)的聚類算法,該聚類算法是基于Apriori 頻繁項集的算法,因此需要使用者手動輸入調(diào)整支持閾值。之后,他又在文獻[4]中改進了日志的聚類算法,并取名為LogHound,該算法是一種基于廣度優(yōu)先搜索的頻繁項集挖掘算法,可以從日志中挖掘頻繁模式。該算法結(jié)合了廣度優(yōu)先和深度優(yōu)先算法的特點,同時考慮了事件日志數(shù)據(jù)的特殊屬性,因此比SLCT 更接近地反映Apriori 算法。在此基礎上,Makanju 等人[5]引入了IPLoM(iterative partitioning log mining)算法,該算法是一種用于挖掘事件日志簇的新算法。與SLCT 不同,IPLoM 是一個層次聚類算法,它以整個事件日志作為分析起點,并在三個步驟中迭代分區(qū)。與SLCT 類似,IPLoM 將單行日志中的位置視為單詞匹配點,因此對單詞位置的移位操作敏感?;趯哟尉垲惖奶攸c,IPLoM 算法不需要提供支持閾值,而是需要其他一些參數(shù)(如分區(qū)值和簇優(yōu)度值),這些參數(shù)對分區(qū)的劃分進行細粒度的控制。IPLoM相對于SLCT 的一個優(yōu)點是能夠使用尾部通配符(例如Interface**)來檢測日志的行模式。而本文在處理日志模式分類時,考慮線上分析的實時性,匹配時需要快速得出結(jié)果,因此這里采用基于字符匹配的分類算法,之后針對國家高性能計算環(huán)境的系統(tǒng)日志進行分類,代碼壓縮率和后續(xù)特征創(chuàng)建都顯示出了不錯的效果。
一些學者在分析日志并尋找異常消息的領域進行了研究,比如Xu 等人[6]通過源代碼匹配日志的模式,找出相關變量,然后通過匹配日志模式,找到其中變量并使其作為主成分分析方法的輸入數(shù)據(jù),最后根據(jù)主成分分析的最大可分性檢測異常的日志文件。Fronza 等人[7]使用隨機索引為代表的日志序列,根據(jù)每條日志中的操作提取特征,然后使用支持向量機關聯(lián)序列到故障或無故障的類別上,以此來預測系統(tǒng)故障。Weiss 等人[8]研究了從有標簽特征的事件序列中預測稀少事件的問題,他們使用了基于遺傳算法的機器學習系統(tǒng),能夠在預測稀有任務上達到比較好的結(jié)果。Yamanishi 和Maruyama[9]提出了一種新的動態(tài)系統(tǒng)日志挖掘方法,以更高的置信度檢測系統(tǒng)故障,并發(fā)現(xiàn)計算機設備間的連續(xù)報警模式。Yuan 等人[10]提出了一個名為Sher-Log 的工具,它利用運行時日志提供的信息來分析源代碼,以推斷在失敗的生產(chǎn)運行期間必須或可能發(fā)生的事情,它不需要重新執(zhí)行程序,也不需要知道日志的語義即可推斷關于執(zhí)行失敗的控制和數(shù)據(jù)值信息。Peng等人[11]應用文本挖掘技術將日志文件中的消息分類為常見情況,通過考慮日志消息的時間特性來提高分類準確性,并利用可視化工具來評估和驗證用于系統(tǒng)管理有趣的時間模式。本文中使用Xu 等人[6]描述的異常檢測方法,但是輸入的日志類別是通過字符匹配得到的,同時研究對象為日志類型的有序排列,在得到未知的異常日志流量模式上更有優(yōu)勢。
典型的在線日志分析程序通?;诳刂婆_日志或者安全審計日志等進行分析。比如文獻[12-13]中進行的在線日志分析研究程序,它們通過手動輸入如正則表達式這樣的規(guī)則來匹配待分析日志中的對應字符串,通過這種方式就可以找到需要關注的日志條目。然而這種手動輸入規(guī)則的方式,處于線上運行時,可能會經(jīng)常更新軟件或者模型基線,這樣會使得每當需要更新的時候,都需要人工重新編輯規(guī)則匹配新出現(xiàn)的日志條目。而本文在日志分析處理的整個流程中,完全使用無監(jiān)督的方法建立日志模式庫和異常模式庫,線上分析時采用間隔一段時間就自動更新模型的方式進行診斷,這樣可以保證模型具有時效性。同樣的,日志模式匹配時也不需要人工參與編寫任何規(guī)則。
本節(jié)回顧了日志預處理的步驟并重點分析模型建立時需要持久化的數(shù)據(jù),這些數(shù)據(jù)是線上分析時的基礎。整個線下數(shù)據(jù)處理過程分為:預處理、異常檢測模型的建立與異常流量序列聚類、日志流量模型的建立三部分,下面分別詳細介紹。
3.1.1 日志數(shù)據(jù)預處理
Syslog 系統(tǒng)日志屬于非結(jié)構(gòu)化數(shù)據(jù),為了后續(xù)使用各種機器學習方法進行分析,必須要將這些數(shù)據(jù)轉(zhuǎn)換成可以進行處理的結(jié)構(gòu)化數(shù)據(jù),在實踐中,需要將日志進行分類,即每一條日志都可以確定成唯一的一種類型,這就要求能得到一個日志倉庫,里面存儲所有已知的日志類型。生成日志倉庫的核心是如何判定兩條日志是否屬于同一類型。判定日志類型時,為了使判定過程實時快速,Zhao 等人[14]提出了字符匹配法來確定兩條日志的相似度,并且在文獻[15]中改進了該算法。算法將日志中的每一個單詞作為一個基本單元,然后對其進行匹配,并基于最長公共子序列得到匹配的單詞數(shù)目,最后與兩條日志的總單詞數(shù)進行比較來計算相似度。具體來說,假設待匹配的兩條日志分別為l′和l,其包含的單詞數(shù)量分別為m和n,則兩條日志的相似度的計算公式如下:
其中,|LCS(l,l′)|代表兩條日志最長公共子序列匹配的單詞數(shù)。比如以下三條日志:
l1:Received disconnect from IP1
l2:Received disconnect from IP2
l3:Accepted publickey for User1 from IP3
設閾值為0.5,其中l(wèi)1 和l2 這兩條日志的前三個字符相匹配,后一個字符不匹配,因此根據(jù)式(1),可以計算得到S()l1,l2=3×2/(4+4)=0.8 >0.5,說明l1、l2 為同一種類型的日志,同理可以計算出l1 和l3 這兩條日志的相似度S(l1,l3)=0 <0.5,說明l1、l3 為不同類型的日志。
在實踐中,遍歷所有線下日志,然后和日志倉庫中的每條日志進行相似度計算,如果得到的相似度大于給定閾值,則認為日志倉庫中已存在該類型的日志并進行下一條日志的比較,否則將這條日志加入到日志類型倉庫。為了進行線上模型預測,將這一步算法完成后得到的日志類型倉庫保存下來,并記作Pattern。
得到日志類型倉庫后,即可進行日志數(shù)據(jù)的預處理工作。實際操作時,將日志流量的監(jiān)控確定在一個固定的時段內(nèi),因此輸入到異常檢測模型中的基本數(shù)據(jù)單元是以時間片進行切分的,將單個時間片內(nèi)順序出現(xiàn)的所有日志稱作“日志流量序列”。將流量序列中的每條日志和日志倉庫中的日志類型進行匹配,可以得到一條以日志類型為屬性的向量,向量的每一個位置的數(shù)值代表該條流量序列中對應類型日志出現(xiàn)的次數(shù)。該日志流量序列向量組生成后即完成了預處理步驟。整個日志預處理流程如圖1所示,圖中右下角的表格即預處理步驟完成后輸出的數(shù)據(jù)表。
3.1.2 線下異常檢測模型的建立與異常流量序列聚類
主成分分析(principal component analysis,PCA)是一種常用的機器學習算法,該算法可以自動找到數(shù)據(jù)的比例中心,該中心代表數(shù)據(jù)的正??臻g。在建模階段,首先將3.1.1 小節(jié)得到的日志流量序列向量組作為輸入數(shù)據(jù),設輸入數(shù)據(jù)組成的矩陣為P,則使用PCA 異常檢測模型的目的是捕捉到轉(zhuǎn)換矩陣PPT中的主導模式,該模式可以計算出所有流量數(shù)據(jù)中的異常流量序列,具體比較方式是計算出每一個流量序列到正??臻g的距離,該距離越大,則代表這條流量序列更可能是一個異常。該距離的閾值使用文獻[6]中提出的Qα,該閾值即表示1-Qα置信水平下的SPE殘差函數(shù)公式。在建模階段,需要得出線下數(shù)據(jù)的異常流量序列向量,因此需要計算每條日志流量序列到正常子空間Sd的距離,該距離通過ya=(1-PPT)y計算,如果SPE=|ya|2>Qα,則標記該條流量向量是異常的。為了進行線上模型預測,在這一步計算完成后將建立好的模型矩陣P以及異常判定分位點Qα保存下來。
根據(jù)歷史數(shù)據(jù)建立完成異常檢測模型后,可以初步篩選出異常的流量序列,但是這些序列直接進行人工識別仍然會存在問題,因為每條流量序列都包含多條日志以及各個節(jié)點的信息,這些日志流量代表的異常應該進一步聚類,以便人工分析。日志的流量實際上代表不同日志事件按順序出現(xiàn),因此繼續(xù)使用最長公共子序列進行兩條流量信息的相似度判定,只不過這次對比的最小單元是一種日志類型。這也符合實際的問題設置,因為不同日志按照順序出現(xiàn)恰好是一種異常流量模式的體現(xiàn)。比如單獨出現(xiàn)一次T4(認證失?。╊愋偷娜罩?,可能是由于用戶不小心密碼輸入錯誤引起的。但是如果在一定的時間片內(nèi),同一個主機頻繁出現(xiàn)T4(認證失?。╊愋腿罩?、T10(密碼錯誤)類型日志、T0(連接斷開)類型日志,則說明該類型序列可能是一種暴力破解密碼進行登錄的嘗試。
Fig.1 Flow chart of log preprocessing step圖1 日志預處理流程圖
基于以上考量,最終確定兩條日志流量序列的相似度計算公式如下所示:
其中,|*|代表類型序列* 的長度,S1和S2分別代表兩個待比較流量序列,S代表這兩條流量序列的最長公共子序列,比如圖2 所示的兩個日志流量序列S1=[T7,T11,T3,T2],S2=[T7,T11,T5,T6,T2]。則可得|S1|=4,|S2|=5,|S|=3,最后根據(jù)式(2)可計算出兩條日志流量序列的距離是d=3。
根據(jù)以上的距離計算公式,可以使用聚類算法對異常流量數(shù)據(jù)進行聚類,最終可以將所有異常序列分成幾個小類,以便后續(xù)分析。
3.1.3 線下日志流量模型的建立
第3.1.2 小節(jié)介紹了如何將日志流量信息通過無監(jiān)督機器學習方法進行異常篩選和聚類分析,最后將所有異常流量序列分成幾個小類。然而在實踐中,不可能將所有異常流量序列都保存下來,因此本小節(jié)需要對每一類異常流量序列進一步分析,并為其找到一個代表性流量序列,以便對該數(shù)據(jù)進行持久化從而可以在后續(xù)線上運行時進行異常流量序列的匹配。
在對每一類異常流量進行分析時,考慮到流量本身是一個序列性數(shù)據(jù),為了能將單條流量數(shù)據(jù)映射到向量空間,需要將序列數(shù)據(jù)轉(zhuǎn)換為數(shù)量數(shù)據(jù)。在實際操作中,直接使用每條流量數(shù)據(jù)中每種類型日志出現(xiàn)的次數(shù)作為其數(shù)量化的結(jié)果,然后將所有流量數(shù)據(jù)都抽象成其數(shù)量化的結(jié)果并做成表格,如圖3 左上角所示,其中每一行代表一條流量數(shù)據(jù),每一列代表該類型日志出現(xiàn)的數(shù)目,該表格整體代表上一小節(jié)中分好類的其中一類異常流量數(shù)據(jù)的總體。下一步首先計算出表格中各個日志類型的平均值,然后遍歷該類型流量序列的所有數(shù)據(jù),計算每一個流量序列與平均值序列的距離,此時的距離公式可以直接使用歐幾里德距離。最后找到該距離最小的那條流量序列作為該類流量序列總體的代表。通過以上步驟得到的流量序列代表既滿足數(shù)量上靠近平均流量值,又滿足序列上的順序?qū)?,因此結(jié)果滿足了問題設定,總體流程如圖3 的上半部分所示。
在得到一類異常流量序列的代表后,按照上一小段介紹的方法循環(huán)所有異常流量序列類,最終就能為每一種異常流量序列類都對應地找到一條流量序列代表,整個流程圖見圖3 的下半部分。之后即可將這些代表作為待匹配流量序列模式并保存,為后續(xù)線上異常檢測提供基礎。最終,為了進行線上模型預測,這一步計算完成后需要保存的數(shù)據(jù)是所有異常流量的序列代表集合Moed。
Fig.2 Flow chart of log flow anonymous detection and classification圖2 日志流量異常檢測與分類流程圖
Fig.3 Flow chart of selecting logs for flow exceptions圖3 流量異常代表日志挑選流程圖
第3.1節(jié)詳細介紹了如何進行線下模型建模,表1展示了線下模型建立時得到的持久化數(shù)據(jù)。本節(jié)重點介紹如何進行線上實時預測并顯示結(jié)果。在線上預測時可以分為兩個階段,預處理階段和異常匹配階段。
Table 1 Persistent data symbol,interpretation and corresponding sections表1 持久化數(shù)據(jù)符號、解釋以及對應章節(jié)
3.2.1 預處理階段
線上的流量檢測是實時的,而在線下建立流量檢測模型時用已經(jīng)確定的時間片對日志進行分割,因此在線上流量檢測時需要使用相同的時間間隔進行處理,這樣才能保證線上檢測時流量數(shù)據(jù)適合線下建立的模型。在這種情況下,按照3.1 節(jié)中建模時的時間間隔搜集日志數(shù)據(jù)并得到單個時間片內(nèi)的所有日志后,還需要將其處理成適合模型的輸入向量,該向量的每一個位置代表不同日志類型在該時間片內(nèi)出現(xiàn)的次數(shù),為了保證向量數(shù)據(jù)的一致性,日志類型的位置要與模型建立時日志類型的順序一致。這里匹配單條日志的方法是將該單條日志與Pattern文件中的所有日志模式遍歷并分別進行相似度的計算,計算公式見3.1.1 小節(jié)中的式(1),計算時如果相似度的結(jié)果大于閾值0.5,即將該日志作為此類型,并在向量的對應類型數(shù)據(jù)上加1,如果所有計算結(jié)果都不到0.5,則將計算得到的相似度最高結(jié)果對應的日志類型作為該條日志的實際類型。按照這樣的處理方式,即可得到該時間片的日志流量向量,最后將預處理得到的向量設為V。
3.2.2 異常匹配階段
在異常匹配階段,首先讀取線下建模時保存的矩陣P和閾值Qα,然后將3.2.1 小節(jié)得到的向量V與矩陣P進行異常分數(shù)的計算,即Score=(1-PPT)V。該異常分數(shù)和閾值進行比較即可得出此流量是否異常,即如果Score>Qα,則認為該流量時間片為異常。
另外,每一個流量序列還需要和實際的異常模式進行對比,來確定異常的種類。在實踐中,先將該條流量序列的所有數(shù)據(jù)按照節(jié)點分開,然后將得到的每一個節(jié)點的流量序列數(shù)據(jù)分別和流量模式文件Moed中的每個流量序列模式進行匹配,匹配時使用式(1)進行計算并得到單個節(jié)點在該時間片的流量和每種異常流量的相似度,然后將結(jié)果保存。在進行異常評價時,使用其中相似度最大的結(jié)果并記作Score。
目前已經(jīng)得到了線上診斷時一個流量時間片所需的所有數(shù)據(jù):單個流量時間片的異常分數(shù)Score和閾值Qα,該流量時間片內(nèi)所有主機對應的異常相似度列表以及其中最大的相似度Sim。最后需要將這些結(jié)果進行疊加并能夠清晰地展示給相關運維人員,具體細節(jié)將在下一章的實驗部分介紹。
本章將第3 章介紹的方法用于國家高性能計算環(huán)境系統(tǒng)在實際工作中產(chǎn)生的系統(tǒng)日志中。選取系統(tǒng)日志的secure 類別日志作為實驗數(shù)據(jù)。在第一階段使用了2018 年9 月的日志數(shù)據(jù)進行線下模型的建立,并得出異常基線以及異常流量模式數(shù)據(jù),在第二階段將2018 年10 月的日志作為線上測試數(shù)據(jù),進行實際的流量分析診斷,下面詳細介紹實驗結(jié)果。
在使用日志數(shù)據(jù)進行線下模型建立時按照3.1節(jié)所描述的方法進行,首先計算出各個時間片的Q值,然后和模型的閾值Qα比較,如果大于閾值則認為該時間片是異常時間片。各個時間片的Q值和閾值Qα如圖4 所示。
Fig.4 Q-value and threshold Qα of secure logs圖4 secure類型日志的Q 值和閾值Qα
從圖4 可以看出,異常類型時間片均勻地分布在整個日志周期的時間片內(nèi)。得到所有正異常流量時間片后,還需要進一步過濾,具體的做法是首先統(tǒng)計出正常、異常時間片中不同類型日志出現(xiàn)數(shù)量的分布,計算出其對應正常、異常日志和出現(xiàn)數(shù)量的中位數(shù)來進行后續(xù)比較。根據(jù)比較的差值來得出正常、異常時間片主要差異的日志類型。通過該差異進行了過濾。最終統(tǒng)計得出了一共有8 134 個時間片段,挑出了908 個異常時間片段,時間片按照節(jié)點拆分后得到了16 240 條異常節(jié)點的類型序列,過濾后有676條異常節(jié)點的類型序列。
在本節(jié)中,將4.1 節(jié)得到的大量異常日志流量序列按照3.1.2 小節(jié)的方法進行層次聚類的相關實驗。在進行層次聚類時,需要根據(jù)聚類結(jié)果的好壞來調(diào)整聚類參數(shù),因此這里首先要選擇一種判別聚類方法性能的評價指標,由于應用的場景是高性能計算環(huán)境中的日志,數(shù)據(jù)量大并且模型每隔一段時間都需要更新重建,因此無法事先人工打好聚類標簽,整個過程需要使用完全無監(jiān)督的方式進行??紤]到上述因素,這里選擇使用適合于無監(jiān)督的聚類評價方式,輪廓系數(shù)(silhouette coefficient)法[16]。該方法結(jié)合內(nèi)聚度和分離度兩種因素,其中輪廓系數(shù)得分較高的模型具有較好的聚類性能。單個樣本的輪廓系數(shù)計算公式如下:
其中,a代表樣本與同類數(shù)據(jù)中所有其他點之間的平均距離。b代表樣本與下一個最近聚類簇中所有其他點之間的平均距離。最終整體的輪廓系數(shù)是計算出所有樣本的輪廓系數(shù)后取平均值得到的,因此輪廓系數(shù)得分越高,說明此時的聚類結(jié)果使得同一種類之間聚集得比較緊密,同時不同的類之間聚集得比較遠,因此可以判定此時的聚類效果較好。
在使用層次聚類時有三個關鍵參數(shù)需要定義:(1)不同數(shù)據(jù)之間的距離度量方法;(2)不同簇之間的距離度量方法;(3)最終的聚類數(shù)目。不同數(shù)據(jù)之間距離定義按照3.1.2 小節(jié)的式(2)進行計算。不同簇間距離度量方法具有三種不同的選擇,分別為:平均距離標準方法(average)、最小距離標準方法(single)和最大距離標準方法(complete)。在對聚類數(shù)目進行選擇時,考慮到聚類的數(shù)目不能太多,因此就將實驗區(qū)間定義為3 到30種聚類數(shù)目。按照上述描述的結(jié)果,分別對不同的情況進行聚類實驗,并計算出對應聚類結(jié)果的輪廓系數(shù)。最終實驗結(jié)果圖如圖5 所示。
如圖5 所示,橫坐標代表不同聚類數(shù)目,縱坐標代表輪廓系數(shù)值,3 條折線代表不同的簇間距離度量方法。根據(jù)實驗結(jié)果,程序可以自動選擇對應最佳的參數(shù)。例如實驗中使用的線下數(shù)據(jù)最終的最佳參數(shù)是:聚類的簇間度量方法是最大距離標準方法(complete),聚類數(shù)目是3。根據(jù)上述參數(shù),程序最終進行聚類后顯示出3種異常情景:
Fig.5 Silhouette coefficient for different parameters圖5 不同參數(shù)對應的輪廓系數(shù)值
情景1 該情景下出現(xiàn)最多的日志類型是T10(failed password for invalid user User0 from X.X.X.X port XX ssh2)和T4(pam_unix(sshd:auth):authentication failure; logname=uid=0 euid=0 tty=ssh ruser=rhost=X.X.X.X)。該種異常日志流量模式表明此時間段內(nèi)可能有人進行暴力入侵系統(tǒng)的行為。
情景2 該情景下出現(xiàn)最多的日志類型是T14(sshd*pam_unix(sshd:session):session opened for user User1 by (uid=0))和T13(sshd*Accepted publickey for User1 from X.X.X.X port XX ssh2)。該種異常日志流量模式表明此時間段內(nèi)出現(xiàn)大量登錄的行為,說明該段時間為用戶訪問高峰。
情景3 該情景下出現(xiàn)最多的日志類型是T39(sshd*error:no more sessions)和T0(sshd*Connection closed by::1)。該種異常日志流量模式表明該時間段內(nèi)建立用戶會話數(shù)量超過限制,可能需要人工干預。
分別將這些情景定義為非法用戶攻擊、用戶訪問高峰、會話數(shù)超限,并將這些模式結(jié)果保存。
在實踐中已經(jīng)完成了線上異常檢測程序的整體搭建與運行,整個流程分為兩個階段。
第一階段目標是完成線上日志的類型解析,該階段需要在程序中輸入線下模型日志的路徑和線上待分析日志的路徑,然后才能進行解析,已經(jīng)完成了該階段的界面輸入以及正確的日志解析結(jié)果,如圖6所示。解析完成后就得到了待分析日志按時間片拆分后的日志類型序列。
第二階段需要完成的工作是待分析日志的實時預警以及分析結(jié)果的可視化展示。在3.2.2 小節(jié)中,已經(jīng)構(gòu)建好了異常實時監(jiān)測模型并計算出異常結(jié)果Score、Qα以及Sim,為了將這些異常結(jié)果利于可視化展示,需要將結(jié)果進行合并,其中異常流量的結(jié)果可能會超過異常值比較多的比率,因此在計算時使用比值的方式,即Score/Qα,而異常相似度的Sim本身的值在0 到1 之間,因此可以直接乘以流量的異常來表示在該流量異常的情況下節(jié)點的流量為對應異常模式的可能性。最終,確定的異常分數(shù)計算公式如下:
通過式(4)進行流量分數(shù)的計算并將該值的大小進行可視化展示,其中顏色越深代表該值越大。其中一個時間片內(nèi)異常的分數(shù)如圖7 所示。
Fig.6 Parsing of online code圖6 線上代碼解析
Fig.7 Anonymous score圖7 異常分數(shù)
圖7 的橫坐標代表不同的時間片,縱坐標代表不同的節(jié)點。該圖在實際運行時會根據(jù)時間流逝動態(tài)地向左運動,這里僅截取一小部分作為代表。如圖7所示,線上檢測時根據(jù)式(4)計算出的各個時間片的異常分數(shù)值可以明顯地展示出來:如果該時間片的流量有異常,則整體都會顯示出深色,其中和異常流量模式匹配的相似度最高的節(jié)點顏色最深。此時如果點擊該節(jié)點的時間片,則可以顯示出各種異常流量相似度的具體信息,如圖7 中左上角的黑色框所示。然后系統(tǒng)運維人員還可以進一步調(diào)出該節(jié)點在該時間片內(nèi)的所有日志,通過真實日志的跟蹤顯示給出進一步分析。該可視化的結(jié)果以及異常情景的自動化匹配大大減少了人工工作量。在實際工作中,由于模型是根據(jù)歷史數(shù)據(jù)訓練并構(gòu)建的,在進行檢測時可能出現(xiàn)新的異常流量模式,因此采用的策略是間隔一段時間使用新搜集的數(shù)據(jù)進行模型的迭代更新。
該系統(tǒng)已全部搭建完成,并已在網(wǎng)上(http://114.115.172.217/online)公布了示例程序。
本文介紹了一個無監(jiān)督異常檢測系統(tǒng),該系統(tǒng)自動挖掘系統(tǒng)日志的異常日志流量模式。系統(tǒng)的整個流程可以自動找到系統(tǒng)日志的異常時間段,并得到時間段內(nèi)不同節(jié)點的日志序列。該序列通過進一步聚類可以自動得到異常情景模式序列并保存,之后還可以在線上實時進行檢測,最終檢測的結(jié)果可以實時顯示,使得系統(tǒng)運維人員可以方便地進行分析。
本文只是針對單一日志異常流量進行了一些前期探索工作,未來還有很多值得關注的研究點。今后的工作主要針對以下幾個方面:不同種類的日志,通過不同種類日志的關聯(lián)關系進行分析,以找到更全面的異常日志流量模式;基于日志類型序列的角度進行更多不同維度的日志分析方法研究,例如日志類型序列的關聯(lián)性分析等。