丁建偉,陳周國,劉義銘
(中國電子科技集團(tuán)公司第三十研究所 保密通信重點實驗室,四川 成都 610041)
近年來,隨著云計算、大數(shù)據(jù)等技術(shù)的發(fā)展以及互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的不斷完善,大量的惡意計算機(jī)程序、應(yīng)用、可執(zhí)行代碼等[1](以下統(tǒng)稱“惡意程序”)在互聯(lián)網(wǎng)間大肆傳播,用以破壞宿主計算機(jī)、非法收集敏感數(shù)據(jù)、非授權(quán)登錄等,給個人、企業(yè)以及政府部門帶來了極大的困擾。
根據(jù)國家計算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心2018年發(fā)布的《互聯(lián)網(wǎng)網(wǎng)絡(luò)安全態(tài)勢綜述》,中國全年計算機(jī)惡意程序傳播次數(shù)日均達(dá) 500 萬余次。根據(jù)全球第二大市場研究機(jī)構(gòu)的調(diào)研報告,超過90%網(wǎng)絡(luò)安全事件都涉及惡意軟件的傳播和影響。以“永恒之藍(lán)”勒索軟件的惡意傳播影響分析,僅2018年因惡意軟件引起的全球經(jīng)濟(jì)損失超過4 000億美元。面對日益增長的惡意程序的威脅,學(xué)術(shù)界和產(chǎn)業(yè)界也開展了大量的惡意程序分析技術(shù)的研究和實踐。
當(dāng)前多數(shù)惡意程序分析方法是基于簽名特征的分析方法,通過搜索和匹配未知樣本中的特定模式、統(tǒng)計特征以及簽名特征等,實現(xiàn)惡意程序的分析檢測[2-3]。目前的反病毒軟件通過收集和分析大規(guī)模的惡意程序樣本的靜態(tài)特征,不斷更新自身的惡意程序特征庫,實現(xiàn)惡意程序的檢測與防御。但是,隨著惡意程序的動態(tài)快速增長,惡意程序分析中的網(wǎng)絡(luò)對抗也在不斷升級,惡意程序的新型變種呈現(xiàn)爆發(fā)式增長,傳統(tǒng)以靜態(tài)特征匹配為基礎(chǔ)的惡意程序分析方法受到極大的挑戰(zhàn)[4-7]。
(1)加密、加殼、混淆等反分析、反編譯的網(wǎng)絡(luò)對抗技術(shù)不斷發(fā)展,使得惡意程序的新型變種、多態(tài)越來越難以分析和檢測。
(2)主流的惡意程序分析的靜態(tài)特征以操作系統(tǒng)的系統(tǒng)調(diào)用行為和應(yīng)用程序接口行為為主,涉及更多底層的原始操作行為,不能有效描繪。
(3)惡意程序特征庫的建模和抽取以及惡意程序分析的方法的模型訓(xùn)練時間很長,對于新的惡意程序需要提取新的惡意程序特征用以檢測。
針對以上惡意程序分析存在的調(diào)整,惡意程序分析從底層的惡意程序的本質(zhì)特性出發(fā),惡意程序基因技術(shù)被提出,用以應(yīng)對惡意程序的動態(tài)快速增長。惡意程序基因受到生物基因技術(shù)的啟發(fā),從計算機(jī)程序體系結(jié)構(gòu)入手,構(gòu)建不同惡意程序行為的靜態(tài)元素構(gòu)成的惡意行為的動態(tài)特征表達(dá)。面對惡意程序底層的靜態(tài)元素如何形式化建模,成為后續(xù)惡意程序基因萃取的關(guān)鍵。本文提出了一種惡意程序基因形式化的方法,可以有效解決目前惡意程序基因分析中的相似度計算的難題,本文的主要貢獻(xiàn)有:(1)提出一種惡意程序基因的六元組形式化模型,能夠有效完整地表達(dá)惡意程序基因的語義和行為信息;(2)針對惡意程序基因的形式化模型,提出了一種惡意程序基因相似度度量的方法,能夠有效刻畫和計算不同惡意程序基因間的相似程度;(3)基于以上形式化的方法,提出了一種惡意程序的檢測方法,經(jīng)過樣本集合的對比測試,惡意程序基因的方法有更好的檢測分類結(jié)果。
生物基因是一段用于表達(dá)生物特性的脫氧核糖核苷酸分子(DNA)組合序列片段,其中DNA是四種基本的生物大分子。類比于生物基因,從惡意程序的底層匯編指令角度,惡意程序的單個匯編指令類比于生物的單個生物DNA;匯編指令的執(zhí)行序列類比于生物的DNA序列片段,用于語義表達(dá)惡意程序的行為或者功能。進(jìn)一步地,惡意程序基因,即惡意程序的執(zhí)行匯編指令序列的片段,對應(yīng)惡意程序的某種行為或者功能。
針對惡意程序的匯編指令、惡意程序匯編指令序列以及惡意程序基因,為了后續(xù)形式化描述的統(tǒng)一性,本文采用通用的符號約定。本文定義,惡意程序采用符號M表示,從匯編指令層級,一個惡意程序的執(zhí)行邏輯是由一組匯編指令序列組合完成的。一個匯編指令通過訪問和改變計算機(jī)的內(nèi)存和中央處理器(CPU)來完成相應(yīng)基本功能。本文采用符號M、C和I分別表示計算機(jī)所有可能的內(nèi)存狀態(tài)、所有可能的CPU狀態(tài)以及所有的匯編指令。特別地,每個匯編指令包含基本的操作數(shù)和操作碼,一個匯編指令的執(zhí)行語義可以看作是計算機(jī)狀態(tài)的變換映射σ,即
σ:I×M×C→I×M×C
惡意程序的執(zhí)行邏輯由一組匯編指令執(zhí)行序列來表達(dá)語義,即M={i1,…,in},其中每一個匯編指令代表一個計算機(jī)狀態(tài)遷移映射,即σP(il,ml,cl)=(il+1,ml+1,cl+1)。進(jìn)一步,計算機(jī)程序執(zhí)行的匯編指令集合是一個有限集合,本文針對惡意程序匯編指令集合標(biāo)示唯一的整數(shù)編號,采用符號1,…,I標(biāo)示。
進(jìn)一步地,每一個惡意程序M在執(zhí)行時對應(yīng)一個匯編指令序列,即M={i1,…,in},這個序列,本文類比為惡意程序的DNA序列。為了對比不同惡意程序的相似程度,需要度量不同惡意程序的DNA序列的相似度。類比生物基因,本文把匯編指令稱作惡意程序的DNA分子。為了有效度量惡意程序DNA序列相似度,本文針對匯編指令,即惡意程序的單個DNA分子進(jìn)行形式化建模。
計算兩個惡意程序DNA序列的相似度,首先需要確定DNA分子,即匯編指令間的相似度度量算法。本文采用符號ii表示第i(i=1,…,I)個惡意程序的DNA分子,利用六元組記錄一個匯編指令,即i=
根據(jù)匯編指令六元組
SimC=Similarity(
元素
表1 匯編指令六元組的形式化表示
SimB=Similarity(
SimS=Similarity(
根據(jù)匯編指令六元組
SimI=SimC×(λbSimB+λsSimS)
由于指令操作碼包含了最高程度的語義信息,因此SimC作為公式的乘法因子。同時,公式需要滿足如下要求:
λb+λs=1,1≥SimC≥0,1≥SimB≥0,1≥SimS≥0
SimIE滿足1≥SimIE≥0,描述了兩條匯編指令間的語義、行為和結(jié)構(gòu)的歸一化相似度。
惡意程序DNA序列,即匯編指令序列相似度度量算法采用雙序列比對算法原理,計算兩個匯編指令流對應(yīng)的抽象編碼序列的歸一化相似度。雙序列比對算法一般使用動態(tài)規(guī)劃方法,用來從兩個字符串或其他類似單元素序列中選出相似度最高的有序公共元素序列。
針對惡意程序DNA序列的相似度計算,假設(shè)有兩個長度分別為N1和N2的指令序列,指令序號下標(biāo)從1開始。其中M1=(i1,1,i1,2,…,i1,N1),M2=(i2,1,i2,2,…,i2,N2),定義序列相似度SimI(i,j)表示序列1的前i條匯編指令和序列2的前j條匯編指令的序列相似度,其計算公式如下:
SimIES(i,0)=0, 0
(1)
SimIES(0,j)=0, 0 (2) SimIES(i,j)= 0 0 (3) SimI(i,j)是對兩個惡意程序DNA序列的非歸一化全局序列相似度。為了對相似度進(jìn)行歸一化表示,并且能夠計算兩個惡意程序DNA序列的局部序列相似度。定義歸一化的局部子序列相似度SimI(i1,i2,j1,j2)用以表示局部子序列(i1,i1,…,i1,j1)和局部子序列(i2,i2,…,i2,j2)的歸一化相似度,其計算公式如下: cmpSimI(i1,i2,j1,j2)=SimI(i2,j2)-SimI(i1-1,j1-1) (4) MaxIESLen(i1,i2,j1,j2)=max(i2-i1+1,j2-j1+1) (5) (6) 其中,公式(4)計算了兩個局部序列的非歸一化相似度,公式(5)則選出了兩個局部序列中最長的長度,通過公式(6)計算的局部子序列相似度可以保證歸一化。要計算兩條指令序列的歸一化全局相似度,只需要計算SimI(1,N1,1,N2)即可。 根據(jù)SimI(i,j)計算公式可以繪制一個二維矩陣,i,j分別表示兩個序列中匯編指令的下標(biāo)。以N1=N2=3的兩個惡意程序DNA序列為例,繪制的二維矩陣如圖1所示。矩陣中每個單元格中,箭頭表示局部路徑繼承選擇方向,右下角的數(shù)值代表最大相似度SimI(i,j),淺灰格表示選定的子序列路徑,深灰格表示選定的i。以圖1為例,兩條匯編指令流的相似度為: 圖1 序列相似度比對矩陣示意圖 本文針對一個惡意程序樣本的樣本集合,可以通過提取每個惡意程序運行時對應(yīng)的匯編指令流序列i(即惡意程序DNA序列)。 一個惡意程序集合包含N個惡意程序樣本,每個惡意程序?qū)?yīng)一個惡意程序DNA序列。因此,該惡意程序樣本集合對應(yīng)一個惡意程序的DNA序列集合,表示為i∈IN×Q,其中表示有N個惡意程序DNA序列,每個DNA序列長度為Q,因為DNA序列長度是不定長度的,為了建模方便,統(tǒng)一為相同長度。 如圖2所示,根據(jù)惡意程序基因的定義,惡意程序基因是具有相同行為或者功能的惡意程序DNA序列片段。 圖2 惡意程序基因提取示意圖 針對每一類惡意程序DNA行為序列,目標(biāo)是提取每一類惡意程序DNA序列集合中K個相同的平凡子序列片段,即提取一個長度為L(L?Q)的惡意程序DNA序列片段,即惡意程序基因序列,表示為GK×L。不同長度的序列之間的距離采用如下公式計算: (7) 其中Mn,k表示第n個惡意程序DNA序列與第k個惡意程序基因的距離,J=:Q-L+1。因此對于惡意程序基因序列的提取,轉(zhuǎn)化成對于k個平凡子序列的計算,即: (8) 針對一組惡意程序的DNA序列組合,計算不同DNA序列之間的最長的平凡子序列(相同攻擊行為基因),本項目采用最優(yōu)化的方式,計算得到最優(yōu)的惡意程序基因信息,計算公式如下: (9) 計算Fn針對變量W的偏微分使其等于0,即: 通過計算具有相同功能或者行為的惡意程序的DNA序列中相同的DNA序列片段,用于語義表達(dá)攻擊行為,同時通過映射能夠定位具體的攻擊行為的匯編指令的位置、調(diào)用參數(shù)等,便于后續(xù)分析。 本文將惡意程序基因的提取方法應(yīng)用到惡意程序的分類,與現(xiàn)有主流方法的分類結(jié)果作對比。本文采用的數(shù)據(jù)樣本是惡意程序樣本集合,一共包含惡意程序1 014例,被分為8類族群。 在實驗中,本文采用了三種主流的分類方法作為基線對比方法: (1)HMM方法[8]:采用隱馬爾可夫模型作用于惡意程序樣本的系統(tǒng)調(diào)用圖上,利用識別惡意程序不同行為的系統(tǒng)調(diào)用子圖識別和檢測不同類型的惡意程序。 (2)N-GRAM方法[9]:采用N-GRAM方法作用于惡意程序樣本的系統(tǒng)調(diào)用圖,利用識別N-GRAM的系統(tǒng)調(diào)用關(guān)系圖,用以識別和檢測不同類型的惡意程序。 (3)DTW-SVM方法:采用動態(tài)時間游走(DTW)計算兩個惡意程序DNA序列的相似度;采用支持向量機(jī)分類方法識別與檢測不同類型的惡意程序樣本。 實驗采用交叉驗證,隨機(jī)抽取80%的惡意程序樣本用以訓(xùn)練,20%的惡意程序樣本用以測試,反復(fù)訓(xùn)練與測試100次,計算平均的準(zhǔn)確率(precision)、召回率(recall)以及F值(F-measure)用以評測方法,其中F值的計算是準(zhǔn)確率與召回率的調(diào)和平均數(shù),即: (10) 實驗結(jié)果如圖3所示,利用文本的MGeT方法在所有的評價參數(shù)上都取得了最優(yōu)的結(jié)果。 圖3 實驗結(jié)果 進(jìn)一步分析實驗結(jié)果,分別采取20%、40%、60%以及80%的惡意程序樣本數(shù)據(jù)規(guī)模,本文提出的惡意程序基因的形式化方法有較強(qiáng)的魯棒性,能夠提高惡意程序分類和檢測效率。 本文從惡意程序的底層匯編指令入手,借鑒生物基因的提取思路,從操作語義、行為語義、結(jié)構(gòu)語義三個維度形式化定義了單個匯編指令的形式化信息。進(jìn)一步,采用序列匹配的建模方法,將惡意程序基因的形式化轉(zhuǎn)化為惡意程序DNA序列的最平凡子序列的提取問題,通過剪枝的方法,實現(xiàn)不同行為或者功能的惡意程序基因的快速提取與形式化描述。通過實驗證明,利用惡意程序基因的手段,能夠很好地反映惡意程序的分類語義信息,提高惡意程序的識別效率。本文下一步的工作包括惡意程序基因的深度分類學(xué)習(xí)、惡意程序基因的語義映射、惡意程序追蹤分析等。2 惡意程序基因形式化
2.1 惡意程序集合形式化
2.2 惡意程序基因形式化問題描述
2.3 惡意程序基因形式化推導(dǎo)
3 實驗分析
3.1 對比方法
3.2 實驗結(jié)果分析
4 結(jié)論