劉杰逾,王曉輝
(1. 成都文理學(xué)院,四川 成都 610401;2. 河南中醫(yī)藥大學(xué),河南 鄭州 450046)
隨著計(jì)算機(jī)技術(shù)在航空航天、國民經(jīng)濟(jì)等重要領(lǐng)域被廣泛應(yīng)用,現(xiàn)如今社會的發(fā)展已經(jīng)離不開計(jì)算機(jī)系統(tǒng),而這種離不開主要是對不同功能軟件的依賴[1]。由于應(yīng)用需求的不斷擴(kuò)大,軟件功能需求也不斷深化,軟件系統(tǒng)設(shè)計(jì)越來越復(fù)雜,難免會出現(xiàn)軟件缺陷,給用戶造成嚴(yán)重的損失。如何構(gòu)建可信軟件,對軟件的安全性與可靠性進(jìn)行分析成為國內(nèi)外研究的重點(diǎn)。
軟件可信[2]是指通過對不正常行為產(chǎn)生的信息結(jié)果,采取相應(yīng)的措施,并進(jìn)行及時(shí)地控制,降低交互過程中異常行為對各種應(yīng)用系統(tǒng)造成的嚴(yán)重影響[3-5]。如果檢測的軟件行為與正常行為間存在顯著差異,則軟件行為有異常,通過對不同軟件行為數(shù)據(jù)差別的計(jì)算,判斷某一類是否異常。文獻(xiàn)[6]在日志系統(tǒng)分析方面深入探究深度學(xué)習(xí)CNN-text,為了對CNN-text算法的優(yōu)越性進(jìn)行分析,采用CT與系統(tǒng)日志相結(jié)合的方法對機(jī)器模型SVM和決策樹對比值進(jìn)行研究,分析CT對特征的處理方式,實(shí)驗(yàn)結(jié)果表明,該方法明顯提高了模型的準(zhǔn)確率、召回率和查準(zhǔn)率。文獻(xiàn)[7]同時(shí)對日志的時(shí)間序列特征和參數(shù)空間位置特征進(jìn)行兼顧,為了避免日志異常特征被淹沒,將拼接映射方法進(jìn)行融合處理,基于Hadoop日志數(shù)據(jù),在對模塊的可行性分析后,對SVMC、CNN模型的分類效果進(jìn)行驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,該方法檢測準(zhǔn)確度較好,泛化能力較強(qiáng),但對異常行為檢測稍有延遲。文獻(xiàn)[8]將深度學(xué)習(xí)與規(guī)則匹配和黑白名單相結(jié)合,通過對日志的分析,檢測出軟件中的異常行為,同時(shí)采用分布式的存儲與計(jì)算系統(tǒng),分析離線和實(shí)時(shí)日志模式,實(shí)驗(yàn)結(jié)果表明,該方法在一定程度上能夠檢測出0day攻擊,具有較好的識別能力,但安全檢測能力需要進(jìn)一步提高。
基于以上研究,本文設(shè)計(jì)了基于日志與深度學(xué)習(xí)的網(wǎng)絡(luò)軟件異常檢測方法。將CNN與RNN相結(jié)合,通過分類器對文本特征分類,采用半定長的方式降低模型的時(shí)間復(fù)雜度,用SPLEE方法對日志進(jìn)行結(jié)構(gòu)化處理,結(jié)合設(shè)計(jì)的深度學(xué)習(xí)模型捕捉日志的上下文關(guān)系,構(gòu)建出異常檢測模型。
通過深度學(xué)習(xí)模型,對網(wǎng)絡(luò)軟件系統(tǒng)日志信息進(jìn)行學(xué)習(xí)與分析,達(dá)到實(shí)時(shí)監(jiān)控運(yùn)行系統(tǒng)的目的。機(jī)器學(xué)習(xí)模型的稀疏矩陣與傳統(tǒng)機(jī)器學(xué)習(xí)的樣本、詞匯量有關(guān),用公式可表示為
Mspa∝Snum×Vnum
(1)
其中,Snum表示樣本數(shù)量;Vnum表示詞匯數(shù)量。隨著詞匯數(shù)量的增多,樣本空間隨之增大,稀疏矩陣模型的訓(xùn)練會更加困難。深度學(xué)習(xí)所消耗的空間較小,對詞匯進(jìn)行嵌入,輸入模型的張量用公式可表示為
Min∝Snum×Lmax×Demb
(2)
其中,Lmax表示最長句子長度;Demb表示詞語的嵌入維度。此時(shí)模型的訓(xùn)練與詞匯量沒有任何關(guān)系,深度學(xué)習(xí)的空間使用相對較少,解決了機(jī)器學(xué)習(xí)占用空間大的問題。
將CNN與RNN相結(jié)合對文本進(jìn)行分析,首先通過CNN將文本中的重要特征抽取出來存在池化層中;然后通過RNN對池化層進(jìn)行學(xué)習(xí),并預(yù)測出最終的結(jié)果。通過CNN與RNN的結(jié)合有效避免了序列較長而產(chǎn)生的遺忘效應(yīng)。通過分類器對文本的主要特征進(jìn)行分類,由于詞嵌入是把整個(gè)詞向量視作為一個(gè)整體,經(jīng)過卷積核的運(yùn)算后特征能夠被明顯地提取出來,因此這種半定長的方式很適合文本的特征提取,可以極大地降低模型的時(shí)間復(fù)雜度,用公式可表示為
(3)
其中,Cstep表示卷積核步數(shù);Cjump表示卷積核跳躍次數(shù)。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型并不注重序列的特征關(guān)系,但網(wǎng)絡(luò)日志文件的詞語主要由字符決定,因此應(yīng)對詞匯序列特征更為注重。本文使用CNN的卷積核和特征向量及池化向量對文本向量進(jìn)行遍歷和權(quán)重的提取,并將池化向量代入RNN中?;诰矸e原理,池化層的各個(gè)向量間通過線性關(guān)系變換,用公式可表示為
Play∝Wmax
(4)
其中,Wmax表示最大權(quán)重特征值,這樣可以方便地將CNN的注意力集中在文本信息的重要特征上。將RNN放在池化特征前,由于RNN每次的轉(zhuǎn)移輸出結(jié)果受上一次影響,那么在RNN中進(jìn)行最后一次轉(zhuǎn)移的結(jié)果用公式可表示為
RRNN=αRNN(a·RT-1+b·Cin_T)
(5)
其中,αRNN表示參數(shù);a和b表示在RNN中αRNN的單次處理過程;T表示傳遞次數(shù);RT-1表示倒數(shù)第二次RNN的輸出結(jié)果;Cin_T表示最后一次輸入特征。將RT-1無限展開,用公式可表示為
RRNN=βRNN(αRNN(αRNN(…Wmax…)))
(6)
由此可見,決定樣本各類特征向量的子矩陣間具有正交關(guān)系,對含有正交關(guān)系的特征訓(xùn)練能降低模型受樣本數(shù)量的影響程度,因此本文提出的模型在一定程度上能夠避免文本數(shù)據(jù)不均衡產(chǎn)生的影響,能夠更好地訓(xùn)練文本。在數(shù)據(jù)輸入模型上選擇Tf-Idf模型矩陣,基于概率和信息熵原理對文本特征進(jìn)行篩選,用公式可表示為
(7)
其中,nci,dj表示dj文檔中單詞ci的數(shù)量;ck表示dj文檔中包含的單詞;ndm,ci表示包含單詞ci的文檔在語料g中的個(gè)數(shù)。若一個(gè)單詞在某個(gè)文本中出現(xiàn)的頻率高,在其他文本中出現(xiàn)的頻率低,那么這個(gè)單詞的Tf-Idf值越高,該單詞在文本越重要。
SVM是一種通過建立超平面對數(shù)據(jù)進(jìn)行監(jiān)督的分類器,以二分類文本為例,SVM超平面用公式可表示為
(8)
其中,Pa和Pb表示兩個(gè)類別的邊界超平面;Pb表示分類超平面;δT表示系數(shù)項(xiàng);xi表示樣本特征;φ表示超平面偏置。那么SVM的優(yōu)化實(shí)質(zhì)用公式可表示為
(9)
其中,d表示各個(gè)分類邊界超平面Pa和Pb之間的距離。綜上所述,規(guī)劃矩陣大小由樣本特征數(shù)量決定,樣本特征也會對超平面的系數(shù)和偏置造成影響,因此特征工程的正確選擇很重要。
異常檢測是計(jì)算機(jī)系統(tǒng)的重要任務(wù),指在數(shù)據(jù)中沒有找到符合預(yù)期的行為模式。而日志中記錄了系統(tǒng)和軟件中各關(guān)鍵點(diǎn)的重要信息,通過這些信息可以對故障的原因和系統(tǒng)的性能進(jìn)行分析與調(diào)試,因此系統(tǒng)日志是異常檢測的數(shù)據(jù)來源。然而系統(tǒng)異常檢測主要存在日志解析困難、異常類型繁多、時(shí)效無法保證和日志上下文間較為依賴等四方面難題,為此本文使用SPLEE方法對原始非結(jié)構(gòu)化的日志進(jìn)行結(jié)構(gòu)化處理,然后利用深度學(xué)習(xí)模型捕捉日志的上下文關(guān)系,構(gòu)建異常檢測模型。
系統(tǒng)生成的日志是非結(jié)構(gòu)化的,每條日志均由常量和變量兩部分組成,因此在系統(tǒng)生成非結(jié)構(gòu)化日志之前需要對其進(jìn)行解析,轉(zhuǎn)化成結(jié)構(gòu)化日志。本文使用SPELL方法對日志進(jìn)行結(jié)構(gòu)化處理,日志消息用公式可表示為
SP=(Ccon,ListID,Pvar)
(10)
其中,Ccon表示公共常量;ListID表示日志消息ID列表;Pvar表示變量。通過分隔符將日志消息轉(zhuǎn)化為單序列,然后將單序列與日志消息列表中的公共常量進(jìn)行匹配,匹配完成后,解析剩余的變量。
根據(jù)系統(tǒng)日志向量序列的有限性,解析為向量的日志均執(zhí)行一條路徑,所設(shè)計(jì)的路徑日志異常檢測由輸入層、嵌入層、隱藏層和輸出層4部分組成。隱藏層是深度學(xué)習(xí)的核心部分,該層中的每個(gè)節(jié)點(diǎn)都是記憶模塊,用公式可表示為
Ht=(χl+Pl·[Ot-1,ut])φ
(11)
其中,Ot-1表示t-1時(shí)刻的輸出;ut表示t時(shí)刻的輸入;Pl為線性變量。狀態(tài)更新后,將當(dāng)前與歷史時(shí)刻的記憶疊加,可計(jì)算出深度學(xué)習(xí)在時(shí)間序列上的輸出,由此得出每個(gè)日志的條件概率為
(12)
其中,xt表示當(dāng)前日志狀態(tài);Shis表示歷史輸入序列;V*(x)表示Softmax層輸出向量。模型的損失函數(shù)使用交叉函熵,通過對各個(gè)時(shí)刻損失值的疊加處理,達(dá)到模型訓(xùn)練的要求,損失值最小化用公式可表示為
(13)
其中,Oexp _t表示期望輸出;Oact_t表示實(shí)際輸出。在訓(xùn)練過程中,選擇Adam優(yōu)化算法,使目標(biāo)函數(shù)取得最小值。一、二階動量用公式可表示為
(14)
(15)
其中,t表示時(shí)間步。綜上所述,Adam優(yōu)化算法的更新權(quán)重參數(shù)用公式可表示為
(16)
日志參數(shù)值是描述系統(tǒng)與軟件的重要狀態(tài)變量,對于沒有偏離正常路徑的異常,可通過參數(shù)值進(jìn)行異常的判斷。參數(shù)異常模型將時(shí)間戳差值視為日志中的一個(gè)參數(shù),不同的日志生成不同的參數(shù)向量,因此可將參數(shù)異常檢測轉(zhuǎn)化為多變量時(shí)序問題。將數(shù)據(jù)輸入隱藏層中進(jìn)行模型訓(xùn)練,通過預(yù)測值與輸出層的實(shí)際輸出值之間的差異性,判斷日志是否異常。
一般情況下,訓(xùn)練好的模型可判斷出異常日志,但在數(shù)據(jù)集較大時(shí),模型可能出現(xiàn)誤判。因此構(gòu)建在線更新模型,通過反向傳播對權(quán)重參數(shù)進(jìn)行實(shí)時(shí)更新,更新模型采用增量更新方法,在更新的過程中不需要對原來的模型進(jìn)行訓(xùn)練,僅對權(quán)重參數(shù)進(jìn)行更新,這大大提高了參數(shù)的更新效率。
為了驗(yàn)證結(jié)合日志與深度學(xué)習(xí)異常檢測模型的準(zhǔn)確性和有效性,分三部分完成異常檢測試驗(yàn),分別為執(zhí)行路徑異常的檢測、參數(shù)異常的檢測和在線更新模型的評估。異常檢測模型中采用精確率、召回率和綜合指標(biāo)三個(gè)衡量標(biāo)準(zhǔn),公式分別表示為
(17)
其中,Ppre表示準(zhǔn)確率;Gtp表示日志異常,且被模型檢測出異常;Gfp表示日志異常,但被模型檢測出正常;Gfn表示日志正常,但被模型檢測出異常。
采用PCA、IM方法與本文方法進(jìn)行對比。選擇HDFS日志作為模型的數(shù)據(jù)集,該數(shù)據(jù)集中包含約2240萬條日志,其中異常數(shù)據(jù)占3%,實(shí)驗(yàn)中只要有一條日志異常,則被視為異常,并且選擇1%的日志的正常會話作為異常檢測模型的訓(xùn)練集。各個(gè)異常檢測方法的性能指標(biāo)仿真結(jié)果如圖1所示。
圖1 性能指標(biāo)結(jié)果
從圖中可以看出,PCA方法的準(zhǔn)確率較好,但召回率和綜合性能指標(biāo)均低于其他兩種方法。IM方法的三個(gè)性能指標(biāo)比較均衡,但均低于本文設(shè)計(jì)的方法,相對而言本文方法實(shí)驗(yàn)結(jié)果更好。
在訓(xùn)練時(shí)間和預(yù)測時(shí)間方面將本文方法與傳統(tǒng)機(jī)器學(xué)習(xí)方法進(jìn)行對比,訓(xùn)練時(shí)間和預(yù)測時(shí)間對比結(jié)果如表1所示。
表1 時(shí)間性能對比
從表中可以看出,兩種方法準(zhǔn)確率相似的情況下,訓(xùn)練和預(yù)測時(shí)間均有大幅度提升,提高了將近98.4%。根據(jù)結(jié)果比較可知,所提方法在時(shí)間性能方面明顯優(yōu)于機(jī)器學(xué)習(xí),具有良好的模型學(xué)習(xí)效率。
對于參數(shù)異常檢測,本文使用客戶端日志作為實(shí)驗(yàn)數(shù)據(jù)集,只要客戶端執(zhí)行任務(wù),客戶端與服務(wù)器間便產(chǎn)生通信,生成用戶日志。在實(shí)驗(yàn)測試中通過不斷的切斷網(wǎng)絡(luò)制造通信異常,來模擬實(shí)際情況。該過程得到日志1348行,日志數(shù)據(jù)集為590424行。該實(shí)驗(yàn)異常檢測仿真結(jié)果如圖2所示。
圖2 參數(shù)異常檢測結(jié)果
從圖中可以看出,當(dāng)日志均方誤差超過97.30%的閾值時(shí),參數(shù)值是異常的,且有7次任務(wù)存在參數(shù)值異常,這7次任務(wù)的原始日志對應(yīng)的參數(shù)值均較大,是由網(wǎng)絡(luò)波動延遲導(dǎo)致的,而圖b的檢測結(jié)果,可以看出該日志參數(shù)向量均是正常的,說明該日志不涉及通信問題,都是本地運(yùn)行代碼產(chǎn)生的日志,通過異常數(shù)據(jù)集ID可以方便的查找出異常日志。綜上所述,本文異常檢測模型可以識別出所有參數(shù)值異常的日志,準(zhǔn)確率達(dá)到100%。
為了防止異常路徑影響檢測結(jié)果,本文將在線更新前后的性能進(jìn)行比較,驗(yàn)證在線更新模型檢測結(jié)果的準(zhǔn)確性與有效性。兩種模型的對比結(jié)果如圖3所示。
圖3 在線更新模型對比結(jié)果
從圖中可以看出,在不使用模型更新時(shí),精確率和綜合指標(biāo)較低,分別為25%和36%。而使用在線更新模型后,準(zhǔn)確率為71%,綜合指標(biāo)為86%,均有明顯地提高。說明在線更新模型不僅能夠解決訓(xùn)練集較大時(shí)出現(xiàn)錯(cuò)誤檢測的情況,還可以大幅度提高模型異常檢測的準(zhǔn)確率。
針對網(wǎng)絡(luò)異常、數(shù)據(jù)沖突等導(dǎo)致的軟件崩潰問題,提出基于日志與深度學(xué)習(xí)的網(wǎng)絡(luò)軟件異常檢測算法。將深度學(xué)習(xí)網(wǎng)絡(luò)用于系統(tǒng)日志數(shù)據(jù)中進(jìn)行異常檢測與性能的比較,對日志的執(zhí)行路徑異常、參數(shù)異常情況進(jìn)行檢測,并采用在線模型更新檢測結(jié)果。實(shí)驗(yàn)結(jié)果表明,本文異常檢測模型不僅可以識別路徑異常和參數(shù)值異常的日志,而且三種性能指標(biāo)較高,通過在線更新模型可以大幅度提高對異常錯(cuò)誤檢測的情況。