李樂凡,劉曉東,2
(1.武漢郵電科學(xué)研究院,湖北武漢 430000;2.武漢虹旭信息技術(shù)有限責(zé)任公司,湖北 武漢 430000)
2021年,AV-test 系統(tǒng)檢測到超過12.9 億個惡意軟件。作為旨在干擾計算機正常運行的軟件,惡意軟件是病毒、木馬和其他破壞性計算機程序的總稱。嵌入式設(shè)備的數(shù)量呈指數(shù)型增長[1],忽略了安全和隱私問題。近年針對Linux 內(nèi)核的惡意軟件數(shù)量不斷增長,其可以針對非常多樣化的目標(biāo)[2]。
綜上,對Linux 惡意軟件進(jìn)行高效快速地識別十分具有必要性。惡意軟件的自動分析和檢測一直是研究的重點和難點[3]。鑒于此,文中給出了基于Linux 系統(tǒng)調(diào)用序列的惡意軟件檢測技術(shù),首先,使用Linux 軟件系統(tǒng)調(diào)用序列進(jìn)行分割和提取;其次,將特征數(shù)據(jù)映射到RGBA 圖像文件;最后,使用膠囊網(wǎng)絡(luò)對圖像進(jìn)行檢測和識別。僅需少量標(biāo)記樣本,就可在測試數(shù)據(jù)集上達(dá)到極高的準(zhǔn)確率,在實驗結(jié)果的基礎(chǔ)上,優(yōu)化膠囊網(wǎng)絡(luò)模型參數(shù),以達(dá)到最優(yōu)的檢測性能。
在Linux 系統(tǒng)中,進(jìn)程不能訪問內(nèi)核,其中一組用于實現(xiàn)系統(tǒng)功能的子程序稱為系統(tǒng)調(diào)用。由于系統(tǒng)調(diào)用序列標(biāo)識軟件的行為,系統(tǒng)調(diào)用序列可作為一種檢測Linux 惡意軟件的特征[4]。對于Linux 系統(tǒng)調(diào)用序列的研究較少并且集中在入侵檢測[5]、異常檢測等方向。
獲取惡意軟件和良性軟件的系統(tǒng)調(diào)用序列數(shù)據(jù)。惡意軟件的系統(tǒng)調(diào)用序列由基于沙箱的動態(tài)分析報告得到,目前尚無通用或官方的Linux 惡意軟件數(shù)據(jù)集,自行構(gòu)建惡意軟件系統(tǒng)調(diào)用序列數(shù)據(jù)集。沙箱分析時會捕獲系統(tǒng)調(diào)用序列這一動態(tài)特征,將沙箱數(shù)據(jù)中這一冗余的分析信息利用起來,期望能到達(dá)較高的準(zhǔn)確率。良性軟件不會對系統(tǒng)造成危害,因此,可采用較為簡單的方式獲取良性的系統(tǒng)調(diào)用序列,良性軟件的系統(tǒng)調(diào)用序列使用strace 命令追蹤的系統(tǒng)軟件得到,strace 顯示有關(guān)進(jìn)程系統(tǒng)調(diào)用的信息,可以確定程序使用的系統(tǒng)函數(shù)。
每個系統(tǒng)調(diào)用都有不同的功能,例如大多數(shù)情況下open/read/write/ioctl/close 就可以實現(xiàn)對各種設(shè)備的輸入、輸出、設(shè)置、控制等;connect/socket 標(biāo)識了網(wǎng)絡(luò)行為特征。此外,系統(tǒng)調(diào)用序列具有前后關(guān)聯(lián)性,例如open-read-close 表示對某文件的讀操作。首先將系統(tǒng)調(diào)用序列按照進(jìn)程pid 劃分為單進(jìn)程的數(shù)據(jù)。系統(tǒng)調(diào)用序列的關(guān)聯(lián)性基于調(diào)用了同一參數(shù)或返回了同一地址,即對同一對象進(jìn)行操作,因此基于參數(shù)進(jìn)行劃分,得到可標(biāo)識軟件行為的系統(tǒng)調(diào)用特征序列。將特征序列轉(zhuǎn)換為對應(yīng)的RGBA 圖像,同樣大小的圖像RGBA 類型可以攜帶更多信息,可以攜帶比灰度圖更多的特征信息。將系統(tǒng)調(diào)用序列以字節(jié)為單位映射到對應(yīng)的四個通道上,將整個序列按字節(jié)進(jìn)行劃分,每四個字節(jié)對應(yīng)四個數(shù)值,其取值范圍為0~255,每四個字節(jié)映射一個像素點,即將每四個字節(jié)對應(yīng)數(shù)值映射到三個顏色通道以及一個透明度通道。如exec對應(yīng)的數(shù)值為(203,227,46,62)。最終,得到的圖像如圖1 所示,圖1(a)為良性軟件系統(tǒng)調(diào)用序列的特征圖,圖1(b)為惡意軟件系統(tǒng)調(diào)用序列的特征圖。

圖1 特征生成圖像
在基于系統(tǒng)調(diào)用的惡意軟件檢測領(lǐng)域[6],從最初的傳統(tǒng)的靜態(tài)檢測、動態(tài)檢測到基于數(shù)據(jù)挖掘和啟發(fā)式學(xué)習(xí)的檢測,發(fā)展到目前基于深度學(xué)習(xí)的惡意軟件檢測[7]。神經(jīng)網(wǎng)絡(luò)具有良好的處理復(fù)雜信息的能力,以便處理前后關(guān)聯(lián)的序列信息[8]。對于傳統(tǒng)的動靜態(tài)檢測,或是當(dāng)前的機器學(xué)習(xí)、深度學(xué)習(xí)算法,都存在一些問題[9]。2017年,Hinton 首次提出膠囊網(wǎng)絡(luò)模型[10],該模型被認(rèn)為是下一代重要的神經(jīng)網(wǎng)絡(luò)模型。由于其優(yōu)異的性能,膠囊網(wǎng)絡(luò)模型很好地應(yīng)用于小型樣本圖像分類任務(wù)[11]。膠囊網(wǎng)絡(luò)可以保持比卷積神經(jīng)網(wǎng)絡(luò)(CNN)更強的空間信息關(guān)系[12]。
膠囊(Capsule)是一組神經(jīng)元,用輸入輸出向量的長度表征實體存在的概率,向量的方向表示實例化參數(shù),即實體的某些圖形屬性[13]。輸入輸出向量的長度表示了某個實體出現(xiàn)的概率,所以值必須在0~1 之間,為實現(xiàn)這種壓縮,膠囊網(wǎng)絡(luò)使用了Squashing 函數(shù)激活向量,該非線性函數(shù)確保短向量的長度能夠縮短到幾乎等于零,而長向量的長度壓縮到接近但不超過1。具體計算如式(1)所示,其中,vj為膠囊j的輸出向量,sj為上一層所有膠囊輸出到當(dāng)前層膠囊j的向量加權(quán)和,即sj為膠囊j的輸入向量。
同一層級的膠囊通過變換矩陣對更高級別膠囊的實例化參數(shù)進(jìn)行預(yù)測,當(dāng)多個預(yù)測一致時,更高級別的膠囊將變得活躍。使用層間動態(tài)路由(Dynamic Routing)算法找出最好的處理路徑,其核心是迭代地計算更新耦合系數(shù)cij,其能令預(yù)測向量最符合輸出向量vj,即找到最符合輸出的輸入向量。該耦合系數(shù)的Softmax 算法如式(2)所示,bij依賴于兩個膠囊的位置與類型。
當(dāng)輸出新的vj后可以迭代更新cij,不需要反向傳播而直接通過計算輸入與輸出的一致性更新參數(shù),該路由算法容易收斂,實驗證明,通過三次迭代即可得到最佳結(jié)果。
層間動態(tài)路由算法的核心是預(yù)測耦合系數(shù)的柔性最大值算法。Softmax 函數(shù)將短向量縮小到幾乎為零,將長向量長度縮小到小于1。系數(shù)分布[14]集中在0.09~1.09 區(qū)間,這使得預(yù)測向量的總和sj難以區(qū)分,路由到最終膠囊的概率特征幾乎相等。使用最小系數(shù)和最大系數(shù)之間差異更大的Sigmoid 函數(shù)代替Softmax 函數(shù),如式(3)所示:
式中,cij不再代表最終膠囊的路由分配概率,而是代表路由到最終膠囊之間的相關(guān)強度。將重要的預(yù)測向量與較大的耦合系數(shù)相乘,使顯著性特征更具決定性,而不相關(guān)特征的耦合系數(shù)較小。
基于上述膠囊網(wǎng)絡(luò)模型,對其超參數(shù)進(jìn)行調(diào)整以達(dá)到最佳的檢測效果。模型中使用隨機梯度下降算法[15],使用訓(xùn)練數(shù)據(jù)集來更新模型的迭代學(xué)習(xí)算法。
batch 控制在模型的內(nèi)部參數(shù)更新之前要處理的訓(xùn)練樣本的數(shù)量。學(xué)習(xí)率決定了參數(shù)移動到最優(yōu)值的速度快慢,學(xué)習(xí)率過大或過小都會對模型收斂及收斂速度造成影響。實驗中對照測試了不同維度的訓(xùn)練批次batch 和學(xué)習(xí)率LR 對識別準(zhǔn)確率造成的影響,訓(xùn)練批次依次為1、8、32、64、128,學(xué)習(xí)率為0.000 1、0.000 5、0.001、0.005、0.01、0.05、0.1。在實驗中調(diào)整訓(xùn)練批次batch 和學(xué)習(xí)率LR 對模型分類準(zhǔn)確率的影響如圖2 所示,batch 為128 學(xué)習(xí)率為0.000 5 或0.001 時可以達(dá)到最高準(zhǔn)確率0.998 882。
實驗使用膠囊網(wǎng)絡(luò)結(jié)構(gòu),整體結(jié)構(gòu)圖如圖3 所示,使用Python 語言和pytorch 機器學(xué)習(xí)庫實現(xiàn)膠囊網(wǎng)絡(luò),該架構(gòu)由兩個卷積層和一個全連接層組成。卷積核感受野為9×9,比傳統(tǒng)CNN 更大,在卷積層層數(shù)較少時能感受更多信息。第一個卷積層使用256個9×9 的卷積核,步幅等于1,使用ReLU 激活函數(shù),輸出張量為20×20×256,層間權(quán)值數(shù)量為20 992 個。第二個卷積層(PrimaryCaps)中,將8 個卷積單元封裝成為一個膠囊單元,每次卷積操作會產(chǎn)生一個6×6×1×32 的張量,一個膠囊單元即產(chǎn)生了長度為8 的6×6×8×32 的張量,該卷積層參數(shù)數(shù)量為5 308 672個。第三層(DigitCaps)的輸入為第二層輸出的向量,共6×6×32 個維度為8 的向量,使用動態(tài)路由算法預(yù)測計算,即第i層共有1 152 個膠囊單元,第三層有10 個標(biāo)準(zhǔn)的膠囊單元,每個單元的輸出向量包含16 個元素,有1 152×10 個耦合系數(shù)cij,加權(quán)求和后有10 個16×1 的輸入向量,將該向量輸入到Squashing函數(shù)后得到最終的輸出向量vj,第三層網(wǎng)絡(luò)共有5 537 024 個參數(shù)。

圖3 膠囊網(wǎng)絡(luò)模型結(jié)構(gòu)圖
構(gòu)建損失函數(shù),使用反向傳播更新所需參數(shù),采用Margin loss 損失函數(shù)表達(dá)式如式(4)所示:
其中,c是分類類別,Tc是分類指示函數(shù),c存在為1,c不存在為0,m+為上邊界,m-為下邊界,vc的模即向量的L2距離。使用全連接層對向量進(jìn)行重構(gòu),利用預(yù)測的類別重新構(gòu)建出該類別代表的實際圖像,第三層的輸出向量被送至包含三個全連接層的解碼器中,結(jié)合損失函數(shù)計算并重構(gòu)圖像。
文中的實驗環(huán)境如表1 所示。該實驗的實驗數(shù)據(jù)來自互聯(lián)網(wǎng)中捕獲的惡意軟件以及Linux 系統(tǒng)的系統(tǒng)軟件,數(shù)據(jù)量為10 000 個樣本數(shù)據(jù),惡意與非惡意樣本數(shù)據(jù)均為5 000個,每種樣本中4 000 個為訓(xùn)練集,1 000 個用作測試集。

表1 實驗環(huán)境
實驗流程如圖4 所示,首次提取數(shù)據(jù)中的系統(tǒng)調(diào)用序列,對其進(jìn)行數(shù)據(jù)預(yù)處理,包含序列化與反序列化、篩選刪除、數(shù)據(jù)格式規(guī)范化等操作,然后進(jìn)行特征的可視化處理,即將系統(tǒng)調(diào)用特征圖像化,將圖像數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。

圖4 實驗流程圖
另外,編程實現(xiàn)膠囊網(wǎng)絡(luò)模型,使用訓(xùn)練數(shù)據(jù)訓(xùn)練模型,測試數(shù)據(jù)測試模型分類效果,過程中記錄準(zhǔn)確率、損失率、混淆矩陣等數(shù)據(jù)結(jié)果。
混淆矩陣中包含評估分類算法效果的基本指標(biāo)[16-20],包括真正例(TP)、假正例(FP)、真負(fù)例(TN)、假負(fù)例(FN)。根據(jù)基本指標(biāo)計算出更能表達(dá)分類器效果的指標(biāo)精確率、召回率、準(zhǔn)確率和F1值,具體計算公式及含義如表2 所示。

表2 評價指標(biāo)公式
選用表2 中的評價指標(biāo)作為該實驗結(jié)果的評測指標(biāo),此時根據(jù)分類算法基本指標(biāo)計算的精確率、召回率、準(zhǔn)確率和F1 值如表3 所示,準(zhǔn)確率可達(dá)到99.8%,證明該方法可以對系統(tǒng)調(diào)用數(shù)據(jù)進(jìn)行有效的特征提取,并在分類準(zhǔn)確度上有較好效果。

表3 模型評價指標(biāo)
文中提出了一種基于Linux 系統(tǒng)調(diào)用序列的惡意軟件檢測技術(shù),首先構(gòu)建惡意軟件和良性軟件系統(tǒng)調(diào)用序列的數(shù)據(jù)集,將系統(tǒng)調(diào)用序列數(shù)據(jù)進(jìn)行過濾并分割為可以表征軟件行為的子序列,然后將系統(tǒng)調(diào)用序列特征數(shù)據(jù)映射到可以攜帶大量信息的RGBA 圖像文件中,使用所得訓(xùn)練數(shù)據(jù)對膠囊網(wǎng)絡(luò)進(jìn)行訓(xùn)練,對網(wǎng)絡(luò)模型進(jìn)行調(diào)參,最終在測試集上取得了較高的檢測準(zhǔn)確率。綜合實驗數(shù)據(jù)表明,該方法具有較高的準(zhǔn)確率,可以有效對Linux 惡意軟件進(jìn)行分類,模型達(dá)到了良好的指標(biāo),有效解決了所提出的問題和需求。隨著互聯(lián)網(wǎng)的迅猛發(fā)展,各種APT攻擊事件頻發(fā),惡意軟件的數(shù)量和規(guī)模持續(xù)增長,未來網(wǎng)絡(luò)安全業(yè)界勢必面臨更大的挑戰(zhàn),為國家安全帶來了嚴(yán)重威脅,為了維護用戶的權(quán)益和信息安全,勢必需要精度更高、速度更快的惡意軟件識別技術(shù),因此該文提出的方法有重要的意義,需要未來持續(xù)性、更深入的研究和探索。