引用格式:羅治祥,向棲,李樂言.基于污點分析的二進制程序漏洞檢測系統設計與實現[J].網絡安全與數據治理,2023,42(11):1-7.
0引言
近年來,隨著計算機技術的不斷發展,軟件行業迅速發展,軟件的體量、種類不斷增大。同時,由于程序代碼編寫不規范,編寫過程存在疏忽,或者缺乏軟件安全方面的意識等,導致軟件的安全性承受巨大威脅。針對這一現狀,構建漏洞檢測系統對軟件進行安全檢測是最行之有效的辦法之一,可在一定程度上發現并且及時消除潛在的漏洞。
軟件的安全檢測方法通常可以分為動態測試[1]和靜態分析[2]兩大類,靜態分析這一方法相較于動態測試具有更高的覆蓋率以及性能效率。現有的靜態分析方案大多都基于源碼級別[3]進行分析,雖然可以在比較高的程度上滿足軟件安全需要,但是在許多真實的安全測試場景中,需要分析對象大多屬于常見的二進制文件,比如商業軟件、車機固件、嵌入式系統固件等。此時安全研究人員難以獲得相應的源代碼,源碼級靜態分析方案不再適用。現今商業化的二進制程序漏洞分析系統基本不具備可二次開發的擴展性,而開源的二進制程序漏洞分析系統,比如 angr[4] 、 BAP[5] 、 BinAbsInspector等優秀的靜態分析工具存在一些適用性問題。其中,angr 和 BAP 正逐步發展為通用分析框架,而不僅僅專注于二進制漏洞掃描,這使得內部分析算法變得復雜,不便于后續的擴展和優化。BinAbsInspector是基于Ghidra的插件,使用Java編寫開發,提供的API比較有限,在可擴展性上有所欠缺,普通的二進制安全研究員無法有效地基于該工具進行自定義開發。因此,構建一款在性能和可擴展性上較為突出,同時也滿足于真實場景需要的二進制程序漏洞檢測系統刻不容緩。
針對上述問題,Tan[6]等基于Java提出了一種較為簡易的指針分析[7]算法,該算法在使用Datalog[8]引擎支撐之后,在構建好的程序抽象數據上進行分析,使得性能得到較大的提升。對于獲取二進制程序抽象數據而言,普遍的做法是反編譯[9]二進制程序生成IR中間表示,進一步對其進行優化和轉換得到其AST語法樹,最后依據AST語法樹得到程序抽象數據,比較好的工具有IDA Pro、Ghidra、Binary Ninja等。本文設計系統選取了IDA Pro進行程序抽象數據獲取,使用IDA Pro特有的IDAPython,從原生角度適配了IDA Pro提供各項API接口,從可擴展性上兼具了Python腳本跨平臺、易擴展等優點;從性能方面,Python庫中的pyDatalog可以替代常見的Datalog引擎,且性能方面相差無幾。
文章詳細內容下載請點擊:基于污點分析的二進制程序漏洞檢測系統設計與實現AET-電子技術應用-最豐富的電子設計資源平臺 (chinaaet.com)
作者信息:
羅治祥1,向棲2,李樂言1,3
(1工業和信息化部電子第五研究所,廣東廣州511370;2東北大學軟件學院,遼寧沈陽110819;3智能產品質量評價與可靠性保障技術工業和信息化部重點實驗室,廣東廣州511370)