CN112613040A - 一种基于二进制程序的漏洞检测方法及相关设备 - Google Patents
一种基于二进制程序的漏洞检测方法及相关设备 Download PDFInfo
- Publication number
- CN112613040A CN112613040A CN202011474805.1A CN202011474805A CN112613040A CN 112613040 A CN112613040 A CN 112613040A CN 202011474805 A CN202011474805 A CN 202011474805A CN 112613040 A CN112613040 A CN 112613040A
- Authority
- CN
- China
- Prior art keywords
- function
- ast
- vulnerability
- similarity
- known vulnerability
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于二进制程序的漏洞检测方法及相关设备,属于计算机信息安全技术领域,所述方法包括:基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。本发明基于已知一个漏洞函数的情况下,通过找到目标二进制程序中与已知漏洞函数的同源函数,实现了对目标二进制程序的漏洞检测。
Description
技术领域
本发明涉及计算机信息安全技术领域,尤其涉及一种基于二进制程序的漏洞检测方法及相关设备。
背景技术
漏洞是指在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。漏洞是信息系统及网络空间安全的重要影响因素。
漏洞检测是漏洞分析技术的一个重要分支,一般是从已有漏洞出发,查找与其存在同源关系的相似漏洞甚至根据漏洞代码特征发现未公开的漏洞。在源码级别进行漏洞检测的技术已经较为成熟,有许多专业工具可以使用自动化的漏洞检测方法,对程序源码进行检测并提供安全性建议。
但这些专业工具不能检测源码未知的二进制程序。例如当前许多广泛使用的软件的源码是未知的,如商业软件MS Office和免费闭源软件Adobe Reader、Flash,并且由于在开发过程中存在代码重用,当一个第三方代码库中被发现可利用漏洞函数时,重用该代码库中代码的厂商产品中也可能包含相同的漏洞函数,而这些产品可能不公开源代码,只提供二进制程序。因此,二进制程序中的漏洞可以跨软件对不同类型的软件造成安全隐患。因此,迫切需要对二进制程序进行漏洞检测以发现二进制程序中漏洞函数。
发明内容
本发明提供一种基于二进制程序的漏洞检测方法及相关设备,用以解决现有技术中不能准确检测到二进制程序的漏洞函数的问题,实现对二进制程序中的同源漏洞函数的精确检测。
本发明提供一种基于二进制程序的漏洞检测方法,包括:
基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;
当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
根据本发明提供的一种基于二进制程序的漏洞检测方法,所述计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度,包括:
将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2;
对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络;
通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量;
通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度;
对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度。
根据本发明提供的一种基于二进制程序的漏洞检测方法,所述将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2,包括:
使用IDA汇编器对所述第一已知漏洞函数和所述第二函数分别进行反汇编,得到对应的第一汇编代码和第二汇编代码;
将所述第一汇编代码和所述第二汇编代码进行反编译,得到对应的第一C代码和第二C代码;
从所述第一C代码提取所述第一已知漏洞函数的AST1和从所述第二C代码提取所述第二函数的AST2,所述第一已知漏洞函数的AST1、第二函数的AST2中的节点对应所述第一C代码、所述第二C代码中的表达式或声明。
根据本发明提供的一种基于二进制程序的漏洞检测方法,所述对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理,包括:
分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2进行数值化,所述数据值化是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点映射并替换为一个预设整数值作为其标签;
对经过所述数值化处理的所述第一已知漏洞函数的AST1和所述第二函数的AST2进行格式转换,所述格式转换是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点的第一个子节点转换为左子节点,与所述第一个子节点右边最近的兄弟节点转换为右子节点。
根据本发明提供的一种基于二进制程序的漏洞检测方法,通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度,包括:
孪生神经网络使用减法和乘法操作捕获所述第一已知漏洞函数的特征向量和所述第二函数的特征向量之间的关系;
将所述第一已知漏洞函数的特征向量和所述第二函数的特征向量串联为一个大向量,通过softmax函数计算生成一个二维向量。
根据本发明提供的一种基于二进制程序的漏洞检测方法,对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度,包括:
定义C为一个函数的被调用函数集合χ的大小,使用C来校准所述AST相似度,使用指数函数来计算被调用函数相似度S,如下:
其中T1,T2分别是二进制第一、第二函数F1,F2编译的AST树。
本发明还提供一种基于二进制程序的漏洞检测装置,包括:
相似度计算模块,用于基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;
漏洞检测模块,用于当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
根据本发明所述的一种基于二进制程序的漏洞检测装置,所述相似度计算模块包括:
AST提取单元,用于将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2;
预处理单元,用于对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络;
AST向量编码单元,用于通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量;
相似度计算单元,用于通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度;
相似度校准单元,用于对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于二进制程序的漏洞检测方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于二进制程序的漏洞检测方法的步骤。
本发明提供的一种基于二进制程序的漏洞检测方法及相关设备,基于已知一个漏洞函数的情况下,通过找到目标二进制程序中与已知漏洞函数的同源函数,实现了对目标二进制程序的漏洞检测。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之一;
图2是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之二;
图3是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之三;
图4a是本发明所述AST提取步骤的流程示意图;
图4b是本发明提供的从C代码提取AST的示意图;
图5是本发明提供的预处理步骤的流程示意图;
图6是本发明提供的AST相似度计算的示意图;
图7是本发明提供的AST相似度计算的流程示意图;
图8是发明提供的AST相似度校准的示意图;
图9a是本发明提供的基于二进制程序的漏洞检测装置的结构示意图;
图9b是本发明提供的相似度计算模块的结构示意图;
图10是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明所述基于二进制程序的漏洞检测方法及相关设备的相关技术描述如下:
同源漏洞函数匹配:同源漏洞函数匹配是一项通过匹配目标程序中与目标漏洞函数相似或同源的函数,从而对目标程序中的漏洞函数进行定位,以实现二进制漏洞的可利用点进行精准定位的一门技术。
同源漏洞函数匹配一般分为基于动态分析的方法和基于静态分析的方法。基于动态分析的方法通过运行程序捕获运行时行为作为函数特性,其中函数特性可以是函数的输入输出对或程序执行期间的系统调用序列等。基于静态分析的方法主要是从汇编代码中提取函数特征,一种直观的方法是计算汇编代码序列之间的编辑距离。但是这种方法不能直接应用于跨指令架构的漏洞函数匹配方法中,因为不同指令架构之间的汇编代码是不同的。
AST:AST(英文:abstract syntax tree,简称AST,中文:抽象语法树)是源代码抽象语法结构的树表示,它保留了定义良好的函数语句组成、显式的语句顺序和执行逻辑。AST包含丰富的语义信息,并且易于在二进制分析时通过反编译生成。因此,使用AST的语义信息进行同源漏洞函数匹配是有可能的。
LSTM:LSTM(英文:Long Short-Term Memory,简称LSTM,中文:长短期记忆神经网络)是用于自然语言处理时一种特殊的循环神经网络,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。其中,在预测两个句子的语义相关性方面,Tree-LSTM(LSTM树形结构)网络可以使用句法树等树形结构,能更好地从结构化特征中得到语义等信息,比普通的LSTM网络具有更好的性能。考虑到自然语言和汇编语言的相似性(如在单词和指令、句子和基本块等方面),可以使用Tree-LSTM进行同源漏洞函数匹配。
孪生神经网络:孪生神经网络(Siamese neural network)包含两个子网络,每个子网络各自接收一个输入,即以两个样本为输入,将其映射至高维特征空间,并输出对应的高维特征向量。通过计算两个特征向量的距离,例如欧式距离,使用者可以比较两个输入的相似程度。孪生神经网络的子网络可以是卷积神经网络或循环神经网络,其权重可以由能量函数或分类损失优化。
下面结合图1-图8描述本发明所述基于二进制程序的漏洞检测方法及相关设备。
图1是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之一,如图所示。一种基于二进制程序的漏洞检测方法,包括:
步骤100,基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度。
步骤101,当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数(即所述第二函数与所述第一已知漏洞函数是同源的),所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
需要说明的是,步骤101中的,第一已知漏洞函数是所述已知漏洞的二进制函数集合的其中一个漏洞函数,所述第二函数是所述目标二进制程序中的其中一个函数。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
图2是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之二;图3是本发明提供的基于二进制程序的漏洞检测方法的流程示意图之三,如图2、图3所示。上述步骤100中,所述计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度,包括:
步骤300,将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2,如图2所示的第①点。
步骤301,对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络,如图2所示的第②点。
步骤302,通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量,如图2所示的第③点。
步骤303,通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度,如图2所示的第④点。
步骤304,对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度,如图2所示的第⑤点。
需要说明的是,上述步骤300~步骤304提供了计算任意两个函数相似度的计算方法。如果要计算已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度,则需要多次重复执行上述300~步骤304。
综上可知,本发明所述基于二进制程序的漏斗检测方法,用于发现二进制程序中的同源漏洞函数。对于任何一个二进制程序,首先通过对其函数进行反编译来提取AST;然后对AST进行预处理使其能被Tree-LSTM计算,再通过Tree-LSTM将AST编码成表示高维特征向量作为函数的语义表示;编码之后,通过孪生神经网络将两个Tree-LSTM网络整合,计算编码向量之间的相似度作为AST相似度;最后在此基础上,进一步根据函数调用关系对AST相似度进行校准,从而计算出函数相似度。
以下针对本发明所述步骤300~步骤304进行具体描述。
图4a是本发明所述AST提取步骤的流程示意图,如图所示。上述所述步骤300中,所述将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2,包括:
步骤400,使用IDA汇编器对所述第一已知漏洞函数和所述第二函数分别进行反汇编,得到对应的第一汇编代码和第二汇编代码。
步骤401,将所述第一汇编代码和所述第二汇编代码进行反编译,得到对应的第一C代码和第二C代码。
步骤402,从所述第一C代码提取所述第一已知漏洞函数的AST1和从所述第二C代码提取所述第二函数的AST2,所述第一已知漏洞函数的AST1、第二函数的AST2中的节点对应所述第一C代码、所述第二C代码中的表达式或声明。
图4b是本发明提供的从C代码提取AST的示意图,如图所示。AST中的节点对应C代码中的表达式或声明。变量或常量是AST的叶节点。AST中的节点根据其功能分为两类:第一类是声明节点,声明节点控制函数执行流,包括if,for,while,return,break等语句。第二类是表达式节点,表达式节点表示多种计算,包括通用数学计算与位运算。
图5是本发明提供的预处理步骤的流程示意图,如图所示。上述所述步骤301中,所述对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理,所述预处理步骤包括对数值化和格式转换,包括:
步骤500,数值化步骤:分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2进行数值化,所述数据值化是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点映射并替换为一个预设整数值作为其标签,如下表1所示:
表1AST节点数值化过程中使用的节点与数值对应关系
步骤501,格式化步骤:对经过所述数值化处理的所述第一已知漏洞函数的AST1和所述第二函数的AST2进行格式转换,所述格式转换是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点的第一个子节点转换为左子节点,与所述第一个子节点右边最近的兄弟节点转换为右子节点。
由于Tree-LSTM读取二元树作为输入,在对AST节点数值化后需要将其格式转换为左孩子右兄弟节点格式。在格式转换后,AST中原来每个节点的第一个子节点都会成为其左子节点,而其原来右边最近的兄弟节点会成为其右子节点。
上述所述步骤302中,所述AST向量编码的步骤,本发明是这样的实现的:
图6是本发明提供的AST相似度计算的示意图,如图所示。图6中的孪生神经网络中两个AST(即AST1和AST2)的相似度计算的工作流在左边;孪生神经网络中的AST编码在中间;AST编码中通过Tree-LSTM对节点进行编码的部分在最右边。
使用Tree-LSTM集成AST中所有子节点的输出以计算当前节点vk。Tree-LSTM使用三种输入:节点嵌入ek,隐藏状态hkl和hkr,单元状态ckl和ckr。节点嵌入ek通过将节点vk嵌入到高维表示向量,hkl,hkr,ckl和ckr来自子节点编码的输出。当Tree-LSTM进行节点编码时,有对计算非常重要的三个门和三个状态。三个门为了过滤信息而而计算,以避免梯度消失和梯度爆炸,分别是输入门、输出门和遗忘门。在二元Tree-LSTM中,有两个遗忘门fkl和fkr,分别用于过滤来自左子节点和右子节点的单元状态。
如图6的Tree-LSTM中所示,遗忘门通过结合hkl,hkr和ek计算。与遗忘门类似,输入门和输出门也通过结合hkl,hkr和ek计算。这三种门的计算细节如下:
其中ik和ok表示输入门和输出门,σ表示sigmoid激活函数。权重矩阵W,U和偏差b根据不同的门取值不同在这些门都计算之后,在Tree-LSTM中有三个状态uk,ck与hk用于存储基于输入hkl,hkr和ek计算的中间编码。缓存状态uk结合了来自节点嵌入ek与隐藏状态hkl和hkr的信息:注意uk使用了tanh作为激活函数而不是sigmoid以从输入中保存更多信息。单元状态ck结合了来自缓存状态uk和单元状态ckl与ckr的被遗忘门过滤的信息:隐藏状态hk通过合并来自单元状态ck与输出门ok的信息计算:其中表示张量积。在隐藏状态与输入状态被计算后,当前节点vk的编码结束,状态ck和hk会被用于计算vk的父节点。在AST编码期间,Tree-LSTM自底向上编码AST中的每个节点,AST中的所有节点编码结束后,根节点的隐藏状态将作为AST的编码。
图7是本发明提供的AST相似度计算的流程示意图,如图所示。上述所述步骤302中,通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度,包括:
步骤700,孪生神经网络使用减法和乘法操作捕获所述第一已知漏洞函数的特征向量和所述第二函数的特征向量之间的关系。
步骤701,将所述第一已知漏洞函数的特征向量和所述第二函数的特征向量串联为一个大向量,通过softmax函数计算生成一个二维向量。
其中,Softmax函数可以将多分类的输出值转换为范围在[0,1]和为1的概率分布。
在两个AST被Tree-LSTM编码之后,孪生神经网络使用AST编码来计算两个AST之间的相似度,具体细节如图6。孪生神经网络由两个共享相同参数的完全相同的Tree-LSTM网络组成。孪生神经网络使用减法和乘法操作来捕获两个编码向量之间的关系。在操作之后,两个产生的向量被串联为一个大向量。最后生成的向量经过一层softmax函数并生成一个二维向量。计算定义为:
M(T1,T2)=softmax(σ(cat(|N(T1)-N(T2)|,N(T1)⊙N(T2))×W))。
其中,W是一个2n*2的矩阵,⊙为Hadamard乘积,|·|表示取绝对值,函数cat(·)表示连接两个向量,softmax函数将向量归一化为概率分布,M表示相似度,N表示孪生神经网络。
由于矩阵W为2n*2的权重矩阵,孪生数据网络的输出为2*1的向量。输出向量的第一个值为不相似的分数,而第二个值为相似的分数,后者作为AST相似度。模型训练期间,孪生神经网络的输入格式为<T1,T2,标签>。标签向量[1,0]表示来自不同源函数对,[0,1]表示是同源函数。得到的向量和标签向量用于模型损失和梯度计算。在模型推理期间,输出向量的第二个值作为两个AST的相似度。
图8是本发明提供的AST相似度校准的示意图,如图所示。通过使用待计算相似度函数中被调用函数的数量来校准相似度,以减少AST结构相似的非同源函数的影响,相似度校准的流程。
由于同源函数共享相同的源代码,其函数内部的被调用函数数量也相同。考虑到编译期间可能发生函数内联,这会导致被调用函数的减少。因此在计算被调用函数数量时将过滤掉那些可能被内联的函数。过滤方式简单得通过汇编指令数决定,当一个被调用函数的指令数小于阈值β时,认为其可能被内联而不计入被调用函数数量,指令数大于阈值的被调用函数将作为一个函数的被调用函数集合χ。定义C为一个函数的被调用函数集合χ的大小,使用C来校准AST相似度。使用指数函数来计算被调用函数相似度:
其中,C1,C2是二进制函数F1,F2的被调用函数集合数量。最终函数对相似度计算结合了AST相似度与被调用函数相似度:
其中,T1,T2分别是二进制函数F1,F2编译的AST树,M(T1,T2)表示AST相似度,S(C1,C2)表示被调用函数相似度。
需要说明的是,图8中的程序1和程序2表示任意的两个目标二进制程序,所述函数F1,F2表示任意的两个二进制函数。可以理解的,程序1也可以表示已知漏洞函数的二进制程序,函数F1也可以表示第一已知漏洞函数。本发明如3示出的计算方法可适用于任意两个二进制函数的相似度计算。
综上所述,对于给定了已知漏洞的二进制函数集合,重复上述步骤300~步骤304,计算其中的每个已知漏洞函数与目标二进制程序中所有函数的相似度。当某一漏洞函数与目标二进制程序中的一个函数相似度大于阈值时,认为这两个函数是同源函数,即目标二进制程序中的该函数具有与漏洞函数相似的漏洞,因此,能成功将二进制程序中检测到漏洞函数。
下面对本发明提供的基于二进制程序的漏洞检测装置进行描述,下文描述的基于二进制程序的漏洞检测装置与上文描述的基于二进制程序的漏洞检测方法可相互对应参照。
图9a是本发明提供的基于二进制程序的漏洞检测装置的结构示意图;一种基于二进制程序的漏洞检测装置900,包括相似度计算模块901和漏洞检测模块902。其中,
相似度计算模块901,用于基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;
漏洞检测模块901,用于当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
图9b是本发明提供的相似度计算模块的结构示意图,如图所示。所述相似度计算模块901包括AST提取单元910、预处理单元920、AST向量编码单元930、相似度计算单元940以及相似度校准单元950。
其中,
AST提取单元910,用于将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2;
预处理单元920,用于对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络;
AST向量编码单元930,用于通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量;
相似度计算单元940,用于通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度;
相似度校准单元950,用于对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度。
图10示例了一种电子设备的实体结构示意图,如图10所示,该电子设备可以包括:处理器(processor)810、通信接口(Communications Interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行上述所述基于二进制程序的漏洞检测方法的步骤。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的基于二进制程序的漏洞检测方法。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的基于二进制程序的漏洞检测方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种基于二进制程序的漏洞检测方法,其特征在于,包括:
基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;
当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
2.根据权利要求1所述的基于二进制程序的漏洞检测方法,其特征在于,所述计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度,包括:
将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2;
对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络;
通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量;
通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度;
对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度。
3.根据权利要求2所述的方法,其特征在于,所述将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2,包括:
使用IDA汇编器对所述第一已知漏洞函数和所述第二函数分别进行反汇编,得到对应的第一汇编代码和第二汇编代码;
将所述第一汇编代码和所述第二汇编代码进行反编译,得到对应的第一C代码和第二C代码;
从所述第一C代码提取所述第一已知漏洞函数的AST1和从所述第二C代码提取所述第二函数的AST2,所述第一已知漏洞函数的AST1、第二函数的AST2中的节点对应所述第一C代码、所述第二C代码中的表达式或声明。
4.根据权利要求2所述的方法,其特征在于,所述对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理,包括:
分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2进行数值化,所述数据值化是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点映射并替换为一个预设整数值作为其标签;
对经过所述数值化处理的所述第一已知漏洞函数的AST1和所述第二函数的AST2进行格式转换,所述格式转换是分别将所述第一已知漏洞函数的AST1和所述第二函数的AST2的每个节点的第一个子节点转换为左子节点,与所述第一个子节点右边最近的兄弟节点转换为右子节点。
5.根据权利要求2所述的方法,其特征在于,通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度,包括:
孪生神经网络使用减法和乘法操作捕获所述第一已知漏洞函数的特征向量和所述第二函数的特征向量之间的关系;
将所述第一已知漏洞函数的特征向量和所述第二函数的特征向量串联为一个大向量,通过softmax函数计算生成一个二维向量。
7.一种基于二进制程序的漏洞检测装置,其特征在于,包括:
相似度计算模块,用于基于预先给出的已知漏洞的二进制函数集合,计算所述已知漏洞的二进制函数集合的每个已知漏洞函数与目标二进制程序中所有函数的相似度;
漏洞检测模块,用于当第一已知漏洞函数与所述目标二进制中的第二函数的相似度大于阈值时,则确定所述第二函数与所述第一已知漏洞函数是同源函数,所述第二函数具有与所述第一已知漏洞函数相似的漏洞。
8.根据权利要求7所述的基于二进制程序的漏洞检测装置,其特征在于,所述相似度计算模块包括:
AST提取单元,用于将第一已知漏洞函数和第二函数依次进行反汇编和反编译后,提取所述第一已知漏洞函数的AST1和所述第二函数的AST2;
预处理单元,用于对所述第一已知漏洞函数的AST1和所述第二函数的AST2,分别进行预处理后输入至孪生神经网络对应的第一Tree-LSTM网络和第二Tree-LSTM网络;
AST向量编码单元,用于通过所述第一Tree-LSTM网络对所述第一已知漏洞函数的AST1进行向量编码得到所述第一已知漏洞函数的特征向量,以及通过所述第二Tree-LSTM网络对所述第二函数的AST2进行向量编码得到所述第二函数的特征向量;
相似度计算单元,用于通过孪生神经网络对所述第一已知漏洞函数的特征向量和所述第二函数的特征向量进行相似性计算,得到AST相似度;
相似度校准单元,用于对所述AST相似度进行校准,得到所述第一已知漏洞函数和所述第二函数的相似度。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述基于二进制程序的漏洞检测方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于二进制程序的漏洞检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011474805.1A CN112613040A (zh) | 2020-12-14 | 2020-12-14 | 一种基于二进制程序的漏洞检测方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011474805.1A CN112613040A (zh) | 2020-12-14 | 2020-12-14 | 一种基于二进制程序的漏洞检测方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112613040A true CN112613040A (zh) | 2021-04-06 |
Family
ID=75234304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011474805.1A Pending CN112613040A (zh) | 2020-12-14 | 2020-12-14 | 一种基于二进制程序的漏洞检测方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112613040A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114528015A (zh) * | 2022-04-24 | 2022-05-24 | 湖南泛联新安信息科技有限公司 | 二进制可执行文件同源分析方法、计算机设备及存储介质 |
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN117319091A (zh) * | 2023-11-29 | 2023-12-29 | 苏州市软件评测中心有限公司 | 基于深度学习的企业软件网络安全漏洞检测方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315599A (zh) * | 2007-05-29 | 2008-12-03 | 北京航空航天大学 | 源程序相似度检测方法及装置 |
CN108491228A (zh) * | 2018-03-28 | 2018-09-04 | 清华大学 | 一种二进制漏洞代码克隆检测方法及系统 |
CN109635565A (zh) * | 2018-11-28 | 2019-04-16 | 江苏通付盾信息安全技术有限公司 | 恶意程序的检测方法、装置、计算设备及计算机存储介质 |
CN110147235A (zh) * | 2019-03-29 | 2019-08-20 | 中国科学院信息工程研究所 | 一种源代码与二进制代码间的语义比对方法和装置 |
CN111639344A (zh) * | 2020-07-31 | 2020-09-08 | 中国人民解放军国防科技大学 | 一种基于神经网络的漏洞检测方法及装置 |
-
2020
- 2020-12-14 CN CN202011474805.1A patent/CN112613040A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315599A (zh) * | 2007-05-29 | 2008-12-03 | 北京航空航天大学 | 源程序相似度检测方法及装置 |
CN108491228A (zh) * | 2018-03-28 | 2018-09-04 | 清华大学 | 一种二进制漏洞代码克隆检测方法及系统 |
CN109635565A (zh) * | 2018-11-28 | 2019-04-16 | 江苏通付盾信息安全技术有限公司 | 恶意程序的检测方法、装置、计算设备及计算机存储介质 |
CN110147235A (zh) * | 2019-03-29 | 2019-08-20 | 中国科学院信息工程研究所 | 一种源代码与二进制代码间的语义比对方法和装置 |
CN111639344A (zh) * | 2020-07-31 | 2020-09-08 | 中国人民解放军国防科技大学 | 一种基于神经网络的漏洞检测方法及装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114528015A (zh) * | 2022-04-24 | 2022-05-24 | 湖南泛联新安信息科技有限公司 | 二进制可执行文件同源分析方法、计算机设备及存储介质 |
CN114528015B (zh) * | 2022-04-24 | 2022-07-29 | 湖南泛联新安信息科技有限公司 | 二进制可执行文件同源分析方法、计算机设备及存储介质 |
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN117319091A (zh) * | 2023-11-29 | 2023-12-29 | 苏州市软件评测中心有限公司 | 基于深度学习的企业软件网络安全漏洞检测方法及系统 |
CN117319091B (zh) * | 2023-11-29 | 2024-02-09 | 苏州市软件评测中心有限公司 | 基于深度学习的企业软件网络安全漏洞检测方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111428044B (zh) | 多模态获取监管识别结果的方法、装置、设备及存储介质 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
US11061648B2 (en) | Method and system for arbitrary-granularity execution clone detection | |
CN112613040A (zh) | 一种基于二进制程序的漏洞检测方法及相关设备 | |
CN110348214B (zh) | 对恶意代码检测的方法及系统 | |
EP3679483A1 (en) | Pruning engine | |
WO2019075390A1 (en) | BOX BLACK MATCHING MOTOR | |
CN113010209A (zh) | 一种抗编译差异的二进制代码相似性比较技术 | |
CN112579469A (zh) | 一种源代码缺陷检测方法与装置 | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN116361801A (zh) | 基于应用程序接口语义信息的恶意软件检测方法及系统 | |
CN114201406A (zh) | 基于开源组件的代码检测方法、系统、设备及存储介质 | |
CN114064117A (zh) | 一种基于字节码和神经网络的代码克隆检测方法及系统 | |
CN115033890A (zh) | 一种基于对比学习的源代码漏洞检测方法及系统 | |
CN117195220A (zh) | 基于Tree-LSTM和BiLSTM的智能合约漏洞检测方法及系统 | |
Hofmann et al. | I/O guided detection of list catamorphisms: towards problem specific use of program templates in ip | |
CN113971283A (zh) | 一种基于特征的恶意应用程序检测方法及设备 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN116595537A (zh) | 一种基于多模态特征的生成式智能合约的漏洞检测方法 | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN116662991A (zh) | 基于人工智能的智能合约意图检测方法 | |
CN116301875A (zh) | 一种基于学习模型可触发性的代码语义冗余度量验证方法 | |
CN115455945A (zh) | 基于实体-关系的漏洞数据纠错方法和系统 | |
Utkin et al. | Evaluating the impact of source code parsers on ML4SE models | |
CN112989815A (zh) | 基于信息交互的文本相似度识别方法、装置、设备及介质 |
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 |