定义:因复用含有漏洞的组件(第三方库、开源框架等)而引入的软件漏洞
现有检测方法:
核心技术: 闭源二进制软件的开源组件复用检测
对于源代码与二进制代码间的复用检测受到复杂的复用关系影响,即检测复用时对简单的复用可能有用,如zlib.dll与zlib库,而对多层调用就失去了效果。
主要用到的方法如下:
因此,识别问题不仅仅时简单的代码相似性检测问题,需要识别复杂关系,因此,复用检测的工作变成了流行的代码相似性检测+复用关系识别:
现有工作准确率不高的原因:
解决方案:
常用代码特征与新增代码特征评估:
二进制代码特征提取方法:基于IDAPython提取导出函数、字符串、switch/case、if/else
结合编译信息的源代码特征提取方法:
源代码特征提取方法:基于clang和llvm开发特征提取工具
特征所对应代码片段:
1 bin -> 1 src
1 bin -> N src
N bin <- 1 src
1 bin -> 1 src -> N src(嵌套复用是假式复用,应被去除)
在检测复用组件的基础上,检测复用组件的版本,因为不同版本的影响的漏洞有限
从待检测二进制文件中提取代码特征,和预先准备好的从源代码中提取的特征进行比较,现有工作如下:
局限性:
选择的核心标准:不同版本之间的区分度拉满
全局特征:
区分度公式:
举例如下:
函数级别特征:
全局级别特征匹配方案 -> 粗匹配阶段:
特征匹配方案:精准匹配——全局级别特征在编译前后不发生变化
函数级别特征用来定位函数,整个函数作为一个整体,所以采用基于相似度的识别方案。
具体的匹配算法:
《软件安全原理》——霍玮
转载出处:from 信安科研人