高 洋,王禮偉,任 望,謝 豐,莫曉鋒,羅 熊?,王衛(wèi)蘋,楊 璽
1) 中國(guó)信息安全測(cè)評(píng)中心,北京 100085 2) 北京科技大學(xué)計(jì)算機(jī)與通信工程學(xué)院,北京 100083 3) 北京科技大學(xué)人工智能研究院,北京100083 4) 材料領(lǐng)域知識(shí)工程北京市重點(diǎn)實(shí)驗(yàn)室,北京 100083 5) 北京市智能物流系統(tǒng)協(xié)同創(chuàng)新中心,北京 101149
在國(guó)家信息安全的范疇中,與國(guó)家基礎(chǔ)設(shè)施相關(guān)聯(lián)的工業(yè)控制系統(tǒng)的安全占據(jù)著極其重要的地位[1]. 目前,互聯(lián)網(wǎng)環(huán)境下的工控系統(tǒng)安全是一個(gè)重要的關(guān)注點(diǎn),對(duì)其中非正常行為的監(jiān)測(cè)主要圍繞網(wǎng)絡(luò)層面和使用端分別進(jìn)行防護(hù). 網(wǎng)絡(luò)端防護(hù)通常是指網(wǎng)絡(luò)流量進(jìn)行分析,主要是指對(duì)工業(yè)控制系統(tǒng)的特定協(xié)議、各種終端(包括移動(dòng)終端)的流量異常等進(jìn)行分析;使用端的防護(hù)主要是識(shí)別樣本的異常行為來分析. 本文主要研究終端方的工控系統(tǒng)安全防護(hù)問題,對(duì)其中的惡意軟件進(jìn)行檢測(cè)和分析,以提高監(jiān)測(cè)預(yù)警的準(zhǔn)確性和可用性. 當(dāng)前應(yīng)對(duì)的方法主要基于人工線下檢查,對(duì)于存在的安全隱含,還是以討論解決方案為主,并不具備智能化特點(diǎn). 因此,研發(fā)惡意軟件的智能檢測(cè)算法,具有重要的現(xiàn)實(shí)意義[2].
一般來說,可以通過提取惡意軟件的特征碼來判斷該程序是否屬于某一類已知的惡意軟件,雖然這樣對(duì)已知特征的惡意軟件能有很高的識(shí)別率,但對(duì)于惡意軟件的某些新型變種而言,檢測(cè)效果可能不太理想[3]. 從長(zhǎng)遠(yuǎn)的角度來看,隨著新型惡意軟件的變種不斷出現(xiàn),病毒庫(kù)將會(huì)變得日漸臃腫. 因此通過更新病毒庫(kù)來檢測(cè)新型變種的方法,雖然可行,但總是落后于惡意軟件發(fā)展和更新的速度. 因此,我們需要尋找新的能夠識(shí)別惡意程序的有效方法. 隨著深度學(xué)習(xí)等高級(jí)算法在眾多領(lǐng)域上的成功應(yīng)用,于是大量的研究者開始嘗試使用這些新興技術(shù)來解決這一問題.
深度學(xué)習(xí)模型能夠分析較長(zhǎng)的系統(tǒng)調(diào)用序列,并通過捕捉高層次的特征為語(yǔ)義學(xué)習(xí)做出更好的決策. Xiao等[4]利用前向神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)對(duì)權(quán)限申請(qǐng)和系統(tǒng)調(diào)用進(jìn)行特征分析,從而檢測(cè)惡意軟件. Su等[5]將多層次的特征輸入到深度置信網(wǎng)絡(luò)這一深度學(xué)習(xí)模型,進(jìn)而將學(xué)習(xí)到的惡意軟件的典型特征輸入到基于支持向量機(jī)的惡意軟件檢測(cè)器. 但是,當(dāng)新的惡意軟件變種加入到訓(xùn)練數(shù)據(jù)集時(shí),模型需要逐步重新訓(xùn)練,所以需要更多的計(jì)算時(shí)間來估計(jì)檢測(cè)的概率. 基于深度學(xué)習(xí)的新解決方法雖然在計(jì)算準(zhǔn)確率方面有了較大提升,但是存在著計(jì)算效率不夠理想和智能自適應(yīng)學(xué)習(xí)能力不強(qiáng)等局限性. 基于上述考慮,本文主要基于強(qiáng)化學(xué)習(xí)這一高級(jí)機(jī)器學(xué)習(xí)算法來實(shí)現(xiàn)惡意軟件行為的檢測(cè)與識(shí)別.
強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的范式和方法論之一,可針對(duì)智能體(Agent),描述和解決其在與環(huán)境的交互過程中,通過學(xué)習(xí)策略以達(dá)成回報(bào)最大化或?qū)崿F(xiàn)特定目標(biāo)的問題,強(qiáng)化學(xué)習(xí)算法在信息論、博弈論、自動(dòng)控制等領(lǐng)域有一定應(yīng)用[6]. 但是,將強(qiáng)化學(xué)習(xí)方法直接用于惡意軟件檢測(cè)方面的工作還很少. 目前雖然已有一些工作[7],但為了進(jìn)一步提升檢測(cè)效率和智能化程度,考慮采用本文的解決方法. 雖然惡意軟件自身的內(nèi)部程序結(jié)構(gòu)有差異,但其惡意行為最終必須落實(shí)到實(shí)際的動(dòng)態(tài)行為中. 因此本文決定使用行為序列分析方法對(duì)惡意軟件的行為序列進(jìn)行分析,提取出合適的行為特征,然后通過這些特征,對(duì)惡意軟件進(jìn)行判別和分類. 由于這種基于序列特征的分析操作,與強(qiáng)化學(xué)習(xí)適用于序列決策特征相符合[8]. 這種需要對(duì)序列數(shù)據(jù)進(jìn)行逐步操作的問題,可以使用強(qiáng)化學(xué)習(xí)中的策略梯度來解決.
基于上述分析,本文針對(duì)惡意軟件檢測(cè)這一特殊應(yīng)用背景,設(shè)計(jì)了一種基于強(qiáng)化學(xué)習(xí)模型的應(yīng)用實(shí)現(xiàn)方法框架,并完成了應(yīng)用測(cè)試.
目前用于分析惡意軟件特征的主流方法有兩大類:靜態(tài)分析與動(dòng)態(tài)分析.
在靜態(tài)分析方法方面,可以直接基于惡意程序的可執(zhí)行文件進(jìn)行分析,也可以將惡意程序的可執(zhí)行文件進(jìn)行反編譯以此獲得程序更為底層的特征,然后對(duì)其進(jìn)行分析. 例如,Schultz等[9]首次將數(shù)據(jù)挖掘的相關(guān)算法應(yīng)用于惡意軟件分析,其通過樸素貝葉斯分類算法得到的分類結(jié)果,比基于特征匹配的傳統(tǒng)方法具有更高的準(zhǔn)確率.Santos等[10]則是基于操作碼序列來進(jìn)行分析,他們根據(jù)操作碼的出現(xiàn)頻率以及操作碼之間的關(guān)聯(lián)性來對(duì)惡意軟件進(jìn)行識(shí)別和分類. 近年來,Zhang等[11]將可執(zhí)行文件反編譯得到操作碼序列,然后將這些序列轉(zhuǎn)換成圖像的形式,最后通過卷積神經(jīng)網(wǎng)絡(luò)CNN來進(jìn)行進(jìn)一步的特征提取和識(shí)別.
在動(dòng)態(tài)分析方法方面,該方法主要根據(jù)惡意軟件運(yùn)行時(shí)的行為特征來進(jìn)行分析. 這些動(dòng)態(tài)特征包括:系統(tǒng)調(diào)用、文件讀寫操作、網(wǎng)絡(luò)通信行為以及進(jìn)程行為等. 例如,Tandon和Chan[12]使用規(guī)則學(xué)習(xí)算法的變體來學(xué)習(xí)系統(tǒng)調(diào)用中的規(guī)則信息,以此來檢測(cè)新型的惡意軟件行為. 另外,考慮到動(dòng)態(tài)分析方法中,頻繁進(jìn)行數(shù)據(jù)的采集,因此,需要有合適的行為采集工具,Willems等[13]開發(fā)了CWSandbox沙箱,它可以實(shí)現(xiàn)自動(dòng)快速分析Win32平臺(tái)上的惡意軟件,極大提升了分析效率.基于此沙箱,Rieck等[14]構(gòu)建了一個(gè)惡意軟件分析框架,將惡意軟件放入沙箱中運(yùn)行,然后采集惡意軟件運(yùn)行時(shí)的行為特征,然后,基于這些動(dòng)態(tài)特征,使用機(jī)器學(xué)習(xí)算法進(jìn)行識(shí)別和分類. 此外,Ki等[15]通過構(gòu)建API(Application program interface)特征數(shù)據(jù)庫(kù),利用對(duì)比API序列特征的方法來判斷是否屬于惡意軟件.
強(qiáng)化學(xué)習(xí)近年來引發(fā)了廣泛的關(guān)注. 一個(gè)基本的強(qiáng)化學(xué)習(xí)模型包含智能Agent和環(huán)境兩部分.智能Agent通過觀察環(huán)境的當(dāng)前狀態(tài),然后根據(jù)相應(yīng)的策略選擇方案選擇一個(gè)動(dòng)作,將其作用到環(huán)境上. 環(huán)境將根據(jù)這個(gè)動(dòng)作改變自己的狀態(tài),并反饋給智能Agent一個(gè)獎(jiǎng)勵(lì)值. 智能Agent根據(jù)這個(gè)獎(jiǎng)勵(lì)值來判斷它所選取動(dòng)作的優(yōu)劣程度,并以此更新自己的策略. 在不斷交互過程中,智能Agent將逐漸傾向于選擇獎(jiǎng)勵(lì)值高的動(dòng)作. 最終,找到一個(gè)能夠完成當(dāng)前目標(biāo),并能獲得高獎(jiǎng)勵(lì)的方案[16].
強(qiáng)化學(xué)習(xí)根據(jù)策略學(xué)習(xí)的方式可以分為兩大類:基于價(jià)值的強(qiáng)化學(xué)習(xí)以及基于策略的強(qiáng)化學(xué)習(xí). 在基于價(jià)值的強(qiáng)化學(xué)習(xí)方法中,與環(huán)境進(jìn)行交互時(shí),每次都將嘗試選擇價(jià)值最大的動(dòng)作. 基于策略的強(qiáng)化學(xué)習(xí),則主要基于概率分布來選擇動(dòng)作.在本文中,主要采用了基于策略的強(qiáng)化學(xué)習(xí)算法.相對(duì)于基于價(jià)值的強(qiáng)化學(xué)習(xí)而言,基于策略的方法可以更加方便地產(chǎn)生一連串的連續(xù)動(dòng)作.
強(qiáng)化學(xué)習(xí)在自然語(yǔ)言處理中展示了很好應(yīng)用效果. 例如,Zhang等[17]提出了強(qiáng)化學(xué)習(xí)框架下的信息提取長(zhǎng)短期記憶網(wǎng)絡(luò)ID-LSTM(Information distilled long short-term memory)模型,可提取到對(duì)分類問題更有效的序列特征. 目前惡意軟件動(dòng)態(tài)分析主要基于系統(tǒng)調(diào)用序列來進(jìn)行,由于強(qiáng)化學(xué)習(xí)在產(chǎn)生動(dòng)作序列方面具有的優(yōu)勢(shì),本文將基于上述工作,將ID-LSTM模型遷移到惡意軟件行為分析領(lǐng)域,實(shí)現(xiàn)優(yōu)化分析.
本文將基于強(qiáng)化學(xué)習(xí)的自然語(yǔ)言處理方法遷移到惡意軟件行為特征分析領(lǐng)域. 借助于強(qiáng)化學(xué)習(xí)具有序列決策和可根據(jù)反饋調(diào)整策略的特點(diǎn),來篩選惡意軟件行為序列,從而獲得更好的行為序列特征. 利用得到的特征,可以實(shí)現(xiàn)惡意軟件檢測(cè)分類應(yīng)用.
整個(gè)強(qiáng)化學(xué)習(xí)模型的總體結(jié)構(gòu),如圖1所示.其中,X=[x1,x2,···,xL]是序列數(shù)據(jù),表示程序?qū)嶋H執(zhí)行時(shí)的一段API調(diào)用序列,其中的分量xi是一個(gè)經(jīng)過編碼后的API調(diào)用函數(shù);st代表特征提取網(wǎng)絡(luò)當(dāng)前時(shí)刻的狀態(tài),是策略網(wǎng)絡(luò)用來做出決策的判斷依據(jù);at代表策略網(wǎng)絡(luò)當(dāng)前所選擇的動(dòng)作,該動(dòng)作將影響特征提取網(wǎng)絡(luò)的提取行為;hL是整個(gè)序列最終提取出來的特征,用于提供給分類網(wǎng)絡(luò),分類網(wǎng)絡(luò)根據(jù)這個(gè)特征來進(jìn)行分類選擇;RL是延遲獎(jiǎng)勵(lì),它在訓(xùn)練過程中,基于分類網(wǎng)絡(luò)的預(yù)測(cè)結(jié)果來調(diào)整策略網(wǎng)絡(luò)的參數(shù).
圖 1 總體結(jié)構(gòu)Fig.1 Framework
在這個(gè)方法框架中,序列數(shù)據(jù)X中的每一個(gè)API調(diào)用函數(shù)將會(huì)按順序依次輸入到特征提取網(wǎng)絡(luò)中,每當(dāng)特征提取網(wǎng)絡(luò)接收到一個(gè)API調(diào)用函數(shù)xi之后,便會(huì)產(chǎn)生一個(gè)當(dāng)前狀態(tài)st,并將其送給策略網(wǎng)絡(luò). 策略網(wǎng)絡(luò)根據(jù)當(dāng)前的狀態(tài)st,進(jìn)行決策從而選擇一個(gè)動(dòng)作at,反饋給特征提取網(wǎng)絡(luò). 特征提取網(wǎng)絡(luò)根據(jù)動(dòng)作at,進(jìn)行相應(yīng)的更新操作. 不斷重復(fù)上述過程,當(dāng)整個(gè)序列X被處理完之后,特征提取網(wǎng)絡(luò)將最終得到的特征hL提供給分類網(wǎng)絡(luò),分類網(wǎng)絡(luò)根據(jù)這個(gè)提取出來的序列特征進(jìn)行分類預(yù)測(cè). 最后根據(jù)預(yù)測(cè)的結(jié)果計(jì)算一個(gè)延遲獎(jiǎng)勵(lì)RL反饋給策略網(wǎng)絡(luò),以便策略網(wǎng)絡(luò)更新網(wǎng)絡(luò)參數(shù).
在針對(duì)惡意軟件行為序列處理分析過程中,需要對(duì)收集的原始數(shù)據(jù)進(jìn)行必要的預(yù)處理,以方便后續(xù)模型的訓(xùn)練和測(cè)試. 整個(gè)數(shù)據(jù)預(yù)處理的流程分為三步.
(1)提取API調(diào)用序列:從Cuckoo沙箱生成的原始報(bào)告中提取API序列數(shù)據(jù),并且將每一份報(bào)告(每一個(gè)樣本)單獨(dú)形成一個(gè)API調(diào)用序列文件.
(2)過濾API函數(shù):計(jì)算各個(gè)API函數(shù)的信息增益值,然后設(shè)定一個(gè)閾值,最后將所有信息增益值小于閾值的API函數(shù)剔除. 這樣做的目的是,一方面可以剔除對(duì)分類幫助不大的API函數(shù),另一方面也希望盡可能保留較多的原始信息.
(3)編碼API序列:將每一個(gè)API函數(shù)編碼成一個(gè)獨(dú)熱向量,再將整個(gè)API序列中的API函數(shù)替換成對(duì)應(yīng)的獨(dú)熱向量即可.
下面分別介紹圖1中三個(gè)關(guān)鍵網(wǎng)絡(luò)模塊的設(shè)計(jì)過程.
2.3.1 特征提取網(wǎng)絡(luò)
特征提取網(wǎng)絡(luò)主要基于LSTM網(wǎng)絡(luò)的功能特點(diǎn)來提取時(shí)序數(shù)據(jù)的長(zhǎng)距離時(shí)序特征. 這里的狀態(tài)st定義為:,其中,⊕表示拼接操作,ct-1是t-1時(shí)刻記憶單元中的信息,ht-1是用于存放時(shí)序數(shù)據(jù)累積特征的張量,xt是當(dāng)前輸入的API調(diào)用函數(shù).st表示當(dāng)前的狀態(tài),一方面考慮了之前序列中所蘊(yùn)涵的信息,另一方面還考慮了當(dāng)前的輸入,可全面地體現(xiàn)當(dāng)前的具體狀態(tài). 動(dòng)作at定義為:at∈{Retain,Delete}. 這是一個(gè)二元選擇,每一個(gè)時(shí)刻所選擇的動(dòng)作只有兩種可能:刪除(Delete)和保留(Retain). Retain操作是保留當(dāng)前對(duì)應(yīng)的API函數(shù),而Delete操作則是去除對(duì)應(yīng)的API函數(shù),被去除掉的API函數(shù)將不會(huì)對(duì)最終的分類結(jié)果產(chǎn)生影響.
特征提取網(wǎng)絡(luò)的工作過程如算法1所示.
算法1:特征網(wǎng)絡(luò)提取過程1:初始化c0和h0:c0=0,h0=0;2:i=1;3:while i<=L 4: 輸入API調(diào)用函數(shù)xi;5: 計(jì)算當(dāng)前狀態(tài):si=ci?1⊕hi?1⊕xi;6: 將si傳遞給策略網(wǎng)絡(luò);7: 獲取策略網(wǎng)絡(luò)所選擇的動(dòng)作ai;8: if ai=Delete then 9: hi=hi?1;ci=ci?1;10: else if ai=Retain then 11: hi和ci根據(jù)LSTM網(wǎng)絡(luò)功能進(jìn)行 正常更新;12: i=i+1;13:輸出hL,將其提供給分類網(wǎng)絡(luò).
2.3.2 分類網(wǎng)絡(luò)
分類網(wǎng)絡(luò)利用從特征提取網(wǎng)絡(luò)那里得到的序列特征hL,來預(yù)測(cè)當(dāng)前樣本的所屬類別. 這里的分類網(wǎng)絡(luò)設(shè)計(jì)為一個(gè)三層的神經(jīng)網(wǎng)絡(luò)(輸入層、隱含層和輸出層),輸入是序列特征hL=[h1,h2,···,hm];輸出的P(y|X)是一個(gè)概率分布,用來描述當(dāng)前序列X所屬的可能類別. 因?yàn)楸疚哪康氖菂^(qū)分惡意軟件和良性軟件,這是一個(gè)二分類問題,所以y∈{benign, malicious}.
在實(shí)際訓(xùn)練過程中,分類網(wǎng)絡(luò)所計(jì)算出來的概率分布,一方面用來估計(jì)當(dāng)前樣本所屬的類別,另一方面需要利用這個(gè)概率分布來計(jì)算延遲獎(jiǎng)勵(lì)RL,計(jì)算方法如下:
其中:P(c|X)的值是從分類網(wǎng)絡(luò)預(yù)測(cè)結(jié)果P(y|X)中獲得;c表示樣本X的實(shí)際所屬類別.L′是被刪除掉的API函數(shù)的個(gè)數(shù)(也就是執(zhí)行Delete操作的次數(shù));L是原始的序列長(zhǎng)度;γ則是起到調(diào)節(jié)刪除力度功能的超參數(shù). 例如,在相同的情況下,如果γ的值越大,延遲獎(jiǎng)勵(lì)RL第二項(xiàng)的值就會(huì)越大,那么策略網(wǎng)絡(luò)所得到的獎(jiǎng)勵(lì)也隨之變大,因此策略網(wǎng)絡(luò)就會(huì)更傾向于刪除更多信息. 此外,在延遲獎(jiǎng)勵(lì)中增加一個(gè)偏置項(xiàng)b. 這個(gè)偏置項(xiàng)的作用是用來調(diào)節(jié)獎(jiǎng)勵(lì)值的正負(fù)情況.
2.3.3 策略網(wǎng)絡(luò)
策略網(wǎng)絡(luò)接收特征提取網(wǎng)絡(luò)給出的狀態(tài)st,然后計(jì)算得到一個(gè)動(dòng)作選擇的概率分布,最后基于這個(gè)概率分布,使用隨機(jī)策略來選擇一個(gè)動(dòng)作.
這里的策略網(wǎng)絡(luò)也是一個(gè)三層的神經(jīng)網(wǎng)絡(luò). 輸入是當(dāng)前狀態(tài)st=[s1,s2,···,sn],輸出π(at|st;Θ)表示當(dāng)前選擇動(dòng)作的策略,這是一個(gè)概率值,其中的Θ是當(dāng)前策略網(wǎng)絡(luò)的網(wǎng)絡(luò)參數(shù). 這里的π(at|st;Θ)計(jì)算得到一個(gè)介于0至1之間的實(shí)數(shù),用來表示進(jìn)行Delete操作的概率. 在實(shí)際使用過程中,策略網(wǎng)絡(luò)的基本結(jié)構(gòu)與分類網(wǎng)絡(luò)相同,只是用途不同而已,一個(gè)用于策略選擇,另一個(gè)則是用于預(yù)測(cè)分類.
當(dāng)設(shè)計(jì)好網(wǎng)絡(luò)模型結(jié)構(gòu)之后,需要為網(wǎng)絡(luò)選擇合適的損失函數(shù). 損失函數(shù)的值用來評(píng)價(jià)當(dāng)前網(wǎng)絡(luò)參數(shù)與訓(xùn)練集數(shù)據(jù)的擬合程度,損失函數(shù)的值越小,說明擬合的效果越好. 在選擇一個(gè)合適的損失函數(shù)的同時(shí),還需要設(shè)計(jì)一個(gè)恰當(dāng)?shù)膬?yōu)化算法.
2.4.1 特征提取網(wǎng)絡(luò)和分類網(wǎng)絡(luò)的損失函數(shù)
因?yàn)榉诸惥W(wǎng)絡(luò)的分類依據(jù)是基于特征提取網(wǎng)絡(luò)所提取出來的最終特征,因此,這兩個(gè)模塊在這里共享同一個(gè)損失函數(shù). 由于分類網(wǎng)絡(luò)的輸出結(jié)果是一個(gè)概率分布,因此選擇使用交叉熵作為損失函數(shù). 當(dāng)參與計(jì)算的兩個(gè)概率分布越接近,那么交叉熵計(jì)算結(jié)果越小,因此,交叉熵可以用來衡量?jī)蓚€(gè)概率分布之間的相似程度,基于此,交叉熵可以做預(yù)測(cè)任務(wù)的損失函數(shù). 相關(guān)計(jì)算公式如下:
其中:D表示訓(xùn)練集;C是類別的集合,在本文中,有是One-Hot形式的概率分布,這有是分類網(wǎng)絡(luò)計(jì)算輸出的概率分布.
2.4.2 策略網(wǎng)絡(luò)的目標(biāo)函數(shù)
策略網(wǎng)絡(luò)的目標(biāo)是做出能夠獲得最大收益的決策. 考慮到做出的決策行為是基于概率的,這是一個(gè)隨機(jī)變量. 因此,應(yīng)該通過期望值來衡量所獲得的獎(jiǎng)勵(lì),對(duì)此可以定義目標(biāo)函數(shù)為:
其中:s1a1···sLaL表示狀態(tài)-動(dòng)作序列;PΘ(s1a1···sLaL)表示狀態(tài)-動(dòng)作序列出現(xiàn)的概率;RL(s1a1···sLaL)表示狀態(tài)-動(dòng)作序列所對(duì)應(yīng)的延遲獎(jiǎng)勵(lì)值;E[RL(s1a1···sLaL)]表示延遲獎(jiǎng)勵(lì)的期望值.這里需要注意的是,t+1時(shí)刻的狀態(tài)完全由t時(shí)刻的狀態(tài)和t時(shí)刻的動(dòng)作所決定,并且初始的狀態(tài)是確定的,因此p(s1)=1且p(st+1|st;at)=1.
2.4.3 強(qiáng)化學(xué)習(xí)模型的訓(xùn)練算法
在訓(xùn)練需要的損失函數(shù)定義好之后,就可以根據(jù)所需的優(yōu)化目標(biāo)來訓(xùn)練整個(gè)模型. 整個(gè)強(qiáng)化學(xué)習(xí)模型的訓(xùn)練可以被分為三個(gè)階段:兩個(gè)預(yù)訓(xùn)練階段以及正式訓(xùn)練階段.
預(yù)訓(xùn)練過程如算法2所述.
算法2:預(yù)訓(xùn)練過程1: 初始化參數(shù):分塊尺寸batchsize,閾值threshold, 迭代次數(shù)上限iterations;2: 將數(shù)據(jù)集均分成n塊,每塊大小為batchsize, 每一塊記為bi (i=1,2n);3: 預(yù)訓(xùn)練特征提取網(wǎng)絡(luò)和分類網(wǎng)絡(luò):4: 保持策略網(wǎng)絡(luò)參數(shù)不變,并且策略網(wǎng)絡(luò) 僅輸出Retain;5: 整個(gè)訓(xùn)練集上的準(zhǔn)確率記為accuracy;6: for i=1 : n 7: 計(jì)算bi上的準(zhǔn)確率,記為acc;8: 計(jì)算bi上的損失,更新網(wǎng)絡(luò)參數(shù);9: 更新accuracy (未經(jīng)過訓(xùn)練的bi上的準(zhǔn)確率認(rèn)為是0);10: i=1;11: while accuracy<threshold 12: 計(jì)算bi上的準(zhǔn)確率,記為acc;13: 計(jì)算bi上的損失,更新網(wǎng)絡(luò)參數(shù);14: 更新accuracy;15: i=i % n+1;16: 預(yù)訓(xùn)練策略網(wǎng)絡(luò):17: 保持特征提取網(wǎng)絡(luò)和分類網(wǎng)絡(luò)參數(shù)不變;18: for i=1 : n 19: 計(jì)算bi上的損失,更新網(wǎng)絡(luò)參數(shù).images/BZ_64_1865_1292_1924_1317.png
在預(yù)訓(xùn)練特征提取網(wǎng)絡(luò)和分類網(wǎng)絡(luò)時(shí),施加了兩個(gè)附加條件:1)訓(xùn)練集中所有樣本至少經(jīng)過一次預(yù)訓(xùn)練;2)分類網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率要高于事先設(shè)定的閾值. 設(shè)置這兩個(gè)條件是出于兩方面的考慮:一方面要充分利用到整個(gè)訓(xùn)練集的信息,另一方面要使得策略網(wǎng)絡(luò)的預(yù)訓(xùn)練更加有針對(duì)性.
預(yù)訓(xùn)練完成之后,正式訓(xùn)練過程如算法3所述.
算法3:正式訓(xùn)練過程1: i=1;
2: while i<iterations 3: 計(jì)算bi上的損失,更新網(wǎng)絡(luò)參數(shù);4: if i % 100=0 then 5: 保存當(dāng)前網(wǎng)絡(luò)參數(shù)到文件中;6: i=i % n+1;
在正式訓(xùn)練過程中,由于保存了訓(xùn)練過程中不同迭代次數(shù)的強(qiáng)化學(xué)習(xí)模型. 當(dāng)正式訓(xùn)練結(jié)束之后,分別用這些保存下來的網(wǎng)絡(luò)參數(shù)初始化強(qiáng)化學(xué)習(xí)模型,然后分別對(duì)測(cè)試集上的數(shù)據(jù)進(jìn)行測(cè)試,查看不同迭代次數(shù)下的強(qiáng)化學(xué)習(xí)模型的表現(xiàn),從中選擇一個(gè)表現(xiàn)最好的模型.
實(shí)驗(yàn)選用的數(shù)據(jù)集包含了2萬多條Windows平臺(tái)下的API調(diào)用序列數(shù)據(jù)[15]. 在實(shí)際使用中,從中選取了3000條良性軟件的API調(diào)用序列和2411條惡意軟件的API調(diào)用序列(共有3種不同類型的惡意軟件).
數(shù)據(jù)集中的每一條數(shù)據(jù)都是API調(diào)用序列,但是不同數(shù)據(jù)之間序列長(zhǎng)度不統(tǒng)一,需要進(jìn)行初步的處理. 這里包括兩個(gè)步驟:統(tǒng)計(jì)所有API的個(gè)數(shù),計(jì)算API函數(shù)的信息增益值,刪去低增益的API函數(shù);利用One-Hot編碼將每一個(gè)原始序列數(shù)據(jù)編碼成長(zhǎng)度為400的序列數(shù)據(jù). 在選取的數(shù)據(jù)集中,根據(jù)信息增益由大到小排序. 經(jīng)檢查,發(fā)現(xiàn)信息增益值低的API函數(shù),在良性與惡意樣本中出現(xiàn)比率都較低. 因此,這些API函數(shù)從信息增益的角度來說,對(duì)于分類的貢獻(xiàn)較小,只有少部分的樣本含有這些API函數(shù). 這里所選取的信息增益閾值為0.0001,信息增益值低于該閾值的都將被去除. 經(jīng)過這樣的操作后,數(shù)據(jù)集中的API函數(shù),由過濾前的946個(gè),調(diào)整為信息增益過濾之后的828個(gè).
在經(jīng)過實(shí)驗(yàn)測(cè)試后,強(qiáng)化學(xué)習(xí)模型訓(xùn)練時(shí)所需的參數(shù)設(shè)置為:特征提取網(wǎng)絡(luò)、策略網(wǎng)絡(luò)、分類網(wǎng)絡(luò)輸入數(shù)據(jù)的維度分別為828、1084、128;特征提取網(wǎng)絡(luò)、策略網(wǎng)絡(luò)、分類網(wǎng)絡(luò)中隱含層神經(jīng)元數(shù)目分別為128、128、128;分類網(wǎng)絡(luò)輸出張量的維度為2;超參數(shù)γ為0.4;特征提取網(wǎng)絡(luò)、策略網(wǎng)絡(luò)、分類網(wǎng)絡(luò)的學(xué)習(xí)率為0.005、0.01、0.005;延遲獎(jiǎng)勵(lì)的偏置項(xiàng)為0.8;每次訓(xùn)練的樣本數(shù)目為16;預(yù)訓(xùn)練時(shí)的準(zhǔn)確率閾值為0.6;正式訓(xùn)練時(shí)的迭代學(xué)習(xí)次數(shù)上限為4000. 另外,在本實(shí)驗(yàn)的數(shù)據(jù)集中,測(cè)試集占70%(其中,惡意樣本和良性樣本各有700個(gè)),測(cè)試集占30%(其中,惡意樣本和良性樣本各有300個(gè)).
如圖2所示,當(dāng)強(qiáng)化學(xué)習(xí)模型在訓(xùn)練集上迭代500次之后,測(cè)試集上的準(zhǔn)確率接近于90%左右. 圖3展示了測(cè)試集上查準(zhǔn)率和召回率隨迭代次數(shù)的變化情況,可以看到準(zhǔn)確率曲線(實(shí)線)的變化趨勢(shì),和召回率曲線(虛線)的變化趨勢(shì)往往相反. 在迭代2000次之前,查全率能維持在80%左右,查準(zhǔn)率能接近100%. 這里可以通過查看混淆矩陣,來評(píng)價(jià)模型的計(jì)算性能. 如表1所示,這里選擇了迭代次數(shù)2000次后的模型,其中,TP表示正確預(yù)測(cè)惡意樣本的數(shù)量,F(xiàn)P表示錯(cuò)誤預(yù)測(cè)惡意樣本的數(shù)量,F(xiàn)N表示錯(cuò)誤預(yù)測(cè)良性樣本的數(shù)量,TN表示正確預(yù)測(cè)良性樣本的數(shù)量. 基于此,可以計(jì)算查準(zhǔn)率為:P=TP/(TP+FP)=257/(257+4)=98.1%;查全率為:R=TP/(TP+FN)=257/(257+43)=85.7%.
圖 2 測(cè)試集上的準(zhǔn)確率Fig.2 Accuracy in the test dataset
圖 3 測(cè)試集上查準(zhǔn)率和查全率隨迭代次數(shù)的變化Fig.3 Precision and recall in the test dataset
表 1 分類結(jié)果的混淆矩陣Table 1 Confusion matrix
因?yàn)楸疚闹饕P(guān)注惡意樣本的行為特征,在利用強(qiáng)化學(xué)習(xí)模型處理惡意樣本時(shí),更傾向于確定刪除和保留哪些API函數(shù). 因此,在測(cè)試集惡意樣本中,統(tǒng)計(jì)出現(xiàn)次數(shù)超過100的API函數(shù),并且按照刪除比例(刪除次數(shù)/總出現(xiàn)次數(shù))來排序. 如表2中的前半部分和后半部分所示,這里分別選擇了刪除比例最高和最低的的5個(gè)API函數(shù). 由表中的結(jié)果可知,VirtualAllocEx等函數(shù)在實(shí)際分類過程中起到的作用比較次要,尤其是Virtual AllocEx函數(shù)對(duì)于強(qiáng)化學(xué)習(xí)模型而言,更容易被刪除. 這說明,雖然VirtualAllocEx在大多數(shù)的惡意樣本中都出現(xiàn),但是對(duì)于分類來說,反而沒有起到太大的貢獻(xiàn). 而GetProcAddress和CloseHandle等函數(shù)出現(xiàn)次數(shù)多,并且都未被刪除,說明這些函數(shù)對(duì)于所訓(xùn)練的強(qiáng)化學(xué)習(xí)模型提出取來的特征的貢獻(xiàn)是較為重要的. 從惡意軟件行為的角度來看,這些API函數(shù)相當(dāng)于是惡意樣本中關(guān)鍵的行為.
表 2 刪除比例最高和最低的各5個(gè)API函數(shù)Table 2 Five API functions with the highest and lowest deletion rates
為了有效檢測(cè)工控系統(tǒng)中的惡意軟件行為特征,本文通過結(jié)合使用強(qiáng)化學(xué)習(xí)這一高級(jí)機(jī)器學(xué)習(xí)算法模型,設(shè)計(jì)了一個(gè)智能檢測(cè)方法框架. 借助于強(qiáng)化學(xué)習(xí)具有序列決策和可根據(jù)反饋調(diào)整學(xué)習(xí)策略的特殊優(yōu)勢(shì),對(duì)惡意軟件行為序列進(jìn)行了篩選,以獲得有效的行為序列特征,并利用得到的特征,實(shí)現(xiàn)了惡意軟件的檢測(cè)分類應(yīng)用. 圍繞設(shè)計(jì)的方法框架,詳細(xì)討論和分析了其中的特征提取網(wǎng)絡(luò)、策略網(wǎng)絡(luò)和分類網(wǎng)絡(luò)三個(gè)關(guān)鍵模塊. 通過結(jié)合實(shí)際數(shù)據(jù)集進(jìn)行的實(shí)驗(yàn)驗(yàn)證結(jié)果表明,文中設(shè)計(jì)的基于強(qiáng)化學(xué)習(xí)的檢測(cè)方法,可在一定程度上,智能實(shí)現(xiàn)應(yīng)用檢測(cè)任務(wù).