楊波 張健 李煥洲 唐彰國 李智翔
摘要:為解決現(xiàn)有惡意代碼檢測方法存在的特征提取能力不足、檢測模型泛化性弱的問題,提出了一種基于Windows API調(diào)用序列的惡意代碼檢測方法.使用N-gram算法和TF-IDF算法提取序列的統(tǒng)計特征,采用Word2Vec模型提取語義特征,將統(tǒng)計特征和語義特征進行特征融合,作為API調(diào)用序列的特征.設(shè)計了基于Stacking的三層檢測模型,通過多個弱學習器構(gòu)成一個強學習器提高檢測模型性能.實驗結(jié)果表明,提出的特征提取方法可以獲得更關(guān)鍵的特征,設(shè)計的檢測模型的準確率、精確率、召回率均優(yōu)于單一模型且具有良好的泛化性,證明了檢測方法的有效性.
關(guān)鍵詞:惡意代碼檢測; API調(diào)用序列; 特征融合; 機器學習; 三層檢測模型
中圖分類號:TP309.5 文獻標志碼:A 文章編號:1001-8395(2023)05-0700-06
Windows操作系統(tǒng)一直是使用最廣泛的PC端操作系統(tǒng),在給人們的工作和生活帶來方便的同時,也受到許多針對Windows操作系統(tǒng)的惡意代碼的攻擊.傳統(tǒng)的惡意代碼檢測方法依賴大量的人工進行手動分析且速度較慢,面對未知病毒時無法及時更新其特征庫,導致難以檢測未知病毒.
針對以上問題,人們開始研究基于機器學習的惡意代碼檢測方法,此方法包括靜態(tài)檢測方法和動態(tài)檢測方法[1].靜態(tài)檢測方法通過對惡意代碼進行反編譯獲取文件字節(jié)碼操作碼等靜態(tài)特征進行檢測,具有流程簡便、執(zhí)行速度快的優(yōu)點.但對于經(jīng)過加殼、代碼混淆等操作的惡意程序,靜態(tài)分析很難獲取其源代碼相關(guān)信息,使得準確率較低.動態(tài)檢測方法通過將惡意代碼放置在沙箱等虛擬環(huán)境中運行,可以獲取惡意代碼運行中的Windows API(application programming interface)調(diào)用序列、網(wǎng)絡(luò)流量等動態(tài)特征進行檢測.API調(diào)用序列可以反映一個惡意代碼的實際運行情況,是惡意代碼檢測中非常重要的特征.Tang等[2]提出了一種API序列的特征提取方法,根據(jù)顏色映射規(guī)則、API的類別、出現(xiàn)次數(shù)生成特征圖像,采用卷積神經(jīng)網(wǎng)絡(luò)模型對圖像分類.雷凱[3]通過挖掘API調(diào)用序列數(shù)據(jù)信息,將API分為296類,對API進行One-hot編碼,使用Light GBM模型進行分類,取得了97.4%的準確率,但通過調(diào)用種類對API序列進行分類會明顯丟失API序列的時序特征.文獻[1-2]均在基于API調(diào)用序列的動態(tài)檢測技術(shù)上有所研究.這些研究成果可以很好應(yīng)對靜態(tài)檢測技術(shù)的缺點,但也存在特征提取能力不足,模型泛化能力差的缺點.
本文以惡意代碼的API調(diào)用序列為研究對象,提出了一種基于Windows API調(diào)用序列的惡意代碼檢測算法.主要貢獻如下:1) 提出一種新的基于API調(diào)用序列的惡意代碼特征提取方法,從統(tǒng)計特征與語義特征2個角度完成了對API序列的特征提取,可以從API序列中獲得更加豐富的特征;2) 設(shè)計基于Stacking集成策略的三層檢測模型,使用多個不同的弱學習器構(gòu)成一個強學習器,提升了檢測模型的性能.
1相關(guān)知識
1.1Windows API Windows API是Windows操作系統(tǒng)中內(nèi)置的功能函數(shù),是應(yīng)用程序與Windows操作系統(tǒng)交互的接口.例如,應(yīng)用程序如果想要實現(xiàn)獲取權(quán)限、刪除文件、修改注冊表等功能就需要調(diào)用API實現(xiàn).
惡意代碼通過調(diào)用一系列的API來實現(xiàn)某種惡意行為.惡意行為相似的惡意代碼往往調(diào)用的API也具有相似性.因此可以通過分析API調(diào)用序列來判斷樣本是惡意樣本還是良性樣本.
1.2N-gram算法 N-gram算法是一種基于統(tǒng)計語言模型的算法,被廣泛應(yīng)用于詞性標注、垃圾郵件分類、機器翻譯和語音識別中.它的基本思想是將文本里面的內(nèi)容按照詞語進行大小為N的滑動窗口操作,形成長度是N的詞語片段序列.其中N是指連續(xù)的N個詞語,N的取值任意.使用N-gram算法對API調(diào)用序列進行特征提取,將這個序列以N為大小進行窗口滑動操作得到長度為N的API序列.
N-gram算法可以較好地保留單個API之間的時序特性,但是當N越大時,特征維數(shù)會急劇增加,使得分類器的學習時間過長、模型復雜度過高.因此,在使用N-gram算法時,需要選擇合適的N值.
1.3TF-IDF算法 TF-IDF(term frequency-inverse document frequency,詞頻-逆向文件頻率)是一種統(tǒng)計方法,用以評估一段文字中一個詞語在一個語料庫中的重要程度.核心思想是:如果某個詞語在一段文字中出現(xiàn)的頻率高且在其他文字中出現(xiàn)的頻率很低,則認為此詞語具有很好的類別區(qū)分能力,適合用來分類.TF-IDF值的計算可表示為:TF-IDF=TF·IDF#.(1)TF表示某個API片段在樣本j中出現(xiàn)的頻率,定義為
1.4Word2Vec模型 Word2Vec是一種從大量文本語料中以無監(jiān)督方式學習語義知識的語言模型,被廣泛地應(yīng)用于自然語言處理中.Word2Vec模型本質(zhì)上是具有一個隱含層的神經(jīng)元網(wǎng)絡(luò),其特點是能夠?qū)卧~轉(zhuǎn)化為向量來表示,以便定量地去度量詞與詞之間的關(guān)系.
Word2Vec模型有CBOW[4]和Skip-Gram[5]兩種方式.CBOW方法用周圍詞預(yù)測中心詞,根據(jù)中心的預(yù)測結(jié)果,使用Gradient Descent調(diào)整周圍詞的向量.Skip-Gram方法用中心詞來預(yù)測周圍詞,根據(jù)周圍詞的預(yù)測結(jié)果,使用Gradient Descent調(diào)整中心詞的詞向量.CBOW對小型數(shù)據(jù)庫比較合適;Skip-Gram在大型語料中表現(xiàn)更好,語料庫中有大量低頻詞時Skip-Gram的學習更加細致.
1.5集成學習 集成學習就是將多個弱學習器按某種組合策略進行組合,構(gòu)成一個強學習器,發(fā)揮單個學習器各自的優(yōu)點,提高整體模型的分類性能[6].Sagi等[7]指出集成學習可以提高模型的性能的原因有以下3點:
1) 避免過擬合:當只有少量數(shù)據(jù)可用時,學習算法容易找到許多不同的假設(shè),這些假設(shè)正確地預(yù)測了所有訓練數(shù)據(jù),而對未知實例的預(yù)測較差.平均不同的假設(shè)可以降低選擇錯誤假設(shè)的風險,從而提高整體預(yù)測性能.
2) 計算優(yōu)勢:執(zhí)行局部搜索的單個學習器可能陷入局部最優(yōu).通過組合多個學習器,集成方法降低了獲得局部最小值的風險.
3) 最佳假設(shè):組合不同的學習器,可以擴展搜索空間,從而更好地擬合數(shù)據(jù)空間.
常見的組合策略有Bagging、Boosting、Stacking.Bagging的主要作用是減少數(shù)據(jù)的方差,Boosting主要作用是減少數(shù)據(jù)的偏差,Stacking集成學習框架是一種具有數(shù)學基礎(chǔ),并且在不同領(lǐng)域得到良好應(yīng)用的集成學習算法,主要用于提升預(yù)測結(jié)果.
2基于Windows API的惡意代碼檢測方法
2.1算法設(shè)計 本文提出的惡意代碼檢測方法總體架構(gòu)如圖1所示.基本步驟如下:
1) 使用沙箱獲取待檢測樣本的API調(diào)用序列,API進行截斷與去重操作;
2) 提取API調(diào)用序列的統(tǒng)計特征與語義特征;
3) 使用基于Stacking的三層檢測模型進行檢測.
2.2數(shù)據(jù)預(yù)處理 由于原始數(shù)據(jù)中的API序列數(shù)據(jù)較為冗余.本文借鑒文獻[8]的方法,對API序列中的連續(xù)出現(xiàn)相同的API合并為一個API.
2.3特征提取 本文使用N-gram算法和TF-IDF算法提取API序列的統(tǒng)計特征,使用Word2Vec模型提取API序列的語義特征.統(tǒng)計特征和語義特征進行拼接作為融合特征.
1) 統(tǒng)計特征提取.使用N-gram算法將API序列處理成API片段.利用TF-IDF算法計算每個API片段的TF-IDF值作為API片段的特征值,可以為區(qū)分度較強的API片段分配更高的權(quán)重.N-gram算法導致特征維度過高,計算TF-IDF值時需要設(shè)置參數(shù)min_df與max_df過濾API片段進行特征降維.即當一個API片段的出現(xiàn)頻率(API_df)小于等于min_df或大于等于max_df時,則舍棄該API片段,可以有效地減少API序列的特征維度.
2) 語義特征提取.由于API序列數(shù)據(jù)量較大,故采用Word2Vec模型的Skip-Gram方法訓練Word2Vec模型,訓練完成后可以將每個API表示為k維向量,向量之間的空間距離越小則說明二者的語義越相似.本文使用Word2Vec模型獲取API序列中單個API向量,以API序列的API向量的平均值作為此API序列的語義特征.
2.4基于Stacking的三層檢測模型設(shè)計 本文采用Stacking組合策略設(shè)計了一個三層檢測模型,以提高模型的預(yù)測性能.本文設(shè)計的基于Stacking的三層檢測模型第一層為隨機森林(random forest,RF),第二層為Light GBM(LGB)和XGBoost(XGB),第三層為邏輯回歸(Logistic regression,LR).第一層使用特征維度為n的原始數(shù)據(jù)訓練隨機森林,獲得一組預(yù)測結(jié)果R1以及對特征的重要性排序;根據(jù)特征的重要性,選擇m維特征作為第二層的輸入來訓練LGB和XGB,在第二層獲得2組預(yù)測結(jié)果R2和R3;以上述的三組預(yù)測結(jié)果作為第三層LR的輸入,LR的預(yù)測結(jié)果作為最后的結(jié)果.
3實驗結(jié)果與分析
本章完成了本文提出的特征提取方法的論證,以及本文所設(shè)計模型的評估.
3.1數(shù)據(jù)集 本文共使用3個數(shù)據(jù)集.數(shù)據(jù)集1來自阿里云安全惡意程序檢測比賽,共約9 000萬次調(diào)用記錄[9];數(shù)據(jù)集2來自文獻[10]中公開的數(shù)據(jù)集;數(shù)據(jù)集3來自Kaggle網(wǎng)站上公開的數(shù)據(jù)集[11],各數(shù)據(jù)集樣本分布如表1所示.后續(xù)實驗中采用5次5折交叉驗證進行實驗,實驗結(jié)果為各次實驗結(jié)果的平均值.
3.2評價指標 機器學習中常用準確率Acc(Accuracy)、精確率Pre(Precision)、召回率Rec(Recall)、F1值(F1-score)和ROC(Receiver Operating Characteristic)曲線對模型的性能進行分析評估.
3.3實驗環(huán)境 本文的實驗環(huán)境分為硬件環(huán)境和軟件環(huán)境,硬件環(huán)境:CPU(2.2 GHz)、內(nèi)存(128 GB)、磁盤(36 TB);軟件環(huán)境:系統(tǒng)環(huán)境(Centos 7.8)、Python環(huán)境(Python 3.6).
3.4特征提取 本節(jié)實驗在數(shù)據(jù)集1上完成了對API調(diào)用序列的特征提取.首先使用N-gram算法完成對API序列的離散化,計算API序列片段的TF-IDF值并設(shè)置min_df與max_df剔除冗余API片段,得到一維統(tǒng)計特征.其次,訓練Word2Vec模型,得到API序列的統(tǒng)計特征.統(tǒng)計特征與語義特征進行拼接作為融合特征.
3.5模型評估 經(jīng)過特征提取后,獲得的融合特征的維度為1 361維.本節(jié)實驗使用本文設(shè)計的基于Stacking的三層檢測模型(ST)與單一模型進行比較.實驗結(jié)果分別如表4和圖2所示.
3.6檢測方法評估 本文方法與文獻[12-14]的方法,在數(shù)據(jù)集1上進行對照實驗.實驗結(jié)果表明:文獻[12-14]及本文的方法Acc分別為96.70%、97.10%、97.91%和98.30%.
可以看出本文提出的方法要優(yōu)于其他3個方法.其原因在于:1) 使用N-gram算法可以保留單個API之間時序特性.使用TF-IDF算法可以反映API的調(diào)用頻率特性,給分類能力強的API片段賦予更高的權(quán)重,通過設(shè)置參數(shù)min_df和max_df過濾掉一些分類能力較弱的API片段.使用Word2Vec模型可以從API的語義層面反應(yīng)API之間的關(guān)系.因此,本文所提出的惡意代碼特征提取方法可以獲得更重要的特征;2) 本文通過基于Stacking集成策略設(shè)計的學習器可以繼承各個學習器的優(yōu)點,增強模型的泛化性.所以在最后的實驗中可以取得較好的檢測效果.
4結(jié)論
為了充分挖掘出API調(diào)用序列中的重要特征,提高模型的準確性和泛化能力,本文提出了一種從API序列提取特征的方法,提取API序列的統(tǒng)計特征和語義特征為融合特征.設(shè)計了基于Stacking的三層檢測模型,利用集成學習的思想使用多個學習器構(gòu)成一個學習器,以提高模型的性能.實驗結(jié)果表明,本文的特征提取方法是有效的.在多個數(shù)據(jù)集上證明了基于Stacking的三層檢測模型具有良好的準確率和泛化性.通過與其他文獻的方法進行比較,證明了本文檢測方法具有一定優(yōu)勢.
參考文獻
[1] GIBERT D, MATEU C, PLANES J. The rise of machine learning for detection and classification of malware:research developments, trends and challenges[J]. J Netw Comput Appl,2020,153:102526.
[2] TANG M D, QIAN Q. Dynamic API call sequence visualisation for malware classification[J]. IET Inf Secur,2019,13(4):367-377.
[3] 雷凱. 使用Windows API進行惡意軟件檢測的研究[D]. 北京:北京郵電大學,2021.
[4] MIKOLOV T, CHEN K, CORRADO G, et al. Efficient estimation of word representations in vector space[EB/OL]. (2013-01-16) [2022-12-14] https://arxiv.org/pdf/1301.3781.pdf.
[5] MIKOLOV T, SUTSKEVER I, CHEN K, et al. Distributed representations of words and phrases and their compositionality[C]//Proc 26th Inter Conf Neural Info Process Syst. Sydney:NIPS,2013,2:3111-3119.
[6] DONG X B, YU Z W, CAO W M, et al. A survey on ensemble learning[J]. Frontiers of Computer Science,2020,14(2):241-258.
[7] SAGI O, ROKACH L. Ensemble learning:a survey[J]. Wiley Interdisciplinary Reviews:Data Mining and Knowledge Discovery,2018,8(4):18.
[8] TOBIYAMA S, YAMAGUCHI Y, SHIMADA H, et al. Malware detection with deep neural network using process behavior[C]//Proc Comput Soft & Appl Conf. Atlanta:IEEE,2016.
[9] 阿里云. 阿里云安全惡意程序檢測[EB/OL]. [2019-03-24]. https://tianchi.aliyun.com.
[10] CATAK F O, YAZ A F, ELEZAJ O, et al. Deep learning based sequential model for malware analysis using windows exe API calls[J/OL]. Peer J Comput Sci,2020. doi:10.7717/peerj-cs.285.
[11] OLIVEIRA A. Malware analysis datasets:API call sequences[EB/OL]. (2022-08-20) [2022-12-14] www.kaggle.com.
[12] 蘆效峰,蔣方朔,周簫,等. 基于API序列特征和統(tǒng)計特征組合的惡意樣本檢測框架[J]. 清華大學學報(自然科學版),2018,58(5):500-508.
[13] 王天歌. 基于API調(diào)用序列的Windows平臺惡意代碼檢測方法[D]. 北京:北京交通大學,2021.
[14] 趙翠镕,張文杰,方勇,等. 基于語義API依賴圖的惡意代碼檢測[J]. 四川大學學報(自然科學版),2020,57(3):488-494.
Malware Detection Method Based on Windows API Call SequenceYANG Bo ZHANG Jian LI Huanzhou TANG Zhangguo LI Zhixiang(1. College of Physics and Electronic Engineering, Sichuan Normal University, Chengdu 610101, Sichuan;
2. Institute of Network and Communication Technology, Sichuan Normal University, Chengdu 610101, Sichuan)
Abstract:In order to solve the problems of insufficient feature extraction ability and weak generalization of the detection model in existing malicious code detection methods, this paper presents a malicious code detection method based on Windows API call sequence. This detection method uses N-gram algorithm and TF-IDF algorithm to extract the statistical features of the sequence, and uses Word2Vec model to extract the semantic features, and then fuses the statistical features and semantic features as the features of API call sequences. The three-layer detection model based on stacking is designed, which forms a strong learner through multiple weak learners to improve the performance of the detection model. The experimental results show that the proposed feature extraction method can obtain more critical features, and the designed detection model is superior to the single model in accuracy, precision and recall rates, and has good generalization, which proves the effectiveness of the detection method.
Keywords:malware detection; API call sequence; feature fusion; machines learning; three-layer detection model
(編輯 周?。?/p>