CN115794629A - 软件成分检测方法、电子设备及计算机可读存储介质 - Google Patents
软件成分检测方法、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115794629A CN115794629A CN202211487236.3A CN202211487236A CN115794629A CN 115794629 A CN115794629 A CN 115794629A CN 202211487236 A CN202211487236 A CN 202211487236A CN 115794629 A CN115794629 A CN 115794629A
- Authority
- CN
- China
- Prior art keywords
- software
- component
- detected
- screening
- matched
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开一种软件成分检测方法、电子设备及计算机可读存储介质,方法包括:建立特征库的步骤:将源码库中的各组件的源码分别编译成二进制文件;对各二进制文件分别进行反编译形成汇编程序;分别从各汇编程序中提取所包含的常量字符串;将提取到的所有常量字符串及其与各组件的第一对应关系存储在特征库中。匹配步骤:将待检软件的待检二进制文件进行反编译形成待检汇编程序并从待检汇编程序中提取所包含的待匹配常量字符串;将若干待匹配常量字符串依次与特征库中的常量字符串进行匹配以根据匹配结果和特征库中的第一对应关系对特征库中的组件进行第一步筛选。本申请提供了一种全新的基于二进制文件检测的软件成分检测方法。
Description
技术领域
本申请涉及软件成分检测技术领域,具体涉及一种软件成分检测方法、电子设备及计算机可读存储介质。
背景技术
现代软件开发,开源组件的使用越来越多,据Gartner调查统计,绝大多数的软件开发中都或多或少地使用了各类开源的软件组件,各种便利的开源组件给开发人员带来了极大的便利。然而任何的便利,都会带来风险的一面,开源组件的广泛普及和使用带来的风险不容忽视:如开源组件的运维和管理风险、漏洞和数据安全风险、合规和知识产权风险等。针对此情况,当前市场上已经有很多软件成分分析工具(SCA工具)应运而生,通过软件成分分析技术可以分析项目应用中所含的第三方开源成分及其漏洞和许可的风险情况。目前软件成分分析技术通常是利用源码检测,在源码检测上可通过包管理器,代码函数特征等方式来进行检测,而二进制检测相对源码检测具有很大的难度,目前尚未出现成熟的二进制检测技术方案。
发明内容
本申请的目的在于提供一种软件成分检测方法、电子设备及计算机可读存储介质,能够基于二进制文件进行检测。
为实现上述目的,本申请提供了一种提供了一种基于二进制文件检测的软件成分检测方法,包括:
建立特征库的步骤:
将源码库中的各组件的源码分别编译成二进制文件;
对各所述二进制文件分别进行反编译形成汇编程序;
分别从各所述汇编程序中提取所包含的常量字符串;
将提取到的所有常量字符串及其与各组件的第一对应关系存储在所述特征库中;
匹配步骤:
将待检软件的待检二进制文件进行反编译形成待检汇编程序并从所述待检汇编程序中提取所包含的待匹配常量字符串;
将若干所述待匹配常量字符串依次与所述特征库中的常量字符串进行匹配以根据匹配结果和所述特征库中的第一对应关系对所述特征库中的组件进行第一步筛选。
可选地,如果存在唯一的组件使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果存在至少两个组件使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串,则该至少两个组件进入下一步筛选;
如果不存在使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串的组件,且存在至少两个组件使所述待检软件的部分待匹配常量字符串匹配到其常量字符串,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设字符串数量的待匹配常量字符串匹配到其常量字符串,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
可选地,所述建立特征库的步骤还包括:
基于各所述汇编程序建立每一所述组件的函数与所述常量字符串的第二对应关系并存储在所述特征库中;
所述匹配步骤还包括:
基于所述待检汇编程序建立所述待检软件的函数与所述待匹配常量字符串的第三对应关系;
将所述待检软件的所述第三对应关系分别与所述第一步筛选过来的组件的所述第二对应关系进行匹配;
如果存在唯一的组件使所述待检软件的所有第三对应关系均匹配到其第二对应关系,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果存在至少两个组件使所述待检软件的所有第三对应关系均匹配到其第二对应关系,则该至少两个组件进入下一步筛选;
如果不存在使所述待检软件的所有第三对应关系均匹配到其第二对应关系的组件,且存在至少两个组件使所述待检软件的部分第三对应关系匹配到其第二对应关系,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
可选地,如果不存在组件使所述待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,结束筛选并返回筛选结果。
可选地,所述建立特征库的步骤还包括:
基于所述汇编程序提取各所述组件的代码块中的函数内容;
对提取到的各所述组件的函数内容分别进行哈希得到第一函数特征并存储在所述特征库中;
所述匹配步骤还包括:
基于所述待检汇编程序提取所述待检软件的代码块中的函数内容;
对提取到的所述待检软件的函数内容进行哈希得到第二函数特征;
将所述待检软件的所述第二函数特征分别与上一步筛选过来的组件的所述第一函数特征进行匹配;
如果存在组件使所述待检软件的所有第二函数特征均匹配到其第一函数特征,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果不存在组件使所述待检软件的所有第二函数特征均匹配到其第一函数特征,且存在至少两个组件使所述待检软件的部分第二函数特征匹配到其第一函数特征,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
可选地,如果不存在组件使所述待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,结束筛选并返回筛选结果。
可选地,所述建立特征库的步骤还包括:
基于所述汇编程序提取各所述组件的第一控制流特征并存储在所述特征库;
所述匹配步骤还包括:
基于所述待检汇编程序提取所述待检软件的第二控制流特征;
将所述待检软件的所述第二控制流特征与利用函数特征匹配筛选过来的组件的所述第一控制流特征进行匹配;
根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算。
可选地,所述根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算包括:
设置常量字符串匹配的权重系数为A、对应关系匹配的权重系数为B、函数特征匹配的权重系数为C、控制流特征匹配的权重系数为D,以及设置阈值为E;
对完成控制流特征匹配的各组件分别进行如下计算:
匹配上所述待匹配常量字符串的所述常量字符串的数量*A+匹配上所述第三对应关系的所述第二对应关系的数量*B+匹配上所述第二函数特征的所述第一函数特征的数量*C+匹配上所述第二控制流特征的所述第一控制流特征的数量*D;
将上述计算结果与阈值E进行比较;
如果上述计算结果大于或大于等于阈值E,则该组件为有效组件。
为实现上述目的,本申请还提供了一种电子设备,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行如前所述的软件成分检测方法。
为实现上述目的,本申请还提供了一种计算机可读存储介质,其上存储有程序,所述程序被处理器执行时实现如前所述的软件成分检测方法。
本申请还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行如上所述的软件成分检测方法。
本申请从汇编程序中提取各组件所包含的常量字符串并将取到的所有常量字符串及其与各组件的第一对应关系存储在特征库中,并将从待检软件提取到的待匹配常量字符串依次与特征库中的常量字符串进行匹配,进而可以根据匹配结果和特征库中的第一对应关系对特征库中的组件进行筛选,从而可以快速筛选出相关的组件,以有利于待检软件的成分判断。相比现有技术基于源码检测,本申请提供了一种全新的基于二进制文件检测的软件成分检测方法。
附图说明
图1是本申请实施例软件成分检测方法的流程图。
图2是本申请实施例软件成分检测方法以及利用筛选到的有效组件进行组件库和漏洞库匹配的流程图。
图3显示了一组件的常量字符串。
图4是本申请实施例电子设备的示意框图。
具体实施方式
为了详细说明本申请的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
实施例一
请结合图1至图3,本申请公开了一种软件成分检测方法,包括:
建立特征库的步骤:
将源码库中的各组件的源码分别编译成二进制文件。源码库指的是从GitHub,Gitee上下载的源代码。在下载源代码的同时可以收集该代码对应的项目信息,这个也就是组件信息,比如下载openssl这个项目的源码,源码库是openssl这个项目对应的多个版本的源码包,组件库即是openssl的项目信息,如版本号,每个版本号的发布时间,作者,供应商,项目地址等等,这些信息组成的就是openssl的组件库信息。
对各二进制文件分别进行反编译形成汇编程序。
分别从各汇编程序中提取所包含的常量字符串。具体地,在可读数据节区中提取ASCH码值,并从中解析出对应的常量字符串,每个组件都会提取到若干个常量字符串。
将提取到的所有常量字符串及其与各组件的第一对应关系存储在特征库中。比如,其中一个常量字符串对应三个组件(该三个组件包括该常量字符串),另一个常量字符串对应两个组件,等等。
匹配步骤:
将待检软件的待检二进制文件进行反编译形成待检汇编程序并从待检汇编程序中提取所包含的待匹配常量字符串。
将若干待匹配常量字符串依次与特征库中的常量字符串进行匹配以根据匹配结果和特征库中的第一对应关系对特征库中的组件进行第一步筛选。
本申请从汇编程序中提取各组件所包含的常量字符串并将取到的所有常量字符串及其与各组件的第一对应关系存储在特征库中,并将从待检软件提取到的待匹配常量字符串依次与特征库中的常量字符串进行匹配,进而可以根据匹配结果和特征库中的第一对应关系对特征库中的组件进行筛选,从而可以快速筛选出相关的组件,以有利于待检软件的成分判断。相比现有技术基于源码检测,本申请提供了一种全新的基于二进制文件检测的软件成分检测方法。
在建立本申请的特征库之前,根据需要可先进行交叉编译环境的搭建及编译的工作,目的是可以将源码库中的源码都编译成对应平台的二进制文件。交叉编译的意思,这个环境要跨平台编译,也就是在一套环境中要编译该源码对应的linux的二进制文件和windows的二进制文件等,根据需求要编译arm架构,x86架构等下的二进制文件。这就需要在环境中准备对应架构对应平台的编译器,然后配合完成编译工作。将源码库中的每个源码都编译成不同平台不同架构的二进制文件,这个工作由于对环境和编译器以及每个源码的编译机制不同,目前无法实现完全自动化工作,可以早期通过人工编译的方式,总结出规律和方法,将同一类型的源码、平台、架构的编译工作写成自动化程序,逐步替换人工方式,这样可以快速批量生成二进制文件。
在一些实施方式中,在匹配时,第一个匹配的待匹配常量字符串匹配到常量字符串且该常量字符串对应组件的数量为两个或两个以上时,则将后续匹配的范围可以限缩在该两个或两个以上组件对应的所有常量字符串,第二个匹配的待匹配常量字符串仅在该常量字符串范围内进行匹配即可;第一个匹配的待匹配常量字符串匹配到常量字符串且该常量字符串对应组件的数量为一个时,可以结束后续匹配,该匹配到的唯一组件即视为与待检软件最接近的组件(包括相同);第一个匹配的待匹配常量字符串没有匹配到常量字符串,则第二个匹配的待匹配常量字符串同样要匹配第一个匹配的待匹配常量字符串匹配的所有常量字符串;以此类推,从而有利于快速匹配。
在一些实施方式中,如果存在唯一的组件使待检软件的所有待匹配常量字符串均匹配到其常量字符串,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。然后可以通过该组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。漏洞库指的是从CVE、NVD等官网上下载的漏洞信息,比如漏洞编号,发布时间,风险系数等等,漏洞库中还有CPE的信息,指明该漏洞影响的组件信息,通过这个生成组件和漏洞的映射关系,这些信息组成在一起就是漏洞库信息。
如果存在至少两个组件使待检软件的所有待匹配常量字符串均匹配到其常量字符串,则该至少两个组件进入下一步筛选。由于待匹配常量字符串完全匹配上的组件有至少两个,说明该至少两个组件为相对更接近的组件,因此直接将该至少两个组件进入下一步筛选即可,有利于提升筛选效率。
如果不存在使待检软件的所有待匹配常量字符串均匹配到其常量字符串的组件,且存在至少两个组件使待检软件的部分待匹配常量字符串匹配到其常量字符串,则该至少两个组件进入下一步筛选。具体地,“部分待匹配常量字符”中部分的下限可以自定义,比如,可以是1个。
如果仅存在一个组件使待检软件的至少预设字符串数量的待匹配常量字符串匹配到其常量字符串,说明已经筛选到唯一的组件,已经没有可供继续筛选的组件存在,此时可以结束筛选并将该组件作为筛选成功组件来返回筛选结果。接着可以根据该筛选成功组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。当然,在筛选成功组件匹配上的字符串数量较低时,也可根据设置不利用筛选成功组件进行匹配关联组件库和/或漏洞库。具体地,预设字符串数量可以自行设定,比如设置为1个。
如果不存在组件使待检软件的至少预设字符串数量的待匹配常量字符串匹配到其常量字符串,说明没有符合筛选条件的组件,此时可以结束筛选并返回筛选结果。
通过利用上述常量字符串匹配的方式进行组件的筛选,可以从特征库中大量的组件中快速地进行初步筛选,进而可以根据匹配结果确定要进入下一步筛选的组件或者确定出唯一的筛选成功组件,亦或是确定没有筛选出符合条件的组件。
在一些实施方式中,建立特征库的步骤还包括:
基于各汇编程序建立每一组件的函数与常量字符串的第二对应关系并存储在特征库中。
具体地,可以遍历汇编程序中所有的函数并记录每个函数中的常量字符串(与从ASCH码值中提取到的常量字符串为同样的常量字符串),进而可以建立每一组件的各函数与常量字符串的对应关系(第二对应关系)并存储在特征库中。当然,本申请并非限制为遍历汇编程序中所有的函数,只要能够找到含有上述常量字符串的各函数即可。
匹配步骤还包括:
基于待检汇编程序建立待检软件的函数与待匹配常量字符串的第三对应关系。待检软件的函数与待匹配常量字符串的第三对应关系的具体建立方式可以参照特征库中第二对应关系的具体建立方式,这里不再详述。
将待检软件的第三对应关系分别与第一步筛选过来的组件的第二对应关系进行匹配。
如果存在唯一的组件使待检软件的所有第三对应关系均匹配到其第二对应关系,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。然后可以通过该组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。
如果存在至少两个组件使待检软件的所有第三对应关系均匹配到其第二对应关系,则仅该至少两个组件进入下一步筛选。由于第三对应关系完全匹配上的组件有至少两个,说明该至少两个组件为相对更接近的组件,因此直接将该至少两个组件进入下一步筛选即可,有利于提升筛选效率。
如果不存在使待检软件的所有第三对应关系均匹配到其第二对应关系的组件,且存在至少两个组件使待检软件的部分第三对应关系匹配到其第二对应关系,则该至少两个组件进入下一步筛选。具体地,“部分第三对应关系”中部分的下限可以自定义,比如,可以是1个。
如果仅存在一个组件使待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,说明已经筛选到唯一的组件,已经没有可供继续筛选的组件存在,此时可以结束筛选并将该组件作为筛选成功组件来返回筛选结果。接着可以根据该筛选成功组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。当然,在筛选成功组件匹配上的对应关系数量较低时,也可根据设置不利用筛选成功组件进行匹配关联组件库和/或漏洞库。具体地,预设关系数量可以自行设定,比如设置为1个。
如果不存在组件使待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,说明没有符合筛选条件的组件,此时可以结束筛选并返回筛选结果。在没有符合筛选条件的组件,可以直接比较第一步筛选出来的组件(比如进行积分计算),从中选出最接近待检软件的组件作为有效组件来进行组件库和/或漏洞库的匹配;当然,也可以直接认为整个筛选过程没有找到有效组件。
通过待检软件的第三对应关系与第一步筛选过来的组件的第二对应关系的匹配,可以进一步对第一步筛选过来的组件进行筛选,可以根据匹配结果确定要进入下一步筛选的组件或者确定出唯一的筛选成功组件,亦或是确定该步筛选没有筛选出符合条件的组件。由于第一步筛选已经排除了很多组件,因此需要与待检软件进行匹配的组件数量有效减少,有利于快速完成该步的匹配、筛选作业。
由于一些情况下筛选过来的组件,只有待检软件的部分待检常量字符串有匹配上组件的常量字符串,所以在进行对应关系的匹配时,可以只是将对应于上述待检常量字符串的第三对应关系进行匹配,也就是说,“将待检软件的第三对应关系分别与第一步筛选过来的组件的第二对应关系进行匹配”并非限制为全部匹配,也可以更有针对性的匹配。更进一步地,可以更有针对性地建立待检软件的对应关系,进而有利于提升效率。
在一些实施方式中,建立特征库的步骤还包括:
基于汇编程序提取各组件的代码块中的函数内容。该函数内容即从函数起始至结束的全部内容,为上述提到函数的具体内容。
对提取到的各组件的函数内容分别进行哈希得到第一函数特征并存储在特征库中。
匹配步骤还包括:
基于待检汇编程序提取待检软件的代码块中的函数内容。
对提取到的待检软件的函数内容进行哈希得到第二函数特征。
将待检软件的第二函数特征分别与上一步筛选过来的组件的第一函数特征进行匹配。
如果存在组件使待检软件的所有第二函数特征均匹配到其第一函数特征,则该组件使待检软件完美匹配,此时可以结束筛选并将该组件作为筛选成功组件来返回筛选结果。然后可以通过该组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。
如果不存在组件使待检软件的所有第二函数特征均匹配到其第一函数特征,且存在至少两个组件使待检软件的部分第二函数特征匹配到其第一函数特征,则该至少两个组件进入下一步筛选。具体地,“部分第二函数特征”中部分的下限可以自定义,比如,可以是1个。
如果仅存在一个组件使待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,说明已经筛选到唯一的组件,已经没有可供继续筛选的组件存在,此时可以结束筛选并将该组件作为筛选成功组件来返回筛选结果。接着可以根据该筛选成功组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。具体地,预设关系数量可以自行设定,比如设置为1个。
如果不存在组件使待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,说明没有符合筛选条件的组件,此时可以结束筛选并返回筛选结果。在没有符合筛选条件的组件,可以直接比较上一步筛选出来的组件(比如进行积分计算),从中选出最接近待检软件的组件作为有效组件来进行组件库和/或漏洞库的匹配;当然,也不排除直接认为整个筛选过程没有找到有效组件。
通过待检软件的第二函数特征与上一步筛选过来的组件的第一函数特征的匹配,可以进一步对上一步筛选过来的组件进行筛选,可以根据匹配结果确定要进入下一步筛选的组件或者确定出唯一的筛选成功组件,亦或是确定该步筛选没有筛选出符合条件的组件。由于之前的筛选已经排除了很多组件,因此需要与待检软件进行匹配的组件数量有效减少,有利于快速完成该步的匹配、筛选作业。
优选地,进行完对应关系的匹配之后再根据情况进行函数特征的匹配。
进一步地,由于一些情况下筛选过来的组件,只有待检软件的部分第三对应关系有匹配上组件的第二对应关系,所以在进行函数特征的匹配时,可以只是将对应于上述第三对应关系的第二函数特征进行匹配,也就是说,“将待检软件的第二函数特征分别与上一步筛选过来的组件的第一函数特征进行匹配”并非限制为全部匹配,也可以更有针对性的匹配。更进一步地,可以更有针对性地提取待检软件的函数内容并据此计算第二函数特征,进而有利于提升效率。
另外,本申请并不排除进行完常量字符串的匹配后直接进行函数特征的匹配的情况。
在一些实施方式中,建立特征库的步骤还包括:
基于汇编程序提取各组件的第一控制流特征并存储在特征库。具体地,从汇编程序中对控制关键字分别进行指纹提取以得到第一控制流特征,第一控制流特征为对应函数的控制流特征,与第一函数特征存在一一对应关系。
匹配步骤还包括:
基于待检汇编程序提取待检软件的第二控制流特征。
将待检软件的第二控制流特征与利用函数特征匹配筛选过来的组件的第一控制流特征进行匹配。
根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算。
由于有时工程师在引用开源组件时可能会对部分函数内容进行修改,而函数特征匹配成功需要函数内容完全相同,因此,对于部分函数内容存在一些修改的情况,对应的函数特征则不会匹配成功。而本申请通过对函数特征匹配筛选过来的至少两个组件进行控制流特征匹配,能够进一步找到其中的相似函数,在此基础上利用相似度计算有利于得到更为相似的组件。
具体地,根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算包括:
设置常量字符串匹配的权重系数为A、对应关系匹配的权重系数为B、函数特征匹配的权重系数为C、控制流特征匹配的权重系数为D,以及设置阈值为E。
对完成控制流特征匹配的各组件分别进行如下计算:
匹配上待匹配常量字符串的常量字符串的数量*A+匹配上第三对应关系的第二对应关系的数量*B+匹配上第二函数特征的第一函数特征的数量*C+匹配上第二控制流特征的第一控制流特征的数量*D;
将上述计算结果与阈值E进行比较;
如果上述计算结果大于或大于等于阈值E,则该组件为有效组件。
通过上述计算方式,有利于找到更相似的组件作为有效组件。
关于各权重系数和阈值的设置可以根据不同的检测场景和检测包来动态调节,以得到最优解。
需要注意的是,在待检软件转换为待测汇编程序后,可以在进行各步匹配之前把各匹配对象先进行提取生成。当然,并不局限于此,也可以在进行特定对象的匹配时再进行该特定对象的提取、生成,根据情况可以进行更有针对性的提取、生成以及接下来的匹配,有利于提升效率。
利用本申请软件成分检测方法得到有效组件之后,即可以根据该组件匹配关联组件库和/或漏洞库以得到该组件的信息、许可信息、漏洞信息等。
进一步地,可以通过可视化程序,将整个检测的流程通过页面来实现,导出结果用页面来呈现,进行有效的统计和汇总等应用操作。
实施例二
请结合图3,本申请公开了一种电子设备,包括:
处理器30;
存储器40,其中存储有处理器30的可执行指令;
其中,处理器30配置为经由执行可执行指令来执行如上述实施例所述的软件成分检测方法。
实施例三
本申请公开了一种计算机可读存储介质,其上存储有程序,程序被处理器执行时实现如上述实施例所述的软件成分检测方法。
实施例四
本申请实施例公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述软件成分检测方法。
应当理解,在本申请实施例中,所称处理器可以是中央处理模块(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application SpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上所揭露的仅为本申请的较佳实例而已,不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,均属于本申请所涵盖的范围。
Claims (10)
1.一种软件成分检测方法,其特征在于,包括:
建立特征库的步骤:
将源码库中的各组件的源码分别编译成二进制文件;
对各所述二进制文件分别进行反编译形成汇编程序;
分别从各所述汇编程序中提取所包含的常量字符串;
将提取到的所有常量字符串及其与各组件的第一对应关系存储在所述特征库中;
匹配步骤:
将待检软件的待检二进制文件进行反编译形成待检汇编程序并从所述待检汇编程序中提取所包含的待匹配常量字符串;
将若干所述待匹配常量字符串依次与所述特征库中的常量字符串进行匹配以根据匹配结果和所述特征库中的第一对应关系对所述特征库中的组件进行第一步筛选。
2.如权利要求1所述的软件成分检测方法,其特征在于,
如果存在唯一的组件使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果存在至少两个组件使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串,则该至少两个组件进入下一步筛选;
如果不存在使所述待检软件的所有待匹配常量字符串均匹配到其常量字符串的组件,且存在至少两个组件使所述待检软件的部分待匹配常量字符串匹配到其常量字符串,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设字符串数量的待匹配常量字符串匹配到其常量字符串,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
3.如权利要求1或2所述的软件成分检测方法,其特征在于,
所述建立特征库的步骤还包括:
基于各所述汇编程序建立每一所述组件的函数与所述常量字符串的第二对应关系并存储在所述特征库中;
所述匹配步骤还包括:
基于所述待检汇编程序建立所述待检软件的函数与所述待匹配常量字符串的第三对应关系;
将所述待检软件的所述第三对应关系分别与所述第一步筛选过来的组件的所述第二对应关系进行匹配;
如果存在唯一的组件使所述待检软件的所有第三对应关系均匹配到其第二对应关系,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果存在至少两个组件使所述待检软件的所有第三对应关系均匹配到其第二对应关系,则该至少两个组件进入下一步筛选;
如果不存在使所述待检软件的所有第三对应关系均匹配到其第二对应关系的组件,且存在至少两个组件使所述待检软件的部分第三对应关系匹配到其第二对应关系,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
4.如权利要求3所述的软件成分检测方法,其特征在于,
如果不存在组件使所述待检软件的至少预设关系数量的第三对应关系匹配到其第二对应关系,结束筛选并返回筛选结果。
5.如权利要求1至4任一项所述的软件成分检测方法,其特征在于,
所述建立特征库的步骤还包括:
基于所述汇编程序提取各所述组件的代码块中的函数内容;
对提取到的各所述组件的函数内容分别进行哈希得到第一函数特征并存储在所述特征库中;
所述匹配步骤还包括:
基于所述待检汇编程序提取所述待检软件的代码块中的函数内容;
对提取到的所述待检软件的函数内容进行哈希得到第二函数特征;
将所述待检软件的所述第二函数特征分别与上一步筛选过来的组件的所述第一函数特征进行匹配;
如果存在组件使所述待检软件的所有第二函数特征均匹配到其第一函数特征,则结束筛选并将该组件作为筛选成功组件来返回筛选结果;
如果不存在组件使所述待检软件的所有第二函数特征均匹配到其第一函数特征,且存在至少两个组件使所述待检软件的部分第二函数特征匹配到其第一函数特征,则该至少两个组件进入下一步筛选;
如果仅存在一个组件使所述待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,则结束筛选并将该组件作为筛选成功组件来返回筛选结果。
6.如权利要求5所述的软件成分检测方法,其特征在于,
如果不存在组件使所述待检软件的至少预设特征数量的第二函数特征匹配到其第一函数特征,结束筛选并返回筛选结果。
7.如权利要求5所述的软件成分检测方法,其特征在于,
所述建立特征库的步骤还包括:
基于所述汇编程序提取各所述组件的第一控制流特征并存储在所述特征库;
所述匹配步骤还包括:
基于所述待检汇编程序提取所述待检软件的第二控制流特征;
将所述待检软件的所述第二控制流特征与利用函数特征匹配筛选过来的组件的所述第一控制流特征进行匹配;
根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算。
8.如权利要求7所述的软件成分检测方法,其特征在于,
所述根据各步匹配结果对完成控制流特征匹配的各组件进行相似度计算包括:
设置常量字符串匹配的权重系数为A、对应关系匹配的权重系数为B、函数特征匹配的权重系数为C、控制流特征匹配的权重系数为D,以及设置阈值为E;
对完成控制流特征匹配的各组件分别进行如下计算:
匹配上所述待匹配常量字符串的所述常量字符串的数量*A+匹配上所述第三对应关系的所述第二对应关系的数量*B+匹配上所述第二函数特征的所述第一函数特征的数量*C+匹配上所述第二控制流特征的所述第一控制流特征的数量*D;
将上述计算结果与阈值E进行比较;
如果上述计算结果大于或大于等于阈值E,则该组件为有效组件。
9.一种电子设备,其特征在于,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至8任一项所述的软件成分检测方法。
10.一种计算机可读存储介质,其上存储有程序,其特征在于,所述程序被处理器执行时实现如权利要求1至8任一项所述的软件成分检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211487236.3A CN115794629A (zh) | 2022-11-24 | 2022-11-24 | 软件成分检测方法、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211487236.3A CN115794629A (zh) | 2022-11-24 | 2022-11-24 | 软件成分检测方法、电子设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115794629A true CN115794629A (zh) | 2023-03-14 |
Family
ID=85441300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211487236.3A Pending CN115794629A (zh) | 2022-11-24 | 2022-11-24 | 软件成分检测方法、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794629A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149669A (zh) * | 2023-04-14 | 2023-05-23 | 杭州安恒信息技术股份有限公司 | 一种基于二进制文件的软件成分分析方法、装置以及介质 |
CN116820556A (zh) * | 2023-08-30 | 2023-09-29 | 深圳开源互联网安全技术有限公司 | 一种检测可执行文件引用的开源组件的方法及相关产品 |
CN116954701A (zh) * | 2023-08-09 | 2023-10-27 | 软安科技有限公司 | 一种基于血缘关系的二进制检测方法及系统 |
CN117972399A (zh) * | 2024-03-28 | 2024-05-03 | 北京安普诺信息技术有限公司 | 用于二进制sca的特征提取方法、装置、设备及介质 |
-
2022
- 2022-11-24 CN CN202211487236.3A patent/CN115794629A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149669A (zh) * | 2023-04-14 | 2023-05-23 | 杭州安恒信息技术股份有限公司 | 一种基于二进制文件的软件成分分析方法、装置以及介质 |
CN116954701A (zh) * | 2023-08-09 | 2023-10-27 | 软安科技有限公司 | 一种基于血缘关系的二进制检测方法及系统 |
CN116954701B (zh) * | 2023-08-09 | 2024-05-14 | 软安科技有限公司 | 一种基于血缘关系的二进制组件检测方法及系统 |
CN116820556A (zh) * | 2023-08-30 | 2023-09-29 | 深圳开源互联网安全技术有限公司 | 一种检测可执行文件引用的开源组件的方法及相关产品 |
CN116820556B (zh) * | 2023-08-30 | 2023-12-01 | 深圳开源互联网安全技术有限公司 | 一种检测可执行文件引用的开源组件的方法及相关产品 |
CN117972399A (zh) * | 2024-03-28 | 2024-05-03 | 北京安普诺信息技术有限公司 | 用于二进制sca的特征提取方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115794629A (zh) | 软件成分检测方法、电子设备及计算机可读存储介质 | |
CN107273751B (zh) | 基于多模式匹配的安全漏洞在线发现方法 | |
US9715593B2 (en) | Software vulnerabilities detection system and methods | |
Bao et al. | {BYTEWEIGHT}: Learning to recognize functions in binary code | |
US9824214B2 (en) | High performance software vulnerabilities detection system and methods | |
Li et al. | String analysis for Java and Android applications | |
RU2427890C2 (ru) | Система и способ сравнения файлов на основе шаблонов функциональности | |
CN114077741B (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
CN104636256A (zh) | 一种内存访问异常的检测方法及装置 | |
Loring et al. | Sound regular expression semantics for dynamic symbolic execution of JavaScript | |
CN111400719A (zh) | 基于开源组件版本识别的固件脆弱性判别方法及系统 | |
CN110909358A (zh) | 一种基于动静态分析的整形漏洞检测方法 | |
US10599852B2 (en) | High performance software vulnerabilities detection system and methods | |
Qiu et al. | Using reduced execution flow graph to identify library functions in binary code | |
CN112434305B (zh) | 基于补丁的漏洞检测方法、装置、存储介质和电子设备 | |
CN110941552A (zh) | 一种基于动态污点分析的内存分析方法及装置 | |
Slabý et al. | Checking properties described by state machines: On synergy of instrumentation, slicing, and symbolic execution | |
CN114266050A (zh) | 一种跨平台恶意软件对抗样本生成方法及系统 | |
CN109241737B (zh) | 一种面向多种补丁模式的差异分支识别方法及系统 | |
CN111428233B (zh) | 一种嵌入式设备固件的安全性分析方法 | |
CN112131120B (zh) | 一种源代码缺陷检测方法及装置 | |
CN111291377A (zh) | 一种应用漏洞的检测方法及系统 | |
Cheers et al. | A novel approach for detecting logic similarity in plagiarised source code | |
CN109241706B (zh) | 基于静态胎记的软件抄袭检测方法 | |
CN112118251A (zh) | 一种基于maven插件的Java项目开源组件的漏洞检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |