一种二进制组件检索方法及装置与流程
未命名
09-29
阅读:71
评论:0
1.本发明涉及网络安全技术领域,尤其涉及一种二进制组件检索方法及装置。
背景技术:
2.公共组件库因其强大的api功能被广泛使用于软件开发过程中,使用公共组件库能显著地降低开发的难度,提高软件开发效率,但是,公共组件库存在大量的缺陷,甚至存在潜在的安全漏洞,例如windows10上存在编号为cve-2020-1362的非法获取管理员权限高危漏洞,该漏洞是由二进制动态链接库walletservice.dll引起的。软件成分分析(software component analysis,sca)是一种开源组件分析方法,该方法分为sca源代码分析和sca二进制分析,而公开组件库通常不公开源代码,因此只能进行二进制组件成分分析。
3.现有的技术大多聚焦公共组件库类别的识别问题,没有进行或者缺乏深入地探索组件的精确版本识别问题,目前虽然有基于交叉指纹分析的公共组件库特征提取方法,但是该方法需要源代码构建特征库,面对海量的二进制公共组件库,实际使用情况受限且不具有普适性,则必须对二进制文件公共组件的具体版本进行精确定位,因此,在缺失源代码情况下,如何定位到公共组件的精确版本,是目前需要解决的一个问题。
4.需要说明的是,在上述背景技术部分公开的信息只用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
技术实现要素:
5.本发明的目的在于克服现有技术的缺点,提供了一种二进制组件检索方法及装置,解决了目前在缺失源代码的情况下,不能定位到公共组件的精确版本的问题。
6.本发明的目的通过以下技术方案来实现:一种二进制组件检索方法,所述检索方法包括:
7.s1、提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;
8.s2、根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;
9.s3、将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;
10.s4、通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。
11.所述s1步骤具体包括:通过反汇编工具编写插件对组件集合的每个二进制文件提取ir信息,并将ir信息作为线性序列ir文本并通过深度学习模型bert提取语义特征,提取二进制的函数方法变量、导入导出表以及二进制头文件信息,通过md5算法转换为函数特征和依赖特征。
12.所述s2步骤中通过语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,计算规则如下:
[0013][0014]
其中,component_mi表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
[0015]
所述s2步骤中通过函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,计算规则如下:
[0016][0017]
其中component_funci表示第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_funci)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;
[0018]
通过依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,计算规则如下:
[0019][0020]
其中component_replyi表示第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_replyi)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似。
[0021]
所述s2步骤中得到与m个公共组件相似度为:
[0022][0023]
其中,α,β,γ为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。
[0024]
所述组件精确版本相似度包括版本语义特征相似度和版本函数特征相似度;通过语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离,计算规则如下:
[0025][0026]
余弦距离越低,则语义向量越近,与版本指纹越相似;
[0027]
通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,计算规则如下:
[0028][0029]
其中version_funci表示第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_funci)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似。
[0030]
所述组件精确版本相似度计算规则为:
[0031][0032]
其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
[0033]
一种二进制组件检索装置,它包括特征提取模块、相似度计算模块、版本匹配模块和解析获取模块;
[0034]
所述特征提取模块:用于提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;
[0035]
所述相似度计算模块:用于根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;
[0036]
所述版本匹配模块:用于将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;
[0037]
所述解析获取模块:用于通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。
[0038]
所述相似度计算模块包括公共组件语义指纹相似度计算单元、公共组件函数指纹相似度计算单元、公共组件依赖指纹相似度计算单元和公共组件相似度计算单元;
[0039]
所述公共组件语义指纹相似度计算单元:用于通过根据语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,其中,component_mi表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
[0040]
所述公共组件函数指纹相似度计算单元:用于通过根据函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,其中component_funci表示第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_funci)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;
[0041]
所述公共依赖指纹相似计算单元:用于通过所述公共依赖指纹相似计算单元:用于通过根据依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,其中component_replyi表示第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_replyi)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似;
[0042]
所述公共组件相似度计算单元:用于通过所述公共组件相似度计算单元:用于通过计算与m个公共组件的相似度,其中,α,β,β为设定的参数,根据实际
需求,可返回top-k个相似度最高的组件。
[0043]
所述版本匹配模块包括版本语义特征相似度计算单元、版本函数特征相似度计算单元和组件精确版本计算单元;
[0044]
所述版本语义特征相似度计算单元:用于通过所述版本语义特征相似度计算单元:用于通过根据语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离;
[0045]
所述版本函数特征相似计算单元:用于通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,其中version_funci表示第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_funci)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似;
[0046]
所述组件精确版本相似度计算单元:用于通过所述组件精确版本相似度计算单元:用于通过计算组件精确版本相似度,其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
[0047]
本发明具有以下优点:一种二进制组件检索方法及装置,通过对不同版本不同架构的组件二进制集合提取组件公共指纹集合,并利用二进制文件的私有指纹定位精确版本,不仅能够有效地增强不同组件间的指纹差异,还能精确识别组件内的具体版本,而且能够快速、准确地检索出二进制文件所使用的组件详细信息。
附图说明
[0048]
图1为本发明方法的流程示意图;
[0049]
图2为公共组件指纹提取示意图;
[0050]
图3为组件的具体版本指纹提取示意图;
[0051]
图4为本发明装置的示意图。
具体实施方式
[0052]
为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本技术实施例的组件可以以各种不同的配置来布置和设计。因此,以下结合附图中提供的本技术的实施例的详细描述并非旨在限制要求保护的本技术的保护范围,而是仅仅表示本技术的选定实施例。基于本技术的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。下面结合附图对本发明做进一步的描述。
[0053]
本发明其中一种实施方式涉及一种基于语义、函数以及依赖指纹的二进制组件检
索方法,通过对不同版本不同架构的组件二进制集合提取组件公共指纹集合,并利用二进制文件的版本私有指纹定位精确版本。该方法不仅能有效地增强不同组件间的指纹差异,还能精确识别公共组件具体版本。在得到的公开组件的精确版本库之后,根据漏洞知识图谱或者软件基因库查询到历史漏洞信息,从而发现二进制文件中潜在的安全漏洞与风险,及时采取对应措施,提高软件安全性。
[0054]
如图1所示,具体包括以下内容:
[0055]
s0、构建公共组件指纹数据库和私有版本指纹数据库,分别服务于步骤s2公共组件指纹匹配和步骤s3私有版本指纹匹配检索。
[0056]
s1、提取二进制文件的中间表示ir文本、函数方法变量等字符串、二进制导入导出表,分别计算语义特征、函数特征、依赖特征。除此之外,还需提取二进制头文件信息。
[0057]
s2、通过上述三种特征,计算文件与公共指纹数据库的公共指纹相似度,获取公共组件类别。
[0058]
s3、确定二进制所属公共组件后,与私有指纹库进行匹配,获取组件对应的私有版本。
[0059]
s4、通过解析二进制头文件得到该文件的架构及操作系统。并结合组件知识图谱,获取二进制对应的组件健康度和漏洞等详细信息。
[0060]
进一步地,s1步骤中利用反汇编工具ida pro的扩展功能,编写插件对组件集合的每个二进制文件提取llvm ir的信息。ir信息,简单说就是介于高级语言(例如c+、java)和机器语言(例如二进制可执行文件)之间的等效内部表示代码,ir在编译过程中起着桥梁作用。在本发明中,将ir看作线性序列ir文本并通过重新预训练深度学习模型bert提取语义特征embedding。除此之外,还需要提取该二进制的函数方法变量等字符串和导入导出表通过md5算法转换为函数特征function和依赖特征reply。
[0061]
公共组件指纹数据库需要储存海量组件的公共组件指纹。为了详细说明组件数据库的构建过程,本发明以m种不同版本不同架构的二进制组件集合s作为说明(其中,在集合s中具有n个二进制文件),海量组件的指纹提取可采用spark等大数据平台并发提取。数据库构建如图2所示。公共指纹包含组件公共组件语义指纹、组件公共函数指纹及组件公共依赖指纹三部分组成,即形成《组件s,语义指纹,函数指纹,依赖指纹》。所述三部分指纹构建具体流程如下:
[0062]
组件公共组件语义指纹:由于二进制文件的反汇编指令受cpu及架构影响,易造成oov问题,导致深度学习模型难以收敛,因此本发明对中间表示ir提取语义信息。对二进制集合s中的每一个文件的中间表示ir文本,通过bert模型转换为语义向量集合embeddings。bert是一种双向的transformer的双向编码,能够保留更多的语义信息。本发明将向量集合embeddings的聚类中心(一个聚类中心)作为该组件的公共组件语义指纹,则会生成m个语义向量聚类中心。
[0063]
组件公共函数指纹:本发明通过对函数方法变量等字符串进行组件公共函数指纹提取,需事先构造组件字符串并集{doc|doci=s1∪s2…
∪sn,i=1,2,
…
m}。
[0064]
进一步地,首先提取组件内的指纹,即计算组件内每个字符串在二进制文件中的次数d_cnt(d_cnt∈[1,n],其中n为集合s中二进制文件的个数),当d_cnt超过某一阈值p1*n时,提取字符串的md5作为指纹。接着,对上一步提取的指纹计算组件间的tf_idf值,删除
阈值小于p2的指纹。进一步地,上述阈值p1、p2可根据实际情况,分别选取为30%、40%、50%、60%、70%、80%及90%。
[0065]
组件公共依赖指纹:将n个二进制文件的导入表和导出表分别计算交集,并根据导入导出表中函数的类型和名称拼接后计算md5值作为指纹。例如,二进制集合s中,导入表具有函数func1,导出表具有函数func2。则该集合的依赖指纹分别为import_func1和export_func2对应的md5值。
[0066]
进一步地,私有版本指纹数据库需要每个文件的私有特征。为了详细说明组件数据库的构建过程,本发明同样以m种不同版本不同架构的二进制组件集合s作为说明(其中,在集合s中具有n个二进制文件),海量组件的指纹提取可采用spark等大数据平台并发提取。本发明所述的私有版本指纹数据库构建如图3所示。私有指纹主要包括私有语义指纹和私有函数指纹。
[0067]
进一步地,将集合s中n个文件提取中间表示ir文本和函数方法变量等字符串。中间表示ir文本通过bert模型转化语义向量得到私有语义指纹,函数方法变量等字符串通过去除公共组件指纹后得到私有函数指纹。
[0068]
本发明s2步骤中需利用s1中的特征,计算公共指纹相似度,获取公共组件类别。以下以m种不同版本不同架构的二进制组件集合s作为说明(其中,在集合s中具有n个二进制文件)为例。
[0069]
所述的公共组件指纹相似度由语义特征相似度、函数特征相似度和依赖相似度三部分构成。
[0070]
进一步的,通过语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个聚类中心(m个组件具有m个聚类中心)的余弦距离。匹配规则如下:
[0071][0072]
其中component_mi代表着第i个公共组件语义指纹聚类中心。余弦距离越低,说明语义向量越接近,则与该组件指纹越相似。
[0073]
进一步的,通过函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,匹配规则如下:
[0074][0075]
其中component_funci代表着第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数。n(component_funci)表示第i个公共组件函数指纹个数。函数指纹重复度越高,则与该组件指纹越相似。
[0076]
进一步的,通过依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,匹配规则如下:
[0077][0078]
其中component_replyi代表着第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数。n(component_replyi)
表示第i个公共组件依赖指纹个数。依赖指纹重复度越高,则与该组件指纹越相似。
[0079]
进一步的,得到与m个公共组件相似度为:
[0080][0081]
其中,α,β,γ都是可认为设定的参数。根据实际需求,可返回top-k个相似度最高的组件。
[0082]
确定公共组件后,在s3步骤中需确定公共组件的精确版本。
[0083]
所述组件精确版本相似度由版本语义特征相似度和版本函数特征相似度两部分构成。
[0084]
进一步的,通过语义特征计算版本语义特征相似度,即语义特征embedding与n个版本向量(组件内含有n个向量)的余弦距离。匹配规则如下:
[0085][0086]
余弦距离越低,说明语义向量越接近,则与该版本指纹越相似。
[0087]
进一步的,通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本函数指纹重复度,匹配规则如下:
[0088][0089]
其中version_funci代表着第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数。n(version_funci)表示第i个版本函数指纹个数。私有函数指纹重复度越高,则与该版本指纹越相似。
[0090]
进一步的,组件的精确版本相似度为:
[0091][0092]
其中,δ,ε都是可认为设定的参数。根据实际需求,可返回top-k个相似度最高的组件版本。
[0093]
进一步的,步骤s4中可根据二进制头文件信息获取二进制文件构架及操作系统等信息,结合s3步骤分析的公开组件的精确版本,则可实现二进制文件使用的公开组件的精确版本、架构、编译参数等详细信息。并结合组件知识图谱,可实现二进制组件健康度和漏洞等详细信息。
[0094]
如图4所示,本发明另一实施方式涉及一种基于语义、函数以及依赖指纹的二进制组件检索装置,它包括特征提取模块、相似度计算模块、版本匹配模块和解析获取模块;
[0095]
所述特征提取模块:用于提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;
[0096]
所述相似度计算模块:用于根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;
[0097]
所述版本匹配模块:用于将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;
[0098]
所述解析获取模块:用于通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。
[0099]
所述相似度计算模块包括公共组件语义指纹相似度计算单元、公共组件函数指纹相似度计算单元、公共组件依赖指纹相似度计算单元和公共组件相似度计算单元;
[0100]
所述公共组件语义指纹相似度计算单元:用于通过根据语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,其中,component_mi表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
[0101]
所述公共组件函数指纹相似度计算单元:用于通过根据函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,其中component_funci表示第i个公共组件函数指纹,n(func∩component_funci)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_funci)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;
[0102]
所述公共依赖指纹相似计算单元:用于通过所述公共依赖指纹相似计算单元:用于通过根据依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,其中component_replyi表示第i个公共组件依赖指纹,n(reply∩component_replyi)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_replyi)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似;
[0103]
所述公共组件相似度计算单元:用于通过所述公共组件相似度计算单元:用于通过计算与m个公共组件的相似度,其中,α,β,γ为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。
[0104]
所述版本匹配模块包括版本语义特征相似度计算单元、版本函数特征相似度计算单元和组件精确版本计算单元;
[0105]
所述版本语义特征相似度计算单元:用于通过所述版本语义特征相似度计算单元:用于通过根据语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离;
[0106]
所述版本函数特征相似计算单元:用于通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,其中
version_funci表示第i个版本函数指纹,n(func_c∩version_funci)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_funci)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似;
[0107]
所述组件精确版本相似度计算单元:用于通过所述组件精确版本相似度计算单元:用于通过计算组件精确版本相似度,其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
[0108]
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
技术特征:
1.一种二进制组件检索方法,其特征在于:所述检索方法包括:s1、提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;s2、根据语义特征、函数特征和依赖特征计算文件与公共组件指纹数据库的公共组件指纹相似度,得到公共组件类别;s3、将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;s4、通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。2.根据权利要求1所述的一种二进制组件检索方法,其特征在于:所述s1步骤具体包括:通过反汇编工具编写插件对组件集合的每个二进制文件提取ir信息,并将ir信息作为线性序列ir文本并通过深度学习模型bert提取语义特征,提取二进制的函数方法变量、导入导出表以及二进制头文件信息,通过md5算法转换为函数特征和依赖特征。3.根据权利要求1所述的一种二进制组件检索方法,其特征在于:所述s2步骤中通过语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,计算规则如下:其中,component_m
i
表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;所述s2步骤中通过函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,计算规则如下:其中component_func
i
表示第i个公共组件函数指纹,n(func∩component_func
i
)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_func
i
)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;通过依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,计算规则如下:其中component_reply
i
表示第i个公共组件依赖指纹,n(reply∩component_reply
i
)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_reply
i
)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似。4.根据权利要求3所述的一种二进制组件检索方法,其特征在于:所述s2步骤中得到与m个公共组件指纹相似度为:
其中,α,β,γ为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。5.根据权利要求1所述的一种二进制组件检索方法,其特征在于:所述组件精确版本相似度包括版本语义特征相似度和版本函数特征相似度;通过语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离,计算规则如下:余弦距离越低,则语义向量越近,与版本指纹越相似;通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,计算规则如下:其中version_func
i
表示第i个版本函数指纹,n(func_c∩version_func
i
)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_func
i
)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似。6.根据权利要求5所述的一种二进制组件检索方法,其特征在于:所述组件精确版本相似度计算规则为:其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。7.一种二进制组件检索装置,其特征在于:它包括特征提取模块、相似度计算模块、版本匹配模块和解析获取模块;所述特征提取模块:用于提取二进制文件的中间表示ir文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;所述相似度计算模块:用于根据语义特征、函数特征和依赖特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;所述版本匹配模块:用于将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;所述解析获取模块:用于通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。8.根据权利要求7所述的一种二进制组件检索装置,其特征在于:所述相似度计算模块包括公共组件语义指纹相似度计算单元、公共组件函数指纹相似度计算单元、公共组件依赖指纹相似度计算单元和公共组件相似度计算单元;所述公共组件语义指纹相似度计算单元:用于通过根据语义特征计算公共组件语义指纹相似度,即语义特征embedding与m个公共组件的聚类中心的余弦距离,其中,component_m
i
表示第i个公共组件语义指纹聚类中心,余弦距离越低,说明语义向量越接近,则与该组件指纹越相似;
所述公共组件函数指纹相似度计算单元:用于通过根据函数特征计算公共组件函数指纹相似度,即函数特征func与m个公共组件函数指纹重复度,其中component_func
i
表示第i个公共组件函数指纹,n(func∩component_func
i
)表示第i个公共组件函数指纹与函数特征func重复的个数,n(component_func
i
)表示第i个公共组件函数指纹个数,函数指纹重复度越高,则与该组件指纹越相似;所述公共依赖指纹相似计算单元:用于通过所述公共依赖指纹相似计算单元:用于通过根据依赖特征计算公共组件依赖指纹相似度,即依赖特征reply与m个公共组件依赖指纹重复度,其中component_reply
i
表示第i个公共组件依赖指纹,n(reply∩component_reply
i
)表示第i个公共组件依赖指纹与依赖特征reply重复的个数,n(component_reply
i
)表示第i个公共组件依赖指纹个数,依赖指纹重复度越高,则与该组件指纹越相似;所述公共组件相似度计算单元:用于通过所述公共组件相似度计算单元:用于通过计算与m个公共组件的相似度,其中,α,β,γ为设定的参数,根据实际需求,可返回top-k个相似度最高的组件。9.根据权利要求7所述的一种二进制组件检索装置,其特征在于:所述版本匹配模块包括版本语义特征相似度计算单元、版本函数特征相似度计算单元和组件精确版本计算单元;所述版本语义特征相似度计算单元:用于通过所述版本语义特征相似度计算单元:用于通过根据语义特征计算版本语义特征相似度,即语义特征embedding与n个版本的向量余弦距离;所述版本函数特征相似计算单元:用于通过去除公共指纹的私有函数特征计算版本函数指纹相似度,即私有函数特征func_c与n个版本的函数指纹重复度,其中version_func
i
表示第i个版本函数指纹,n(func_c∩version_func
i
)表示第i个版本函数指纹与私有函数特征func_c重复的个数,n(version_func
i
)表示第i个版本函数指纹个数,私有函数指纹重复度越高,则与该版本指纹越相似;所述组件精确版本相似度计算单元:用于通过所述组件精确版本相似度计算单元:用于通过计算组件精确版本相似度,其中,δ,ε为设定的参数根据实际需求,可返回top-k个相似度最高的组件版本。
技术总结
本发明涉及一种二进制组件检索方法及装置,包括:提取二进制文件的中间表示IR文本、函数方法变量、二进制导入导出表以及二进制头文件信息,并分别计算语义特征、函数特征和依赖特征;根据三种特征计算文件与公共指纹数据库的公共指纹相似度,得到公共组件类别;将确定的二进制所属的公共组件后与私有指纹库进行匹配,得到组件精确版本相似度,进而获取组件对应的精确版本;通过解析二进制头文件信息得到该文件的架构以及操作系统,并结合组件知识图谱获取二进制对应的组件健康度和漏洞信息。本发明不仅能够有效地增强不同组件间的指纹差异,还能精确识别组件内的具体版本,而且能够快速、准确地检索出二进制文件所使用的组件详细信息。详细信息。详细信息。
技术研发人员:朱辉 赵童
受保护的技术使用者:软安科技有限公司
技术研发日:2023.06.25
技术公布日:2023/9/25
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/