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