问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从源码分析快速实现对新开源软件的检测

发布网友 发布时间:2024-09-29 19:12

我来回答

1个回答

热心网友 时间:2024-10-05 12:32

在二进制SCA检测原理中提到对于常量字符串、部分类名称、函数名称、以及一些配置信息还是存在的,并且这些信息具备一定的不变性;因此二进制SCA工具其中的一部分特征来源就包含这些信息。因此在特征库保存有每个开源软件的特征,二进制SCA工具在检测时会从待检测二进制文件中提取出特征,通过算法和特征库的保存的开源软件特征进行相似度计算,从而判断该二进制文件中引用了哪些开源软件及对应的版本号。

二进制SCA检测处理流程:

从检测流程和方法中可以看出特征库中保存的特征来源并没有规定一定从二进制文件中生成,而是只要满足特征库中的特征必须和二进制中生成的特征要一致,因为计算相似度时其中一个输入的特征是从二进制文件中提取到的。很明显特征库中特征来源无非就2条路径:一条来自二进制文件,另外一条那就是来自生成二进制的源代码。

不同特征来源优缺点比较:1. 二进制文件特征提取优点:

基于二进制文件来提取特征具有提取方便,和检测时提取方法一致,不需要额外开发提取工具和提取算法。

2. 二进制文件特征提取缺点:

a. 二进制文件首先需要由源代码编译出来,而搭建构建编译环境可能会很复杂,需要很多额外的工作量,效率低;

b.由于编译宏的原因,由源代码生成的二进制文件并不一定是全量源代码都包含中其中的,可能只有部分源代码参与生成最终的二进制文件;

c.由于构建依赖的原因,二进制文件中包含有依赖对象的信息,也就是说包含有源代码之外对象的信息,这会导致提取到的特征纯度不足,直接影响到检测结果的准确性;

3. 源码特征提取优点:

正好可以解决从二进制文件中生成特征的短板问题,不需要编译可以大大提升自动化出来水平和提取效率,提取到的特征只限于源代码中的特征和其他无关,提取到的特征纯度很高。

4. 源码特征提取缺点:

针对不同语言类型需要额外开发相应的特征提取工具来实现特征提取,开发工作量大,且不同语言的特征提取工具开的发难度也不一样,对开发者是一个挑战。

基于源码的特征生成方法:

不同语言具有不同的特点,在考虑基于源码的特征生成方法时需要考虑到语言特点来采用针对性的方法来解决,这样可以起到事半功倍的作用。下面针对不同语言分别来说明对应的解决方法:

C语言:没有类的复杂性,在构建时只要用到的源码文件,该文件中的所有函数信息都会被一起编译进二进制文件中。

C++语言:引入了类的复杂性,在构建时只要引用了类的实例,该类信息才会被编译到二进制文件中,而不像C语言一个源代码文件是一个整体来处理的。另外类中的构造函数和析构函数会被编译器自动引入在二进制文件中,从而出现源代码和二进制文件不一致情况。

Java语言:也存在类的复杂性,特别是嵌套类和内部类的情况,这也导致源代码特征和二进制特征之间的处理难点。

Go语言:具备依赖管理机制,但编译出来的二进制文件却和C、C++一样具有PE、ELF格式,go语言的模块特性也带来了源码提取的特征和二进制之间的差别,此外go语言相比C、C++来说更容易生成对应源代码的抽象语法树AST。

Python语言:也具备依赖管理机制,但pyc和pyd之间差别很大,pyc是字节码格式可以很方便的进行反编译,但pyd则像C、C++一样是指令码式文件,因此特征提取方法完全不一样,同样也带来了源代码提取特征和二进制提取特征之间的不一致问题需要解决,比如:1. python源码在编译成pyc时有一些编译优化,在源码提取特征时要加入编译优化,且不同版本编译优化有差异,统一使用最多的编译优化提取源码特征并且pyc文件提取特征时也需要进行适当的优化;2. python不同版本同一代码翻译成的指令序列不一样,pyc提取特征时要兼容多个版本;3. py2、py3的pyc中字符串的编码方式不一样,而且unicode的支持范围不一样,需要保证字符串特征提取一致;同样Python源代码也相对容易的可以生成对应源代码的抽象语法树AST。

另外对于C、C++源代码由于存在依赖和构建环境的原因而导致源代码无法编译,而很多工具需要能编译成功才能获取到AST的,比如CDT、Clang等,在这种情况下就没法使用了,必须使用具备词法分析和语法分析能力的工具来获取特征相关一些数据,比如cppcheck工具。不管是基于AST还是词法、语法分析输出数据,都需要自己在此数据的基础上开发相应的数据分析工具来提取到最终的开源软件特征,并且该特征数据和从二进制文件中提取到的特征数据具有很好的一致性要求。

总结:

只有具备从源码中生成上述特征,才能充分利用源码特征提取优点,进行自动化的特征提取,提升特征提取效率,快速实现对新出现开源软件的检测能力。

本文分享自华为云社区《基于源码的二进制SCA特征生成技术》,作者: 安全技术猿。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成瘾性是指是什么 嗜性癖嗜性癖-成因观点 什么是“性成瘾”?一位性瘾者的真实人生:真相或许和你想得不同_百度... 你们会别自己的女朋友诱惑嘛 兔子这样是不是要交配了? 用IEEE754标准32位浮点数表示,十进制数0.2356换成二进制,谢谢高手 沃tv现在看电视需要流量吗 控油补水用什么护肤品 救急救急!! 现在还能不能买到烟台到西安的火车票? 天龙八部元宝赠点是怎么回事 木马不断复制。求救 女生对男生说大姨妈来了代表啥 想看师生恋校园宠文 有什么好看的师生恋的小说吗? 好看的现代师生恋小说 求甜文,校园,师生恋,男主高冷 ...旷工超过几个工作日的事业单位可以解除聘用合同 ...该单位可以解除与他签订的聘用合同,是否正确? 一幅油画的面积是35平方分米,宽是5分米,它的长是多少分米 女人手大好不好 女人手大脚大的命运 女人的手大代表什么? 罗马大帝是什么鬼 电脑怎么调节显示器亮度? 如何让电脑液晶显示器不伤害到你的眼睛? ...带不上去 刚刚碰倒眼球就会很敏感自己眨眼 有什么办 带隐形眼镜感觉眼镜干,转动眼球有异物感,眨眼,看眼角的方向会感觉有一... ...并且摘了眼镜后眼球会很红,这是怎么回事啊? 古代神兽夔牛 夔牛象征什么 夔牛是什么? 求救。。中了毒王了。。。Auto 大家好,我希望有内行,真心,准确的回答!我这种电脑配置,用精影HD7750... 我这个配置显卡怎么样,显卡同样的价钱可以买精影的hd770,各位说我换不... 精影HD7750(1g)和蓝宝石HD6770(512mb),哪个性能更好?我家显示器15寸... 我这配置装这独立显卡有用吗 精影R7-350 2GD5 枪神纪可以运行不?大概什 ... 中国银行贷款利息怎么还 妈妈生病离世了,我总梦见 妈妈好像又活过来了,但是还是生着病,也是最... 梦到妈妈去世,但又活了过来,借地说破,希望天下所有的父母都能身体健康... 高考作文审题立意!阅卷细则+一类文立意技巧+超好用的审题Tips!告别跑题... 隔着玻璃晒衣服可以杀菌效果 如何发朋友圈文字不让别人看到呢? 我在朋友圈发纯文字,为什么别人看不到? 中国人寿都有什么险种 ...结果一拳打在我眼上 当时脸就肿起来了 还留鼻血 但... 被人打了一拳,一直流鼻涕,是怎么回事啊 ? 为什么完条形码信息只能扫到二维码信息,扫不到条? ...我的右脸颊(右眼下面鼻子旁边那部分)之后过了一会就流了鼻血并... 后脑(靠近耳朵)被打了一拳,当时只是有些疼,次日略肿。还流了一次鼻血... ...上既有二维码又有条形码,但是能扫出条形码扫不到二维码,请问怎么回事... 什么是有效的市场约束?