CN115906089A - 一种基于二进制函数相似性的漏洞检测方法与系统 - Google Patents

一种基于二进制函数相似性的漏洞检测方法与系统 Download PDF

Info

Publication number
CN115906089A
CN115906089A CN202211301900.0A CN202211301900A CN115906089A CN 115906089 A CN115906089 A CN 115906089A CN 202211301900 A CN202211301900 A CN 202211301900A CN 115906089 A CN115906089 A CN 115906089A
Authority
CN
China
Prior art keywords
instruction
level
function
characterization
file
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.)
Granted
Application number
CN202211301900.0A
Other languages
English (en)
Other versions
CN115906089B (zh
Inventor
潘祖烈
王泰彦
于璐
严尹彤
麦生今
李宗超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202211301900.0A priority Critical patent/CN115906089B/zh
Publication of CN115906089A publication Critical patent/CN115906089A/zh
Application granted granted Critical
Publication of CN115906089B publication Critical patent/CN115906089B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Complex Calculations (AREA)

Abstract

本公开提出一种基于二进制函数相似性的漏洞检测方法与系统,涉及数据处理技术领域。本公开一方面针对指令语义进行提取,另一方面针对函数图结构进行向量嵌入,充分考虑指令间顺序出现的概率和指令出现频率,以及函数图结构中节点位置分布代表的高维特征信息,实现函数级别相似性检测准确率的提高。

Description

一种基于二进制函数相似性的漏洞检测方法与系统
技术领域
本发明属于漏洞检测技术领域,尤其涉及一种基于二进制函数相似性的漏洞检测方法与系统。
背景技术
软件开发中已经广泛应用到代码复用技术,以加速创新并减少开发的成本,然而这一技术也会带来诸如代码剽窃等版权问题,以及漏洞代码复用等的安全问题。
由于软件发布需要考虑安全性与代码版权问题,所以多是以二进制形式分发。源代码层面的相似性检测技术已经相对成熟,由于源代码中含有的信息十分丰富,有很多商业工具从不同角度进行分析并给出安全建议。不同于源代码级别的相似性检测,同一份源码在编译过程中,目标操作系统、使用的编译工具链、编译选项的不同等,稍有变化,在二进制层面程序便有可能变得截然不同。
为了解决这一场景下复用代码引起的问题,而又不消耗过多人力,研究人员提出二进制代码相似性检测技术。现阶段应用较广的是二进制函数级别的相似性检测技术,通过比较候选函数与目标函数,根据相似性计算得到的相似性分值,判断候选函数是否与目标函数相似,进一步推断候选函数是否具有漏洞或打过补丁。
现有技术中常用的方案为结合自然语言处理与图神经网络对二进制程序的指令和函数进行表征的相关方法。
例如使用图嵌入网络structure2vec对二进制函数的属性控制流图ACFG进行嵌入表征,根据得到的表征向量进行相似性检测,ACFG节点包含有基本块统计特征与结构特征。
又例如使用深度神经网络对结合控制流与数据流信息的语义流图LSFG进行表征,根据表征向量进行相似性检测,其中LSFG中节点仅由基本块统计特征表征。
再例如使用自然语言处理预训练模型Bert对x86下程序指令进行语义学习,学习得到的预训练模型可用于指令表征,能够代替函数图节点表示,实现更高准确率,其解决的是给定目标二进制,判断其是否与漏洞库中具有漏洞的函数具有相似性。
然而,上述方案一方面只针对x86架构下汇编语言进行向量嵌入,另一方面在制作样本时没有考虑指令间顺序出现概率与指令出现频率的特征,导致向量嵌入不准确。并且在进行二进制相似性比较的过程中,在基于函数特征生成嵌入向量时,使用节点嵌入而非全图嵌入表征的方法,无法充分表达图的整体结构。二进制程序因为基本块的不同分布,可以依据功能等划分为不同的分区,而现有方法没有考虑基本块位置分布这一特征,导致特征提取不全面。
发明内容
为了解决上述技术问题,本发明提出了一种基于二进制函数相似性的漏洞检测方案。
本发明第一方面公开了一种基于二进制函数相似性的漏洞检测方法。所述方法包括:步骤S1、获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;步骤S2、基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;步骤S3、将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;步骤S4、将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
根据本发明第一方面的方法,所述待测业务文件为待测的二进制可执行程序,所述目标漏洞文件为包含目标漏洞函数的二进制程序;所述反汇编工具包括IDA pro、BinaryNinja和Radare2。
根据本发明第一方面的方法,在所述步骤S2中,预训练所述汇编指令表征模型包括:下一指令预测训练:在控制流层面,判断两个指令是否为一前一后的相邻关系;若是,则下一指令预测标签置1,若否,则所述下一指令预测标签置0;数据流向顺序预测训练:在数据流层面,给出关于同一变量数据的两条读写访问指令,判断所述两条读写访问指令的顺序是否正确;若是,则数据流向顺序预测标签置1;若否,则所述数据流向顺序预测标签置0;掩码语言模型训练:根据下一指令预测训练任务构造前后相邻的指令,以及根据数据流向顺序预测训练任务构造针对特定变量的读写指令对,并对构造出的指令/指令对中的部分单词进行替换,以对经替换的部分进行修正。
根据本发明第一方面的方法,在所述步骤S3中:以单条汇编指令作为所述预训练的汇编指令表征模型的输入,所述预训练的汇编指令表征模型通过预测指令前后的出现概率、指令中单词的出现频率以及指令语义,直接输出所述指令级别的表征向量;所述指令级别的表征向量的第一位为输入的单条汇编指令在其所属的待测业务文件/目标漏洞文件中出现的概率,所述指令级别的表征向量的其他位则基于其在所述输入的单条汇编指令中对应位置上的出现概率以及前一位的表征向量共同计算得出。
根据本发明第一方面的方法,在所述步骤S3中:对于每一个基本块,以该基本块中所包含的全部指令级别的表征向量的加和平均值作为基本块级别的表征向量;基于所述控制依赖关系确定所述各个基本块之间的控制流图,并基于所述数据依赖关系确定所述各个基本块之间的数据流图;以基本块级别的表征向量作为节点,基于所述控制流图和所述数据流图构建各个节点之间的边,形成所述增强属性控制流图ACFG+。
根据本发明第一方面的方法,在所述步骤S4中,将所述对应的函数级别的图结构表征根据所述图结构嵌入的方式转化为所述对应的函数级别的表征向量,具体包括:对于所述增强属性控制流图ACFG+中的各个基本块,将相邻基本块的表征向量和当前基本块的表征向量的求和结果作为所述当前基本块新的表征向量;根据所述新的表征向量对所述各个基本块进行相似基本块聚簇处理,在每个聚簇中选取中心位置的基本块作为代表性基本块,将所述增强属性控制流图ACFG+转化为基于各个代表性基本块的控制流图作为第一子图,所述第一子图中包含所述各个基本块的特征信息;将所述增强属性控制流图ACFG+与所述第一子图并列拼接为第二子图,基于同样的求和处理和聚簇处理获得第三子图,利用能够处理多维数据的神经元组成网络将所述第三子图转化为基于图结构的向量表征,作为所述函数级别的表征向量。
根据本发明第一方面的方法,在所述步骤S4中,逐一提取所述待测业务文件的各个函数级别的表征向量,分别计算与所述目标漏洞文件的各个函数级别的表征向量之间的向量距离,当所述向量距离低于阈值时,判定所述待测业务文件中存在漏洞,并获取漏洞信息。
本发明第二方面公开了一种基于二进制函数相似性的漏洞检测系统。所述系统包括:第一处理单元,被配置为:获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;第二处理单元,被配置为:基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;第三处理单元,被配置为:将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;第四处理单元,被配置为:将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
根据本发明第二方面的系统,所述待测业务文件为待测的二进制可执行程序,所述目标漏洞文件为包含目标漏洞函数的二进制程序;所述反汇编工具包括IDA pro、BinaryNinja和Radare2。
根据本发明第二方面的系统,所述第二处理单元还被配置为,预训练所述汇编指令表征模型,具体包括:下一指令预测训练:在控制流层面,判断两个指令是否为一前一后的相邻关系;若是,则下一指令预测标签置1,若否,则所述下一指令预测标签置0;数据流向顺序预测训练:在数据流层面,给出关于同一变量数据的两条读写访问指令,判断所述两条读写访问指令的顺序是否正确;若是,则数据流向顺序预测标签置1;若否,则所述数据流向顺序预测标签置0;掩码语言模型训练:根据下一指令预测训练任务构造前后相邻的指令,以及根据数据流向顺序预测训练任务构造针对特定变量的读写指令对,并对构造出的指令/指令对中的部分单词进行替换,以对经替换的部分进行修正。
根据本发明第二方面的系统,所述第二处理单元还被配置为:以单条汇编指令作为所述预训练的汇编指令表征模型的输入,所述预训练的汇编指令表征模型通过预测指令前后的出现概率、指令中单词的出现频率以及指令语义,直接输出所述指令级别的表征向量;所述指令级别的表征向量的第一位为输入的单条汇编指令在其所属的待测业务文件/目标漏洞文件中出现的概率,所述指令级别的表征向量的其他位则基于其在所述输入的单条汇编指令中对应位置上的出现概率以及前一位的表征向量共同计算得出。
根据本发明第二方面的系统,所述第三处理单元还被配置为:对于每一个基本块,以该基本块中所包含的全部指令级别的表征向量的加和平均值作为基本块级别的表征向量;基于所述控制依赖关系确定所述各个基本块之间的控制流图,并基于所述数据依赖关系确定所述各个基本块之间的数据流图;以基本块级别的表征向量作为节点,基于所述控制流图和所述数据流图构建各个节点之间的边,形成所述增强属性控制流图ACFG+。
根据本发明第二方面的系统,所述第四处理单元还被配置为:将所述对应的函数级别的图结构表征根据所述图结构嵌入的方式转化为所述对应的函数级别的表征向量,具体包括:对于所述增强属性控制流图ACFG+中的各个基本块,将相邻基本块的表征向量和当前基本块的表征向量的求和结果作为所述当前基本块新的表征向量;根据所述新的表征向量对所述各个基本块进行相似基本块聚簇处理,在每个聚簇中选取中心位置的基本块作为代表性基本块,将所述增强属性控制流图ACFG+转化为基于各个代表性基本块的控制流图作为第一子图,所述第一子图中包含所述各个基本块的特征信息;将所述增强属性控制流图ACFG+与所述第一子图并列拼接为第二子图,基于同样的求和处理和聚簇处理获得第三子图,利用能够处理多维数据的神经元组成网络将所述第三子图转化为基于图结构的向量表征,作为所述函数级别的表征向量。
根据本发明第二方面的系统,所述第三处理单元还被配置为:逐一提取所述待测业务文件的各个函数级别的表征向量,分别计算与所述目标漏洞文件的各个函数级别的表征向量之间的向量距离,当所述向量距离低于阈值时,判定所述待测业务文件中存在漏洞,并获取漏洞信息。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
综上,本发明提供的技术方案为提取更多维度汇编代码特征,并更准确表征二进制函数级别代码,从指令表征技术与图嵌入技术两方面进行设计。通过设计基于程序控制流与数据流关系,捕获指令出现频率特征的预训练任务,学习生成指令嵌入模型,提高指令表征的质量。通过设计能够提取节点位置分布信息特征的图神经网络,对二进制函数图结构中的基本块位置分布信息捕获,并结合指令嵌入模型生成的表征向量,进行二进制函数图结构表征,并应用于二进制函数的相似性检测与二进制漏洞函数检测,以提高准确度。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的基于二进制函数相似性的漏洞检测的流程图;
图2为根据本发明实施例的一种电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
ACFG:Attributed Control Flow Graph,属性控制流图,表示由统计特征和结构特征等属性表示图中基本块节点的控制流依赖关系。
ACFG+:enhanced Attributed Control Flow Graph,增强属性控制流图,表示替换ACFG节点属性为指令嵌入结果,并增加数据流依赖关系得到的结果。
BCSD:Binary Code Similarity Detection,二进制代码相似性检测,表示针对二进制程序,而非源代码,检测是否具有相似性。
CapsGNN:Capsule Graph Neural Network,胶囊图神经网络,使用胶囊的思想更改图神经网络中神经元,形成的图神经网络。
DiffPool:Differential Pooling,表示一种分层进行的池化方法,用于图分类任务能提高准确率。
LSFG:Labeled Semantic Flow Graph,语义控制流图,表示由统计特征表征节点,蕴含控制流依赖关系与数据流依赖关系的函数图结构表示。
Siamese网络:Siamese网络是一种网络结构,用于进行相似性度量。
Triplet网络:三元组网络,利用三个样本组成一个训练组,实现在一组个体中对两个对象进行区分。
本发明第一方面公开了一种基于二进制函数相似性的漏洞检测方法。图1为根据本发明实施例的基于二进制函数相似性的漏洞检测的流程图;如图1所示,所述方法包括:步骤S1、获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;步骤S2、基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;步骤S3、将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;步骤S4、将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
具体地,首先选定二进制可执行程序形式的待测业务文件,与含有目标漏洞函数的二进制程序,使用反汇编工具如IDA Pro、Binary Ninja、Radare2等生成对应汇编指令;随后使用预训练汇编指令表征方法,将生成的汇编指令转化为指令级别的表征向量;之后使用一个基本块中所有指令的表征向量,计算求和平均值得到基本块表征向量,并结合函数中基本块间的控制依赖关系与数据依赖信息,生成用于表征函数的增强属性控制流图ACFG+;然后将每个函数的增强属性控制流图ACFG+使用图结构嵌入表征方法进行向量形式的表征,用于相似性检测;最终在相似性检测阶段,使用向量距离计算的方式,计算不同函数表征向量之间的相似性分数,作为检测结果。
在步骤S1,获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令。
在一些实施例中,所述待测业务文件为待测的二进制可执行程序,所述目标漏洞文件为包含目标漏洞函数的二进制程序;所述反汇编工具包括IDA pro、Binary Ninja和Radare2。
具体地,首先选定业务相关程序的二进制可执行文件作为检测目标,根据CVE与CNVD等网站发布的漏洞公开信息,收集漏洞函数与对应版本的二进制文件作为漏洞数据库。每轮检测可以选择漏洞数据库中一个或多个二进制程序中的一个或多个漏洞,检测目标二进制文件中是否含有相应漏洞。对选定的待测业务二进制文件,以及目标漏洞二进制文件,首先进行统一的反汇编处理。使用成熟的商业逆向工具:IDA Pro,Binary Ninja,Radare2等,对二进制程序进行反汇编得到汇编指令,并使用各个工具提供的功能接口,在汇编指令基础上进行函数级别控制流与数据依赖关系的分析与提取。最终生成的汇编指令,用于后面模块进行使用。
在步骤S2,基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量。
在一些实施例中,在所述步骤S2中,预训练所述汇编指令表征模型包括:下一指令预测训练:在控制流层面,判断两个指令是否为一前一后的相邻关系;若是,则下一指令预测标签置1,若否,则所述下一指令预测标签置0;数据流向顺序预测训练:在数据流层面,给出关于同一变量数据的两条读写访问指令,判断所述两条读写访问指令的顺序是否正确;若是,则数据流向顺序预测标签置1;若否,则所述数据流向顺序预测标签置0;
掩码语言模型训练:根据下一指令预测训练任务构造前后相邻的指令,以及根据数据流向顺序预测训练任务构造针对特定变量的读写指令对,并对构造出的指令/指令对中的部分单词进行替换,以对经替换的部分进行修正。
在一些实施例中,在所述步骤S2中:以单条汇编指令作为所述预训练的汇编指令表征模型的输入,所述预训练的汇编指令表征模型通过预测指令前后的出现概率、指令中单词的出现频率以及指令语义,直接输出所述指令级别的表征向量;所述指令级别的表征向量的第一位为输入的单条汇编指令在其所属的待测业务文件/目标漏洞文件中出现的概率,所述指令级别的表征向量的其他位则基于其在所述输入的单条汇编指令中对应位置上的出现概率以及前一位的表征向量共同计算得出。
具体地,在上一模块生成汇编指令后,使用预训练汇编指令表征方法,将每一条汇编指令转化为表征向量的形式。针对汇编指令的预训练模型,模型训练阶段基于三个预训练任务:下一指令预测、数据流向顺序预测与掩码语言模型任务。
下一指令预测:下一指令预测任务的定义是:在控制流层面,给出两个指令,判断是否是一前一后的相邻关系。如果是的话,标签置1;否的话,标签置0。这一任务受自然语言处理中的下一句预测任务启发,旨在通过海量指令训练,使模型熟悉指令之间的上下文承接关系。
数据流向顺序预测:数据流向顺序预测任务的定义是:在数据流层面,给出围绕同一变量数据的两条读写访问指令,判断两条指令的顺序是否正确。如读写顺序正确,则标签置1;如顺序有误,则标签置0。这一任务通过构造在一个函数中针对同一变量的写入读取对,来体现指令间数据流关系,并对指令顺序进行随机倒置,使模型不仅能够识别数据流依赖关系,更能对内存读写指令顺序进行学习。
掩码语言模型:根据前两个预训练任务,构造前后相邻的指令对以及针对特定变量的读写指令对,对指令对中的部分单词进行替换后作为样本,模型尝试对替换过的部分进行填空,以使模型具有对指令语义的理解。
通过这三个预训练任务,使模型具有对指令前后出现概率、指令中单词出现频率、指令的语义进行感知的能力。
模型的应用过程为:首先输入单条汇编指令至预训练模型中,经过模型中各个神经元之间的信息传递,获取模型最后输出层各个神经元的输出数据作为指令的表征向量。
输出的指令表征向量中,第一位包含有该条指令在程序中出现的概率,其余各位由原指令中对应位置单词在指令中出现概率,以及前一位计算得到的表征向量信息共同计算得出。
在步骤S3,将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+。
在一些实施例中,在所述步骤S3中:对于每一个基本块,以该基本块中所包含的全部指令级别的表征向量的加和平均值作为基本块级别的表征向量;基于所述控制依赖关系确定所述各个基本块之间的控制流图,并基于所述数据依赖关系确定所述各个基本块之间的数据流图;以基本块级别的表征向量作为节点,基于所述控制流图和所述数据流图构建各个节点之间的边,形成所述增强属性控制流图ACFG+。
具体地,使用预训练模型生成的汇编指令表征向量,可以用于构建增强属性控制流图ACFG+。由于二进制可执行程序的粒度可以划分为:指令级别、基本块级别、函数级别、程序级别,而ACFG+属于函数级别的表征方法,因此构建过程遵循指令-基本块-函数级别的顺序。获取到指令级别表征向量后,根据一个基本块中全部指令的表征向量,计算加和平均值,作为基本块级别表征向量。由于函数由多个基本块组成,每个基本块间有逻辑跳转联系与数据依赖关系,因此可以根据基本块表征向量与控制流和数据流关系,构建函数级别图结构表征。使用基本块表征向量作为节点,借助控制流图与数据流图中边进行连接,最终可以形成增强属性控制流图ACFG+。
在步骤S4,将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
在一些实施例中,在所述步骤S4中,将所述对应的函数级别的图结构表征根据所述图结构嵌入的方式转化为所述对应的函数级别的表征向量,具体包括:对于所述增强属性控制流图ACFG+中的各个基本块,将相邻基本块的表征向量和当前基本块的表征向量的求和结果作为所述当前基本块新的表征向量;根据所述新的表征向量对所述各个基本块进行相似基本块聚簇处理,在每个聚簇中选取中心位置的基本块作为代表性基本块,将所述增强属性控制流图ACFG+转化为基于各个代表性基本块的控制流图作为第一子图,所述第一子图中包含所述各个基本块的特征信息;将所述增强属性控制流图ACFG+与所述第一子图并列拼接为第二子图,基于同样的求和处理和聚簇处理获得第三子图,利用能够处理多维数据的神经元组成网络将所述第三子图转化为基于图结构的向量表征,作为所述函数级别的表征向量。
具体地,首先进行增强属性控制流图ACFG+的预处理,以适应图结构嵌入模型,并添加函数图结构中基本块节点位置分布的相关信息。
ACFG+预处理:首先根据各个基本块与其的邻居基本块的表征向量值,求和作为基本块节点的新表征向量,其中包含邻居基本块的特征信息。之后基于基本块表征向量的值,进行相似基本块聚簇,并在每个聚簇中选择中心位置的代表性基本块,构成一个新的子图,其中包含有原图基本块位置分布特征信息。将获取到的子图,与原图并列放置在一起,形成一张新图,并经过同样的与相邻基本块特征向量求和操作,以及基于基本块表征向量的聚簇操作,形成新的子图。
图结构嵌入:基于生成的新的子图,使用能够处理多维数据的神经元组成神经网络,进行图结构的向量化表征。首先将每个基本块节点的表征向量中的每一维数据,都进行维度扩充,以匹配神经元所能处理的数据格式。之后将扩充维度后的数据送入神经网络中,进行神经元间高维信息的传递,以实现对图结构中高维度语义特征的获取,最终将神经网络输出层的各个神经元的输出,组合成输出向量作为对整个图结构的表征。
具体地,扩充图中节点数据各个维度的特征的维度后,图被送入到神经网络中。神经网络分为三层,每层都含有与节点数据维数对应个数个神经元,每一层神经元之间采用全连接的方式,即上一层任意神经元都可以传输数据到下一层的任意神经元中。神经网络逐个接受图中的基本块节点作为输入,首先送入第一层的神经元中,节点的每一维度特征向量此时都为向量而非单一数值,都由单独的神经元处理。第一层的神经元将输入的每一维度特征向量,乘以神经元中的权重矩阵,之后乘以特征向量的范数与向量范数加一的比值,得到第一层神经元输出的特征向量。第二层神经元接受上一层所有神经元输出的特征向量,同样乘以神经元中的权重矩阵,并在相加之后乘以特征向量的范数与向量范数加一的比值,得到第二层神经元输出的特征向量。第三层进行与第二层相同的操作,最终该层神经元输出每个基本块节点中所有维度的特征的表征向量,进行顺序拼接得到基本块表征向量。将所有基本块的表征向量依照增强属性控制流图ACFG+的跳转顺序,进行顺序拼接得到ACFG+的表征向量。由于ACFG+会有不同的节点个数导致输出维度不同,因此设定一固定维度,使用求和平均的方式进行运算,将现有ACFG+表征向量压缩至对应目标固定维度下的表征向量,作为神经网络的输出。
在一些实施例中,在所述步骤S4中,逐一提取所述待测业务文件的各个函数级别的表征向量,分别计算与所述目标漏洞文件的各个函数级别的表征向量之间的向量距离,当所述向量距离低于阈值时,判定所述待测业务文件中存在漏洞,并获取漏洞信息。
网络的训练过程为:选择两个函数作为一个样本对,如果是相似函数则标签为1,不相似则标签为0。将两个函数的ACFG+输入神经网络,得到对应表征向量后计算Cosine距离,并与标签进行比较计算,差值用来对神经网络进行反向传播,调整各个神经元中的权重矩阵的参数。
网络的使用过程为:选择需要进行相似性计算的函数对,分别将各自的ACFG+输入至神经网络中,得到的输出为各个函数的表征向量。基于得到的表征向量,使用Cosine距离计算公式进行距离计算,作为要比对的函数的相似度结果。
实施例1:二进制漏洞函数相似性检测。
进行漏洞函数检测之前,需要准备目标漏洞数据库,数据库中包含了一系列的漏洞及其相关信息,如受影响的版本,漏洞所在的函数,软件代码以及漏洞详细描述等辅助信息。系统将目标二进制程序中的函数,与漏洞数据库中的漏洞函数进行相似性比较,判断二进制程序中是否存在相似函数,进而判断程序中是否可能有相关漏洞。在使用过程中,场景可分为一对多、多对一、多对多等,即:针对一个漏洞,检测多个函数中是否有相似;针对多个漏洞,检测一个待测函数是否为其中之一;针对多个漏洞,批量检测多个函数中是否有相似。在检测过程中,由于结果数众多,因此可以对计算得到的相似性分数进行排名,只针对排名前K个(Top-K列表)函数进行下一步更准确(如人工)的分析。
实施例2:二进制程序补丁/版本检测。
在上一实施例基础上,当准确度达到较高水平时,即可进行补丁检测或是二进制程序版本检测。首先将待测二进制函数作为锚函数,之后分别从漏洞函数库与补丁函数库中取出目标函数,并分别计算待测函数与二者的相似度,若与漏洞函数更为类似,则其更有可能含有漏洞;若与补丁函数更相似,则其更可能打过补丁。同理,进行版本检测时,可以使用多个版本下的函数与锚函数进行比较,最终即可得到最为相似的版本。
本发明第二方面公开了一种基于二进制函数相似性的漏洞检测系统。所述系统包括:第一处理单元,被配置为:获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;第二处理单元,被配置为:基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;第三处理单元,被配置为:将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;第四处理单元,被配置为:将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
根据本发明第二方面的系统,所述待测业务文件为待测的二进制可执行程序,所述目标漏洞文件为包含目标漏洞函数的二进制程序;所述反汇编工具包括IDA pro、BinaryNinja和Radare2。
根据本发明第二方面的系统,所述第二处理单元还被配置为,预训练所述汇编指令表征模型,具体包括:下一指令预测训练:在控制流层面,判断两个指令是否为一前一后的相邻关系;若是,则下一指令预测标签置1,若否,则所述下一指令预测标签置0;数据流向顺序预测训练:在数据流层面,给出关于同一变量数据的两条读写访问指令,判断所述两条读写访问指令的顺序是否正确;若是,则数据流向顺序预测标签置1;若否,则所述数据流向顺序预测标签置0;掩码语言模型训练:根据下一指令预测训练任务构造前后相邻的指令,以及根据数据流向顺序预测训练任务构造针对特定变量的读写指令对,并对构造出的指令/指令对中的部分单词进行替换,以对经替换的部分进行修正。
根据本发明第二方面的系统,所述第二处理单元还被配置为:以单条汇编指令作为所述预训练的汇编指令表征模型的输入,所述预训练的汇编指令表征模型通过预测指令前后的出现概率、指令中单词的出现频率以及指令语义,直接输出所述指令级别的表征向量;所述指令级别的表征向量的第一位为输入的单条汇编指令在其所属的待测业务文件/目标漏洞文件中出现的概率,所述指令级别的表征向量的其他位则基于其在所述输入的单条汇编指令中对应位置上的出现概率以及前一位的表征向量共同计算得出。
根据本发明第二方面的系统,所述第三处理单元还被配置为:对于每一个基本块,以该基本块中所包含的全部指令级别的表征向量的加和平均值作为基本块级别的表征向量;基于所述控制依赖关系确定所述各个基本块之间的控制流图,并基于所述数据依赖关系确定所述各个基本块之间的数据流图;以基本块级别的表征向量作为节点,基于所述控制流图和所述数据流图构建各个节点之间的边,形成所述增强属性控制流图ACFG+。
根据本发明第二方面的系统,所述第四处理单元还被配置为:将所述对应的函数级别的图结构表征根据所述图结构嵌入的方式转化为所述对应的函数级别的表征向量,具体包括:对于所述增强属性控制流图ACFG+中的各个基本块,将相邻基本块的表征向量和当前基本块的表征向量的求和结果作为所述当前基本块新的表征向量;根据所述新的表征向量对所述各个基本块进行相似基本块聚簇处理,在每个聚簇中选取中心位置的基本块作为代表性基本块,将所述增强属性控制流图ACFG+转化为基于各个代表性基本块的控制流图作为第一子图,所述第一子图中包含所述各个基本块的特征信息;将所述增强属性控制流图ACFG+与所述第一子图并列拼接为第二子图,基于同样的求和处理和聚簇处理获得第三子图,利用能够处理多维数据的神经元组成网络将所述第三子图转化为基于图结构的向量表征,作为所述函数级别的表征向量。
根据本发明第二方面的系统,所述第三处理单元还被配置为:逐一提取所述待测业务文件的各个函数级别的表征向量,分别计算与所述目标漏洞文件的各个函数级别的表征向量之间的向量距离,当所述向量距离低于阈值时,判定所述待测业务文件中存在漏洞,并获取漏洞信息。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
图2为根据本发明实施例的一种电子设备的结构图;如图2所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图2中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
可见,本发明提供的技术方案旨在解决二进制层面进行函数级别相似性检测过程中,特征提取不全面的问题。使用神经网络模型,一方面针对指令语义进行提取,另一方面针对函数图结构进行向量嵌入,充分考虑了指令间顺序出现的概率和指令出现频率,以及函数图结构中节点位置分布代表的高维特征信息,最终实现函数级别相似性检测准确率的提高。实现的相似性检测技术可以应用于二进制漏洞检测,补丁存在性分析,组件版本检测等领域中。
上述技术方案为提取更多维度汇编代码特征,并更准确表征二进制函数级别代码,从指令表征技术与图嵌入技术两方面进行设计。通过设计基于程序控制流与数据流关系,捕获指令出现频率特征的预训练任务,学习生成指令嵌入模型,提高指令表征的质量。通过设计能够提取节点位置分布信息特征的图神经网络,对二进制函数图结构中的基本块位置分布信息捕获,并结合指令嵌入模型生成的表征向量,进行二进制函数图结构表征,并应用于二进制函数的相似性检测与二进制漏洞函数检测,以提高准确度。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于二进制函数相似性的漏洞检测方法,其特征在于,所述方法包括:
步骤S1、获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;
步骤S2、基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;
步骤S3、将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;
步骤S4、将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
2.根据权利要求1所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于:所述待测业务文件为待测的二进制可执行程序,所述目标漏洞文件为包含目标漏洞函数的二进制程序;所述反汇编工具包括IDA pro、Binary Ninja和Radare2。
3.根据权利要求1所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于,在所述步骤S2中,预训练所述汇编指令表征模型包括:
下一指令预测训练:在控制流层面,判断两个指令是否为一前一后的相邻关系;若是,则下一指令预测标签置1,若否,则所述下一指令预测标签置0;
数据流向顺序预测训练:在数据流层面,给出关于同一变量数据的两条读写访问指令,判断所述两条读写访问指令的顺序是否正确;若是,则数据流向顺序预测标签置1;若否,则所述数据流向顺序预测标签置0;
掩码语言模型训练:根据下一指令预测训练任务构造前后相邻的指令,以及根据数据流向顺序预测训练任务构造针对特定变量的读写指令对,并对构造出的指令/指令对中的部分单词进行替换,以对经替换的部分进行修正。
4.根据权利要求3所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于,在所述步骤S2中:
以单条汇编指令作为所述预训练的汇编指令表征模型的输入,所述预训练的汇编指令表征模型通过预测指令前后的出现概率、指令中单词的出现频率以及指令语义,直接输出所述指令级别的表征向量;
所述指令级别的表征向量的第一位为输入的单条汇编指令在其所属的待测业务文件/目标漏洞文件中出现的概率,所述指令级别的表征向量的其他位则基于其在所述输入的单条汇编指令中对应位置上的出现概率以及前一位的表征向量共同计算得出。
5.根据权利要求1所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于,在所述步骤S3中:
对于每一个基本块,以该基本块中所包含的全部指令级别的表征向量的加和平均值作为基本块级别的表征向量;
基于所述控制依赖关系确定所述各个基本块之间的控制流图,并基于所述数据依赖关系确定所述各个基本块之间的数据流图;
以基本块级别的表征向量作为节点,基于所述控制流图和所述数据流图构建各个节点之间的边,形成所述增强属性控制流图ACFG+。
6.根据权利要求5所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于,在所述步骤S4中,将所述对应的函数级别的图结构表征根据所述图结构嵌入的方式转化为所述对应的函数级别的表征向量,具体包括:
对于所述增强属性控制流图ACFG+中的各个基本块,将相邻基本块的表征向量和当前基本块的表征向量的求和结果作为所述当前基本块新的表征向量;
根据所述新的表征向量对所述各个基本块进行相似基本块聚簇处理,在每个聚簇中选取中心位置的基本块作为代表性基本块,将所述增强属性控制流图ACFG+转化为基于各个代表性基本块的控制流图作为第一子图,所述第一子图中包含所述各个基本块的特征信息;
将所述增强属性控制流图ACFG+与所述第一子图并列拼接为第二子图,基于同样的求和处理和聚簇处理获得第三子图,利用能够处理多维数据的神经元组成网络将所述第三子图转化为基于图结构的向量表征,作为所述函数级别的表征向量。
7.根据权利要求6所述的一种基于二进制函数相似性的漏洞检测方法,其特征在于,在所述步骤S4中,逐一提取所述待测业务文件的各个函数级别的表征向量,分别计算与所述目标漏洞文件的各个函数级别的表征向量之间的向量距离,当所述向量距离低于阈值时,判定所述待测业务文件中存在漏洞,并获取漏洞信息。
8.一种基于二进制函数相似性的漏洞检测系统,其特征在于,所述系统包括:
第一处理单元,被配置为:获取待测业务文件和目标漏洞文件,利用反汇编工具分别对所述待测业务文件和所述目标漏洞文件进行反汇编处理,以获取所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令;
第二处理单元,被配置为:基于预训练的汇编指令表征模型,将所述待测业务文件的汇编指令和所述目标漏洞文件的汇编指令分别转化为对应的指令级别的表征向量;
第三处理单元,被配置为:将对应的指令级别的表征向量转化为对应的基本块级别的表征向量,以基于各个基本块之间的控制依赖关系和数据依赖关系将所述对应的基本块级别的表征向量转化为对应的函数级别的图结构表征,所述函数级别的图结构表征指增强属性控制流图ACFG+;
第四处理单元,被配置为:将所述对应的函数级别的图结构表征根据图结构嵌入的方式转化为对应的函数级别的表征向量,并基于所述待测业务文件的函数级别的表征向量和所述目标漏洞文件的函数级别的表征向量之间的相似度来检测所述待测业务文件中的漏洞。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至7中任一项所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至7中任一项所述的一种基于二进制函数相似性的漏洞检测方法中的步骤。
CN202211301900.0A 2022-10-24 2022-10-24 一种基于二进制函数相似性的漏洞检测方法与系统 Active CN115906089B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211301900.0A CN115906089B (zh) 2022-10-24 2022-10-24 一种基于二进制函数相似性的漏洞检测方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211301900.0A CN115906089B (zh) 2022-10-24 2022-10-24 一种基于二进制函数相似性的漏洞检测方法与系统

Publications (2)

Publication Number Publication Date
CN115906089A true CN115906089A (zh) 2023-04-04
CN115906089B CN115906089B (zh) 2024-04-12

Family

ID=86484120

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211301900.0A Active CN115906089B (zh) 2022-10-24 2022-10-24 一种基于二进制函数相似性的漏洞检测方法与系统

Country Status (1)

Country Link
CN (1) CN115906089B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111639344A (zh) * 2020-07-31 2020-09-08 中国人民解放军国防科技大学 一种基于神经网络的漏洞检测方法及装置
CN112163226A (zh) * 2020-11-30 2021-01-01 中国人民解放军国防科技大学 基于图自动编码器的二进制相似性检测方法
CN113900923A (zh) * 2021-08-16 2022-01-07 中国人民解放军战略支援部队信息工程大学 一种跨指令集架构的二进制函数相似性检查系统及方法
KR20220077847A (ko) * 2020-12-02 2022-06-09 한양대학교 에리카산학협력단 교차 아키텍처 바이너리에 대한 이진 비교 방법
CN115202736A (zh) * 2022-06-14 2022-10-18 北京理工大学 一种面向控制流程图的跨平台二进制函数表征方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111639344A (zh) * 2020-07-31 2020-09-08 中国人民解放军国防科技大学 一种基于神经网络的漏洞检测方法及装置
CN112163226A (zh) * 2020-11-30 2021-01-01 中国人民解放军国防科技大学 基于图自动编码器的二进制相似性检测方法
KR20220077847A (ko) * 2020-12-02 2022-06-09 한양대학교 에리카산학협력단 교차 아키텍처 바이너리에 대한 이진 비교 방법
CN113900923A (zh) * 2021-08-16 2022-01-07 中国人民解放军战略支援部队信息工程大学 一种跨指令集架构的二进制函数相似性检查系统及方法
CN115202736A (zh) * 2022-06-14 2022-10-18 北京理工大学 一种面向控制流程图的跨平台二进制函数表征方法及装置

Also Published As

Publication number Publication date
CN115906089B (zh) 2024-04-12

Similar Documents

Publication Publication Date Title
Ma et al. MODE: automated neural network model debugging via state differential analysis and input selection
CN111274134A (zh) 基于图神经网络的漏洞识别与预测方法、系统、计算机设备和存储介质
CN111046679B (zh) 翻译模型的质量信息获取方法、装置及计算机设备
Tian et al. BVDetector: A program slice-based binary code vulnerability intelligent detection system
CN105426356A (zh) 一种目标信息识别方法和装置
CN109376535B (zh) 一种基于智能化符号执行的漏洞分析方法及系统
CN113094200A (zh) 一种应用程序的故障预测方法和装置
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
CN113312447A (zh) 基于概率标签估计的半监督日志异常检测方法
CN113326244A (zh) 一种基于日志事件图和关联关系挖掘的异常检测方法
CN112115326B (zh) 一种以太坊智能合约的多标签分类和漏洞检测方法
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN113778864A (zh) 一种测试用例的生成方法和装置、电子设备和存储介质
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN115687732A (zh) 基于ai和流式计算的用户分析方法及系统
Zhao et al. Suzzer: A vulnerability-guided fuzzer based on deep learning
CN111859862A (zh) 文本的数据标注方法和装置、存储介质及电子装置
CN116881017A (zh) 一种协同虚拟维修训练系统和方法
CN116707859A (zh) 特征规则提取方法和装置、网络入侵检测方法和装置
CN115906089A (zh) 一种基于二进制函数相似性的漏洞检测方法与系统
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN115587029A (zh) 补丁的检测方法及装置、电子设备、计算机可读介质
CN115587358A (zh) 一种二进制代码相似性检测方法、装置及存储介质
Karanikiotis et al. A Data-driven Methodology towards Interpreting Readability against Software Properties.

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
GR01 Patent grant
GR01 Patent grant