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

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

组件复用型漏洞

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

组件复用型漏洞的检测

核心技术: 闭源二进制软件的开源组件复用检测
在这里插入图片描述
对于源代码与二进制代码间的复用检测受到复杂的复用关系影响,即检测复用时对简单的复用可能有用,如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 信安科研人
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>