供应链安全——二进制层面的检测技术
Posted 苟利国家生死以,岂因祸福避趋之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了供应链安全——二进制层面的检测技术相关的知识,希望对你有一定的参考价值。
闭源软件中复用开源组件检测
组件复用型漏洞
定义:因复用含有漏洞的组件(第三方库、开源框架等)而引入的软件漏洞
现有检测方法:
组件复用型漏洞的检测
核心技术: 闭源二进制软件的开源组件复用检测
对于源代码与二进制代码间的复用检测受到复杂的复用关系影响,即检测复用时对简单的复用可能有用,如zlib.dll与zlib库,而对多层调用就失去了效果。
主要用到的方法如下:
因此,识别问题不仅仅时简单的代码相似性检测问题,需要识别复杂关系,因此,复用检测的工作变成了流行的代码相似性检测+复用关系识别:
现有工作准确率不高的原因:
- 没有符号信息,完全依赖于代码特征比对
- 使用的代码特征太少,很多代码无法提取到有效特征
原因:代码特征普遍受编译优化影响大,无法使用 - 没有考虑复杂复用情况,从而引入大量误报漏报
解决方案:
- 补充抗编译优化的代码特征,并为新特征设计合理的匹配算法和权重算法
- 对复用类型进行划分,针对不同类型进行针对性识别
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 信安科研人
以上是关于供应链安全——二进制层面的检测技术的主要内容,如果未能解决你的问题,请参考以下文章