1. 程式人生 > 其它 >供應鏈安全——二進位制層面的檢測技術

供應鏈安全——二進位制層面的檢測技術

閉源軟體中複用開源元件檢測

元件複用型漏洞

定義:因複用含有漏洞的元件(第三方庫、開源框架等)而引入的軟體漏洞
現有檢測方法

元件複用型漏洞的檢測

核心技術: 閉源二進位制軟體的開源元件複用檢測

對於原始碼與二進位制程式碼間的複用檢測受到複雜的複用關係影響,即檢測複用時對簡單的複用可能有用,如zlib.dll與zlib庫,而對多層呼叫就失去了效果。
主要用到的方法如下:

因此,識別問題不僅僅時簡單的程式碼相似性檢測問題,需要識別複雜關係,因此,複用檢測的工作變成了流行的程式碼相似性檢測+複用關係識別
現有工作準確率不高的原因

  1. 沒有符號資訊,完全依賴於程式碼特徵比對
  2. 使用的程式碼特徵太少,很多程式碼無法提取到有效特徵
    原因:程式碼特徵普遍受編譯優化影響大,無法使用
  3. 沒有考慮複雜複用情況,從而引入大量誤報漏報

解決方案

  • 補充抗編譯優化的程式碼特徵,併為新特徵設計合理的匹配演算法和權重演算法
  • 對複用型別進行劃分,針對不同型別進行鍼對性識別

1、程式碼特徵選擇

常用程式碼特徵與新增程式碼特徵評估:

2、程式碼特徵提取

二進位制程式碼特徵提取方法:基於IDAPython提取匯出函式、字串、switch/case、if/else
結合編譯資訊的原始碼特徵提取方法:
原始碼特徵提取方法:基於clang和llvm開發特徵提取工具
特徵所對應程式碼片段:

3、程式碼相似度計算

4、複用型別劃分

  • 單一複用

1 bin -> 1 src

  • 混合複用

1 bin -> N src

  • 部分複用

N bin <- 1 src

  • 巢狀複用

1 bin -> 1 src -> N src(巢狀複用是假式複用,應被去除)

閉源軟體中複用開源元件版本檢測

在檢測複用元件的基礎上,檢測複用元件的版本,因為不同版本的影響的漏洞有限

從待檢測二進位制檔案中提取程式碼特徵,和預先準備好的從原始碼中提取的特徵進行比較,現有工作如下:

侷限性:

版本敏感特徵選擇

選擇的核心標準:不同版本之間的區分度拉滿

全域性特徵
區分度公式:
舉例如下:

函式級別特徵

粗匹配

全域性級別特徵匹配方案 -> 粗匹配階段
特徵匹配方案:精準匹配——全域性級別特徵在編譯前後不發生變化

精匹配

函式級別特徵用來定位函式,整個函式作為一個整體,所以採用基於相似度的識別方案。

具體的匹配演算法:

參考文獻

《軟體安全原理》——霍瑋

轉載請說出處:from 信安科研人