二進制SCA指紋提取黑科技: go語言逆向技術
華為云DevCloud軟件開發平臺在2022華為伙伴暨開發者大會重磅推出了4大新能力,其中的二進制成分分析安全檢測能力,能夠實現對開源軟件漏洞的全面排查、快速精準定位問題、并迅速響應修復;本文將對什么是二進制SCA檢測服務以及該服務的優勢進行解讀。
什么是二進制SCA檢測
SCA(Software Composition Analysis)軟件成分分析,指通過對軟件源碼、二進制軟件包等的靜態分析,挖掘其所存在的開源合規、已知漏洞等安全合規風險,是一種業界常見的安全測試手段(目前華為云提供二進制SCA檢測服務,源碼SCA檢測服務后續正式發布)。
二進制SCA檢測服務,檢測對象為二進制軟件包/固件,直接從二進制文件中提取常量字符串、部分類名稱、函數名稱等特征信息,再運用匹配算法進行相似度計算,根據相似度門限來檢測出引用的開源軟件名稱和版本號。
二進制SCA檢測對比源碼SCA檢測的優勢
無需依賴源碼,操作方便
用戶只需上傳二進制軟件包/固件,服務會采用靜態檢測技術,不用構建運行環境,不用運行程序即可快速分析二進制軟件包/固件中存在的安全風險問題,并輸出一份專業的分析報告。
圖:二進制成分分析-檢測處理流程
二進制SCA指紋提取黑科技:Go語言逆向技術之---恢復函數名稱算法
在對程序做安全審計、漏洞檢測時,通常都需要對程序做逆向分析,我們在沒有符號表的情況下,提出了一種恢復函數名稱的算法,方便對Go語言二進制文件進行逆向分析,提升分析效率。
Go語言是最近幾年發展非常火的一種語言,它具備和C/C++一樣的運行速度快的優點,同時又具備開發效率高,支持包管理機制高階語言特點。其編譯出來的二進制文件格式和C/C++一樣運行在Linux平臺下是elf格式,運行在windows平臺下是pe格式,但同時在二進制文件的內部細節上Go語言有自己特有的屬性,二進制逆向人員可以利用Go語言這些特有屬性來實現對二進制文件進行更精準的逆向分析。
特性1:利用go語言中特有的節信息來判斷elf/pe文件的源代碼語言類型,是go語言還是C、c++語言。
通過判斷二進制文件中是否存在“.noptrdata”、“.gopclntab”、“.data.rel.ro.gopclntab”確定源代碼,如果存在上述節名稱,則源代碼為Go語言。
特性2:在沒有符號表的情況下如何恢復函數名稱
我們知道在C/C++編譯出來的二進制文件中,如果沒有符號表信息是沒法看到函數名稱的,在IDA工具中只能看到地址信息。
Go語言怎么來恢復函數名稱呢,可以通過從.data.rel.ro節來恢復函數名,具體查找定位算法如下:
方法1:解析頭信息可以獲取magic, quantum, ptr_size, func_tab_count數據,當magic為’xfbxffxffxff’時,entry_size = 2 * ptr_size為entry結構體大小,func_tab_count為entry結構體數量;解析entry結構獲取到名稱信息結構數據位置偏移(需要注意64位和32位Go程序 func_info_offset位置相反),讀取名稱信息結構體數據,再從中獲取到名稱字符串位置偏移(name_offset),根據此偏移定位到函數名稱字符串起始位置偏移,從該位置解析得到函數名稱。
方法2:另外1.16版本Go語言結構有些新變化,magic變為’xfaxffxffxff’,解析頭信息獲取func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off數據,其中func_tab_off為entry數據起始位置,解析entry結構獲取code_off, func_info_offset數據,后續解析過程與magic=’xfbxffxffxff’一致。通過上述兩個方法可以恢復函數真實名稱,從而方便對Go語言二進制文件的逆向分析,提升分析效率。
DevCloud軟件開發平臺基于二進制成分分析技術,可以為開發者提供以下能力支持:
支持多種類型安裝包:支持windows、linux、IoT固件包、安卓部署包等常見軟件包的安全檢測。
檢測全面:支持針對開源軟件的許可證、漏洞、信息泄露、安全配置等3大項、25小類的安全問題檢測。
開源軟件覆蓋全面:覆蓋100+漏洞源、百萬級開源組件版本,開源問題全覆蓋。
保障迅速:小時級漏洞更新,提升漏洞發現速度,降低安全風險。
審核編輯 黃昊宇
-
二進制
+關注
關注
2文章
796瀏覽量
41757 -
SCA
+關注
關注
1文章
36瀏覽量
12010 -
go語言
+關注
關注
1文章
158瀏覽量
9089
發布評論請先 登錄
相關推薦
評論