基于源碼的二進制SCA特征生成技術(shù)
檢測原理及流程簡介:
在二進制SCA檢測原理中提到對于常量字符串、部分類名稱、函數(shù)名稱、以及一些配置信息還是存在的,并且這些信息具備一定的不變性;因此二進制SCA工具其中的一部分特征來源就包含這些信息。因此在特征庫保存有每個開源軟件的特征,二進制SCA工具在檢測時會從待檢測二進制文件中提取出特征,通過算法和特征庫的保存的開源軟件特征進行相似度計算,從而判斷該二進制文件中引用了哪些開源軟件及對應(yīng)的版本號。
二進制SCA檢測處理流程:****
從檢測流程和方法中可以看出特征庫中保存的特征來源并沒有規(guī)定一定從二進制文件中生成,而是只要滿足特征庫中的特征必須和二進制中生成的特征要一致,因為計算相似度時其中一個輸入的特征是從二進制文件中提取到的。很明顯特征庫中特征來源無非就2條路徑:一條來自二進制文件,另外一條那就是來自生成二進制的源代碼。
不同特征來源優(yōu)缺點比較:
1. 二進制文件特征提取優(yōu)點:
基于二進制文件來提取特征具有提取方便,和檢測時提取方法一致,不需要額外開發(fā)提取工具和提取算法。
2. 二進制文件特征提取缺點:
a. 二進制文件首先需要由源代碼編譯出來,而搭建構(gòu)建編譯環(huán)境可能會很復(fù)雜,需要很多額外的工作量,效率低;
b.由于編譯宏的原因,由源代碼生成的二進制文件并不一定是全量源代碼都包含中其中的,可能只有部分源代碼參與生成最終的二進制文件;
c.由于構(gòu)建依賴的原因,二進制文件中包含有依賴對象的信息,也就是說包含有源代碼之外對象的信息,這會導(dǎo)致提取到的特征純度不足,直接影響到檢測結(jié)果的準(zhǔn)確性;
3. 源碼特征提取優(yōu)點:
正好可以解決從二進制文件中生成特征的短板問題,不需要編譯可以大大提升自動化出來水平和提取效率,提取到的特征只限于源代碼中的特征和其他無關(guān),提取到的特征純度很高。
4. 源碼特征提取缺點:
針對不同語言類型需要額外開發(fā)相應(yīng)的特征提取工具來實現(xiàn)特征提取,開發(fā)工作量大,且不同語言的特征提取工具開的發(fā)難度也不一樣,對開發(fā)者是一個挑戰(zhàn)。
基于源碼的特征生成方法:
不同語言具有不同的特點,在考慮基于源碼的特征生成方法時需要考慮到語言特點來采用針對性的方法來解決,這樣可以起到事半功倍的作用。下面針對不同語言分別來說明對應(yīng)的解決方法:
C語言:沒有類的復(fù)雜性,在構(gòu)建時只要用到的源碼文件,該文件中的所有函數(shù)信息都會被一起編譯進二進制文件中。
C++語言:引入了類的復(fù)雜性,在構(gòu)建時只要引用了類的實例,該類信息才會被編譯到二進制文件中,而不像C語言一個源代碼文件是一個整體來處理的。另外類中的構(gòu)造函數(shù)和析構(gòu)函數(shù)會被編譯器自動引入在二進制文件中,從而出現(xiàn)源代碼和二進制文件不一致情況。
Java語言:也存在類的復(fù)雜性,特別是嵌套類和內(nèi)部類的情況,這也導(dǎo)致源代碼特征和二進制特征之間的處理難點。
Go語言:具備依賴管理機制,但編譯出來的二進制文件卻和C、C++一樣具有PE、ELF格式,go語言的模塊特性也帶來了源碼提取的特征和二進制之間的差別,此外go語言相比C、C++來說更容易生成對應(yīng)源代碼的抽象語法樹AST。
Python語言:也具備依賴管理機制,但pyc和pyd之間差別很大,pyc是字節(jié)碼格式可以很方便的進行反編譯,但pyd則像C、C++一樣是指令碼式文件,因此特征提取方法完全不一樣,同樣也帶來了源代碼提取特征和二進制提取特征之間的不一致問題需要解決,比如:1. python源碼在編譯成pyc時有一些編譯優(yōu)化,在源碼提取特征時要加入編譯優(yōu)化,且不同版本編譯優(yōu)化有差異,統(tǒng)一使用最多的編譯優(yōu)化提取源碼特征并且pyc文件提取特征時也需要進行適當(dāng)?shù)膬?yōu)化;2. python不同版本同一代碼翻譯成的指令序列不一樣,pyc提取特征時要兼容多個版本;3. py2、py3的pyc中字符串的編碼方式不一樣,而且unicode的支持范圍不一樣,需要保證字符串特征提取一致;同樣Python源代碼也相對容易的可以生成對應(yīng)源代碼的抽象語法樹AST。
另外對于C、C++源代碼由于存在依賴和構(gòu)建環(huán)境的原因而導(dǎo)致源代碼無法編譯,而很多工具需要能編譯成功才能獲取到AST的,比如CDT、Clang等,在這種情況下就沒法使用了,必須使用具備詞法分析和語法分析能力的工具來獲取特征相關(guān)一些數(shù)據(jù),比如cppcheck工具。不管是基于AST還是詞法、語法分析輸出數(shù)據(jù),都需要自己在此數(shù)據(jù)的基礎(chǔ)上開發(fā)相應(yīng)的數(shù)據(jù)分析工具來提取到最終的開源軟件特征,并且該特征數(shù)據(jù)和從二進制文件中提取到的特征數(shù)據(jù)具有很好的一致性要求。
總結(jié) :只有具備從源碼中生成上述特征,才能充分利用源碼特征提取優(yōu)點,進行自動化的特征提取,提升特征提取效率,快速實現(xiàn)對新出現(xiàn)開源軟件的檢測能力。
審核編輯:湯梓紅
-
二進制
+關(guān)注
關(guān)注
2文章
805瀏覽量
42242 -
SCA
+關(guān)注
關(guān)注
1文章
37瀏覽量
12141 -
源碼
+關(guān)注
關(guān)注
8文章
669瀏覽量
30240
發(fā)布評論請先 登錄
偏移二進制和二進制補碼如何和實際數(shù)據(jù)對應(yīng),如何轉(zhuǎn)換?
bcd編碼的應(yīng)用 bcd與二進制的區(qū)別
hex格式和二進制的區(qū)別
在線二進制編碼器:數(shù)據(jù)轉(zhuǎn)換的快捷通道
base64字符串轉(zhuǎn)換為二進制文件
ASCII碼和二進制的轉(zhuǎn)換關(guān)系
二進制編碼器的精度與分辨率
二進制編碼器在自動化領(lǐng)域的作用
二進制編碼器在機器人中的應(yīng)用
二進制編碼器的種類及特點
二進制編碼器應(yīng)用場景 二進制編碼器與模擬編碼器比較
二進制編碼器工作原理 如何選擇二進制編碼器
C語言生成可執(zhí)行二進制文件的具體過程

評論