本发明涉及网络安全,尤其涉及一种二进制组件检索方法及装置。
背景技术:
1、公共组件库因其强大的api功能被广泛使用于软件开发过程中,使用公共组件库能显著地降低开发的难度,提高软件开发效率,但是,公共组件库存在大量的缺陷,甚至存在潜在的安全漏洞,例如windows10上存在编号为cve-2020-1362的非法获取管理员权限高危漏洞,该漏洞是由二进制动态链接库walletservice.dll引起的。软件成分分析(software component analysis,sca)是一种开源组件分析方法,该方法分为sca源代码分析和sca二进制分析,而公开组件库通常不公开源代码,因此只能进行二进制组件成分分析。
2、现有的技术大多聚焦公共组件库类别的识别问题,没有进行或者缺乏深入地探索组件的精确版本识别问题,目前虽然有基于交叉指纹分析的公共组件库特征提取方法,但是该方法需要源代码构建特征库,面对海量的二进制公共组件库,实际使用情况受限且不具有普适性,则必须对二进制文件公共组件的具体版本进行精确定位,因此,在缺失源代码情况下,如何定位到公共组件的精确版本,是目前需要解决的一个问题。
3、需要说明的是,在上述背景技术部分公开的信息只用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
技术实现思路
1、本发明的目的在于克服现有技术的缺点,提供了一种二进制组件检索方法及装置,解决了目前在缺失源代码的情况下,不能定位到公共组件的精确版本的问题。
2、本发明的目的通过以下技术方案来实现:一种二进制组件检索方法,所述检索方法包括:
3、s1、提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;
4、s2、根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;
5、s3、将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;
6、s4、通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。
7、所述s1步骤具体包括:通过反汇编工具编写插件对组件集合的每个二进制文件提取ir信息,并将ir信息作为线性序列ir文本并通过深度学习模型bert提取语义特征,提取二进制的函数方法变量、导入导出表以及二进制头文件信息,通过md5算法转换为函数特征和依赖特征。
8、所述s2步骤中通过语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,计算规则如下:
9、
10、其中,component_mi表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
11、所述s2步骤中通过函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,计算规则如下:
12、
13、其中component_funci表示第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_funci)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;
14、通过依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,计算规则如下:
15、
16、其中component_replyi表示第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_replyi)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似。
17、所述s2步骤中得到与m个公共组件相似度为:
18、
19、其中,α,β,γ为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。
20、所述组件精确版本相似度包括版本语义特征相似度和版本函数特征相似度;通过语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离,计算规则如下:
21、
22、余弦距离越低,则语义向量越近,与版本指纹越相似;
23、通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,计算规则如下:
24、
25、其中version_funci表示第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_funci)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似。
26、所述组件精确版本相似度计算规则为:
27、
28、其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
29、一种二进制组件检索装置,它包括特征提取模块、相似度计算模块、版本匹配模块和解析获取模块;
30、所述特征提取模块:用于提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;
31、所述相似度计算模块:用于根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;
32、所述版本匹配模块:用于将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;
33、所述解析获取模块:用于通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。
34、所述相似度计算模块包括公共组件语义指纹相似度计算单元、公共组件函数指纹相似度计算单元、公共组件依赖指纹相似度计算单元和公共组件相似度计算单元;
35、所述公共组件语义指纹相似度计算单元:用于通过根据语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,其中,component_mi表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
36、所述公共组件函数指纹相似度计算单元:用于通过根据函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,其中component_funci表示第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_funci)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;
37、所述公共依赖指纹相似计算单元:用于通过根据依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,其中component_replyi表示第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_replyi)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似;
38、所述公共组件相似度计算单元:用于通过计算与m个公共组件的相似度,其中,α,β,β为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。
39、所述版本匹配模块包括版本语义特征相似度计算单元、版本函数特征相似度计算单元和组件精确版本计算单元;
40、所述版本语义特征相似度计算单元:用于通过根据语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离;
41、所述版本函数特征相似计算单元:用于通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,其中version_funci表示第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_funci)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似;
42、所述组件精确版本相似度计算单元:用于通过计算组件精确版本相似度,其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
43、本发明具有以下优点:一种二进制组件检索方法及装置,通过对不同版本不同架构的组件二进制集合提取组件公共指纹集合,并利用二进制文件的私有指纹定位精确版本,不仅能够有效地增强不同组件间的指纹差异,还能精确识别组件内的具体版本,而且能够快速、准确地检索出二进制文件所使用的组件详细信息。