供应链安全——二进制层面的检测技术

Posted 苟利国家生死以,岂因祸福避趋之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了供应链安全——二进制层面的检测技术相关的知识,希望对你有一定的参考价值。

闭源软件中复用开源组件检测

组件复用型漏洞

定义:因复用含有漏洞的组件(第三方库、开源框架等)而引入的软件漏洞
现有检测方法

组件复用型漏洞的检测

核心技术: 闭源二进制软件的开源组件复用检测

对于源代码与二进制代码间的复用检测受到复杂的复用关系影响,即检测复用时对简单的复用可能有用,如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 信安科研人

以上是关于供应链安全——二进制层面的检测技术的主要内容,如果未能解决你的问题,请参考以下文章

CICD 的供应链安全工具 Tekton Chains

区块链技术在商业银行的应用研究

供应配置文件中 plist 周围的二进制数据是啥?

二进制安全学习路线(转)

使用 Haskell 编写自己的区块链

二进制SCA指纹提取黑科技:Go语言逆向技术