什么是二進(jìn)制SCA檢測(cè)
SCA(Software Composition Analysis)軟件成分分析,指通過對(duì)軟件源碼、二進(jìn)制軟件包等的靜態(tài)分析,挖掘其所存在的開源合規(guī)、已知漏洞等安全合規(guī)風(fēng)險(xiǎn),是一種業(yè)界常見的安全測(cè)試手段。
而二進(jìn)制SCA檢測(cè)技術(shù),檢測(cè)對(duì)象為二進(jìn)制軟件包/固件,直接從二進(jìn)制文件中提取常量字符串、部分類名稱、函數(shù)名稱等特征信息,再運(yùn)用匹配算法進(jìn)行相似度計(jì)算,根據(jù)相似度門限來檢測(cè)出引用的開源軟件名稱和版本號(hào)。
二進(jìn)制SCA檢測(cè)對(duì)比源碼SCA檢測(cè)的優(yōu)勢(shì)
無需依賴源碼,操作方便
用戶只需上傳二進(jìn)制軟件包/固件,服務(wù)會(huì)采用靜態(tài)檢測(cè)技術(shù),不用構(gòu)建運(yùn)行環(huán)境,不用運(yùn)行程序即可快速分析二進(jìn)制軟件包/固件中存在的安全風(fēng)險(xiǎn)問題,并輸出一份專業(yè)的分析報(bào)告
圖:二進(jìn)制成分分析-檢測(cè)處理流程
二進(jìn)制SCA指紋提取黑科技:go語言逆向技術(shù)之---恢復(fù)函數(shù)名稱算法
在對(duì)程序做安全審計(jì)、漏洞檢測(cè)時(shí),通常都需要對(duì)程序做逆向分析,我們?cè)跊]有符號(hào)表的情況下,提出了一種恢復(fù)函數(shù)名稱的算法,方便對(duì)go語言二進(jìn)制文件進(jìn)行逆向分析,提升分析效率。
go語言是最近幾年發(fā)展非?;鸬囊环N語言,它具備和C/C++一樣的運(yùn)行速度快的優(yōu)點(diǎn),同時(shí)又具備開發(fā)效率高,支持包管理機(jī)制高階語言特點(diǎn)。其編譯出來的二進(jìn)制文件格式和C/C++一樣運(yùn)行在Linux平臺(tái)下是elf格式,運(yùn)行在windows平臺(tái)下是pe格式,但同時(shí)在二進(jìn)制文件的內(nèi)部細(xì)節(jié)上go語言有自己特有的屬性,二進(jìn)制逆向人員可以利用go語言這些特有屬性來實(shí)現(xiàn)對(duì)二進(jìn)制文件進(jìn)行更精準(zhǔn)的逆向分析。
特性1:利用go語言中特有的節(jié)信息來判斷elf/pe文件的源代碼語言類型,是go語言還是C、c++語言
通過判斷二進(jìn)制文件中是否存在“.noptrdata”、“.gopclntab”、“.data.rel.ro.gopclntab”確定源代碼,如果存在上述節(jié)名稱,則源代碼為go語言。
特性2:在沒有符號(hào)表的情況下如何恢復(fù)函數(shù)名稱
我們知道在C/C++編譯出來的二進(jìn)制文件中,如果沒有符號(hào)表信息是沒法看到函數(shù)名稱的,在IDA工具中只能看到地址信息。
go語言怎么來恢復(fù)函數(shù)名稱呢,可以通過從.data.rel.ro節(jié)來恢復(fù)函數(shù)名,具體查找定位算法如下:
方法1:
解析頭信息可以獲取magic, quantum, ptr_size, func_tab_count數(shù)據(jù),當(dāng)magic為’xfbxffxffxff’時(shí),entry_size = 2 * ptr_size為entry結(jié)構(gòu)體大小,func_tab_count 為entry結(jié)構(gòu)體數(shù)量;解析entry結(jié)構(gòu)獲取到名稱信息結(jié)構(gòu)數(shù)據(jù)位置偏移(需要注意64位和32位go程序 func_info_offset位置相反),讀取名稱信息結(jié)構(gòu)體數(shù)據(jù),再?gòu)闹蝎@取到名稱字符串位置偏移(name_offset),根據(jù)此偏移定位到函數(shù)名稱字符串起始位置偏移,從該位置解析得到函數(shù)名稱。
方法2:
另外1.16版本go語言結(jié)構(gòu)有些新變化,magic變?yōu)椤痻faxffxffxff’,解析頭信息獲取func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off數(shù)據(jù),其中func_tab_off為entry數(shù)據(jù)起始位置,解析entry結(jié)構(gòu)獲取code_off, func_info_offset數(shù)據(jù),后續(xù)解析過程與magic=’xfbxffxffxff’一致。
通過上述兩個(gè)方法可以恢復(fù)函數(shù)真實(shí)名稱,從而方便對(duì)go語言二進(jìn)制文件的逆向分析,提升分析效率。
總結(jié)
華為云DevCloud一直致力于為客戶提供端到端提效、全鏈路安全的研發(fā)環(huán)境,除無需依賴源碼的二進(jìn)制成分分析外,即將陸續(xù)發(fā)布更多的新技術(shù)、新能力,敬請(qǐng)期待。
審核編輯:湯梓紅
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
807瀏覽量
42316 -
華為云
+關(guān)注
關(guān)注
3文章
2770瀏覽量
18301 -
go語言
+關(guān)注
關(guān)注
1文章
159瀏覽量
9369
發(fā)布評(píng)論請(qǐng)先 登錄
偏移二進(jìn)制和二進(jìn)制補(bǔ)碼如何和實(shí)際數(shù)據(jù)對(duì)應(yīng),如何轉(zhuǎn)換?
bcd編碼的應(yīng)用 bcd與二進(jìn)制的區(qū)別
hex格式和二進(jìn)制的區(qū)別
在線二進(jìn)制編碼器:數(shù)據(jù)轉(zhuǎn)換的快捷通道
base64字符串轉(zhuǎn)換為二進(jìn)制文件
ASCII碼和二進(jìn)制的轉(zhuǎn)換關(guān)系
二進(jìn)制編碼器的精度與分辨率
二進(jìn)制編碼器在自動(dòng)化領(lǐng)域的作用
二進(jìn)制編碼器在機(jī)器人中的應(yīng)用
二進(jìn)制編碼器的種類及特點(diǎn)
二進(jìn)制編碼器應(yīng)用場(chǎng)景 二進(jìn)制編碼器與模擬編碼器比較
二進(jìn)制編碼器工作原理 如何選擇二進(jìn)制編碼器
C語言生成可執(zhí)行二進(jìn)制文件的具體過程

評(píng)論