楊春雨,徐 洋,張思聰,李小劍
貴州師范大學(xué) 貴州省信息與計算科學(xué)重點實驗室,貴陽 550001
國家互聯(lián)網(wǎng)應(yīng)急中心2020 年第8 期網(wǎng)絡(luò)安全信息與動態(tài)周報指出,境內(nèi)感染網(wǎng)絡(luò)病毒的主機(jī)數(shù)量達(dá)到了58.6 萬,被木馬或僵尸程序控制的主機(jī)約52.7 萬個,感染飛客蠕蟲的主機(jī)約5.9 萬,木馬和僵尸程序較上周增長了3.4%,飛客蠕蟲較上周增長了4.5%[1]。隨著互聯(lián)網(wǎng)的發(fā)展,快速增長的惡意軟件無疑給國家和社會帶來了巨大的經(jīng)濟(jì)損失,有必要提出更加精準(zhǔn)快速的分析方法。
傳統(tǒng)的惡意軟件分析方法分為靜態(tài)方法和動態(tài)方法[2]。靜態(tài)方法主要是對惡意軟件和其反編譯文件提取的靜態(tài)特征進(jìn)行分析,但是僅僅采用單一類型的特征容易受到代碼混淆或加殼等技術(shù)的影響,對多種特征融合和降維,然后使用分類算法對惡意軟件進(jìn)行分類往往能夠獲得更好的效果。動態(tài)分析方法主要是在虛擬環(huán)境中執(zhí)行惡意軟件樣本,記錄惡意軟件的行為特征,如系統(tǒng)調(diào)用名稱、上下文參數(shù)、環(huán)境變量等[3],然后基于動態(tài)行為特征進(jìn)行分類,常用的惡意軟件動態(tài)分析平臺有Cuckoo Sandbox。惡意軟件檢測是一個二分類問題[4],而惡意軟件分類是根據(jù)不同惡意軟件家族的相似特征來識別出樣本,是一個多分類問題。
2010年,Conti等[5]首次提出將二進(jìn)制文件轉(zhuǎn)化為灰度圖像。2011年,Nataraj等[6]提出將惡意軟件轉(zhuǎn)化成灰度圖像,利用同一惡意軟件家族的灰度圖具有紋理的相似性,提取灰度圖的Gist 特征,使用KNN 作為分類器,在Malimg數(shù)據(jù)集上取得了98%的準(zhǔn)確率。
2012 年,白金榮等[7]提取了惡意軟件的結(jié)構(gòu)特征,通過Wrapper算法對特征進(jìn)行篩選,對惡意軟件檢測達(dá)到了99%的準(zhǔn)確率。
2016年,任卓君等[8]通過將惡意軟件轉(zhuǎn)化成黃、綠雙色通道的位圖,將位圖轉(zhuǎn)化為像素歸一圖,使用Jaccard距離度量像素歸一圖的相似性,使用KNN作為分類器,在353個樣本上達(dá)到了95.18%的準(zhǔn)確率。
2019年,郎大鵬等[9]通過將惡意軟件和Asm文件表示成灰度圖的形式,提取灰度圖的灰階共生矩陣(Graylevel Co-occurrence Matrix)[10]和Gist 特征,并融合Opcode 3-gram序列特征,使用RF作為分類器,在2 625個樣本上取得了85%的準(zhǔn)確率。
2019年,張景蓮等[11]提取惡意軟件的灰度圖前2 500個像素點的值和圖像顏色直方圖,再融合Opcode 2-gram序列特征,在Kaggle 惡意軟件數(shù)據(jù)集上達(dá)到了99.56%的分類準(zhǔn)確率。
2020年,鄭銳等[12]同時設(shè)置25個安裝64位Windows7的虛擬機(jī)執(zhí)行惡意軟件樣本,通過Cuckoo Sandbox 平臺收集樣本的API 調(diào)用序列,使用雙向LSTM 模型對6 681 個惡意軟件樣本進(jìn)行分類,取得了99.28%的準(zhǔn)確率。
通過上述可知,利用可視化技術(shù)提取惡意軟件的特征,再融合其他語義特征分類取得了很好的效果。但是灰度圖和n-gram 的特征維度比較高,以字節(jié)的2-gram模型提取為例,每個字節(jié)的范圍是0~255,提取文件字節(jié)的2-gram 序列將會有65 536 維的特征,而一個2 MB的惡意軟件轉(zhuǎn)化成的灰度圖大約具有2 097 152個像素點。動態(tài)分析耗費較長時間和大量硬件資源,且虛擬環(huán)境配置不當(dāng)會導(dǎo)致缺少.dll 文件等錯誤,從而使惡意軟件樣本不能執(zhí)行,收集不到有用信息。靜態(tài)分析可以作為安全引擎的重要保護(hù)層[13],在不執(zhí)行惡意樣本的前提下提前預(yù)測惡意軟件所屬家族。因此針對現(xiàn)有惡意軟件分類方法融合的靜態(tài)特征維度高、特征提取耗時、Boosting 算法對大量高維特征樣本串行訓(xùn)練時間長的問題,本文提出一種基于靜態(tài)特征融合的惡意軟件分類方法。利用相同惡意軟件家族的樣本具有數(shù)據(jù)、代碼、結(jié)構(gòu)的相似性,提取原文件和Lst文件的灰度圖特征、結(jié)構(gòu)特征、Lst 文件內(nèi)容特征,并將特征進(jìn)行融合和分類。通過融合多類特征分類,消除代碼混淆對單一特征分類的影響,同時對訓(xùn)練集采用GOSS 采樣和LightGBM 分類器訓(xùn)練,大幅減少訓(xùn)練時間。
同一家族的惡意軟件代碼存在較高的復(fù)用性,通過復(fù)用代碼往往能夠快速地生成新的惡意軟件,因此將同一家族惡意軟件轉(zhuǎn)化為灰度圖時,灰度圖存在著較高的相似性。Kaggle 惡意軟件分類競賽冠軍[14]提取Asm 文件前800 個像素作為一種融合特征對惡意軟件進(jìn)行分類,但是結(jié)果不具有可解釋性。在采用惡意軟件灰度圖像素點的值作為特征時存在的問題是樣本轉(zhuǎn)化為灰度圖時會存在十幾萬到幾百萬個像素點,從中選擇對分類有用的特征比較耗時。
將文件轉(zhuǎn)化成灰度圖的過程如圖1 所示。本文使用IDA Pro 對樣本反編譯輸出Lst 文件,將原文件和反編譯文件以二進(jìn)制形式打開,以8位二進(jìn)制數(shù)為一個無符號整數(shù)作為一個像素點,像素點的值的范圍是0~255,參考表1設(shè)定圖像初始寬度,圖像高度根據(jù)樣本大小設(shè)定,將樣本轉(zhuǎn)化成灰度圖。通過合適的插值方法對灰度圖進(jìn)行下采樣修改圖像的尺寸,本文采用了32×32、48×48,64v64 三種圖像尺寸,保留了惡意樣本的全局信息的同時達(dá)到了降維的效果。常用的插值算法有最鄰近、雙線性、雙三次、Lanczos。Lanczos算法較其余三類算法具有速度快,效果好的優(yōu)點。因此采用Lanczos算法進(jìn)行下采樣,然后提取灰度圖全部像素點的值作為特征。圖2(a)和圖2(b)為一個蠕蟲家族惡意樣本的Lst文件和EXE文件轉(zhuǎn)化成的灰度圖像。
圖1 灰度圖轉(zhuǎn)化過程Fig.1 Process of converting to grayscale
表1 圖像的初始寬度和樣本大小的關(guān)系Table 1 Mapping of sample size to initial width of image
圖2 兩種文件的灰度圖Fig.2 Grayscale images of two types of files
PE(Portable Executable)文件是Windows操作系統(tǒng)使用的可執(zhí)行文件,當(dāng)其載入內(nèi)存執(zhí)行時具有固定的數(shù)據(jù)結(jié)構(gòu),常見的EXE、DLL、OCX、SYS、COM 文件都是PE文件。當(dāng)PE文件載入內(nèi)存后,稱其為映像(IMAGE),圖3 為PE 文件的結(jié)構(gòu)。MS-DOS 頭用來兼容MS-DOS操作系統(tǒng),NT頭包含PE文件的主要信息,節(jié)表是PE文件節(jié)信息,節(jié)表后面是包含了文件數(shù)據(jù)和代碼以及資源的節(jié)。
圖3 PE文件的結(jié)構(gòu)Fig.3 Structure of PE file
同一惡意軟件家族代碼復(fù)用導(dǎo)致惡意軟件作者或團(tuán)隊編碼具有編碼相似性[15],因此當(dāng)同一家族惡意軟件載入內(nèi)存執(zhí)行時其結(jié)構(gòu)信息和數(shù)據(jù)也應(yīng)該具有一定的相似性,因此本文將EXE文件以PE文件格式解析,提取樣本的文本、全局、頭部、導(dǎo)入導(dǎo)出表、節(jié)特征,特征提取通過LIEF實現(xiàn)。此外還提取了文件的字節(jié)直方圖和字節(jié)-熵直方圖[16]。
文本特征:PE文件中的文本表示了PE文件運行時候的信息。且文本可以較為直觀地反映出PE文件的行為[17]。本文統(tǒng)計長度大于5的由可打印字符組成的字符串的個數(shù)、字符串的平均長度以及可打印字符的分布和熵??纱蛴∽址侵窤SCII 碼范圍在0x20~0x7E 之間的字符。統(tǒng)計含有“C:”(系統(tǒng)路徑)、“http://”(URL 請求)、“https://”“HKEY_”(注冊表)有特殊含義的字符串個數(shù)。
全局特征:統(tǒng)計文件的映像大小,符號表中符號的個數(shù),以及是否包含線程局部存儲(Thread Local Storage)、debug 信息、資源文件和重定向。TLS 的主要作用是引入程序執(zhí)行前調(diào)用的回調(diào)函數(shù)。Trojan 對TLS 的使用率高達(dá)47.3%[18]。
頭部特征:提取并使用列表存儲IMAGE_FILE_HEADERS 中的文件屬性(如分離了debug 信息并存儲在單獨文件中的樣本具有IMAGE_FILE_DEBUG_STRIPPED屬性、文件是否可寫可執(zhí)行屬性等)、子系統(tǒng)名稱。提取并使用列表存儲IMAGE_OPTIONAL_HEADERS中的導(dǎo)入DLL屬性,統(tǒng)計映像、鏈接器、子系統(tǒng)、操作系統(tǒng)的版本號、代碼段大小和所有頭部大小。
導(dǎo)入導(dǎo)出表:統(tǒng)計導(dǎo)入導(dǎo)出表個數(shù),對于導(dǎo)入的DLL文件和導(dǎo)入函數(shù)名用冒號連接并使用列表存儲,如advapi32.dll:AdjustTokenPrivileges表示使用了advapi32.dll中的AdjustTokenPrivileges 函數(shù),該函數(shù)常用來啟動或禁用特定訪問權(quán)限,執(zhí)行進(jìn)程注入的惡意軟件會調(diào)用該函數(shù)獲得額外權(quán)限。
節(jié)特征:使用列表分別存儲樣本每個節(jié)的名稱和節(jié)的物理大小、映像大小、熵的對應(yīng)關(guān)系,如列表1為([‘.text’,19 456),(‘.rsrc’,512)],列表2為([‘.text’,20 480),(‘.rsrc’,8 192)],列表3為([‘.text’,5.476 359 828 917 223),(‘.rsrc’,1.434 135 665 302 386 2)],并使用列表存儲程序入口點節(jié)的名稱和其屬性的對應(yīng)關(guān)系。統(tǒng)計可執(zhí)行節(jié)、可寫節(jié)、異常節(jié)的個數(shù),異常節(jié)包含物理大小為0 的節(jié)和名字為空的節(jié)。Virus可寫節(jié)的個數(shù)占其節(jié)數(shù)高達(dá)75.6%,而Backdoor的異常命名節(jié)數(shù)通常占其節(jié)數(shù)的82%[18]。
Hash Trick:在自然語言處理中Hashing Trick是一種快速且節(jié)省空間的文本向量化和特征降維方法。在每一種類型特征提取的過程中,對于以列表或者文本形式出現(xiàn)的特征,如文件的屬性、導(dǎo)入導(dǎo)出表、節(jié)特征,使用Hash Trick算法將其轉(zhuǎn)換成維度固定的特征向量。
字節(jié)直方圖直接體現(xiàn)了每個惡意軟件的字節(jié)分布。字節(jié)直方圖計算公式:
其中,K表示字節(jié)的十進(jìn)制值,N表示文件的字節(jié)總數(shù),nk表示字節(jié)十進(jìn)制值為K的個數(shù)。
本文實現(xiàn)16×16的字節(jié)-熵直方圖。字節(jié)-熵直方圖通過滑動窗口實現(xiàn),滑動窗口大小為2 048 Byte,步長為1 024 Byte。首先計算窗口內(nèi)字節(jié)的熵,再將熵值乘二取整,使熵的值落在0 到15,最后將字節(jié)的值整除4,計算每個值的分布,并將字節(jié)分布累加到指定的熵值下。熵的計算公式:
其中,p(x)表示窗口內(nèi)每個字節(jié)的概率。
字節(jié)-熵直方圖實現(xiàn)的偽代碼如下:
微軟的Kaggle惡意軟件數(shù)據(jù)集的原始文件是Bytes文件,且該數(shù)據(jù)集的Asm文件包含了節(jié)信息,而本文采用的Virustotal數(shù)據(jù)集的原始文件為EXE文件,IDA Pro反編譯產(chǎn)生的Asm文件不包含節(jié)信息,因此在本文數(shù)據(jù)集上選擇反編譯輸出Lst文件,在Asm文件的基礎(chǔ)上包含了節(jié)信息。
如圖4,對于反編譯獲得的Lst 文件,從每一行前綴能知曉匯編代碼屬于哪一個節(jié),提取部分節(jié)的頻數(shù)和關(guān)鍵字的頻數(shù)。.text或者.CODE代表了代碼節(jié),.bss與.data節(jié)毗鄰,其中包含的是初始化為0的變量或者未初始化的變量,.rsrc節(jié)包含了資源數(shù)據(jù),.tls是線程本地存儲節(jié),關(guān)鍵字std::表示使用了C++中的輸入輸出標(biāo)準(zhǔn),:dword表示定義為雙字的標(biāo)識符。通用寄存器可用于傳送和暫存數(shù)據(jù),也可參與算術(shù)邏輯運算,并保存運算結(jié)果,本文提取每個Lst 文件中的32 位通用寄存器的頻數(shù)。Opcode 通常分為三類[19]:數(shù)據(jù)移動、算術(shù)/邏輯和控制流類型,從其中篩選出比較重要的Opcode,并統(tǒng)計其頻數(shù)。表2 所示為32 位通用寄存器及本文統(tǒng)計頻數(shù)的Opcode。
圖4 Lst文件內(nèi)容Fig.4 Contents of Lst file
表2 通用寄存器和OpcodeTable 2 Opcode and general register
為了消除不同類型特征之間量綱的影響,提高數(shù)據(jù)之間的可比性,需要對特征進(jìn)行標(biāo)準(zhǔn)化處理,常用的標(biāo)準(zhǔn)化方法有Min-max標(biāo)準(zhǔn)化、Z-score標(biāo)準(zhǔn)化。本文采用Z-score標(biāo)準(zhǔn)化方法將各類型特征轉(zhuǎn)化到同一量綱下。
標(biāo)準(zhǔn)化的過程如下:
其中X為訓(xùn)練集的特征矩陣,每一行是一個樣本的特征,每一列是相同類型特征在不同樣本的值,n為特征個數(shù),m為特征維數(shù),μj、σj是訓(xùn)練集某一維度特征的均值和標(biāo)準(zhǔn)差。首先求得訓(xùn)練集每一維特征的μ和σ并對訓(xùn)練集標(biāo)準(zhǔn)化,為減小誤差使用訓(xùn)練集的μ和σ參數(shù)為測試集的每一維度的特征做標(biāo)準(zhǔn)化。
圖5 為基于靜態(tài)特征融合的惡意軟件分類方法的分類模型,分為模型的訓(xùn)練階段和測試階段。訓(xùn)練階段訓(xùn)練的分類器是LightGBM,LightGBM會對輸入的特征進(jìn)行預(yù)處理后再進(jìn)行訓(xùn)練。
圖5 分類模型Fig.5 Classification model
圖6 為特征提取和處理流程,分別從原文件和Lst文件中提取四類特征,再選擇不同類型的特征融合,最后進(jìn)行標(biāo)準(zhǔn)化,為減小誤差測試集的標(biāo)準(zhǔn)化使用訓(xùn)練集的均值和標(biāo)準(zhǔn)差參數(shù)。
圖6 特征提取和處理流程Fig.6 Feature extraction and processing flow
惡意樣本的每一種類型的特征使用樣本的ID(樣本的SHA256值)標(biāo)識。選擇特征融合和標(biāo)準(zhǔn)化的偽代碼如下:
LightGBM[20]和XGBoost[21]都是對梯度提升決策樹(Gradient Boosting Decision Tree)的高效實現(xiàn)。Light-GBM 引入Histogram 算法對特征進(jìn)行離散化降低內(nèi)存使用、GOSS 算法減少訓(xùn)練的樣本數(shù)、EFB 算法減少特征維數(shù),并具有支持GPU 并行學(xué)習(xí)的優(yōu)點。在處理大量樣本和高維特征時,計算速度和內(nèi)存消耗明顯優(yōu)于XGBoost。XGBoost和GBDT算法的基分類器使用分類與回歸樹(Classification And Regression Tree)中的回歸樹,在分類問題中它輸出的是樣本屬于每一類的概率,其生長策略是如圖7 的按層生長(level-wise)策略,而LightGBM 采用更為高效的如圖8 的按葉子生長(leaf-wise)策略,減少了很多沒有必要的分裂開銷。
圖7 按層生長策略Fig.7 Level-wise learning
圖8 按葉子生長策略Fig.8 Leaf-wise learning
直方圖(Histogram)算法是一種把連續(xù)浮點型特征值離散化的算法,如把區(qū)間[0,0.3)之間的值離散化為0,[0.3,0.8)之間的值離散化為1。然后就可以統(tǒng)計區(qū)間內(nèi)的樣本個數(shù)和樣本的梯度之和,再根據(jù)直方圖尋找特征的最佳分裂點,減少訓(xùn)練時間。
單邊梯度采樣(Gradient-based One Side Sampling),是一種訓(xùn)練集采樣方法,啟用后每次迭代之前,對所有樣本采樣,計算每個樣本的梯度絕對值并排序,設(shè)定一個比例采樣梯度前a%大的樣本組成集合A,為了使數(shù)據(jù)均衡,從剩余的小梯度樣本中隨機(jī)提取b%的樣本組成集合B,然后使用集合A?B進(jìn)行訓(xùn)練,對于小梯度樣本在計算增益的時候賦予其(1-a)/b的權(quán)重。回歸樹的分裂基于信息增益,而信息增益使用分裂后的方差增益衡量[20],方差增益公式是:
其中,j是使用的分裂特征,d是樣本特征的分裂點,n是A?B的樣本數(shù),xi是樣本,Al是分裂的左子節(jié)點的大梯度樣本,Bl是分裂的左子節(jié)點的小梯度樣本,Ar和Br為分裂的右子節(jié)點的大、小梯度樣本,gi是樣本梯度,是分裂的左、右節(jié)點樣本數(shù)。
因此可以設(shè)置a和b的值調(diào)整對訓(xùn)練集大、小梯度樣本抽樣的比例,在保證模型精度的情況下使得每次計算方差增益的時候減少計算次數(shù),從而減少訓(xùn)練時間。
互斥特征捆綁(Exclusive Feature Bundling),本文所提取的特征存在互斥特征,即多個特征之間存在只有一個特征為非0的情況。如特征A的取值是[0,5),特征B 的取值是[0,20)且A 和B 互斥,則將B 的值加5 使其范圍落到[5,25),然后合并特征A和特征B形成特征C,C的范圍是[0,30),當(dāng)C取值為10時等價于B取值為5。
本文對LightGBM 進(jìn)行訓(xùn)練時,會提前設(shè)定a和b的值,然后LightGBM 會對圖6 模型輸出的特征進(jìn)行處理。首先啟用GOSS 算法,計算并提取梯度前a%大的樣本作為本次訓(xùn)練的樣本,并從剩余樣本提取b%比例的小梯度樣本加入訓(xùn)練樣本,這一步主要是減少訓(xùn)練的樣本數(shù)。然后使用EFB 算法合并互斥的特征減少特征的維數(shù),這一步能夠有效減少構(gòu)建直方圖特征的維度。最后使用Histogram算法將連續(xù)的浮點數(shù)特征在多個區(qū)間離散化,特征離散化的好處是可以減少對特征分裂點的尋找時間,使得尋找特征分裂點的開銷從原來的需要遍歷所有特征值減少為只需要遍歷離散值。
本文的實驗是在CPU 主頻為2.6 GHz 的Intel i5-3230M,顯卡為顯存2 GB的NVIDIA GeForce 710M,內(nèi)存為8 GB的Ubuntu 18.04.3 LTS系統(tǒng)上實現(xiàn)的。
實驗的數(shù)據(jù)集來源為Virustotal 學(xué)者數(shù)據(jù)集。為2019 年1 月至2019 年5 月收集的32 位Windows 平臺下的EXE惡意軟件樣本,一共35 552個,采用卡巴斯基命名規(guī)則為樣本標(biāo)記。篩選出9類惡意軟件家族的15 887個樣本,分別是廣告(Adware)、后門(Backdoor)、風(fēng)險工具(Risktool)、木馬(Trojan)、病毒(Virus)、蠕蟲(Worm)。其中木馬又可以分為四個子類,分別是Trojan-Dropper、Trojan-PSW、Trojan-Ransom、Trojan-Spy。表3所示為每一種上述惡意軟件的數(shù)量分布。訓(xùn)練集和測試集的比例為7∶3,劃分時設(shè)置stratify 參數(shù),使訓(xùn)練集和測試集中的各個家族之間數(shù)量的比例保持不變。
表3 惡意軟件分布Table 3 Distribution of malware
采取宏平均精確率(Macro-avg(Precision))、宏平均召回率(Macro-avg(Recall))、宏平均F1-scoreMacroavg(F1-score)、準(zhǔn)確率Accuracy作為評價指標(biāo)。
其中:
TPn(True Positive)代表正確預(yù)測的正樣例數(shù);FPn(False Positive)代表將負(fù)樣例錯分為正樣例數(shù);FNn(False Negative)代表將正樣例錯分為負(fù)樣例數(shù)。
本文一共選取四類特征,分別是原始樣本轉(zhuǎn)化為灰度圖和反編譯的Lst 文件轉(zhuǎn)化為灰度圖的像素點特征、提取的結(jié)構(gòu)特征、從Lst文件中提取的特征。xx_xx_File和xx_xx_Lst 分別表示原文件和Lst 文件的某個尺寸的灰度圖,Stru_fea 表示結(jié)構(gòu)特征,Lst_fea 表示從Lst 文件提取的特征。首先對這幾個特征使用不啟用GOSS 的LightGBM 進(jìn)行分類,選出灰度圖中效果最好的兩種尺寸的圖像,再從四類特征中選兩種或者三種特征融合分類,最后查看所有特征融合的分類效果。表4是單一特征下的分類結(jié)果,可以看出原文件64×64 尺寸下的F1-score值和準(zhǔn)確率高于其他尺寸的值,Lst文件48×48尺寸下的F1-score值和準(zhǔn)確率高于其他尺寸的值,分類效果最好的是結(jié)構(gòu)特征,F(xiàn)1-score達(dá)到了89.43%,準(zhǔn)確率達(dá)到了96.58%。在單一特征下對比了Opcoden-gram特征、Gist特征、灰階共生矩陣(Glcm)特征[10],結(jié)果顯示Opcoden-gram 特征的F1-score 在62%左右,準(zhǔn)確率在77%左右,且本文使用的灰度圖像素特征分類的F1-score(除64_64_File外)和準(zhǔn)確率優(yōu)于Gist特征和Glcm特征。表5可以看出融合原文件灰度圖特征的精確率較高,而融合了Lst 灰度圖特征的召回率較高,效果最好的是結(jié)構(gòu)特征和Lst特征的融合,F(xiàn)1-Score達(dá)到90.16%,準(zhǔn)確率達(dá)到96.92%。從表6可以看出Lst灰度圖融合結(jié)構(gòu)特征和Lst特征取得了最好的效果,F(xiàn)1-Score達(dá)到90.45%,準(zhǔn)確率達(dá)到97%。表7對比了啟用GOSS采樣的LightGBM算法,并設(shè)置a值為0.3,b值為0.19,發(fā)現(xiàn)在F1-score損失0.03%的情況下節(jié)省了29%的訓(xùn)練時間。
表4 單一特征下的分類結(jié)果Table 4 Classification results under single feature
表5 兩類特征下的分類結(jié)果Table 5 Classification results under two types of features
表6 三類或四類特征下的分類結(jié)果Table 6 Classification results under three or four types of features
表7 啟用GOSS的結(jié)果(n_estimators=500)Table 7 Result of enabling GOSS(n_estimators=500)
本文通過對四類特征進(jìn)行融合分類實驗,在Lst 灰度圖融合結(jié)構(gòu)特征和Lst 特征下取得了最好的效果,啟用GOSS采樣技術(shù)減少了29%的訓(xùn)練時間。圖9所示為分類的精確率矩陣,可知每一類的分類精確率都超過了93.5%,宏平均精確率達(dá)到了96.85%。圖10所示為分類的召回率矩陣,宏平均召回率達(dá)到了86.29%。Trojan-PSW的召回率只有50%,初步確定是由于樣本數(shù)量不均衡和這類樣本的數(shù)目太少使模型產(chǎn)生了欠擬合。
圖9 48_48_Lst+Lst_fea+Stru_fea精確率矩陣Fig.9 Precision matrix of 48_48_Lst+Lst_fea+Stru_fea
圖10 48_48_Lst+Lst_fea+Stru_fea召回率矩陣Fig.10 Recall matrix of 48_48_Lst+Lst_fea+Stru_fea
本文比較了GOSS(LightGBM)和另外兩種Boosting算法(XGBoost、GBDT)以及兩種深度學(xué)習(xí)算法(CNN、GRU)。表8結(jié)果顯示GOSS(LightGBM)和XGBoost在F1-score 和準(zhǔn)確率取得了最好效果,F(xiàn)1-score 分別為90.42%和89.41%,且在對比算法中GOSS(LightGBM)所用訓(xùn)練時間最短,XGBoost 訓(xùn)練時間是GOSS(Light-GBM)的4 倍且占用內(nèi)存高于GOSS(LightGBM),而GBDT 訓(xùn)練時間是其11 倍。在深度學(xué)習(xí)中分類效果最好的是GRU,F(xiàn)1-score達(dá)到85.45%,準(zhǔn)確率達(dá)到95.12%,但是訓(xùn)練時間超過了5 個小時。本文還對比了其他機(jī)器學(xué)習(xí)算法(RF、KNN、LR、SVM、MLP),相較于其他機(jī)器學(xué)習(xí)算法GOSS(LightGBM)的訓(xùn)練時間和內(nèi)存消耗不占優(yōu),但是表9顯示GOSS(LightGBM)除了精確率比RF 低0.35%外其他指標(biāo)均占優(yōu)。最后對本文的數(shù)據(jù)集提取了文獻(xiàn)[9]和文獻(xiàn)[11]所用的特征,使用Lst 文件代替Asm 文件,并使用LightGBM 分類,表10 結(jié)果顯示本文特征分類效果優(yōu)于文獻(xiàn)[9]和文獻(xiàn)[11]使用的特征,且提取特征的維數(shù)低于另外兩種方法提取的特征維數(shù)。
表8 GOSS(LightGBM)算法和其他Boosting算法和深度學(xué)習(xí)算法對比(n_estimators=500,epochs=100)Table 8 Comparison of GOSS(LightGBM)algorithm and other Boosting algorithms and deep learning algorithms(n_estimators=500,epochs=100)
表9 GOSS(LightGBM)和其他分類算法結(jié)果對比Table 9 Comparison of GOSS(LightGBM)and other classification algorithms
表10 LightGBM在不同融合特征下的分類結(jié)果Table 10 Classification results of LightGBM under different fusion features
本文提取了惡意軟件和其反編譯的Lst文件轉(zhuǎn)化成灰度圖的像素點特征,通過插值算法將圖片縮小,保留了全局特征的同時實現(xiàn)了像素特征的降維,并提取了原文件的結(jié)構(gòu)特征和Lst文件特征并對特征進(jìn)行融合。分類器選擇了LightGBM,通過啟用GOSS采樣算法在F1-score 損失0.03%的情況下節(jié)省了29%的訓(xùn)練時間。實驗證明本文提取的融合特征比融合Opcode 2-gram 或3-gram 的特征分類的F1-score 和準(zhǔn)確率更高。Light-GBM 比RF、KNN、LR、SVM、MLP 的F1-score 和準(zhǔn)確率更高,比XGBoost、GBDT、GRU、CNN 的F1-score 和準(zhǔn)確率更高,且訓(xùn)練時間更短。
可以看出Trojan-PSW 類不能有效的召回,初步確定是由于樣本數(shù)量不足所致。下一步準(zhǔn)備從其他數(shù)據(jù)集擴(kuò)充Trojan-PSW數(shù)量,增加該樣本特征的數(shù)量,進(jìn)一步檢驗?zāi)P偷挠行裕瑫r采用其他算法進(jìn)一步對本文所提取特征進(jìn)行處理,如使用TF-IDF 或信息增益指標(biāo)對特征進(jìn)行降維,保證模型分類效果的前提下進(jìn)一步加快訓(xùn)練速度。
本文所提取的特征不涉及n-gram 特征,特征提取和處理較n-gram 更加節(jié)省時間,可以部署到安全引擎前端,快速地對未知樣本進(jìn)行初步檢測。