劉杰逾,王曉輝
(1. 成都文理學院,四川 成都 610401;2. 河南中醫藥大學,河南 鄭州 450046)
隨著計算機技術在航空航天、國民經濟等重要領域被廣泛應用,現如今社會的發展已經離不開計算機系統,而這種離不開主要是對不同功能軟件的依賴[1]。由于應用需求的不斷擴大,軟件功能需求也不斷深化,軟件系統設計越來越復雜,難免會出現軟件缺陷,給用戶造成嚴重的損失。如何構建可信軟件,對軟件的安全性與可靠性進行分析成為國內外研究的重點。
軟件可信[2]是指通過對不正常行為產生的信息結果,采取相應的措施,并進行及時地控制,降低交互過程中異常行為對各種應用系統造成的嚴重影響[3-5]。如果檢測的軟件行為與正常行為間存在顯著差異,則軟件行為有異常,通過對不同軟件行為數據差別的計算,判斷某一類是否異常。文獻[6]在日志系統分析方面深入探究深度學習CNN-text,為了對CNN-text算法的優越性進行分析,采用CT與系統日志相結合的方法對機器模型SVM和決策樹對比值進行研究,分析CT對特征的處理方式,實驗結果表明,該方法明顯提高了模型的準確率、召回率和查準率。文獻[7]同時對日志的時間序列特征和參數空間位置特征進行兼顧,為了避免日志異常特征被淹沒,將拼接映射方法進行融合處理,基于Hadoop日志數據,在對模塊的可行性分析后,對SVMC、CNN模型的分類效果進行驗證,實驗結果表明,該方法檢測準確度較好,泛化能力較強,但對異常行為檢測稍有延遲。文獻[8]將深度學習與規則匹配和黑白名單相結合,通過對日志的分析,檢測出軟件中的異常行為,同時采用分布式的存儲與計算系統,分析離線和實時日志模式,實驗結果表明,該方法在一定程度上能夠檢測出0day攻擊,具有較好的識別能力,但安全檢測能力需要進一步提高。
基于以上研究,本文設計了基于日志與深度學習的網絡軟件異常檢測方法。將CNN與RNN相結合,通過分類器對文本特征分類,采用半定長的方式降低模型的時間復雜度,用SPLEE方法對日志進行結構化處理,結合設計的深度學習模型捕捉日志的上下文關系,構建出異常檢測模型。
通過深度學習模型,對網絡軟件系統日志信息進行學習與分析,達到實時監控運行系統的目的。機器學習模型的稀疏矩陣與傳統機器學習的樣本、詞匯量有關,用公式可表示為
Mspa∝Snum×Vnum
(1)
其中,Snum表示樣本數量;Vnum表示詞匯數量。隨著詞匯數量的增多,樣本空間隨之增大,稀疏矩陣模型的訓練會更加困難。深度學習所消耗的空間較小,對詞匯進行嵌入,輸入模型的張量用公式可表示為
Min∝Snum×Lmax×Demb
(2)
其中,Lmax表示最長句子長度;Demb表示詞語的嵌入維度。此時模型的訓練與詞匯量沒有任何關系,深度學習的空間使用相對較少,解決了機器學習占用空間大的問題。
將CNN與RNN相結合對文本進行分析,首先通過CNN將文本中的重要特征抽取出來存在池化層中;然后通過RNN對池化層進行學習,并預測出最終的結果。通過CNN與RNN的結合有效避免了序列較長而產生的遺忘效應。通過分類器對文本的主要特征進行分類,由于詞嵌入是把整個詞向量視作為一個整體,經過卷積核的運算后特征能夠被明顯地提取出來,因此這種半定長的方式很適合文本的特征提取,可以極大地降低模型的時間復雜度,用公式可表示為

(3)
其中,Cstep表示卷積核步數;Cjump表示卷積核跳躍次數。傳統的神經網絡模型并不注重序列的特征關系,但網絡日志文件的詞語主要由字符決定,因此應對詞匯序列特征更為注重。本文使用CNN的卷積核和特征向量及池化向量對文本向量進行遍歷和權重的提取,并將池化向量代入RNN中?;诰矸e原理,池化層的各個向量間通過線性關系變換,用公式可表示為
Play∝Wmax
(4)
其中,Wmax表示最大權重特征值,這樣可以方便地將CNN的注意力集中在文本信息的重要特征上。將RNN放在池化特征前,由于RNN每次的轉移輸出結果受上一次影響,那么在RNN中進行最后一次轉移的結果用公式可表示為
RRNN=αRNN(a·RT-1+b·Cin_T)
(5)
其中,αRNN表示參數;a和b表示在RNN中αRNN的單次處理過程;T表示傳遞次數;RT-1表示倒數第二次RNN的輸出結果;Cin_T表示最后一次輸入特征。將RT-1無限展開,用公式可表示為
RRNN=βRNN(αRNN(αRNN(…Wmax…)))
(6)
由此可見,決定樣本各類特征向量的子矩陣間具有正交關系,對含有正交關系的特征訓練能降低模型受樣本數量的影響程度,因此本文提出的模型在一定程度上能夠避免文本數據不均衡產生的影響,能夠更好地訓練文本。在數據輸入模型上選擇Tf-Idf模型矩陣,基于概率和信息熵原理對文本特征進行篩選,用公式可表示為

(7)
其中,nci,dj表示dj文檔中單詞ci的數量;ck表示dj文檔中包含的單詞;ndm,ci表示包含單詞ci的文檔在語料g中的個數。若一個單詞在某個文本中出現的頻率高,在其他文本中出現的頻率低,那么這個單詞的Tf-Idf值越高,該單詞在文本越重要。
SVM是一種通過建立超平面對數據進行監督的分類器,以二分類文本為例,SVM超平面用公式可表示為
(8)
其中,Pa和Pb表示兩個類別的邊界超平面;Pb表示分類超平面;δT表示系數項;xi表示樣本特征;φ表示超平面偏置。那么SVM的優化實質用公式可表示為
(9)
其中,d表示各個分類邊界超平面Pa和Pb之間的距離。綜上所述,規劃矩陣大小由樣本特征數量決定,樣本特征也會對超平面的系數和偏置造成影響,因此特征工程的正確選擇很重要。
異常檢測是計算機系統的重要任務,指在數據中沒有找到符合預期的行為模式。而日志中記錄了系統和軟件中各關鍵點的重要信息,通過這些信息可以對故障的原因和系統的性能進行分析與調試,因此系統日志是異常檢測的數據來源。然而系統異常檢測主要存在日志解析困難、異常類型繁多、時效無法保證和日志上下文間較為依賴等四方面難題,為此本文使用SPLEE方法對原始非結構化的日志進行結構化處理,然后利用深度學習模型捕捉日志的上下文關系,構建異常檢測模型。
系統生成的日志是非結構化的,每條日志均由常量和變量兩部分組成,因此在系統生成非結構化日志之前需要對其進行解析,轉化成結構化日志。本文使用SPELL方法對日志進行結構化處理,日志消息用公式可表示為
SP=(Ccon,ListID,Pvar)
(10)
其中,Ccon表示公共常量;ListID表示日志消息ID列表;Pvar表示變量。通過分隔符將日志消息轉化為單序列,然后將單序列與日志消息列表中的公共常量進行匹配,匹配完成后,解析剩余的變量。
根據系統日志向量序列的有限性,解析為向量的日志均執行一條路徑,所設計的路徑日志異常檢測由輸入層、嵌入層、隱藏層和輸出層4部分組成。隱藏層是深度學習的核心部分,該層中的每個節點都是記憶模塊,用公式可表示為
Ht=(χl+Pl·[Ot-1,ut])φ
(11)
其中,Ot-1表示t-1時刻的輸出;ut表示t時刻的輸入;Pl為線性變量。狀態更新后,將當前與歷史時刻的記憶疊加,可計算出深度學習在時間序列上的輸出,由此得出每個日志的條件概率為

(12)
其中,xt表示當前日志狀態;Shis表示歷史輸入序列;V*(x)表示Softmax層輸出向量。模型的損失函數使用交叉函熵,通過對各個時刻損失值的疊加處理,達到模型訓練的要求,損失值最小化用公式可表示為

(13)
其中,Oexp _t表示期望輸出;Oact_t表示實際輸出。在訓練過程中,選擇Adam優化算法,使目標函數取得最小值。一、二階動量用公式可表示為
(14)


(15)
其中,t表示時間步。綜上所述,Adam優化算法的更新權重參數用公式可表示為
(16)

日志參數值是描述系統與軟件的重要狀態變量,對于沒有偏離正常路徑的異常,可通過參數值進行異常的判斷。參數異常模型將時間戳差值視為日志中的一個參數,不同的日志生成不同的參數向量,因此可將參數異常檢測轉化為多變量時序問題。將數據輸入隱藏層中進行模型訓練,通過預測值與輸出層的實際輸出值之間的差異性,判斷日志是否異常。
一般情況下,訓練好的模型可判斷出異常日志,但在數據集較大時,模型可能出現誤判。因此構建在線更新模型,通過反向傳播對權重參數進行實時更新,更新模型采用增量更新方法,在更新的過程中不需要對原來的模型進行訓練,僅對權重參數進行更新,這大大提高了參數的更新效率。
為了驗證結合日志與深度學習異常檢測模型的準確性和有效性,分三部分完成異常檢測試驗,分別為執行路徑異常的檢測、參數異常的檢測和在線更新模型的評估。異常檢測模型中采用精確率、召回率和綜合指標三個衡量標準,公式分別表示為

(17)
其中,Ppre表示準確率;Gtp表示日志異常,且被模型檢測出異常;Gfp表示日志異常,但被模型檢測出正常;Gfn表示日志正常,但被模型檢測出異常。
采用PCA、IM方法與本文方法進行對比。選擇HDFS日志作為模型的數據集,該數據集中包含約2240萬條日志,其中異常數據占3%,實驗中只要有一條日志異常,則被視為異常,并且選擇1%的日志的正常會話作為異常檢測模型的訓練集。各個異常檢測方法的性能指標仿真結果如圖1所示。

圖1 性能指標結果
從圖中可以看出,PCA方法的準確率較好,但召回率和綜合性能指標均低于其他兩種方法。IM方法的三個性能指標比較均衡,但均低于本文設計的方法,相對而言本文方法實驗結果更好。
在訓練時間和預測時間方面將本文方法與傳統機器學習方法進行對比,訓練時間和預測時間對比結果如表1所示。

表1 時間性能對比
從表中可以看出,兩種方法準確率相似的情況下,訓練和預測時間均有大幅度提升,提高了將近98.4%。根據結果比較可知,所提方法在時間性能方面明顯優于機器學習,具有良好的模型學習效率。
對于參數異常檢測,本文使用客戶端日志作為實驗數據集,只要客戶端執行任務,客戶端與服務器間便產生通信,生成用戶日志。在實驗測試中通過不斷的切斷網絡制造通信異常,來模擬實際情況。該過程得到日志1348行,日志數據集為590424行。該實驗異常檢測仿真結果如圖2所示。

圖2 參數異常檢測結果
從圖中可以看出,當日志均方誤差超過97.30%的閾值時,參數值是異常的,且有7次任務存在參數值異常,這7次任務的原始日志對應的參數值均較大,是由網絡波動延遲導致的,而圖b的檢測結果,可以看出該日志參數向量均是正常的,說明該日志不涉及通信問題,都是本地運行代碼產生的日志,通過異常數據集ID可以方便的查找出異常日志。綜上所述,本文異常檢測模型可以識別出所有參數值異常的日志,準確率達到100%。
為了防止異常路徑影響檢測結果,本文將在線更新前后的性能進行比較,驗證在線更新模型檢測結果的準確性與有效性。兩種模型的對比結果如圖3所示。

圖3 在線更新模型對比結果
從圖中可以看出,在不使用模型更新時,精確率和綜合指標較低,分別為25%和36%。而使用在線更新模型后,準確率為71%,綜合指標為86%,均有明顯地提高。說明在線更新模型不僅能夠解決訓練集較大時出現錯誤檢測的情況,還可以大幅度提高模型異常檢測的準確率。
針對網絡異常、數據沖突等導致的軟件崩潰問題,提出基于日志與深度學習的網絡軟件異常檢測算法。將深度學習網絡用于系統日志數據中進行異常檢測與性能的比較,對日志的執行路徑異常、參數異常情況進行檢測,并采用在線模型更新檢測結果。實驗結果表明,本文異常檢測模型不僅可以識別路徑異常和參數值異常的日志,而且三種性能指標較高,通過在線更新模型可以大幅度提高對異常錯誤檢測的情況。