首页> 中国专利> 基于图自动编码器的二进制相似性检测方法

基于图自动编码器的二进制相似性检测方法

摘要

本发明的基于图自动编码器的二进制相似性检测方法,包括将待比较的两个二进制函数进行预处理;使用反汇编工具及其提供的接口,得到两个二进制函数内部基本块之间的控制依赖关系;记录两个二进制函数内部的控制流图,并提取其节点的数字化特征,并关注了函数之间的调用关系,在函数入口基本块中调用该函数的其他函数的特征;使用图自动编码器GAE对得到的控制流图进行编码,得到描述图结构的嵌入向量;将两个二进制函数的表征图结构的嵌入向量和节点的数字化特征信息进行融合后,通过损失函数计算训练模型;训练好的模型可以判断给定的两个二进制函数是否相似,能够克服二进制代码缺失调试信息、编译优化等实现差异。

著录项

  • 公开/公告号CN112163226A

    专利类型发明专利

  • 公开/公告日2021-01-01

    原文格式PDF

  • 申请/专利权人 中国人民解放军国防科技大学;

    申请/专利号CN202011367342.9

  • 申请日2020-11-30

  • 分类号G06F21/57(20130101);G06K9/62(20060101);G06N3/04(20060101);

  • 代理机构11215 中国和平利用军工技术协会专利中心;

  • 代理人刘光德

  • 地址 410073 湖南省长沙市开福区德雅路109号

  • 入库时间 2023-06-19 09:24:30

说明书

技术领域

本发明属于数据安全技术领域,尤其涉及一种基于图自动编码器的二进制相似性检测方法。

背景技术

二进制相似性检测问题是在不访问相应源代码的情况下,确定不同二进制代码中的两个函数是否相似,它被广泛应用于漏洞发现、剽窃检测等领域。当前,二进制相似性分析变得越来越重要,特别是在软件安全分析领域。由于代码重用和共享,第三方库中的漏洞可能会在不同硬件架构和软件平台中的设备之间传播。在Synopsys 2020年的开源安全和风险分析报告中,在2019年审计的代码库中,有99%的包含了开源组件,且有75%的代码库至少包含一个漏洞,代码库的平均漏洞数为82,同时代码库中漏洞的实际发布时间平均为4.5年前,发布超过10年的占19%,最早的竟然是1999年发布的。可以看出,组件库的安全问题不容忽视,对其进行相似性检测,确定其中是否存在漏洞,这对基于其进行开发的软件的安全至关重要。目前,大多数商用软件或物联网设备的源码未知,二进制相似性检测成为关键可行的方法。

在现有的二进制相似性检测技术领域,有专家提出使用在Gemini中嵌入基于深度神经网络的方法,表明其策略在精度、性能和灵活性上均优于Genius,该方法选取8个数字特征作为比较两个ACFG图的基础,包括6个统计特征和2个结构特征,具有可扩展性和高效性,缺点是由于缺乏对二进制语义特征的考虑,不可避免地会出现漏报;有专家提出基于语义学习搜索跨体系结构的二进制漏洞,并实现原型系统Vulseeker,将数据流图和控制流图集成到语义流图中,提取基本块的统计特征,在整个函数中嵌入基本块级向量时,采用DNN模型迭代记录基本块的上下文语义,Vulseeker被证明Gemini更有效,在提取基本块的特征时,该方法只使用基本块的语法特征,即不同类型指令的数目,这与Gemini有相同的问题,同时,它们只考虑基本块粒度的语义,Gemini和Vulseeker使用的网络嵌入模型是structure2vec,考虑了网络的节点特征,基于程序的控制流图,使用多层神经网络将二进制函数转为向量表示,但是这种方法存在深层网络具有的可解释性差的问题。Vulseeker以及Gemini在进行二进制相似性比较的过程中,在基于函数特征生成嵌入向量时,无论是使用控制流图还是数据流图,考虑的主要是节点以及其相邻节点的语义信息,使用DNN最后生成的嵌入向量记录的是节点及其邻居的特征,这种方法在记录结构图的整体结构特征时需要对得到的嵌入向量进行进一步迭代处理,耗费计算资源。此外,这些比较方法并未考虑函数之间的调用关系。

因此,现有技术需要改进。

发明内容

为解决上述技术问题,本发明提出了一种基于图自动编码器的二进制相似性检测方法。

基于本发明实施例的一个方面,公开一种基于图自动编码器的二进制相似性检测方法,包括:

将待比较的两个二进制函数进行预处理;

使用反汇编工具及其提供的接口,分别得到两个二进制函数内部基本块之间的控制依赖关系,获取程序中函数之间的调用关系;

分别记录两个二进制函数内部的控制流图,并使用接口提取到两个二进制函数内部基本块的节点的数字化特征;

对函数的入口节点基本块,使用对其有调用关系的函数中的调用语句所在的基本块特征作为入口节点基本块的附加特征;

分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到每一个二进制函数的描述图结构的嵌入向量;

得到函数基本块节点的语义特征和结构特征后,使用全连接层和池化层完成特征的融合,并使用triplet loss作为损失函数来完成模型的训练;

依据训练好的神经网络模型,完成两个函数的相似性判定;

检测目标程序中是否存在特定二进制函数,使用训练好的模型进行相似性判定,得到候选函数集,使用参数个数和复杂网络理论的社区分类方法,对得到的候选函数集进一步筛选,提高检测的效率。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到每一个二进制函数的描述图结构的嵌入向量包括:

分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到图结构;

使用图自动编码器GAE完成对图结构的向量嵌入,得到每一个二进制函数的描述图结构的嵌入向量。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述分别记录两个二进制函数内部的控制流图,并使用接口提取到两个二进制函数内部基本块的节点的数字化特征包括:

获取基本块之间的控制依赖关系,生成二进制函数的控制流图CFG;

提取二进制函数内部每一个基本块的数字化特征,所述基本块的数字化特征包括:统计特征和结构特征;

获取函数之间的调用关系,并添加到基本块特征中。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述统计特征包括:

数值常量数目、字符常量数目、转移指令数目、调用call指令数目、汇编指令数目、算数指令数目、逻辑指令数目、堆栈指令数目、比较指令数目、条件跳转数目、非条件跳转数目、其他指令数目。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述结构特征包括:

表征基本块之间结构特征的度数、介数。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述获取函数之间的调用关系,并添加到基本块特征中包括:

获取函数之间的调用关系图,并将该关系添加在函数入口基本块中,具体方法是将与特定函数f具有调用关系的其他函数中,包含调用f语句的基本块的特征作为函数f入口基本块的附加特征记录下来。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述使用图自动编码器GAE完成对图结构的向量嵌入,得到每一个二进制函数的描述图结构的嵌入向量包括:

编码,使用二进制函数的控制流图CFG作为输入,记录二进制函数的控制流图CFG的邻接矩阵、度矩阵和节点特征矩阵,使用两层的图卷积网络,对二进制函数的控制流图CFG进行编码,生成表征二进制函数的控制流图CFG的嵌入矩阵;

解码,重建邻接矩阵,计算两点之间存在边的概率,重新构建二进制函数的控制流图CFG。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述得到函数基本块节点的语义特征和结构特征后,使用全连接层和池化层完成特征的融合,并使用triplet loss作为损失函数来完成模型的训练,包括:

基于多层感知机MLP构建全连接层,并添加池化层,用于将得到的特征进行融合;

构建三元函数对(f

使用triplet loss作为损失函数完成模型的训练,计算得到的结果与标签数据的值之间的偏差,对神经网络的超参数进行修改,直至得到的神经网络模型表现较好,神经网络模型训练完成。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述依据训练好的神经网络模型,完成两个函数的相似性判定包括:

分别得到两个函数的特征矩阵;

使用训练完成的神经网络模型,完成两个函数的相似性判定。

基于本发明的基于图自动编码器的二进制相似性检测方法的另一个实施例中,所述检测目标程序中是否存在特定二进制函数包括:

使用神经网络模型,对特定函数和目标二进制程序的所有函数进行相似性判断,得到候选函数集;

对候选函数集中的函数使用复杂网络社区分类的方法进行分组,并使用函数参数个数等细粒度的特征,对待选函数集进行进一步筛选,以检测目标二进制程序中是否存在特定函数。

与现有技术相比,本发明具有如下优点:

采用本发明的基于图自动编码器的二进制相似性检测方法使用神经网络模型,实现二进制函数代码特征学习和相似性检测,能够克服二进制代码缺失调试信息、编译优化等实现差异,本发明可以在进行函数的特征学习时,最大程度保留函数内部的语义结构特征和节点语义特征,能够提高相似性比较的精度,并取得相对快的执行效率,实现的相似性检测技术可以应用于二进制文件漏洞检测,代码剽窃检测,恶意代码检测等领域中。

附图说明

图1为本发明提出的基于图自动编码器的二进制相似性检测方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面结合附图和实施例对本发明提供的一种基于图自动编码器的二进制相似性检测方法进行更详细地说明。

图1为本发明提出的基于图自动编码器的二进制相似性检测方法的流程图,如图1所示,所述基于图自动编码器的二进制相似性检测方法包括:

S1,将待比较的两个二进制函数进行预处理;

S2,使用反汇编工具及其提供的接口,分别得到两个二进制函数内部基本块之间的控制依赖关系,获取程序中函数之间的调用关系;

S3,分别记录两个二进制函数内部的控制流图,并使用接口提取到两个二进制函数内部基本块的节点的数字化特征;

S4,对函数的入口节点基本块,使用对其有调用关系的函数中的调用语句所在的基本块特征作为入口节点基本块的附加特征;

S5,分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到每一个二进制函数的描述图结构的嵌入向量,所述图自动编码器GAE是基于自编码技术实现在图结构数据的嵌入,使用经典编码-解码结构,能够保证得到的嵌入向量尽可能还原图的结构信息;

S6,得到函数基本块节点的语义特征和结构特征后,使用全连接层和池化层完成特征的融合,并使用triplet loss作为损失函数来完成模型的训练;

S7,依据训练好的神经网络模型,完成两个函数的相似性判定;

S8,检测目标程序中是否存在特定二进制函数,使用训练好的模型进行相似性判定,得到候选函数集,使用参数个数和复杂网络理论的社区分类方法,对得到的候选函数集进一步筛选,提高检测的效率。

将两个二进制函数的表征图结构的嵌入向量和节点的数字化特征信息分别输入到池化层和全连接层,用于进行图语义特征向量和节点数字化特征的融合;所述tripletloss是一种损失函数,通过构建三元函数组来进行类别的识别、分类,使用该网络架构,可以判断两个二进制函数是否相似。

所述分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到每一个二进制函数的描述图结构的嵌入向量包括:

分别使用图自动编码器GAE对得到的两个二进制函数内部的控制流图进行编码,得到图结构;

使用图自动编码器GAE完成对图结构的向量嵌入,得到每一个二进制函数的描述图结构的嵌入向量。

所述分别记录两个二进制函数内部的控制流图,并使用接口提取到两个二进制函数内部基本块的节点的数字化特征包括:

获取基本块之间的控制依赖关系,生成二进制函数的控制流图CFG,所述二进制函数的控制流图CFG表征图节点之间的控制依赖关系;

提取二进制函数内部每一个基本块的数字化特征,所述基本块的数字化特征包括:统计特征、结构特征和能表征调用关系的特征。

所述统计特征包括:

数值常量数目、字符常量数目、转移指令数目、调用call指令数目、汇编指令数目、算数指令数目、逻辑指令数目、堆栈指令数目、比较指令数目、条件跳转数目、非条件跳转数目、其他指令数目。

所述结构特征包括:

表征基本块之间结构特征的度数、介数。

所述表征调用关系的特征包括:

表征函数调用关系的调用函数相应基本块特征添加到被调用函数的入口基本块特征中。

所述使用图自动编码器GAE完成对图结构的向量嵌入,得到每一个二进制函数的描述图结构的嵌入向量包括:

编码,使用二进制函数的控制流图CFG作为输入,记录二进制函数的控制流图CFG的邻接矩阵、度矩阵和节点特征矩阵,使用两层的图卷积网络,对二进制函数的控制流图CFG进行编码,生成表征二进制函数的控制流图CFG的嵌入矩阵;

实施例1:

二进制函数的控制流图CFG使用G=(V,E)表示,记录二进制函数的控制流图CFG的邻接矩阵为A,记录二进制函数的控制流图CFG的度矩阵为D,节点特征特征矩阵表示为N*D的矩阵X,使用两层的图卷积网络,对二进制函数的控制流图CFG进行编码:

Z=GCN(X,A);

GCN为GCN(X,A)=A’Relu(A’XW

解码,重建邻接矩阵,计算两点之间存在边的概率,重新构建二进制函数的控制流图CFG;

实施例2:

为了保证二进制函数的控制流图CFG的嵌入矩阵Z能够最大程度保留控制流图的结构特征,重建邻接矩阵A’,计算两点之间存在边的概率重新构建二进制函数的控制流图CFG,其中,A’=sigmoid(ZZ

生成二进制函数的表征图结构的嵌入向量和节点的数字化特征后,得到的所有特征值进行融合,函数结构特征矩阵的维度为N*16,其中N表示函数中基本块节点的数目,使用S表征函数结构特征矩阵,其中每一个节点的结构特征使用1*16的向量s

函数内部节点的数字化统计特征矩阵记录为D,其中d

表征函数之间调用关系时,对于函数f,找到与其具有调用关系的函数提取相应的call语句所在的基本块特征,并将该基本块特征添加到函数f入口基本块的特征向量中。

所述将两个二进制函数的特征进行融合,包括:

基于多层感知机MLP构建全连接层,将表征图结构的嵌入向量和节点的数字化特征等信息作为输入,并添加池化层进行池化操作;

其中,多层感知机MLP对得到的数字化特征和结构特征矩阵进行处理时,使用下述公式:

M=tanh(DW

式中,W

完成表征函数的特征向量的融合。

实施例3:

在神经网络架构训练过程中,使用三元函数对(f

使用triplet loss作为损失函数进行模型训练,计算得到的结果与标签数据的值之间的偏差,对神经网络的超参数进行修改,直至得到的神经网络模型表现较好,神经网络模型训练完成。

所述对两个特征矩阵进行相似性打分,判断两个二进制函数是否相似包括:

对两个二进制函数进行分析,分别得到两个二进制函数的特征矩阵;

使用训练完成的神经网络架构,判断两个函数是否相似。

实施例4:

进行漏洞函数相似性检测。提供一个漏洞数据库,数据库中包含了一系列的漏洞及其相关信息,如受影响的版本,漏洞所在的函数,软件代码以及漏洞详细描述等辅助信息。系统将目标二进制程序和漏洞数据库中的漏洞代码进行相似性比较,判断二进制程序中是否可能存在相关漏洞,为后续进一步分析提供有效的信息支持。

检测同架构下的二进制目标程序时,选择漏洞数据库中可能影响目标二进制程序的漏洞列表,得到其对应的二进制函数FV={fv

分析二进制程序中的函数调用关系时发现,函数调用关系图符合无标度特性,使用矩阵特征向量的方法对二进制程序的函数调用关系图进行社区划分,并引入模块度来评价社区分解的合理性。模块度使用下面公式表示:

Q=1/(2m) * sum( (Aij-ki*kj/(2m) ) delta(ci,cj)

其中,m是有向边的数目,Aij 表示A的邻接矩阵中第i行第j列, ki 表示节点i的度数,ci表示i的类别,如果x=y则 delta(x,y) 为 1 否则为0。

进行社区分类后,选择整体表现较好的分类子集,使用函数调用参数个数继续筛选候选子集,完成对目标程序的漏洞函数的进一步检测。

对于本领域技术人员而言,显然本发明实施例不限于上述示范性实施例的细节,而且在不背离本发明实施例的精神或基本特征的情况下,能够以其他的具体形式实现本发明实施例。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明实施例的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明实施例内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统、装置或终端权利要求中陈述的多个单元、模块或装置也可以由同一个单元、模块或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

最后应说明的是,以上实施方式仅用以说明本发明实施例的技术方案而非限制,尽管参照以上较佳实施方式对本发明实施例进行了详细说明,本领域的普通技术人员应当理解,可以对本发明实施例的技术方案进行修改或等同替换都不应脱离本发明实施例的技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号