文獻(xiàn)標(biāo)識碼:ADOI:10.19358/j.issn.2097-1788.2023.11.002
引用格式:李濤,王金雙.融合注意力機(jī)制和Child-Sum Tree-LSTM的二進(jìn)制代碼相似性檢測[J].網(wǎng)絡(luò)安全與數(shù)據(jù)治理,,2023,,42(11):8-14,34.
0引言
代碼復(fù)用在軟件開發(fā)過程中非常普遍。大量代碼和庫被復(fù)用到多個體系架構(gòu)的二進(jìn)制文件中,,其中存在的一些脆弱代碼可能會導(dǎo)致安全隱患,。二進(jìn)制代碼相似性檢測技術(shù)可以評估兩個或者多個二進(jìn)制代碼間的相似性和差異性,被廣泛應(yīng)用于漏洞發(fā)現(xiàn)[1-2]、代碼剽竊檢測[3],、惡意軟件檢測[4]等領(lǐng)域,。
二進(jìn)制代碼相似性檢測的任務(wù)是尋找與給定查詢二進(jìn)制函數(shù)func最相似的目標(biāo)函數(shù)func′。根據(jù)檢測對象的不同,,主要分為以下兩種類型:(1)一對一比較:直接計算兩段二進(jìn)制代碼之間的相似性,。這種方法通常需要設(shè)置一個合適的閾值,閾值的選擇將直接影響檢測的準(zhǔn)確度,。(2)一對多比較,。該場景將一個源函數(shù)與目標(biāo)函數(shù)池中的函數(shù)進(jìn)行相似度評分并排序。目標(biāo)函數(shù)的排序越靠前,,說明模型對于函數(shù)語義的區(qū)分度越好,。
編譯選項的差異(如編譯優(yōu)化O0-O3、-fno-inline選項等),、代碼混淆技術(shù)(如Obfuscator-LLVM[5])的使用給研究人員提取二進(jìn)制代碼語義帶來了諸多挑戰(zhàn),。
基于深度學(xué)習(xí)的二進(jìn)制代碼相似度檢測方法可以自動化地提取代碼語義,從而避免了人工分析可能引入的偏差,。常用的神經(jīng)網(wǎng)絡(luò)主要有兩類:(1)使用處理結(jié)構(gòu)特征的圖神經(jīng)網(wǎng)絡(luò),,如Structure2Vec[6]、GCN[7]等,;(2)使用處理文本序列的神經(jīng)網(wǎng)絡(luò),,如LSTM(Long Short Term Memory)[8]、Transformer[9]等,。
Genius[10]結(jié)合基本塊語法特征和控制流圖(Control Flow Graph,,CFG)生成屬性控制流圖用于相似性檢測,之后的Gemini[11],、VulSeeker[1]等均使用了類似的思想,。
在二進(jìn)制代碼相似度檢測領(lǐng)域,Luo等人[12]利用LSTM和孿生網(wǎng)絡(luò)學(xué)習(xí)匯編代碼的語義表示,。Asm2vec[13]使用PV-DM[14]模型學(xué)習(xí)函數(shù)和指令符號的嵌入,。jTrans[15]在文獻(xiàn)[16]預(yù)訓(xùn)練任務(wù)的基礎(chǔ)上,將控制流信息融入預(yù)訓(xùn)練任務(wù),,取得了較好的效果,。但是這些方法無法適用于跨指令集架構(gòu)的檢測場景。
觀察來自庫findutils中的closs_stream函數(shù),,如圖1所示,,在保持編譯配置相同(編譯器Clang70,編譯優(yōu)化O0,,其他編譯器選項相同)的情況下,,不同指令集架構(gòu)(x86和ARM)二進(jìn)制代碼間的CFG具有一定的差異,,而其二進(jìn)制代碼對應(yīng)的AST特征則只出現(xiàn)了一個節(jié)點的差異。
Tai[17]等人提出了兩種Tree-LSTM網(wǎng)絡(luò)(Child-Sum Tree-LSTM和N-ary Tree-LSTM)用于處理自然語言處理領(lǐng)域的結(jié)構(gòu)化數(shù)據(jù),,其在情感分類和語義相關(guān)任務(wù)中的性能優(yōu)于普通LSTM,。其中,N-ary Tree-LSTM適合于二叉樹,,而Child-Sum Tree-LSTM適用于多孩子的無序樹,,并且具有更高的計算效率。
在此工作的基礎(chǔ)上,,Yang等人[18]提出了一種基于AST編碼的跨指令集架構(gòu)的檢測方法Asteria,。通過提取二進(jìn)制函數(shù)的AST作為跨指令集架構(gòu)的二進(jìn)制特征來源,并利用能夠處理樹形數(shù)據(jù)的Tree-LSTM網(wǎng)絡(luò)學(xué)習(xí)二進(jìn)制代碼的AST語義嵌入,。但是原生Tree-LSTM難以捕獲子節(jié)點對整棵樹的語義貢獻(xiàn)度,,影響訓(xùn)練精度。
圖1二進(jìn)制代碼的CFG和AST特征對比
(bigram工程closs_stream函數(shù)O0優(yōu)化)
AST的節(jié)點代表了代碼中的表達(dá)式或語句,,不同種類的節(jié)點承載著不同的信息量,。然而Child-Sum Tree-LSTM對子節(jié)點隱藏狀態(tài)累加以表示父節(jié)點,未能考慮不同類別AST節(jié)點對整棵樹特征表示的貢獻(xiàn)程度,。例如,,AST中包含的num等節(jié)點通常和expr、block等節(jié)點具有一定的從屬關(guān)系,,并且通常在樹中處于不同的位置,。進(jìn)行節(jié)點向量傳播的過程中應(yīng)當(dāng)對這些節(jié)點的語義信息對進(jìn)行重要性區(qū)分,使得在模型訓(xùn)練過程中節(jié)點對整棵AST提供適當(dāng)?shù)恼Z義貢獻(xiàn)度,。
本文提出了一種融合注意力機(jī)制和Child-Sum Tree-LSTM的二進(jìn)制代碼相似性檢測方法,。首先使用二進(jìn)制分析工具IDA Pro對二進(jìn)制文件進(jìn)行反編譯提取AST作為特征來源,輸入到融合注意力機(jī)制的Child-Sum Tree-LSTM神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,,最后通過實驗表現(xiàn)驗證本方法的有效性,。所提方法可用于跨指令集架構(gòu)、跨代碼混淆,、跨編譯優(yōu)化等級等多種二進(jìn)制代碼相似性檢測場景,。
作者信息:
李濤,王金雙
(人民解放軍陸軍工程大學(xué)指揮控制工程學(xué)院,,江蘇南京210007)中國