CN114064506B - 一种基于深度神经网络的二进制程序模糊测试方法及系统 - Google Patents
一种基于深度神经网络的二进制程序模糊测试方法及系统 Download PDFInfo
- Publication number
- CN114064506B CN114064506B CN202111428321.8A CN202111428321A CN114064506B CN 114064506 B CN114064506 B CN 114064506B CN 202111428321 A CN202111428321 A CN 202111428321A CN 114064506 B CN114064506 B CN 114064506B
- Authority
- CN
- China
- Prior art keywords
- instruction
- program
- path
- execution path
- layer
- 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.)
- Active
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3684—Test management for test design, e.g. generating new test cases
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于深度神经网络的二进制程序模糊测试方法及系统,属于漏洞挖掘领域,解决现有的CGF模糊测试器浪费了大量时间来测试不易存在漏洞的路径,从而降低了模糊测试的效率。本发明利用带Attention层的Bi‑LSTM深度神经网络从大量脆弱的和安全的执行路径中学习隐藏的脆弱性模式,训练一个预测模型来预测目标程序中的执行路径是脆弱的还是安全的。然后,模糊器对能够覆盖位图,且可能是脆弱的执行路径的测试用例进行优先排序,并为这些测试用例分配更多的变异方法产生更多的变异输入。本发明用于二进制程序模糊测试。
Description
技术领域
一种基于深度神经网络的二进制程序模糊测试方法及系统,用于二进制程序模糊测试,属于漏洞挖掘技术领域。
背景技术
近年来,网络安全事故频发,造成重大经济损失。出现网络安全事故的关键因素是程序中存在漏洞,程序中隐藏的安全漏洞可能导致系统受损,信息泄漏或服务被拒绝。因此漏洞检测技术不管在学术界还是在工业界都是一项研究热点。在网络安全领域,漏洞是指在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。自1990年代初引入以来,模糊测试已成为发现商业软件中的漏洞、错误或崩溃的最有效、可扩展的测试技术之一。它也已被主流软件公司广泛使用,以确保其软件产品的质量。
模糊测试的关键思想是为被测程序(PUT)提供大量精心设计的输入,以触发意外的程序行为,例如崩溃或挂起。基于对PUT内部结构知识的了解,模糊器可以分为白盒,、黑盒和灰盒。白盒模糊测试通常可以访问PUT的源代码或中间表示。他们通常使用繁重的程序分析方法(例如符号执行和路径遍历)来指导模糊测试,因此存在可伸缩性问题。黑盒模糊器完全不了解程序的内部结构,通常会盲目执行随机测试,因此效率极低。灰盒模糊器旨在做出妥协,采用轻量级程序分析方法从程序中获取反馈以指导模糊测试,这通常比黑盒模糊器更有效,比白盒模糊器更具可扩展性。
近年来,使用代码覆盖率作为指导来进行模糊测试的覆盖率指导的灰盒模糊测试(CGF)已成为最成功的漏洞发现解决方案之一。尽管在漏洞发现方面取得了相当大的成功,但CGF模糊测试(例如AFL)具有一个关键限制。当前的模糊测试旨在覆盖尽可能多的路径,而不是探索更容易存在漏洞的路径。他们按照添加顺序从测试用例集中选择测试用例,并且测试能量平均分配给所有程序路径。但是,不同的路径存在漏洞的概率不同。《Thedistribution of faults in a large industrial software system》一文指出,程序中的漏洞分布通常是不平衡的,即大约80%的错误位于大约20%的程序代码中。结果,现有的CGF模糊测试器浪费了大量时间来测试不易存在漏洞的路径,从而降低了模糊测试的效率。
发明内容
针对上述研究的问题,本发明的目的在于提供一种基于深度神经网络的二进制程序模糊测试方法及系统,解决现有的CGF模糊测试器浪费了大量时间来测试不易存在漏洞的路径,从而降低了模糊测试的效率。
为了达到上述目的,本发明采用如下技术方案:
一种基于深度神经网络的二进制程序模糊测试方法,包括离线模型训练和在线指导模糊测试;
离线模型训练:
S1、源代码抓取
抓取二进制程序数据集和相应的测试用例,其中,二进制程序数据集包括脆弱程序和安全程序,脆弱程序即指打补丁前的版本,安全程序即指打补丁后的版本;
S2、路径提取与标记
将测试用例作为输入执行相应的二进制程序,并提取执行路径,并对获得的执行路径进行标记,其中,执行路径的每条指令均以字节码形式记录;
S3、路径矢量化
执行词嵌入,即将包含指令字节码的、标记后的执行路径转换为矢量表示,转换后得到的路径向量会保留尽可能多的执行路径原始语义信息;
S4、神经网络模型训练
基于步骤S3得到的路径向量训练神经网络模型,得到能预测模糊处理过程中触发的看不见的执行路径是否为脆弱程序的预测模型;
在线指导模型测试:S5、执行程序并跟踪
用集成了预测模型的模糊器对目标程序进行模糊测试,模糊测试过程中实时跟踪得到控制流信息并进行解码,解码后得到代码分支覆盖信息的位图,其中,代码分支覆盖信息的位图中的代码分支是指目标程序的执行路径;
S6、恢复执行路径
基于表示代码分支覆盖信息的位图恢复目标程序的执行路径;
S7、路径矢量化
将目标程序的执行路径转换为路径向量;
最终,基于模糊器中的预测模型对目标程序的路径向量进行脆弱性预测,再根据预测结果对种子进行突变能量分配。
进一步,所述步骤S1从NIST SARD、GitHub和Exploit-DB三个数据源中抓取二进制程序和相应的测试用例。
进一步,所述步骤S2使用IntelPT提取执行路径。
进一步,所述步骤S4的神经网络模型为带Attention层的双向长短期记忆的神经网络模型;
神经网络模型包括6层,第一层为输入层,第二层为嵌入层,用于将执行路径的指令序列中的所有元素映射到固定维向量;第三层和第四层是堆叠的双向连接的LSTM层,LSTM层包含双向形式的64个LSTM单元,用于学习更高级别的指令序列,第五层是Attention层,用于先计算每个时序的权重,再将所有时序的向量进行加权和作为特征向量,第六层为softmax输出层,用于对任务中的两个类别进行预测,即对安全程序或脆弱程序进行预测。
进一步,所述步骤S5是将种子输入模糊器执行目标程序,执行过程中,使用IntelPT捕获控制流信息存储在特定内存中,存储的同时,实时对控制流信息进行解码,得到代码分支覆盖信息的位图,其中,种子为初始的测试用例;
存储在特定内存中的控制流信息为数据包形式,包含TNT数据包、TIP数据包和FUP数据包,其中,TNT数据包中的特定位可以指示是否在条件跳转中执行分支;TIP数据包记录间接跳转或传输指令的目标指令指针;FUP数据包则提供源IP地址,因为TIP数据包在这些事件中不起作用。
进一步,所述步骤S6的具体步骤为:
根据表示代码分支覆盖信息的位图显示当前执行的路径是否实现了新的代码分支的覆盖,若未实现,则说明未出现新的执行路径,若覆盖,首先,加载目标程序,并从主入口函数获得指令;
然后,根据当前指令类型获得下一条指令,并将其字节码添加到执行路径中,直到跟踪的最后一条指令为止,即恢复了执行路径,当前指令类型为以下几类:
如果当前指令是有条件的跳转,则下一条指令是根据TNT数据包确定的;
如果当前指令是间接跳转或转移,则根据TIP数据包获得下一条指令;
如果当前指令是无条件的直接跳转,则从指令中获得下一条指令。
如果该当前指令不是跳转指令,则根据当前指令的大小获得下一条指令。
进一步,基于离线模型训练和在线指导模糊测试得到的结果进行脆弱性预测,再根据预测结果进行突变能量分配的具体步骤为:
使用预测模型对路径向量进行脆弱性预测,再根据预测结果标记种子,标记后将其添加到种子队列中,其中,标记为高熵种子或为低熵种子;
从种子队列中获取种子后,判断是否为高熵种子,如果是高熵种子,则模糊器将优先为其分配突变能量;
设原始模糊器为种子s分配的能量为f(s),且f(s)的最大值为MaxEnergy,则当前模糊器的突变能量分配方式为:
一种基于深度神经网络的二进制程序模糊测试系统,其特征在于:包括离线模型训练模块和在线指导模糊测试模块;
离线模型训练模块:
源代码抓取:抓取二进制程序数据集和相应的测试用例,其中,二进制程序数据集包括脆弱程序和安全程序,脆弱程序即指打补丁前的版本,安全程序即指打补丁后的版本;
路径提取与标记:将测试用例作为输入执行相应的二进制程序,并提取执行路径,并对获得的执行路径进行标记,其中,执行路径的每条指令均以字节码形式记录;
路径矢量化:执行词嵌入,即将包含指令字节码的、标记后的执行路径转换为矢量表示,转换后得到的路径向量会保留尽可能多的执行路径原始语义信息;
神经网络模型训练:基于路径向量训练神经网络模型,得到能预测模糊处理过程中触发的看不见的执行路径是否为脆弱程序的预测模型;
在线指导模型测试模块:执行程序并跟踪:用集成了预测模型的模糊器对目标程序进行模糊测试,模糊测试过程中实时跟踪得到控制流信息并进行解码,解码后得到代码分支覆盖信息的位图,其中,代码分支覆盖信息的位图中的代码分支是指目标程序的执行路径;
恢复执行路径:基于代表代码分支覆盖信息的位图恢复目标程序的执行路径;
路径矢量化:将目标程序的执行路径转换为路径向量;
最终,基于模糊器中的预测模型对目标程序的路径向量进行脆弱性预测,再根据预测结果对种子进行突变能量分配。
进一步,所述离线模型训练模块从NISTSARD、GitHub和Exploit-DB三个数据源中抓取二进制程序和相应的测试用例;
所述离线模型训练模块使用IntelPT提取执行路径。
进一步,所述离线模型训练模块中的神经网络模型为带Attention层的双向长短期记忆的神经网络模型;
神经网络模型包括6层,第一层为输入层,第二层为嵌入层,用于将执行路径的指令序列中的所有元素映射到固定维向量;第三层和第四层是堆叠的双向连接的LSTM层,LSTM层包含双向形式的64个LSTM单元,用于学习更高级别的指令序列,第五层是Attention层,用于先计算每个时序的权重,再将所有时序的向量进行加权和作为特征向量,第六层为softmax输出层,用于对任务中的两个类别进行预测,即对安全程序或脆弱程序进行预测。
进一步,所述在线指导模糊测试模块中的执行程序和跟踪的具体步骤为:
将种子输入模糊器执行目标程序,执行过程中,使用IntelPT捕获控制流信息存储在特定内存中,存储的同时,实时对控制流信息进行解码,得到代码分支覆盖信息的位图,其中,种子为初始的测试用例;
存储在特定内存中的控制流信息为数据包形式,包含TNT数据包、TIP数据包和FUP数据包,其中,TNT数据包中的特定位可以指示是否在条件跳转中执行分支;TIP数据包记录间接跳转或传输指令的目标指令指针;FUP数据包则提供源IP地址,因为TIP数据包在这些事件中不起作用;
恢复执行路径的具体步骤为:
根据代码分支覆盖信息的位图显示当前执行的路径是否实现了新的代码分支的覆盖,若未实现,则说明未出现新的执行路径,若覆盖,首先,加载目标程序,并从主入口函数获得指令;
然后,根据当前指令类型获得下一条指令,并将其字节码添加到执行路径中,直到跟踪的最后一条指令为止,即恢复了执行路径,当前指令类型为以下几类:
如果当前指令是有条件的跳转,则下一条指令是根据TNT数据包确定的;
如果当前指令是间接跳转或转移,则根据TIP数据包获得下一条指令;
如果当前指令是无条件的直接跳转,则从指令中获得下一条指令。
如果该当前指令不是跳转指令,则根据当前指令的大小获得下一条指令。
本发明同现有技术相比,其有益效果表现在:
一、本发明提出了一种新的测试用例选择策略,该策略对执行脆弱路径的种子进行优先排序,以提高漏洞发现的效率;
二、本发明使用基于Attention的Bi-LSTM神经网络模型来预测哪些执行路径脆弱(存在漏洞);
三、本发明根据预测结果,优先考虑高熵种子,再根据高熵种子结果为执行脆弱路径的种子分配更多的突变能量;
四、本发明克服了当前主流灰盒模糊测试技术浪费时间测试无关紧要的路径而不是脆弱路径,从而降低了漏洞检测效率的缺陷。
附图说明
图1为本发明的流程示意图;
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
实施例
如图1所示,本发明方案由两个阶段组成,即离线模型训练和在线指导模糊测试。在离线模型训练阶段,输入的是大量二进制程序,其中,包括脆弱程序和安全程序。脆弱程序表示它包含一个或多个已知漏洞,而安全程序意味着已应用补丁程序修复了该漏洞,输出是一个学习型的预测模型,用于对不可见的程序路径根据是否存在漏洞进行分类。在线指导的模糊测试阶段,将预测模型集成到模糊测试器中,通过对测试用例的执行路径的漏洞预测,确定测试用例的优先级和突变方式,然后将测试用例加入测试用例集。;后续进行模糊测试时,模糊器根据测试用例的优先级从测试用例集中选择测试用例输入。
这两个阶段的执行过程如下:
一、离线模型训练
S1.收集训练程序,即源代码抓取:鉴于程序的复杂性和多样性,需要大量的训练样本来训练机器学习模型,以直接从代码中有效地学习安全漏洞的模式。另外,由于需要动态运行程序来获取执行路径,因此需要一个可以执行的二进制程序和相应的测试用例。
具体地,从三个数据源(NIST SARD、GitHub和Exploit-DB)派生出一个二进制程序数据集。
NIST SARD项目包含许多综合程序,每个程序都有一个好程序和坏程序,并涵盖各种类型的CWE(通用弱点枚举),选择诸如堆栈之类的内存损坏漏洞。溢出(CWE121)、堆溢出(CWE122)、整数溢出(CWE190)和UAF(CWE416)等。最终从SARD收集了26,080个二进制程序,每个程序都有打补丁程序前和打补丁程序后的版本。但是,SARD中的程序是综合程序,因此它们的漏洞可能与实际应用程序中的漏洞有所不同,这可能会限制模型的可扩展性。
因此,还从GitHub和Exploit-DB收集实际应用程序(例如ImageMagick,libtiff和Bintuils)。
GitHub可以记录对源文件的更改,并且可以通过检索应用程序主分支的提交历史记录并从公共存储库(例如bugtracker)中检索POC(即指测试用例)来识别每个错误的打补丁前和打补丁后的版本,以验证并保留测试用例可以触发该错误。最终从Github收集了560个应用程序。此外,再从Exploit-DB收集了1039个脆弱程序和相应的POC。
最终收集了28,475个脆弱二进制程序(即指脆弱程序,脆弱程序包含至少一条脆弱的执行路径(脆弱路径)和若干条安全的执行路径(安全路径))和27,436个安全二进制程序(即指安全程序,只包含安全的执行路径),用于神经网络模型训练和测试,以及可触发脆弱路径和安全路径的测试用例。
S2.提取执行路径并标记真实数据,即路径提取与标记:利用构建的二进制程序数据集和相应的测试用例提取执行路径。
具体为:将测试用例作为输入执行相应的二进制程序,即输入相应的脆弱程序或安全程序,并使用IntelPT提取执行路径,执行路径的每条指令均以字节码形式记录,并在执行路径的跟踪过程中保留与漏洞功能相关的库函数名称(例如,strcpy和memcpy)。
接下来标记真实数据。若获取的执行路径为脆弱路径,标记为“positive”,若获取的执行路径为安全路径,标记为“negtive”。
S3.将执行路径转换为向量表示,即路径矢量化:在将包含指令字节码的执行路径作为输入到深度神经网络(即后续所指的神经网络模型)之前,需要将该执行路径转换为矢量表示,转换后得到的路径向量会保留尽可能多的执行路径原始语义信息。
具体地,通过文本处理方法来学习:一条执行路径可以看作一个句子,而执行路径中的每条指令都可以看作是句子中的单词。
选择word2vec神经网络模型进行单词嵌入。每条指令的十六进制字节码被视为令牌,例如,0×890424代表一个单词mov[ebp],eax;然后用word2vec神经网络模型训练字节码序列,将每个指令的向量表示拼接起来就得到了执行路径的向量表示,输出是每个指令在256维空间中的矢量表示,即将执行路径转换为每个指令的向量表示,表示后得到路径向量。
S4.神经网络模型训练:在此步骤中,从包含大量脆弱且安全路径的训练数据中学习了隐藏的漏洞模式,即基于路径向量学习隐藏的漏洞模式。
选择带Attention层的双向长短期记忆(Bi-LSTM with Attention)神经网络模型进行训练,以输出可用于分类模糊处理过程中触发的看不见路径的模型。一方面,Bi-LSTMwith Attention擅长处理顺序数据:程序路径与自然语言中的语句非常相似,并且一段代码是否脆弱取决于上下文。另一方面,Bi-LSTM with Attention具有适合处理长依赖性的存储功能,因为与漏洞关联的代码可能位于路径中相对较长的距离处。
基于Bi-LSTM with Attention的神经网络模型总共包括6个层,如图2所示,第一层是输入层,第二层是嵌入层,它将序列中的所有元素映射到固定维向量。
如图2所示,第三层和第四层是堆叠的双向连接的LSTM层,每个层包含双向形式的64个LSTM单元,并且堆叠的LSTM模型可以学习更高级别的指令序列表示。
如图2所示,第五层是Attention层,不增设Attention层时,Bi-LSTM会使用最后一个时序的输出向量作为特征向量,然后进行softmax分类。增设了Attention层以后,该层会先计算每个时序的权重,然后将所有时序的向量进行加权求和作为特征向量,以得到分类结果。实验结果证明,加上Attention层对结果有显著改善。
如图2所示,最后,使用具有单个神经元的softmax层作为输出层来对任务中的两个类别进行预测。
二、在线指导的模糊测试
S5.执行程序并跟踪:使用PTfuzz(模糊器)对目标程序(目标程序的安全性是未知的,模糊测试的作用就是判断目标程序的安全性,即判断它是脆弱程序还是安全程序,如果是脆弱程序则进一步得出它的脆弱的执行路径)进行模糊测试,模糊测试过程中,IntelPT捕获控制流信息存储在特定内存中,控制流信息以数据包的形式实时收集,它包含TakenNot Taken(TNT)、Target IP(TIP)和Flow Update Packet(FUP)三种数据包类型。其中,TNT数据包中的特定位可以指示是否在条件跳转中执行分支;TIP数据包记录间接跳转或传输指令的目标指令指针;FUP数据包则提供源IP地址,因为TIP数据包在这些事件中不起作用。
通过解码这些控制流信息来更新表示代码分支覆盖范围信息的位图。但是,预测模型输入并不需要完整的执行路径信息。因此,在使用预测模型之前,必须通过对存储在特定内存中的控制流信息进行解码,来基于代码分支覆盖范围信息的位图恢复执行路径。
S6、恢复执行路径
基于代表代码分支覆盖范围信息的位图恢复执行路径的具体步骤为:
根据代码分支覆盖信息的位图显示当前执行的路径是否实现了新的代码分支的覆盖,若未实现,则未出现新的执行路径,若覆盖,首先,加载目标程序,并从主入口函数获得指令(执行程序需要将程序调入内存中,指令地址就是指令在内存中的位置,计算机根据指令地址读取指令进行程序调用);
然后,根据当前指令类型获得下一条指令,并将其字节码添加到执行路径中,直到跟踪的最后一条指令为止,即恢复了执行路径,当前指令类型为以下几类:
如果当前指令是有条件的跳转,则下一条指令是根据TNT数据包确定的;
如果当前指令是间接跳转或转移,则根据TIP数据包获得下一条指令;
如果当前指令是无条件的直接跳转,则从指令中获得下一条指令。
如果该当前指令不是跳转指令,则根据当前指令的大小获得下一条指令。
S7、路径矢量化
将目标程序的执行路径转换为路径向量;转换方式与步骤S3相同;
S8.用神经网络模型指导模糊测试:最终目标是利用学习的预测模型来指导模糊测试器(模糊器)对执行脆弱路径的测试用例进行优先级排序,以尽早暴露出该漏洞,并为它们分配更多的突变能量,而为执行安全路径的测试用例分配更少的能量,以增加触发漏洞的可能性。
具体为:使用预测模型对路径向量是否脆弱进行分类,并根据预测结果标记种子并将其添加到种子队列中,其中,标记为高熵种子或为低熵种子;
从种子队列中获取种子后,判断是否为高熵种子,如果是高熵种子,则模糊器将优先为其分配突变能量。
设原始模糊器为种子s分配的能量为f(s),且f(s)的最大值为MaxEnergy,则当前模糊器的突变能量分配方式为:
综上所述,利用神经网络模型训练得到预测模型来分类路径是否存在漏洞,然后模糊器对测试用例进行优先排序并为这些测试用例分配更多的变异方法产生更多的变异输入。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。
Claims (5)
1.一种基于深度神经网络的二进制程序模糊测试方法,其特征在于:包括离线模型训练和在线指导模糊测试;
离线模型训练:
S1、源代码抓取
抓取二进制程序数据集和相应的测试用例,其中,二进制程序数据集包括脆弱程序和安全程序,脆弱程序即指打补丁前的版本,安全程序即指打补丁后的版本;
S2、路径提取与标记
将测试用例作为输入执行相应的二进制程序,并提取执行路径,并对获得的执行路径进行标记,其中,执行路径的每条指令均以字节码形式记录;
S3、路径矢量化
执行词嵌入,即将包含指令字节码的、标记后的执行路径转换为矢量表示,转换后得到的路径向量会保留尽可能多的执行路径原始语义信息;
S4、神经网络模型训练
基于步骤S3得到的路径向量训练神经网络模型,得到能预测模糊处理过程中触发的看不见的执行路径是否为脆弱程序的预测模型;
在线指导模型测试:S5、执行程序并跟踪
用集成了预测模型的模糊器对目标程序进行模糊测试,模糊测试过程中实时跟踪得到控制流信息并进行解码,解码后得到代码分支覆盖信息的位图,其中,代码分支覆盖信息的位图中的代码分支是指目标程序的执行路径;
S6、恢复执行路径
基于表示代码分支覆盖信息的位图恢复目标程序的执行路径;
S7、路径矢量化
将目标程序的执行路径转换为路径向量;
最终,基于模糊器中的预测模型对目标程序的路径向量进行脆弱性预测,再根据预测结果对种子进行突变能量分配;
所述步骤S4的神经网络模型为带Attention层的双向长短期记忆的神经网络模型;
神经网络模型包括6层,第一层为输入层,第二层为嵌入层,用于将执行路径的指令序列中的所有元素映射到固定维向量;第三层和第四层是堆叠的双向连接的LSTM层,LSTM层包含双向形式的64个LSTM单元,用于学习更高级别的指令序列,第五层是Attention层,用于先计算每个时序的权重,再将所有时序的向量进行加权和作为特征向量,第六层为softmax输出层,用于对任务中的两个类别进行预测,即对安全程序或脆弱程序进行预测;
所述步骤S5是将种子输入模糊器执行目标程序,执行过程中,使用IntelPT捕获控制流信息存储在特定内存中,存储的同时,实时对控制流信息进行解码,得到代码分支覆盖信息的位图,其中,种子为初始的测试用例;
存储在特定内存中的控制流信息为数据包形式,包含TNT数据包、TIP数据包和 FUP数据包,其中,TNT数据包中的特定位可以指示是否在条件跳转中执行分支;TIP数据包记录间接跳转或传输指令的目标指令指针;FUP数据包则提供源IP地址,因为TIP数据包在这些事件中不起作用;
所述步骤S6的具体步骤为:
根据表示代码分支覆盖信息的位图显示当前执行的路径是否实现了新的代码分支的覆盖,若未实现,则说明未出现新的执行路径,若覆盖,首先,加载目标程序,并从主入口函数获得指令;
然后,根据当前指令类型获得下一条指令,并将其字节码添加到执行路径中,直到跟踪的最后一条指令为止,即恢复了执行路径,当前指令类型为以下几类:
如果当前指令是有条件的跳转,则下一条指令是根据TNT数据包确定的;
如果当前指令是间接跳转或转移,则根据TIP数据包获得下一条指令;
如果当前指令是无条件的直接跳转,则从指令中获得下一条指令;
如果该当前指令不是跳转指令,则根据当前指令的大小获得下一条指令;
基于离线模型训练和在线指导模糊测试得到的结果进行脆弱性预测,再根据预测结果进行突变能量分配的具体步骤为:
使用预测模型对路径向量进行脆弱性预测,再根据预测结果标记种子,标记后将其添加到种子队列中,其中,标记为高熵种子或为低熵种子;
从种子队列中获取种子后,判断是否为高熵种子,如果是高熵种子,则模糊器将优先为其分配突变能量;
设原始模糊器为种子s分配的能量为,且的最大值为,则当前模糊器的突变能量分配方式为:
。
2.根据权利要求1所述的一种基于深度神经网络的二进制程序模糊测试方法,其特征在于:所述步骤S1从NIST SARD、GitHub和Exploit-DB三个数据源中抓取二进制程序和相应的测试用例。
3.根据权利要求2所述的一种基于深度神经网络的二进制程序模糊测试方法,其特征在于:所述步骤S2使用IntelPT提取执行路径。
4.一种基于深度神经网络的二进制程序模糊测试系统,其特征在于:包括离线模型训练模块和在线指导模糊测试模块;
离线模型训练模块:
源代码抓取:抓取二进制程序数据集和相应的测试用例,其中,二进制程序数据集包括脆弱程序和安全程序,脆弱程序即指打补丁前的版本,安全程序即指打补丁后的版本;
路径提取与标记:将测试用例作为输入执行相应的二进制程序,并提取执行路径,并对获得的执行路径进行标记,其中,执行路径的每条指令均以字节码形式记录;
路径矢量化:执行词嵌入,即将包含指令字节码的、标记后的执行路径转换为矢量表示,转换后得到的路径向量会保留尽可能多的执行路径原始语义信息;
神经网络模型训练:基于路径向量训练神经网络模型,得到能预测模糊处理过程中触发的看不见的执行路径是否为脆弱程序的预测模型;
在线指导模型测试模块:执行程序并跟踪:用集成了预测模型的模糊器对目标程序进行模糊测试,模糊测试过程中实时跟踪得到控制流信息并进行解码,解码后得到代码分支覆盖信息的位图,其中,代码分支覆盖信息的位图中的代码分支是指目标程序的执行路径;
恢复执行路径:基于表示代码分支覆盖信息的位图恢复目标程序的执行路径;
路径矢量化:将目标程序的执行路径转换为路径向量;
最终,基于模糊器中的预测模型对目标程序的路径向量进行脆弱性预测,再根据预测结果对种子进行突变能量分配;
所述离线模型训练模块中的神经网络模型为带Attention层的双向长短期记忆的神经网络模型;
神经网络模型包括6层,第一层为输入层,第二层为嵌入层,用于将执行路径的指令序列中的所有元素映射到固定维向量;第三层和第四层是堆叠的双向连接的LSTM层,LSTM层包含双向形式的64个LSTM单元,用于学习更高级别的指令序列,第五层是Attention层,用于先计算每个时序的权重,再将所有时序的向量进行加权和作为特征向量,第六层为softmax输出层,用于对任务中的两个类别进行预测,即对安全程序或脆弱程序进行预测;
所述在线指导模糊测试模块中的执行程序和跟踪的具体步骤为:
将种子输入模糊器执行目标程序,执行过程中,使用IntelPT捕获控制流信息存储在特定内存中,存储的同时,实时对控制流信息进行解码,得到代码分支覆盖信息的位图,其中,种子为初始的测试用例;
存储在特定内存中的控制流信息为数据包形式,包含TNT数据包、TIP数据包和 FUP数据包,其中,TNT数据包中的特定位可以指示是否在条件跳转中执行分支;TIP数据包记录间接跳转或传输指令的目标指令指针;FUP数据包则提供源IP地址,因为TIP数据包在这些事件中不起作用;
恢复执行路径的具体步骤为:
根据代码分支覆盖信息的位图显示当前执行的路径是否实现了新的代码分支的覆盖,若未实现,则说明未出现新的执行路径,若覆盖,首先,加载目标程序,并从主入口函数获得指令;
然后,根据当前指令类型获得下一条指令,并将其字节码添加到执行路径中,直到跟踪的最后一条指令为止,即恢复了执行路径,当前指令类型为以下几类:
如果当前指令是有条件的跳转,则下一条指令是根据TNT数据包确定的;
如果当前指令是间接跳转或转移,则根据TIP数据包获得下一条指令;
如果当前指令是无条件的直接跳转,则从指令中获得下一条指令;
如果该当前指令不是跳转指令,则根据当前指令的大小获得下一条指令。
5.根据权利要求4所述的一种基于深度神经网络的二进制程序模糊测试系统,其特征在于:所述离线模型训练模块从NIST SARD、GitHub和Exploit-DB三个数据源中抓取二进制程序和相应的测试用例;
所述离线模型训练模块使用IntelPT提取执行路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111428321.8A CN114064506B (zh) | 2021-11-29 | 2021-11-29 | 一种基于深度神经网络的二进制程序模糊测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111428321.8A CN114064506B (zh) | 2021-11-29 | 2021-11-29 | 一种基于深度神经网络的二进制程序模糊测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114064506A CN114064506A (zh) | 2022-02-18 |
CN114064506B true CN114064506B (zh) | 2023-04-04 |
Family
ID=80276968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111428321.8A Active CN114064506B (zh) | 2021-11-29 | 2021-11-29 | 一种基于深度神经网络的二进制程序模糊测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064506B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115576840B (zh) * | 2022-11-01 | 2023-04-18 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN116541280B (zh) * | 2023-05-06 | 2023-12-26 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112069061A (zh) * | 2020-08-19 | 2020-12-11 | 北京科技大学 | 深度学习梯度指导变异的软件安全漏洞检测方法及系统 |
CN112328505A (zh) * | 2021-01-04 | 2021-02-05 | 中国人民解放军国防科技大学 | 一种用于提升模糊测试的覆盖率的方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3825841A1 (en) * | 2018-06-27 | 2021-05-26 | Shanghai Cambricon Information Technology Co., Ltd | Method and device for parallel computation of a network model |
CN109885479B (zh) * | 2019-01-07 | 2022-02-01 | 中国人民解放军战略支援部队信息工程大学 | 基于路径记录截断的软件模糊测试方法及装置 |
CN109902024B (zh) * | 2019-03-18 | 2022-04-29 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
CN110597734B (zh) * | 2019-09-23 | 2021-06-01 | 电子科技大学 | 一种适用于工控私有协议的模糊测试用例生成方法 |
CN111897733B (zh) * | 2020-08-07 | 2023-04-07 | 北京理工大学 | 一种基于最小集合覆盖的模糊测试方法和装置 |
CN113505886A (zh) * | 2021-07-08 | 2021-10-15 | 深圳市网联安瑞网络科技有限公司 | 基于模糊测试的对抗样本生成方法、系统、终端及介质 |
CN113626324B (zh) * | 2021-08-04 | 2023-09-26 | 北京航空航天大学 | 一种面向Move语言虚拟机的模糊测试方法 |
-
2021
- 2021-11-29 CN CN202111428321.8A patent/CN114064506B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112069061A (zh) * | 2020-08-19 | 2020-12-11 | 北京科技大学 | 深度学习梯度指导变异的软件安全漏洞检测方法及系统 |
CN112328505A (zh) * | 2021-01-04 | 2021-02-05 | 中国人民解放军国防科技大学 | 一种用于提升模糊测试的覆盖率的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114064506A (zh) | 2022-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN109902024B (zh) | 一种程序路径敏感的灰盒测试方法及装置 | |
Tann et al. | Towards safer smart contracts: A sequence learning approach to detecting security threats | |
Guggulothu et al. | Code smell detection using multi-label classification approach | |
CN114064506B (zh) | 一种基于深度神经网络的二进制程序模糊测试方法及系统 | |
Sabhadiya et al. | Android malware detection using deep learning | |
CN110287702A (zh) | 一种二进制漏洞克隆检测方法及装置 | |
CN112685738B (zh) | 一种基于多级投票机制的恶意混淆脚本静态检测方法 | |
CN113010895B (zh) | 一种基于深度学习的漏洞危害评估方法 | |
CN112989363B (zh) | 漏洞定位方法、装置、电子设备和存储介质 | |
Zakeri Nasrabadi et al. | Format-aware learn&fuzz: deep test data generation for efficient fuzzing | |
CN111475809A (zh) | 脚本混淆检测方法、装置、计算机设备和存储介质 | |
Sotgiu et al. | Explainability-based debugging of machine learning for vulnerability discovery | |
Tang et al. | Sevuldet: A semantics-enhanced learnable vulnerability detector | |
CN114417348B (zh) | 多目标导向模糊测试方法及系统 | |
Gopali et al. | Vulnerability detection in smart contracts using deep learning | |
CN110162472A (zh) | 一种基于fuzzing测试的测试用例生成方法 | |
Kwan | Markov image with transfer learning for malware detection and classification | |
CN115659337B (zh) | 一种计算机网络防御方法以及系统 | |
Katsadouros et al. | Can Large Language Models Better Predict Software Vulnerability? | |
CN113923007A (zh) | 一种安全渗透测试方法、装置、电子设备及存储介质 | |
Zhang | Beak: A directed hybrid fuzzer for smart contracts | |
Xie et al. | Webshell Detection Based on Explicit Duration Recurrent Network | |
Louati et al. | Source Code Vulnerability Detection Using Deep Learning Algorithms for Industrial Applications | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression |
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 |