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