王 慧
(中國(guó)人民公安大學(xué)信息網(wǎng)絡(luò)安全學(xué)院, 北京 100038)
2020年全球持續(xù)性爆發(fā)的新冠疫情,使得越來(lái)越多的社會(huì)行為依附于網(wǎng)絡(luò)而生,離開網(wǎng)絡(luò),物資動(dòng)態(tài)分配、熱點(diǎn)人員篩查、居家遠(yuǎn)程辦公等活動(dòng)幾乎無(wú)法完成,但伴隨社會(huì)網(wǎng)絡(luò)依賴性增強(qiáng)的同時(shí),針對(duì)特定專用網(wǎng)絡(luò)的惡意入侵軟件層出不窮。如何快速準(zhǔn)確地進(jìn)行惡意代碼的識(shí)別與檢測(cè),判斷其惡意企圖并揭示惡意代碼間的同源關(guān)聯(lián)性,完成針對(duì)性的技術(shù)防御,將對(duì)網(wǎng)絡(luò)空間安全具有重大意義。
隨著數(shù)據(jù)分析處理技術(shù)的飛速發(fā)展,新技術(shù)新思想也逐步融入惡意代碼的檢測(cè)過(guò)程,國(guó)內(nèi)外專家研究結(jié)果表明:雖然惡意代碼的變種樣本層出不窮,但多數(shù)變種是由編寫者采取混淆技術(shù)逃避了檢測(cè)分析,由于編寫習(xí)慣等因素,同一團(tuán)隊(duì)編寫的惡意代碼往往具有較高的行為相似性。為揭示惡意代碼的同源家族特征,諸多技術(shù)理論已成功應(yīng)用于惡意代碼的特征提取,數(shù)據(jù)挖掘及神經(jīng)網(wǎng)絡(luò)思想與傳統(tǒng)惡意代碼檢測(cè)技術(shù)相結(jié)合,可有效降低檢測(cè)結(jié)果的誤報(bào)率[1-3];基于概率模型及機(jī)器學(xué)習(xí)的方法在惡意代碼分類問(wèn)題中已取得良好效果[4];改進(jìn)的序列挖掘算法結(jié)合卷積神經(jīng)網(wǎng)絡(luò)可提取一定層面的特定惡意序列模式[5-6];基于語(yǔ)義的惡意代碼特征檢測(cè)方法借助于自然語(yǔ)言文本處理技術(shù)揭示出反匯編文件中潛藏的非良性代碼語(yǔ)義[7];從匯編指令操作碼所對(duì)應(yīng)灰度圖像角度進(jìn)行特征提取可實(shí)現(xiàn)惡意樣本的分類問(wèn)題[8]。為加速惡意代碼家族同源特征的提取進(jìn)程,本文提出了融合粒子群隨機(jī)優(yōu)化算法的同源關(guān)聯(lián)分析策略,首先抽取惡意代碼PE(Portable Execute)文件中所包含的指令性語(yǔ)句并簡(jiǎn)化;其次在所形成的簡(jiǎn)化指令序列集上尋找頻繁指令序列,粒子群算法的快速尋優(yōu)思想滲透至頻繁序列的生成進(jìn)化過(guò)程,隨著迭代的進(jìn)行,新生異常模式以一定概率進(jìn)入頻繁指令序列的發(fā)現(xiàn)流程;最后結(jié)合家族同源性分析的要求,給出了惡意代碼同源性特征提取的基本流程。
相對(duì)于良性代碼而言,惡意代碼本身是極具目的性的特殊訪問(wèn)行為,通常包括蠕蟲、木馬、后門等惡意軟件,其常規(guī)檢測(cè)步驟主要是構(gòu)造行為特征庫(kù)、比對(duì)位置字節(jié)代碼、探尋特定訪問(wèn)序列等,其中惡意代碼特征的提取是關(guān)鍵。
圍繞惡意代碼的檢測(cè)方法多數(shù)基于特征碼,特征碼由比對(duì)并提取歷史惡意代碼中具有相似功能的代碼段形成,特征碼檢測(cè)方法的歷史依賴性使其對(duì)新發(fā)未知惡意軟件的檢測(cè)效果受限。但多數(shù)未知惡意代碼是歷史惡意代碼的變體,編寫者將歷史惡意代碼加殼變形封裝,以此蒙蔽安全檢測(cè)軟件的掃描分析。因此,新發(fā)惡意代碼常與歷史惡意代碼具有家族同源關(guān)聯(lián)性,此種關(guān)聯(lián)性主要表現(xiàn)為脫殼之后代碼間具有相似的指令行為控制流,其中惡意代碼間的結(jié)構(gòu)關(guān)聯(lián)特征是家族同源分析的關(guān)鍵所在。
為了提取惡意代碼的家族行為操作特征,靜態(tài)反匯編惡意代碼PE文件,文件中的指令代碼包括指令性語(yǔ)句、宏指令及偽指令語(yǔ)句。其中,宏指令展開后可轉(zhuǎn)化為指令性語(yǔ)句集,偽指令語(yǔ)句及部分指令性語(yǔ)句(如處理機(jī)控制類指令)對(duì)于惡意代碼行為分析無(wú)明顯影響,此類語(yǔ)句在文件中的出現(xiàn)頻率較低,因此在惡意代碼的行為分析中只需重點(diǎn)關(guān)注算術(shù)邏輯運(yùn)算類、數(shù)據(jù)傳送類及程序轉(zhuǎn)移控制類指令。這些指令代碼所形成的執(zhí)行流程結(jié)合系統(tǒng)函數(shù)調(diào)用可充分反映程序的惡意企圖,在一定程度上也代表了編寫者的編碼習(xí)慣,對(duì)于惡意代碼的家族特征分析具有重要意義。
匯編語(yǔ)言機(jī)器指令由操作碼與操作數(shù)字段構(gòu)成,操作碼字段位于首字節(jié),用于表征指令的操作性質(zhì)及尋址方式類型,操作數(shù)字段明確了指令的操作對(duì)象,可以表現(xiàn)為操作數(shù)本身或者操作數(shù)的具體存儲(chǔ)位置,指令的基本結(jié)構(gòu)如圖1所示。一般情況下,算術(shù)邏輯運(yùn)算類、數(shù)據(jù)傳送類及程序轉(zhuǎn)移控制類指令的長(zhǎng)度為1~6字節(jié),指令的實(shí)際操作特征位于首字節(jié)。
圖1 機(jī)器指令結(jié)構(gòu)示意圖
為提取惡意程序的基本特征,剔除程序中的非關(guān)注指令,簡(jiǎn)化剩余指令集,只保留每條指令機(jī)器碼的首字節(jié),形成指令塊編碼序列,序列結(jié)構(gòu)如圖2所示。
根據(jù)圖2,橫向坐標(biāo)代表惡意程序所包含簡(jiǎn)化指令的出現(xiàn)次序,任一行代表惡意模塊的實(shí)際訪問(wèn)行為,包含本次操作的所有關(guān)鍵特征;縱向坐標(biāo)為惡意序列數(shù)量,由于攻擊目標(biāo)及訪問(wèn)操作的不同,橫向序列長(zhǎng)度不盡相同,且允許關(guān)鍵特征重復(fù)。
圖2 惡意代碼指令塊序列結(jié)構(gòu)示意圖
對(duì)惡意代碼PE文件中的機(jī)器指令集進(jìn)行篩選及簡(jiǎn)化轉(zhuǎn)換后,惡意軟件所對(duì)應(yīng)的簡(jiǎn)化指令集將揭示程序的操作行為特征,受編寫者編程習(xí)慣的影響,同源的惡意代碼在內(nèi)存訪問(wèn)、邏輯判斷、分支跳轉(zhuǎn)、系統(tǒng)調(diào)用、中斷設(shè)計(jì)等方面常常具有較高的相似性,其局部代碼片段甚至相同或者高度相似,不同代碼簡(jiǎn)化指令序列間的關(guān)聯(lián)程度可更直觀反映其家族同源性。
惡意代碼是對(duì)系統(tǒng)資源所進(jìn)行的占有侵犯性訪問(wèn),其行為對(duì)操作系統(tǒng)的功能調(diào)用依賴性較強(qiáng),包含了對(duì)系統(tǒng)關(guān)鍵資源的讀取、修改等操作,依據(jù)圖2惡意代碼塊的簡(jiǎn)化序列,序列間的模式關(guān)聯(lián)特性可體現(xiàn)為最大頻繁模式間的包含性,這種包含性代表了惡意行為的客觀家族同源規(guī)律性。但是,作為惡意檢測(cè)的重要環(huán)節(jié),僅進(jìn)行關(guān)聯(lián)分析只適合于發(fā)現(xiàn)模式并完成行為匹配,若出現(xiàn)新的惡意代碼,必須對(duì)原有的模式挖掘過(guò)程進(jìn)行增量式深度分析,重新歸納推導(dǎo)惡意行為的衍生變化,該過(guò)程需要多次掃描數(shù)據(jù)集,將導(dǎo)致算法的時(shí)間復(fù)雜度增加。為貼近快速精準(zhǔn)檢測(cè)的目標(biāo),借鑒群智能優(yōu)化算法中模擬鳥群社會(huì)行為的粒子群優(yōu)化思想,將鳥群集體尋優(yōu)機(jī)制融入惡意代碼序列挖掘過(guò)程,以此完成異常惡意模式的預(yù)測(cè)與發(fā)現(xiàn),圍繞簡(jiǎn)化指令集的序列模式挖掘旨在發(fā)現(xiàn)數(shù)據(jù)集中滿足一定支持度閾值約束的最大頻繁子序列,頻繁子序列是簡(jiǎn)化指令二進(jìn)制代碼的有序集合。
頻繁序列關(guān)聯(lián)分析過(guò)程中,為加速頻繁子序列的發(fā)現(xiàn)過(guò)程,避免多次掃描數(shù)據(jù)庫(kù),相似惡意代碼的家族同源性表現(xiàn)為惡意程序間相似指令序列的重合度,由于惡意程序PE文件由底層基本指令集構(gòu)成,惡意行為的基本特征表現(xiàn)在指令間的邏輯功能近似性,相同性質(zhì)的指令允許出現(xiàn)在序列的不同位置。頻繁序列生成過(guò)程中引入粒子群優(yōu)化思想,將指令代碼序列抽象為微粒子,序列粒子采用n×1維矢量表示形式,n為簡(jiǎn)化指令序列所包含的指令數(shù)。特征提取過(guò)程充分利用群內(nèi)各粒子間的協(xié)作與信息共享完成優(yōu)化解的搜索,優(yōu)化解表現(xiàn)為頻繁序列集,具有相似頻繁序列集的代碼具有家族同源特性。粒子間通過(guò)迭代搜索,解的發(fā)現(xiàn)由局部最優(yōu)向全局最優(yōu)過(guò)渡,隨著迭代周而復(fù)始地進(jìn)行,最終整個(gè)粒子群具有更優(yōu)的個(gè)體適應(yīng)度[9]。鑒于惡意程序PE文件本身的二進(jìn)制表示形式,在簡(jiǎn)化表示的前提下,代碼序列關(guān)聯(lián)分析與粒子群優(yōu)化過(guò)程的有機(jī)結(jié)合可以加速最大頻繁子序列的發(fā)現(xiàn)過(guò)程。
粒子群優(yōu)化思想源于鳥群捕食的行為分析,每一只鳥都是種群中的微粒子,粒子的位置和速度由矢量記錄,粒子具有記憶自身當(dāng)前最好解并逐步追隨群體最優(yōu)解的能力,借助于粒子的尋優(yōu)能力,將簡(jiǎn)化指令序列集抽象為微粒子群,將指令微粒子的數(shù)據(jù)特征與經(jīng)典序列挖掘算法的基本思想相融合,提出了基于粒子群優(yōu)化的惡意代碼頻繁指令序列發(fā)現(xiàn)算法PSO-AMFIS (Particle Swarm Optimization Algorithm of Ming Frequent Instruction Sequence)。
PSO-AMFIS算法中,任一序列由粒子矢量表示,矢量的維度隨簡(jiǎn)化指令序列的不同而動(dòng)態(tài)變化,在每一次迭代過(guò)程中粒子通過(guò)跟蹤兩個(gè)極值(自身最優(yōu)解pbest與全局最優(yōu)解gbest)完成更新,如公式(1)、(2)所示。
Vk+1=ωVk+C1rand()(pbestk-Sk)+C2rand()(gbestk-Sk)
(1)
Sk+1=Sk+Vk+1
(2)
其中,ω為非負(fù)慣性權(quán)重,用于拓展種群的搜索空間,在搜索過(guò)程中可線性變化[10];C1、C2為學(xué)習(xí)因子,代表將粒子推向pbest與gbest的統(tǒng)計(jì)加速權(quán)值;rand()為(0,1)區(qū)間均勻分布的隨機(jī)數(shù);Sk+1為k+1階簡(jiǎn)化指令序列,Vk+1為序列中第k+1個(gè)簡(jiǎn)化字節(jié)指令。
結(jié)合惡意代碼家族同源特征提取的基本要求,借助Rakesh Agrawal所提Apriori先驗(yàn)算法中最大頻繁項(xiàng)目集生成理論[11],引入粒子群隨機(jī)算子優(yōu)化Apriori算法的搜索過(guò)程,C1算子使得包含k頻繁序列的粒子以更大的幾率轉(zhuǎn)至下一次迭代,是粒子自身認(rèn)知對(duì)下一步?jīng)Q策的影響;C2算子作用于k頻繁序列生成k+1候選序列,用于調(diào)整粒子間的信息共享與合作關(guān)系,影響粒子對(duì)群內(nèi)同伴經(jīng)驗(yàn)的繼承程度,可衡量粒子的社會(huì)認(rèn)知能力。PSO-AMFIS算法的基本步驟如下。
輸入:惡意代碼簡(jiǎn)化指令序列種群C、支持度約束閾值ζ
輸出:最大頻繁序列集Smax
步驟1:k=1;
步驟2: 掃描序列種群C,導(dǎo)出k頻繁子序列集Sk,淘汰非頻繁子序列;
步驟3:確定初始種群的數(shù)據(jù)規(guī)模,根據(jù)公式(3)評(píng)價(jià)包含k頻繁子序列粒子的適應(yīng)度函數(shù)值;
步驟4:對(duì)于每一個(gè)粒子,將其適應(yīng)度值與自身歷史最好適應(yīng)度值pbest相比較,分析子序列間的包含性,更新pbest;
步驟5:對(duì)于每一個(gè)粒子,將其適應(yīng)度值與種群歷史最好適應(yīng)度值gbest相比較,分析子序列間的包含性,更新gbest;
步驟6:根據(jù)公式(1)、(2)調(diào)整當(dāng)前最大頻繁序列集Smax;
步驟7:k=k+1;
步驟8:計(jì)算進(jìn)化收斂條件,若滿足進(jìn)行步驟9,否則轉(zhuǎn)步驟3更新初始種群重新迭代;
步驟9:輸出頻繁序列集Smax。
在PSO-AMFIS算法中,適應(yīng)度函數(shù)用于度量粒子的優(yōu)劣程度,適應(yīng)度函數(shù)定義如公式(3)。
Fitness(particlek)=Support(particlek)/ζ
(3)
其中,Support(particlek)是包含k頻繁子序列的粒子支持度計(jì)數(shù)值,ζ是支持度閾值。
PSO-AMFIS算法將項(xiàng)目集加入時(shí)間戳形成序列集,所蘊(yùn)含的頻繁指令序列代表惡意程序的家族特征,粒子群隨機(jī)優(yōu)化過(guò)程使得新發(fā)惡意代碼將以一定概率進(jìn)入下一次迭代,可擴(kuò)大目標(biāo)搜索范圍,粒子自身經(jīng)驗(yàn)的繼承及群體經(jīng)驗(yàn)的學(xué)習(xí)可加速頻繁序列的生成,整個(gè)算法的實(shí)現(xiàn)流程將數(shù)據(jù)挖掘與生物進(jìn)化思想有機(jī)結(jié)合。
為了驗(yàn)證PSO-AMFIS算法對(duì)于惡意代碼家族特征提取的有效性,選取開源數(shù)據(jù)集Kaggle中的部分?jǐn)?shù)據(jù)組成訓(xùn)練樣本集[12],訓(xùn)練樣本共有200個(gè)反匯編生成的“.asm”文件,包含150個(gè)惡意樣本與50個(gè)正常樣本,其中測(cè)試惡意樣本來(lái)自于Kaggle中3個(gè)家族。根據(jù)前述代碼序列簡(jiǎn)化規(guī)則,構(gòu)造訓(xùn)練樣本集的簡(jiǎn)化指令序列集C,以序列集C為基礎(chǔ)數(shù)據(jù)庫(kù),分別運(yùn)行PSO-AMFIS算法與Apriori算法產(chǎn)生最大頻繁序列集,支持度閾值設(shè)置為40%,運(yùn)行結(jié)果如圖3所示。
圖3 頻繁序列發(fā)現(xiàn)效率比較
從圖3可以看出,隨著挖掘到的頻繁序列數(shù)量的增加,PSO-AMFIS算法的運(yùn)行效率更高,與Apriori算法相比,由于粒子群隨機(jī)算子對(duì)頻繁序列搜索空間的優(yōu)化,其對(duì)應(yīng)曲線更加平穩(wěn)。
根據(jù)簡(jiǎn)化指令序列集C所生成的最大頻繁序列集,在數(shù)據(jù)集Kaggle中隨機(jī)抽取被選中的3個(gè)家族樣本各30例,加標(biāo)簽后混合30例正常程序樣本進(jìn)行模式匹配測(cè)試,測(cè)試結(jié)果如表1所示。
表1 各家族分類測(cè)試結(jié)果
由表1可知,來(lái)自同一家族的代碼具有更好的匹配結(jié)果,正常代碼與最大頻繁序列集的匹配程度很低,說(shuō)明了PSO-AMFIS算法所生成的最大頻繁序列集對(duì)于家族代碼操作行為的刻畫較為準(zhǔn)確。
惡意代碼是對(duì)系統(tǒng)資源的未授權(quán)占用,圍繞惡意代碼PE文件的匯編指令特征,提出了惡意代碼同源特征提取流程。該流程通過(guò)比較分析不同惡意代碼機(jī)器指令的行為特征,充分關(guān)注編寫者的心理目標(biāo)企圖及編程習(xí)慣,尋找惡意模式間的關(guān)聯(lián)特性,對(duì)于惡意代碼簡(jiǎn)化數(shù)據(jù)集不等長(zhǎng)的序列種群,提出了關(guān)聯(lián)分析與粒子群優(yōu)化相融合的PSO-AMFIS算法,該算法可有效進(jìn)行惡意代碼集的同源分析,進(jìn)而匯聚成不同家族,進(jìn)一步揭示出惡意模式的家族隱含特征,PSO-AMFIS算法對(duì)原型系統(tǒng)的實(shí)例驗(yàn)證結(jié)果表明其有效性。