CN115129591A - 面向二进制代码的复现漏洞检测方法及系统 - Google Patents
面向二进制代码的复现漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN115129591A CN115129591A CN202210740708.5A CN202210740708A CN115129591A CN 115129591 A CN115129591 A CN 115129591A CN 202210740708 A CN202210740708 A CN 202210740708A CN 115129591 A CN115129591 A CN 115129591A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- function
- binary
- functions
- code
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及面向二进制代码的复现漏洞检测方法及系统,包括以下步骤:获取目标软件不同版本且包含调试信息的二进制可执行程序中的函数数据集;根据漏洞信息数据库中的漏洞信息,从对应二进制项目的漏洞影响版本中获取二进制漏洞函数,经解析后为每个函数构造一个操作码共现矩阵;将目标软件函数数据集中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以它们的共现矩阵作为输入分别通过训练完毕的Siamese‑CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;若匹配,则对匹配到的函数对进行精确识别,判断是否存在漏洞。能够克服软件版本更新和编译器版本变化实现精准的函数匹配。
Description
技术领域
本发明涉及计算机安全技术领域,具体为面向二进制代码的复现漏洞检测方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
软件开发过程中,开源和第三方代码的引入能够有效提高开发效率,同时降低开发成本,因此其在互联网应用程序、大数据与人工智能等领域被广泛应用,随着开源代码使用的普及,这些存在漏洞的代码也被广泛用于各类项目中,从而导致同源漏洞的引入。开源和第三方代码最值得关注的安全问题是其放大作用。一个开源软件出现漏洞,会导致依赖它的其他开源软件受到影响。
基于二进制代码对已知漏洞进行检测,一般是通过二进制代码相似性检测实现。值得注意的是由于软件更新或者编译器版本变化使编译后的二进制文件可能会存在不同的语法结构和语义特征。
现有的解决此类问题的研究方法大多依赖于函数的控制流程图(CFG)、属性度量值或原始字节流。广泛使用的工具Bindiff通过比较函数的CFG及其属性来计算相似性。为了减少计算代价,Genius、Gemini和Vulseeker从CFG中提取属性的度量值来进行相似度比较,并在漏洞检测上有很好的表现。α-Diff是进行跨版本函数相似性检测的最先进的解决方案之一,它将函数的原始字节表示为图像,并使用Siamese网络来计算函数的相似性。从评估结果来看,当版本相近时表现很好,但当版本跨度比较大时它的recall@1仅为73.8%。
在基于二进制代码的静态漏洞检测中,现有的方法大多是仅基于函数匹配实现的,即将漏洞函数与目标函数的相似度与设定的阈值进行比较来检测漏洞。由于软件更新或编译器版本改变,漏洞函数和目标函数的相似度可能很小,导致目标函数无法匹配而造成漏洞漏报。其次,大多数漏洞修复只涉及几行代码,漏洞函数和补丁函数的代码差异很小。漏洞函数和补丁函数之间过高的相似度可能导致补丁函数被错误地检测为漏洞函数而造成漏洞误报。
发明内容
为了解决上述背景技术中存在的技术问题,本发明提供面向二进制代码的复现漏洞检测方法及系统,够对应对软件更新和编译器版本变化实现精准的函数匹配,同时能准确地对漏洞和补丁进行识别。
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供面向二进制代码的复现漏洞检测方法,包括以下步骤:
获取目标软件不同版本的二进制可执行程序中的函数数据;
根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数构造漏洞数据库,得到目标软件不同版本的二进制函数数据集,经解析后为每个函数构造一个操作码共现矩阵;
将目标软件函中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以函数对的共现矩阵作为输入分别通过训练完毕的Siamese-CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;
具体的:
通过Debian软件包或GitHub源码编译获取大量不同版本的且包含调试信息的二进制可执行程序以从中获取进行网络模型训练和实验验证的函数数据集,进一步的,在获取带调试符号的二进制可执行程序时,对于通过Debian软件包获取,利用eu-unstrip将可执行程序和调试符号文件重新合并成带调试符号的二进制可执行程序。对于通过源码编译,利用GNU构建系统进行配置和编译。整个过程通过脚本自动化实现,减少了时间代价。
获取漏洞函数及构建公开的漏洞信息数据库;根据NVD上的漏洞信息来构建公开的漏洞信息数据库,包括项目名、漏洞函数、影响版本、修复版本、漏洞类型和等级等信息信息。根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数;
对收集的二进制函数进行解析,为每个函数构造一个操作码共现矩阵,用以训练Siamese-CNN模型;二进制函数由指令序列组成,每条指令可分为操作码和操作数,操作码序列表示函数的动作,是函数的固有属性,可用于区分性地描述函数。利用反汇编工具IDAPro提取函数的汇编指令序列;
自然语言处理领域的相关模型在理解语言数据的语义方面有突出优势,利用Bi-gram语言模型对操作码指令序列处理,将前后相邻的两个操作码作为一个二元组,并根据bi-gram频率序列进一步构造操作码共现矩阵。
使用Siamese-CNN进行特征提取和函数匹配;Siamese-CNN模型将两个相同的CNN进行连接且共享同一组参数,每个CNN以一个函数的共现矩阵作为输入,通过训练最大化不相似函数间编码空间的距离,最小化相似函数间编码空间的距离,使卷积神经网络(CNN)能学习到函数的特征表示;权重和偏差通常是随机初始化的,然后在训练过程中通过反向传播进行迭代更新;
卷积神经网络(CNN)中,在每个卷积层和整流层之间设有一个BN(批量归一化)层。BN层不仅可以规范化输入以加快网络收敛速度,而且可以使输出的分布更符合数据的真实分布;
在完成Siamese-CNN模型的训练后,将目标软件中的函数同漏洞库中的函数组成函数对,以它们的共现矩阵作为输入分别通过训练好的CNN得到相应的特征向量,并通过皮尔森相关系数进行相似度评估,判断是否匹配。
若匹配,则对匹配到的函数进行漏洞/补丁识别;由于漏洞函数与补丁函数之间的二进制代码差异可能很小,以至于修复后的函数仍会被误判为存在漏洞的函数。因此需要通过利用漏洞和补丁函数共现矩阵之间的差异来提取目标函数中的漏洞强相关的区域特征向量来进行精确的判断,然后比较漏洞函数与目标函数和补丁函数与目标函数的区域特征向量之间的距离来判断是否存在漏洞。
本发明的第二个方面提供实现上述方法的系统,包括:
训练数据模块,配置为:获取目标软件不同版本的二进制可执行程序中的函数数据;
测试数据模块,配置为:根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数构造漏洞数据库,获取目标软件不同版本的二进制函数数据集,经解析后为每个函数构造一个操作码共现矩阵;
函数匹配模块,配置为:将目标软件函中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以函数对的共现矩阵作为输入分别通过训练完毕的Siamese-CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;
漏洞识别模块,配置为:若匹配,则对匹配到的函数对进行精确识别,判断是否存在漏洞。
本发明的第三个方面提供一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的面向二进制代码的复现漏洞检测方法中的步骤。
本发明的第四个方面提供一种计算机设备。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的面向二进制代码的复现漏洞检测方法中的步骤。
与现有技术相比,以上一个或多个技术方案存在以下有益效果:
1、能够克服软件版本更新和编译器版本变化实现精准的函数匹配,比现有的相关技术更有优势。同时通过提取与漏洞强相关的区域特征向量准确识别漏洞和补丁,有效解决现有相关漏洞检测方法中漏报率和误报率高的问题。
2、能够适用于各个领域的项目的漏洞检测,具有通用性,且可以拓展到对软件所依赖的第三方组件的漏洞检测。
3、上述方法创建了一个公共的漏洞信息数据库,包括CVE编号、漏洞函数名、含有漏洞的版本、漏洞修复的版本、漏洞类型和等级等信息,以方便今后的漏洞研究工作。
4、构建了用于二进制函数相似性检测研究的数据集,大量二进制文件的获取通过自动化来生成,大大降低了数据集获取的时间代价。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是本发明一个或多个实施例提供的漏洞检测流程示意图;
图2是本发明一个或多个实施例提供的Siamese-CNN架构示意图;
图3是本发明一个或多个实施例提供的Siamese-CNN中子网络模型(CNN)示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
正如背景技术中所描述的,开源和第三方代码中包含的漏洞数量也呈现快速增长的趋势。随着开源代码使用的普及,这些存在漏洞的代码也被广泛用于各类项目中,从而导致同源漏洞的引入。新思科技公司在其发布的《2021年开源安全和风险分析》报告中指出,2020年审计的1546个代码库中有98%的代码库包含开源代码,其中84%的代码库都包含漏洞。每个代码库平均有158个漏洞,其中高危漏洞占比从49%上升至60%。更令人担忧的问题是废弃的开源代码仍在被广泛使用,有高达91%的存在开源依赖项的代码在过去两年内没有进行任何代码改进和安全修复。而即使开源组件有发布更新和安全补丁,但下游依赖这些开源代码的软件的开发者并没有及时进行更新,报告指出85%的代码库含有至少四年未曾更新的开源依赖项。
开源和第三方代码最值得关注的安全问题是其放大作用。一个开源软件出现漏洞,会导致依赖它的其他开源软件受到影响。这也成为黑客攻击的主要目标,像2014年的“心脏滴血”漏洞、2017年的“永恒之蓝”漏洞以及2021年的log4j2漏洞。而且层层关联依赖,这就导致非常隐蔽和复杂的攻击面,增大了漏洞分析难度。因此,需要自动化的方法来进行漏洞检测,而关于漏洞检测的研究也受到越来越多的重视。
漏洞检测的方法主要可以分两大类:静态分析和动态分析。动态分析方法,例如模糊测试、动态污点分析等,主要是对程序运行过程中的监控检测与调试,其缺点是很难覆盖所有的代码执行路径,需要大量的工作去创建测试用例,时间代价高。静态分析主要在不执行程序代码的情形下对源代码或编译后二进制文件进行分析,基本可以覆盖全部代码路径且无需执行程序不会产生运行开销。目前大多数的研究都是基于源代码的静态分析检测方法,但由于软件产权保护或其他原因通常很多软件未公开源码,因此可应用检测的范围有限,这使面向二进制代码的检测成为当前关键可行的方法。
目前基于二进制代码对已知漏洞进行检测,一般是通过二进制代码相似性检测实现。但由于软件更新或编译器版本改变,漏洞函数和目标函数的相似度可能很小,导致目标函数无法匹配而造成漏洞漏报。其次,大多数漏洞修复只涉及几行代码,漏洞函数和补丁函数的代码差异很小。漏洞函数和补丁函数之间过高的相似度可能导致补丁函数被错误地检测为漏洞函数而造成漏洞误报。与此同时,目前不存在以二进制代码漏洞检测为目的的大型公共二进制数据集,且手工建立这种数据集时间代价很高。
因此,以下实施例给出了面向二进制代码的复现漏洞检测方法及系统,基于二进制代码进行静态分析,对漏洞进行跨版本检测,能够对应对软件更新和编译器版本变化实现精准的函数匹配,同时能准确地对漏洞和补丁进行识别。
实施例一:
如图1-3所示,面向二进制代码的复现漏洞检测方法,包括以下步骤:
1搜集大量不同版本的二进制文件以得到可用于训练和测试的函数数据集。数据来源主要有:
第一个来源是Debian软件包存储库,本实施例从Debian软件包存储库爬取了29个项目的不同版本的软件包和符号包,并使用脚本批量构建他们的可执行文件,然后利用IDAPro7.0对得到的二进制文件进行反编译获取函数信息。此部分数据主要用于网络模型的训练。
第二个来源是GitHub存储库,本实施例从GitHub存储库收集了9个开源项目的源码,并使用GCC按照默认优化选项对每个软件进行编译。然后利用IDAPro7.0对得到的二进制文件进行反编译获取函数信息。此部分数据主要用于实验效果评估。
2对收集到的函数数据集划分成了三个数据集:
数据集I用于训练Siamese-CNN网络模型。利用从Debian软件包存储库中获取的函数作为训练样本。随机将同一项目的两个版本的二进制文件作为一对,对每对跨版本二进制文件,检索匹配函数对以确保它们具有相同的名称但不相同。
数据集II用于评估Siamese-CNN网络模型在函数匹配任务上的准确性。对于跨软件版本函数匹配任务,从GitHub上收集了7个版本的coreutils项目的源码进行编译。对于跨编译器版本的函数匹配任务,本实施例收集了5个版本的tcpdump的源码,分别用gcc-5.5、gcc-7.5、gcc-9.4和gcc-11.1编译。
数据集III为公共漏洞信息数据库。从GitHub上获取了6个不同领域的项目,对这些项目的不同版本进行漏洞检测。从GitHub上获取了Openvpn和Tesseract的不同版本源码来编译,用来进一步评估检测第三方组件漏洞的效果。
3给定一个二进制文件,对其进行数据解析。本实施例首先利用反汇编工具对其进行反编译得到每个函数的汇编代码。然后,对函数的汇编指令进行处理,使之能有效地表示函数特征。
构建操作码表。本实施例提取指令操作码序列。一方面因为对于不同版本软件的同一函数或被两个软件使用的同一个第三方函数,它们的指令操作数通常会不同,例如寄存器、内存地址等。但指令操作码因其表示指令的执行动作,所以即使在不同版本中,其统计属性也相对稳定。所以,本实施例可以利用指令操作码序列作为区分函数的关键。另一方面,指令集中的操作码数量是有限的,这可以有效地压缩统计模型的维数空间,由于低频的冗余数据会降低匹配精度,同时这种高维数据会严重影响数据处理效率,因此本实施例仅选取了前200个使用频率最高的操作码。
构建操作码Bi-gram序列。借鉴自然语言处理领域的Bi-gram语言模型对汇编代码中的操作码指令序列进行处理,即将前后相邻的两个操作码作为一个二元组。每个函数将得到一个操作码的Bi-gram序列。函数的操作码本身得到了保留,并且操作码的先后顺序得到的一定程度的保留,这样可以保证函数的词法和语义特征不丢失
构建操作码共现矩阵。由于后续的Siamese-CNN模型的输入需为二维数据,用以保留操作码的空间关系特征。所以将操作码的bi-gram序列转换为共现矩阵,针对200个不同的操作码,通过计算Bi-gram序列中二元组出现的频率,生成200*200维度的共现矩阵,矩阵中的值对应相应的操作码二元组出现的频率。
4使用Siamese-CNN模型进行特征提取和函数匹配。
通过卷积神经网络(CNN)对二维共现矩阵进行特征提取,将得到的特征向量用于函数匹配。对于模型的训练,本实施例设计了一个Siamese-CNN架构,以相似函数对和不相似函数对作为输入,通过训练最大化不相似函数间编码空间的距离,最小化相似函数间编码空间的距离,使卷积神经网络(CNN)能学习到函数的特征表示,并通过相似度比较来进行函数匹配。
本实施例所提出的Siamese-CNN架构如图2所示。这个架构将两个相同的CNN进行连接且共享同一组参数,每个CNN以一个函数的共现矩阵作为输入,通过ContrastiveLoss函数反馈优化网络,进行特征提取,输出对应的特征向量。
子网络采用卷积神经网络(CNN)的优势在于对于二维数据可以保留共现矩阵的空间特征且可以有效减少特征信息的损失。网络模型如图3所示。整个模型由卷积层、批量归一化层、Relu层和线性层组成。值得注意的是,本实施例所用的CNN模型去除了池化层。因为对于含有少量操作码信息的函数来说,他们的共现矩阵可能会很稀疏,池化操作会丢失更多信息。同时在模型中使用了批量归一化(BN)层,这使输出的数据更具有真实分布的特点且可以加快网络的收敛速度。
利用全连接层输出的特征向量计算相似度。本实施例利用欧式距离来度量相似度,其公式如下:
X和Y是CNN输出的特征向量。本实施例假设目标软件的函数向量集为A={a1,a2,a3,......,an},漏洞函数库中漏洞函数的向量集为B={b1,b2,b3,......,bn}。本实施例在A和B之间执行函数匹配。本实施例根据实验的实际情况设定匹配阈值t,当(ai,bj)<t时将其加入候选项,最终选择相似系数最高的函数视为匹配成功,否则,匹配失败。
在训练Siamese-CNN架构时,本实施例接收一个函数对(x1,x2)作为输入,通过卷积神经网络输出特征向量(f(x1,θ),f(x2,θ))。Siamese-CNN模型使用ContrastiveLoss作为损失函数用于表示输入样本的匹配程度,能够在训练中优化权重进行特征提取。ContrastiveLoss的公式如下:
其中,N为样本个数,Y为样本标签,Y=1表示两个样本函数匹配,Y=0表示两个样本函数不匹配,m为定义的距离阈值,Dw表示欧氏距离。损失的梯度将被反馈到共享参数的两个卷积神经网络结构中,使两个相似函数的向量距离尽可能的小,两个不相似函数的向量距离尽可能的大。
训练Siamese-CNN架构需要大量正例样本(相似的函数对)和负例样本(不同的函数对)。在获取的数据集中,通过函数名标签生成正例样本,然后在训练过程中基于正样本在每个小批量中在线生成负样本。具体来说,对于一个小批量中的每对正例样本(Xa,Xp)将生成两对semi-hard负例样本,即(Xa,Xn1)和(Xp,Xn2)。以函数Xa为例,选取的不相似的函数需要满足公式关系:
0<Dw(Xa,Xn)<m
本实施例从满足约束的Xn中随机选择一个函数作为负函数,但值得注意的是,hardest负例样本(即minDw(Xa,Xn))被排除在外,因为这样的样本容易造成模型在训练期间陷入坏的局部最小值。同时,在训练过程中本实施例对每个epoch的正例样本都打乱顺序,这样能保证每次从随机排序的batch中都能生成新的负例样本,使模型具有泛化性。
5对匹配到的函数进行漏洞/补丁识别
由于漏洞函数与补丁函数之间的二进制代码差异可能很小,以至于修复后的函数仍会被误判为存在漏洞的函数。而原始的共生矩阵包含了更准确的函数特征信息,因此对漏洞函数和补丁函数有更高的区分度。因此,本实施例利用漏洞函数(V)和补丁函数(P)的共现矩阵之间的差异来提取目标函数(T)中的与漏洞强相关的区域特征向量,并通过比较(V,T)和(P,T)的区域特征向量之间的距离来判断是否存在漏洞。
本实施例对漏洞函数和补丁函数的共现矩阵做差得到差异矩阵,则差异矩阵非零值的位置就是漏洞相关性强的区域。然后分别提取漏洞函数、补丁函数、目标函数的共现矩阵在这些位置的值,输出为它们的漏洞强相关性的区域特征向量,记为SV、SP和ST。最后,使用欧几里得距离来识别漏洞/补丁。
如果DW(SV,ST)<DW(SP,ST),则判断目标函数存在漏洞,否则则判断目标函数已被修复。
上述方法能够克服软件版本更新和编译器版本变化实现精准的函数匹配,比现有的相关技术更有优势。同时通过提取与漏洞强相关的区域特征向量准确识别漏洞和补丁,有效解决现有相关漏洞检测方法中漏报率和误报率高的问题。
能够适用于各个领域的项目的漏洞检测,具有通用性,且可以拓展到对软件所依赖的第三方组件的漏洞检测。
上述方法创建了一个公共的漏洞信息数据库,包括CVE编号、漏洞函数名、含有漏洞的版本、漏洞修复的版本、漏洞类型和等级等信息,以方便今后的漏洞研究工作。
构建了用于二进制函数相似性检测研究的数据集,大量二进制文件的获取通过自动化来生成,大大降低了数据集获取的时间代价。
实施例二:
本实施例提供了实现上述方法的系统,包括:
训练数据模块,配置为:获取目标软件不同版本的二进制可执行程序中的函数数据;
测试数据模块,配置为:根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数构造漏洞数据库,获取目标软件不同版本的二进制函数数据集,经解析后为每个函数构造一个操作码共现矩阵;
函数匹配模块,配置为:将目标软件函中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以它们的共现矩阵作为输入分别通过训练完毕的Siamese-CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;
漏洞识别模块,配置为:若匹配,则对匹配到的函数对进行精确识别,判断是否存在漏洞。
本实施例中的系统实现面向二进制代码的复现漏洞检测方法能够对应对软件更新和编译器版本变化实现精准的函数匹配,同时能准确地对漏洞和补丁进行识别。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例一中提出的面向二进制代码的复现漏洞检测方法中的步骤。
本实施例中的计算机程序所执行的面向二进制代码的复现漏洞检测方法能够对应对软件更新和编译器版本变化实现精准的函数匹配,同时能准确地对漏洞和补丁进行识别。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现如上述实施例一提出的面向二进制代码的复现漏洞检测方法中的步骤。
本实施例处理器执行的面向二进制代码的复现漏洞检测方法能够对应对软件更新和编译器版本变化实现精准的函数匹配,同时能准确地对漏洞和补丁进行识别。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.面向二进制代码的复现漏洞检测方法,其特征在于:包括以下步骤:
获取目标软件不同版本的二进制可执行程序中的函数数据;
根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数构造漏洞数据库,得到目标软件不同版本的二进制函数数据集,经解析后为每个函数构造一个操作码共现矩阵;
将目标软件函中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以它们的共现矩阵作为输入分别通过训练完毕的Siamese-CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;
若匹配,则对匹配到的函数对进行精确识别,判断是否存在漏洞。
2.如权利要求1所述的面向二进制代码的复现漏洞检测方法,其特征在于:获取目标软件不同版本且包含调试信息的二进制可执行程序中的函数数据集的过程中,将可执行程序和调试符号文件合并成带调试符号的二进制可执行程序。
3.如权利要求1所述的面向二进制代码的复现漏洞检测方法,其特征在于:二进制函数由指令序列组成,每条指令分为操作码和操作数,操作码序列表示函数执行的操作。
4.如权利要求3所述的面向二进制代码的复现漏洞检测方法,其特征在于:利用Bi-gram语言模型对操作码指令序列处理,将前后相邻的两个操作码作为一个二元组,并根据bi-gram频率序列构造操作码共现矩阵。
5.如权利要求1所述的面向二进制代码的复现漏洞检测方法,其特征在于:Siamese-CNN模型将两个相同的卷积神经网络模型CNN进行连接且共享同一组参数,每个卷积神经网络模型CNN以一个函数的共现矩阵作为输入,通过训练最大化不相似函数间编码空间的距离,最小化相似函数间编码空间的距离,使卷积神经网络模型CNN学习到函数的特征表示。
6.如权利要求4所述的面向二进制代码的复现漏洞检测方法,其特征在于:所述卷积神经网络模型CNN中,每个卷积层和整流层之间具有一个批量归一化层以加快网络收敛速度。
7.如权利要求1所述的面向二进制代码的复现漏洞检测方法,其特征在于:对匹配到的函数对进行精确识别,判断是否存在漏洞,具体为:通过利用漏洞和补丁函数共现矩阵之间的差异来提取目标函数中的漏洞强相关的区域特征向量,比较漏洞函数与目标函数,和补丁函数与目标函数的区域特征向量之间的距离来判断是否存在漏洞。
8.面向二进制代码的复现漏洞检测系统,其特征在于:包括:
训练数据模块,配置为:获取目标软件不同版本的二进制可执行程序中的函数数据;
测试数据模块,配置为:根据漏洞信息从对应二进制项目的漏洞影响版本中获取二进制漏洞函数构造漏洞数据库,获取目标软件不同版本的二进制函数数据集,经解析后为每个函数构造一个操作码共现矩阵;
函数匹配模块,配置为:将目标软件函中的函数,同漏洞信息数据库中的漏洞函数组成函数对,以它们的共现矩阵作为输入分别通过训练完毕的Siamese-CNN模型得到相应的特征向量,经相似度评估后判断是否匹配;
漏洞识别模块,配置为:若匹配,则对匹配到的函数对进行精确识别,判断是否存在漏洞。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的面向二进制代码的复现漏洞检测方法中的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的面向二进制代码的复现漏洞检测方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210740708.5A CN115129591A (zh) | 2022-06-28 | 2022-06-28 | 面向二进制代码的复现漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210740708.5A CN115129591A (zh) | 2022-06-28 | 2022-06-28 | 面向二进制代码的复现漏洞检测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115129591A true CN115129591A (zh) | 2022-09-30 |
Family
ID=83381012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210740708.5A Pending CN115129591A (zh) | 2022-06-28 | 2022-06-28 | 面向二进制代码的复现漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115129591A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN116450187A (zh) * | 2023-05-05 | 2023-07-18 | 四川励致科技有限公司 | 应用于ai分析的数字化在线应用处理方法及ai应用系统 |
CN117033171A (zh) * | 2023-06-28 | 2023-11-10 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
-
2022
- 2022-06-28 CN CN202210740708.5A patent/CN115129591A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN116450187A (zh) * | 2023-05-05 | 2023-07-18 | 四川励致科技有限公司 | 应用于ai分析的数字化在线应用处理方法及ai应用系统 |
CN117033171A (zh) * | 2023-06-28 | 2023-11-10 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
CN117033171B (zh) * | 2023-06-28 | 2024-03-26 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Vasic et al. | Neural program repair by jointly learning to localize and repair | |
Russell et al. | Automated vulnerability detection in source code using deep representation learning | |
Harer et al. | Automated software vulnerability detection with machine learning | |
CN115129591A (zh) | 面向二进制代码的复现漏洞检测方法及系统 | |
US20190138731A1 (en) | Method for determining defects and vulnerabilities in software code | |
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
CN110399300B (zh) | 一种基于动态类型感知的Python软件模糊测试方法 | |
JP2017519300A (ja) | ソフトウェアアナリティクスのためのシステム及び方法 | |
Partush et al. | Abstract semantic differencing for numerical programs | |
Saccente et al. | Project achilles: A prototype tool for static method-level vulnerability detection of Java source code using a recurrent neural network | |
Jie et al. | Survey on software vulnerability analysis method based on machine learning | |
CN113010895B (zh) | 一种基于深度学习的漏洞危害评估方法 | |
CN113326187A (zh) | 数据驱动的内存泄漏智能化检测方法及系统 | |
Naeem et al. | Scalable mutation testing using predictive analysis of deep learning model | |
Cao et al. | FTCLNet: Convolutional LSTM with Fourier transform for vulnerability detection | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
Sun et al. | Dexbert: effective, task-agnostic and fine-grained representation learning of Android bytecode | |
Zhao et al. | Suzzer: A vulnerability-guided fuzzer based on deep learning | |
Yan et al. | Crex: Predicting patch correctness in automated repair of C programs through transfer learning of execution semantics | |
Liu et al. | Vmpbl: Identifying vulnerable functions based on machine learning combining patched information and binary comparison technique by lcs | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Black et al. | Evolved similarity techniques in malware analysis | |
Ngo et al. | Ranking warnings of static analysis tools using representation learning | |
CN112861131B (zh) | 基于卷积自编码器的库函数识别检测方法及系统 | |
Liu | Binary code similarity detection |
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 |