CN114626071A - 一种漏洞导向的模糊测试方法、系统和介质 - Google Patents
一种漏洞导向的模糊测试方法、系统和介质 Download PDFInfo
- Publication number
- CN114626071A CN114626071A CN202210275061.3A CN202210275061A CN114626071A CN 114626071 A CN114626071 A CN 114626071A CN 202210275061 A CN202210275061 A CN 202210275061A CN 114626071 A CN114626071 A CN 114626071A
- Authority
- CN
- China
- Prior art keywords
- function
- basic block
- seeds
- nodes
- 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.)
- Granted
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/3676—Test management for coverage analysis
-
- 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/368—Test management for test version control, e.g. updating test cases to a new software version
-
- 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
- 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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/12—Computing arrangements based on biological models using genetic models
- G06N3/126—Evolutionary algorithms, e.g. genetic algorithms or genetic programming
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Biophysics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Biomedical Technology (AREA)
- Mathematical Physics (AREA)
- Genetics & Genomics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Physiology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种漏洞导向的模糊测试方法、系统和介质,所述方法包括:得到二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;对相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;确定每一个函数中基本块的初始权重;确定基本块节点中的边缘节点和常覆盖节点;确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定。根据本发明的方案,将代码在引导过程中的不均等性作为反馈,指导测试用例的生成,进一步提高了模糊测试的效率。
Description
技术领域
本发明涉及软件领域,尤其涉及一种漏洞导向的模糊测试方法、系统和介质。
背景技术
模糊测试,又叫Fuzzing测试,是一种软件测试的方法,它向程序提供无效的、非预期或者是随机的输入数据,一旦程序出现了比如崩溃或者是断言失败的错误,就会发现存在的缺陷(漏洞)。Fuzzing测试不仅适用于有源软件,也适用于二进制软件,应用范围广。它通过大量的测试用例动态执行软件,对动态执行过程进行分析,误报率要低于静态分析技术。另外,Fuzzing实现原理简单,没有大量理论推导和公式计算,避免了符号执行过程中的路径状态爆炸问题;自动化程度较高,人工参与的工作量少。但是由于模糊测试生成测试用例的盲目性,导致其无法穿透复杂的条件限制,对程序的覆盖率低。因此,当前的研究多从提高模糊测试生成测试用例的有效性出发,主流的模糊测试技术包括基于覆盖率的模糊测试和导向式模糊测试两种,其中,基于覆盖率的模糊测试目的在于在有限的时间内尽量多地覆盖代码执行路径,这种方法的出发点在于代码的覆盖与漏洞代码密切相关,也就是代码覆盖的越多,越容易发现漏洞,但是这种方法是将程序代码等同看待,而实际上大部分的覆盖代码并不一定会覆盖漏洞。因此这种盲目提高路径覆盖率以期发现漏洞的方法效率并不高。而导向式模糊测试则是选择重点代码区域,引导模糊测试向更倾向于执行能够重点代码区域的路径。目标导向的模糊测试方法最早由Bohme等人于2017年提出,选择一定的目标代码区域后,计算种子与目标代码的距离,赋予与目标代码距离更近的种子更多的变异机会,从而导向程序向目标距离执行。之后目标导向的研究被应用于不同的场景,如基于目标序列的导向(UAF漏洞),语义信息导向以及内存错误操作导向等。
VUzzer是针对二进制程序的基于模糊测试的漏洞挖掘工具,主要解决二进制程序魔术字节突破难和深层嵌套路径无法达到两个问题,使用静态分析的方法得到程序中的基本块权重和比较指令中的立即数,并使用动态执行的方法计算每一个执行迹的适应度函数和与比较指令立即数相关的实际输入偏移,从而提到Fuzzing测试过程中测试用例生成的有效性,提高代码覆盖率,从而挖掘出二进制程序中可能存在的漏洞。VUzzer和当前主流的导向式Fuzzing工具多是采用静态分析的方法计算与目标函数相关的衡量指标,如基本块节点的权值或者到目标节点的距离,但未能考虑动态执行过程中节点的不同重要程度;同时,在计算衡量指标时,未考虑到程序中函数在导致可能漏洞时所起的不同作用。
发明内容
为解决上述技术问题,本发明提出了一种漏洞导向的模糊测试方法、系统和介质,用以解决现有技术中导向式模糊测试针对源码未知的二进制程序研究较少,对目标代码区域定位自动化水平低以及对模糊测试动态执行过程中的节点重要程度对测试用例生成影响小导致的导向性差的技术问题。
根据本发明的第一方面,提供一种漏洞导向的模糊测试方法,所述方法包括以下步骤:
步骤S1:对于给定的二进制测试程序和给定的目标漏洞函数,使用静态分析的方法分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
其中,将二进制测试程序函数集合F中的函数记为fi,目标漏洞函数记为vul,则对于任意fi∈F,使用fi和vul的特征向量,计算得到相似性分值f_score(fi,vul),该相似性分值用于表征所述二进制测试程序中函数fi与目标漏洞函数vul的相似程度;其中,1≤i≤num,num为二进制测试程序函数集合F中的函数的个数;
步骤S2:对二进制测试程序中的函数与目标漏洞函数的相似性分值f_score(fi,vul)按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
步骤S3:基于各个函数的权重,确定每一个函数中基本块的初始权重;
步骤S4:对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;
步骤S5:确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
优选地,父代种子使用在随机位置进行交叉,并按照不同粒度进行部分变异后,得到子代种子。
优选地,所述步骤S1,使用structure2vec结构进行特征嵌入,得到能够表征函数特征的向量。
优选地,structure2vec结构计算公式如公式(1)-(3):
σ(l)=P1×ReLU(P2×...ReLU(Pnl)) (3)
公式(1)中,v表示函数中的基本块节点,V表示基本块节点集合;xv表示融合语义图中的基本块节点v的初始特征向量,表示节点v在t+1次迭代后的特征向量,即收集了与基本块v的距离不大于t+1跳的所有邻居基本块的特征并整合生成的特征向量,N(v)为在融合语义图中基本块v的邻居基本块节点,为定义的函数,用于计算基本块v在t+1次迭代后得到的特征向量,该计算基于t次迭代得到的基本块v的邻居基本块节点的特征向量得到,该函数使用公式(2)进行具体定义。在公式(2)中,为了计算基本块xv的特征向量,对基本块特征向量xv与超参数W1相乘后,基于基本块的邻居节点u∈N(v),与公式(3)定义的σ()函数相加,使用双曲正切函数tanh计算。公式(3)中的P1,P2,……,Pn表示表示神经网络模型的超参数,使用激活函数ReLU计算多次迭代计算,ReLU表示线性整流函数(Linear rectification function),即ReLU(x)=max(0,x)。
优选地,导向式模糊测试中的种子选择过程基于遗传算法实现,遗传算法的具体实现过程包括以下步骤:
步骤S51:种群初始化,将已有的测试用例作为初始种群;
步骤S52:对于所述初始种群中的每一个种子:将种子作为输入执行测试程序,记录执行过程中覆盖的基本块序列,将基本块序列中基本块的权重之和作为种子的适应度;
步骤S53:设置种群最大的迭代数,将当前的迭代数设置为1;
步骤S54:若当前迭代次数大于种群最大的迭代数,方法结束;否则,进入步骤S55;
步骤S55:根据适应度的值选择种群中的种子,选择适应度值大的种子构建父代种群,用于交叉变异子代种群;
步骤S56:对父代种群中的任意两个种子在随机位置进行交叉,并使用模糊测试的变异策略对交叉后得到的个体进行变异操作,得到子代个体,即为新的种子,作为种群中的种子;种群迭代次数的值加1,进入步骤S54。
优选地,所述模糊测试的变异策略包括位反转、特定值替换和随机位置的变异;位反转包括对相邻的一位、两位、四位和八位的值进行反转变化;特定值替换则是使用预先定义的字典中的特殊值,在字节和字的单位上进行预定义的特殊值替换;随机位置变异则是随机选择种子文件中的位置,在选定的位置上进行比特或者字节单位的变异,变异则包括加减随机数、替换为特殊值和边界值以及对随机长度的内容进行随机内容替换。
根据本发明第二方面,提供一种漏洞导向的模糊测试系统,所述系统包括:
特征获取模块:配置为对于给定的二进制测试程序和给定的目标漏洞函数,使用静态分析的方法分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
其中,将二进制测试程序函数集合F中的函数记为fi,目标漏洞函数记为vul,则对于任意fi∈F,使用fi和vul的特征向量,计算得到相似性分值f_score(fi,vul),该相似性分值用于表征所述二进制测试程序中函数fi与目标漏洞函数vul的相似程度;其中,1≤i≤num,num为二进制测试程序函数集合F中的函数的个数;
排序模块:配置为对二进制测试程序中的函数与目标漏洞函数的相似性分值f_score(fi,vul)按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
权重获取模块:配置为基于各个函数的权重,确定每一个函数中基本块的初始权重;
更新模块:配置为对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;
测试用例生成模块:配置为确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
根据本发明第三方面,提供一种漏洞导向的模糊测试系统,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述方法。
根据本发明第四方面,提供一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述方法。
根据本发明的上述方案,该方法导向式模糊测试方法,旨在基于漏洞代码自动定位的方法,引导模糊测试执行更容易导致漏洞的代码区域,从而提高模糊测试的效率,实现对已有漏洞的复现和未知漏洞的探索。该方法研究在测试程序源码未知的情况下,结合导向模糊测试和二进制相似性分析的优点,实现普适性更强的导向式模糊测试方法;同时,提出了自动化的目标代码识别方法,能够基于神经网络模型,定位可能存在漏洞的代码位置,为后续的导向式模糊测试方法提供目标;此外,在进行导向式模糊测试过程中,考虑到代码在引导模糊测试执行目标区域的不均等性,结合动态执行信息与静态信息,将代码在引导过程中的不均等性作为反馈,指导测试用例的生成,进一步提高了模糊测试的效率。考虑到动态执行对基本块节点重要程度的影响,本申请记录了程序动态执行信息,对节点对程序执行引导的重要程度进行权重动态更新,引导程序向稀少执行路径执行,提高触发漏洞代码的可能性;同时为了表征不同函数在导向程序的不同重要程度,本发明从代码理解角度出发,借鉴自然语言处理(NLP)中的语义提取方法,提出一种能够表征代码语义的特征提取方法,并使用孪生网络Siamese对二进制测试程序的函数与目标漏洞函数进行相似性打分评价。对与漏洞函数相似性打分更高的函数赋更高的权重,在函数级别提高Fuzzing的导向性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
术语解释:
模糊测试,又叫Fuzzing测试,是一种软件测试的方法,它向程序提供无效的、非预期或者是随机的输入数据,一旦程序出现了比如崩溃或者是断言失败的错误,就会发现存在的缺陷(漏洞)。
基本块:二进制程序中的基本块是指程序中顺序执行的最大连续执行的指令序列,满足:1)控制流只能从基本块的第一个指令进入该块,即单入口;2)除了基本块的最后一个指令,控制流在离开基本块之前不会跳转,即单出口。
Structure2vec:是一个强大的异构网络深度学习和推理平台,能够同时整合节点特征,边特征,异构网络结构以及网络动态演化特征的深度学习和推理的嵌入技术,它不仅可以对网络中的节点和边进行推理,还可以对节点,边,甚至子图进行向量化。
介数:介数是网络中重要的全局几何量之一,它由Freeman等人提出。介数分为节点介数和边介数,是一个全局特征量,反映了节点或者边在整个网络中的作用或者影响力。本申请主要关注了节点介数,节点的介数是指网络中所有最短路径中经过该节点的数量比例。
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
图1为本发明一个实施方式的漏洞导向的模糊测试方法流程图;
图2为本发明一个实施方式的漏洞导向的模糊测试总体架构图;
图3为本发明一个实施方式的基于融合语义图的特征嵌入示意图;
图4为本发明一个实施方式的Siamese孪生网络的架构示意图;
图5为本发明一个实施方式的不同执行频率基本块示例图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先结合图1说明为本发明一个实施方式的漏洞导向的模糊测试方法流程图。如图1-3所示,所述方法包括以下步骤:
步骤S1:对于给定的二进制测试程序和给定的目标漏洞函数,使用静态分析的方法分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
其中,将二进制测试程序函数集合F中的函数记为fi,目标漏洞函数记为vul,则对于任意fi∈F,使用fi和vul的特征向量,计算得到相似性分值f_score(fi,vul),该相似性分值用于表征所述二进制测试程序中函数fi与目标漏洞函数vul的相似程度;其中,1≤i≤num,num为二进制测试程序函数集合F中的函数的个数;
步骤S2:对二进制测试程序中的函数与目标漏洞函数的相似性分值f_score(fi,vul)按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
步骤S3:基于各个函数的权重,确定每一个函数中基本块的初始权重;
步骤S4:对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;
步骤S5:确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
其中,父代种子使用在随机位置进行交叉,并按照不同粒度进行部分变异后,得到子代种子。粒度优选为比特、字节等。
使用这种方式进行遗传变异,生成能够达到与目标漏洞代码更相似的二进制测试程序的代码区域的种子,提高模糊测试的导向性。
所述步骤S1,其中:
基于神经网络模型进行特征提取,首先提取二进制测试程序中函数的结构特征和语义特征,使用structure2vec结构进行特征嵌入,得到能够表征函数特征的向量。二进制测试程序函数的结构特征基于函数的融合语义图得到,结合函数的控制流图和数据流图,得到能够表函数中基本块之间的控制依赖关系和数据依赖关系的融合语义图,融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖;函数的语义特征以基本块为单位,包括函数内每一个基本块中的字符串常量、整数常量、调用指令数目、算术指令数目、总指令数目。基于函数的所述融合语义图,由于融合语义图中的节点为函数内部的基本块,边表示基本块之间存在控制依赖或者数据依赖,则对所述融合语义图的结构进行解析,能够提取所述融合语义图的结构特征;每个融合语义图中包括多个基本块节点,每个基本块节点对应函数中的一个基本块,对所述融合语义图中的每个基本块节点,提取对应的语义特征。将函数的基本块的语义特征和结构特征使用structure2vec结构图嵌入,图嵌入的流程如图3所示,嵌入后得到的向量可以作为函数的特征向量。计算二进制测试程序中的函数特征向量与目标漏洞函数特征向量的余弦cosine距离,该距离即为二进制测试程序函数与目标漏洞函数的相似性分值。这种方法可以得到二进制程序中所有函数与漏洞函数的相似性分值。
进一步地,structure2vec结构计算公式如公式(1)-(3)所示,用于基于函数内基本块的语义特征和结构特征,生成表征函数的特征向量。公式(1)中,v表示函数中的基本块节点,V表示基本块节点集合;xv表示融合语义图中的基本块节点v的初始特征向量,表示节点v在t+1次迭代后的特征向量,即收集了与基本块v的距离不大于t+1跳的所有邻居基本块的特征并整合生成的特征向量,N(v)为在融合语义图中基本块v的邻居基本块节点,为定义的函数,用于计算基本块v在t+1次迭代后得到的特征向量,该计算基于t次迭代得到的基本块v的邻居基本块节点的特征向量得到,该函数使用公式(2)进行具体定义。在公式(2)中,为了计算基本块xv的特征向量,对基本块特征向量xv与超参数W1相乘后,基于基本块的邻居节点u∈N(v),与公式(3)定义的σ()函数相加,使用双曲正切函数tanh计算。公式(3)中的P1,P2,……,Pn表示表示神经网络模型的超参数,使用激活函数ReLU计算多次迭代计算,ReLU表示线性整流函数(Linear rectification function),即ReLU(x)=max(0,x)。
σ(l)=P1×ReLU(P2×...ReLU(Pnl)) (3)
使用上述公式得到的特征向量不仅包含了基本块v自身的特征,还包含了与该基本块距离不大于t+1跳的邻居基本块的向量,在一定程度上表征了函数内部的结构特征。在迭代得到包含邻居节点特征的基本块特征向量后,使用公式(4)将进行T次迭代后的基本块向量进行聚合,得到构成表征函数语义的函数级语义向量μ。其中,W2表示超参数,μv (T)表示基本块v进行T次迭代后得到的特征向量。
所述从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征,本实施例中,所述漏洞特征库是已经构建好的、对目前已知的漏洞函数进行了特征提取的特征库。对已知的漏洞函数的特征提取的方式可以采用前述提取函数的结构持征和语义特征的方法,也可以采用本领域常规的提取函数的结构特征和语义特征的方法。
所述步骤S2,在实际实验中发现,得到的分值排序中,top-50的准确率较高,因此,为了提高模糊测试的效率和针对性,对打分前5%和后续的分值进行差异化处理,保证打分前5%的打分值在计算距离时起的作用更大。
本实施例中,基于相似性分值对函数赋权重,首先对二进制测试程序所有函数与漏洞函数相似性分值进行排序,选择打分值排名在第5%的分数,记录为middle,对与漏洞的相似性分值大于middle的函数赋相对高的权重,而分值小于middle的函数的权重则相对要低,同样使用f_score(fi,vul)表示函数fi与漏洞函数vul之间的相似性分值,则函数fi的权重weight(fi)可以使用式(5)来计算(如果f_score(fi,vul)>0),
可以看出,如果函数fi的相似性分值大于middle值,也就是相似性排名在前5%,则其权重为α*f_score(fi,vul),其中α值大于1,且α值与二进制测试程序中包含的总函数个数相关;否则如果相似性分值排名不在前5%,则使用相似性分值作为函数权重值。此外值得指出的是,由于相似性分值为特征向量的余弦距离,因此,可能存在相似性分值为负数的情况,这种情况下,认为函数与漏洞函数相似的可能性小,因此直接给这些函数赋较小的权值θ。
所述步骤S3,包括:基于已经构建的融合语义图,计算各基本块节点的初始权值,基本块节点B的初始权值与其所有父节点B.prev()的权值和出度相关,使用父节点的权值求和后除以所述基本块节点的出度的数值能够反映基本块在融合语义图中的重要程度,将该数值与基本块B所在的函数f(B)的权值weight(f(B))相乘,得到基本块节点的初始权值,如公式(6)所示。
其中prev(B)表示基本块B的父节点,也就是在融合语义图中与B有边连接的基本块,而outd(P)表示基本块P的出度,w(P)为基本块B的父节点基本块P的权重,f(B)表示基本块B所在的函数,weight(f(B))为基本块B所在的函数f(B)的权重。
本实施例中,基本块节点的初始权值是通过静态分析的方法得到。由于编译选项和架构的影响,单凭函数的控制流图(CFG)获取的结构特征并不充分,因此,将数据依赖关系添加到控制流图CFG,基于CFG图构建的融合语义图可以提供更多的语义信息,从而更好的描述节点的重要程度。基本块节点的初始权值与其所有父节点的权值和在融合语义图中的出度相关,也与基本块所在的函数权值相关,可以表示为
其中prev(B)表示基本块B的父节点,也就是在融合语义图中与B有边连接的基本块,而outd(P)表示基本块P的出度,f(B)表示基本块B所在的函数。
所述步骤S4,其中:在执行模糊测试的过程中,对二进制测试程序的动态执行轨迹进行记录,并记录执行轨迹中不同节点的重要程度。此处的执行轨迹中的节点是指该执行路径覆盖的基本块。因此,区分执行轨迹的边缘节点和常覆盖节点,并对两种节点进行权值更新。其中在多次执行过程中,执行轨迹的常覆盖节点是指执行轨迹中的的包含分支语句的基本块的候选分支基本块中,执行频率高于预置常覆盖阈值的基本块节点,而边缘节点则是指包含分支语句的基本块的候选分支基本块节点中,执行频率小于预置边缘阈值的基本块节点。图5表示了执行轨迹以及边缘节点和常覆盖节点。其中由a,b,…c,d,e为一条执行路径,并且在多次执行过程中,c,d,e三个节点经常被执行,而节点g,h和f的执行频率则远少于上述三个节点,c,d,e为常覆盖节点,g,h和f则为边缘节点。边缘节点导致程序出现异常的可能性更大。结合动态执行的信息,可以动态调整这种节点的权重,引导模糊测试向更容易覆盖边缘节点的路径来执行。程序每执行一次,则进行执行迹中分支基本块的候选基本块节点的权值更新。在权值更新过程中,如果一个基本块包含了多个分支基本块,且在当前执行过程中其中一个分支被执行,则将对应的分支基本块的权值乘以一个小于1的系数γ,而其他未覆盖的分支基本块的权值则乘以一个大于1的系数δ。这样,在多次执行时,被执行频率高的分支基本块(即常覆盖节点)的权值逐步降低,而执行频率低的分支基本块(即边缘节点)的权值逐步升高。从而在后续执行过程中,在基本块分支选择时,执行到边缘节点的可能性更大。
所述步骤S5,其中:
在引导测试程序执行目标代码区域,导向式模糊测试中的种子选择过程基于遗传算法实现,具体来说,种子的选择基于适应度函数值,该值为将种子作为输入后程序动态执行轨迹中覆盖的基本块权重之和。这样,如果种子的适应度值更大,说明种子在引导执行到可能存在漏洞的代码区域的可能性更大,因此根据适应度选择种子,并将其作为父代进行交叉变异后,生成的子代对漏洞代码区域的导向性也更强。表1为导向式模糊测试的具体流程伪代码。遗传算法的具体实现过程包括以下步骤:
步骤S51:种群初始化,将已有的测试用例作为初始种群;
步骤S52:对于所述初始种群中的每一个种子:将种子作为输入执行测试程序,记录执行过程中覆盖的基本块序列,将基本块序列中基本块的权重之和作为种子的适应度;
步骤S53:设置种群最大的迭代数,将当前的迭代数设置为1;
步骤S54:若当前迭代次数大于种群最大的迭代数,方法结束;否则,进入步骤S55;
步骤S55:根据适应度的值选择种群中的种子,选择适应度值大的种子构建父代种群,用于交叉变异子代种群;
步骤S56:对父代种群中的任意两个种子在随机位置进行交叉,并使用模糊测试的变异策略对交叉后得到的个体进行变异操作,得到子代个体,即为新的种子,作为种群中的种子;种群迭代次数的值加1,进入步骤S54。
其中,变异为字节或者比特级别的变异。
进一步地,所述模糊测试的变异策略包括位反转、特定值替换和随机位置的变异。位反转包括对相邻的一位、两位、四位和八位的值进行反转变化;特定值替换则是使用预先定义的字典中的特殊值,在字节和字的单位上进行预定义的特殊值替换;随机位置变异则是随机选择种子文件中的位置,在选定的位置上进行比特或者字节单位的变异,变异则包括加减随机数、替换为特殊值和边界值以及对随机长度的内容进行随机内容替换。
表1导向式模糊测试的具体流程伪代码
本实施例中,在遗传算法的基础上,基于动态执行过程来得到种子适应度值(5-14行),使用fitness来表示,其中fitness=calculates(trace),其中trace就是种子执行迹中所有执行的基本块节点的序列,将该序列中的所有基本块权值相加可以得到对应的执行迹的fitness。在Fuzzing执行过程中,fitness大的种子获得的执行机会更多。Fuzzing过程中,对于每一个测试用例,首先将其作为测试程序的输入,记录该测试用例执行过程中的所有代码,即执行迹(execution trace)。由于测试程序为源码未知的二进制程序,因此,使用基本块作为分析的最小单位,在得到执行迹后,适应度函数值为执行迹中执行的所有基本块的权值之和。为了生成导向测试程序向目标代码执行的测试用例,代码基本块的权重计算起着关键的作用。基本块的权重与静态分析结果和动态执行信息相关,在进行权重赋值时,不仅考虑到与目标代码定位相关的静态分析结果得到权重的初始值,还需要将动态执行信息进行记录,基于动态信息对权重进行更新。其中,表1中第14行使用OriginWeight函数对基本块的权重赋初值,第12行使用WeightUpdate函数,基于执行迹信息,按照基本块是边缘节点还是常覆盖节点,对基本块的权值进行更新,并根据基本块的权值,基于适应度函数(15行),计算种子的适应度值,选择适应度值大的种子优先进行交叉变异,生成下一代种子(16-18行)。基本块权值更新使用自适应的方法,如果基本块BB被执行且包含多个后继节点,则根据后继节点是否在当前执行迹中进行不同的处理,如果后继节点在执行迹中,则逐步降低其权重,每次将权重乘以小于1的系数γ(37-38行)。而对不在执行迹中的后继节点的权重进行增加,每次将权重乘以大于1的系数δ(39-40行),在经历多次执行后,如果某一节点多次被判断为边缘节点,则其权重会增加,而如果节点被多次执行,则其权重会逐步降低。同时为了因为多次执行导致出现权重过大或者过少的情况,设置最大权重限值maxW和最小权重minW。此外,进行有策略的权值更新,对基本块的初始权重赋值和权值更新设置一个阈值threshold,记录没有覆盖新的路径的次数,如果在执行过程中,没有覆盖新路径的次数超过该阈值,则将权值重置为原权值(13-14行),否则更新权重(11-12行)。
以下结合具体实施例说明本发明的方法。
1、对真实固件的漏洞检测能力。
本申请实现工具VDFuzz,使用真实固件文件作为测试程序,以确定测试固件中是否包含相应的三方库漏洞。如果固件文件中包含漏洞函数,且对应的函数被VDFuzz的目标代码定位模块定位出可能存在漏洞,则认为VDFuzz具有漏洞代码的识别能力。固件中广泛使用了OpenSSL和Busybox,因此,实验中关注了与其相关的漏洞。这里选择了3个相关的CVE漏洞:CVE-2018-20679,CVE-2015-3197和CVE-2015-1794。在将三方库应用于固件中,开发者往往会将部分功能进行删减,以满足固件有限内存的需求。因此,选择的三个CVE漏洞并不是在每一个固件中都存在,进行手工分析后,发现有26,83和68个固件文件中分别包含CVE-2018-20679,CVE-2015-3197和CVE-2015-1794漏洞。
为了对漏洞定位能力进行评估,借鉴了分类问题中的top-N精确度指标对定位结果进行评估。如果固件中包含漏洞函数且漏洞函数的排名在前N位,则认为检测到漏洞函数,检测到漏洞的固件数目与确定包含该漏洞的固件数目的比值就称为top-N精确度。
同时,将VDFuzz与相关的当前代表性工具Gemini进行比较,Gemini基于图嵌入网络实现二进制的相似性比较,在获取了基本块中的统计特征后,使用structure2vec结构对基本块特征与其邻居特征进行合并表征。同时考虑到固件文件中的相关三方库中一般包含了103数量级的函数个数,如固件文件DCS-1100中的libssl.so库包含了1,048个函数。因此,在对VDFuzz和Gemini进行比较时,使用top-1,top-10和top-50精确度作为衡量指标。结果如表2所示。
表2
2、导向性模糊测试
给定漏洞测试集LAVA-M,对其中的uniq二进制程序进行导向式Fuzzing测试,通过不断更新节点的权值,可以生成大量触发crash的测试用例,24小时内触发的漏洞编号如下所示,其中已经标记的漏洞编号有28个,导向式测试方法找到了28个编号,还发现一个未编号的crash,与经典模糊测试工具AFL,导向式测试工具AFLGo和VUzzer在LAVA-M中得到的不重复的crash数目如表3所示,可以看出,VDFuzz的效果要好于其他三个工具。
AFL | AFLGo | VUzzer | VDFuzz | |
uniq | 9 | 10 | 27 | 28 |
base64 | 0 | 0 | 17 | 20 |
md5sum | 0 | 0 | - | 28 |
who | 1 | 1 | 50 | 165 |
total | 10 | 11 | 94 | 241 |
表3
本发明一个实施方式的一种漏洞导向的模糊测试系统,所述系统包括:
特征获取模块:配置为对于给定的二进制测试程序和给定的目标漏洞函数,使用静态分析的方法分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
其中,将二进制测试程序函数集合F中的函数记为fi,目标漏洞函数记为vul,则对于任意fi∈F,使用fi和vul的特征向量,计算得到相似性分值f_score(fi,vul),该相似性分值用于表征所述二进制测试程序中函数fi与目标漏洞函数vul的相似程度;其中,1≤i≤num,num为二进制测试程序函数集合F中的函数的个数;
排序模块:配置为对二进制测试程序中的函数与目标漏洞函数的相似性分值f_score(fi,vul)按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
权重获取模块:配置为基于各个函数的权重,确定每一个函数中基本块的初始权重;
更新模块:配置为对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;
测试用例生成模块:配置为确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
本发明实施例进一步给出一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述漏洞导向的模糊测试方法。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装Windows或者Windows Server操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (8)
1.一种漏洞导向的模糊测试方法,其特征在于,所述方法包括以下步骤:
步骤S1:对于给定的二进制测试程序和给定的目标漏洞函数,分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
步骤S2:对二进制测试程序中的函数与目标漏洞函数的相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
步骤S3:基于各个函数的权重,确定每一个函数中基本块节点的初始权重;
步骤S4:对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块节点的节点类型,对所述基本块节点的权重进行更新;
步骤S5:确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
2.如权利要求1所述的方法,其特征在于,父代种子使用在随机位置进行交叉,并按照不同粒度进行部分变异后,得到子代种子。
3.如权利要求2所述的方法,其特征在于,所述步骤S1,使用structure2vec结构进行特征嵌入,得到能够表征函数特征的向量。
4.如权利要求3所述的方法,其特征在于,所述步骤S5中,所述导向式模糊测试中的种子选择过程基于遗传算法实现,遗传算法的具体实现过程包括以下步骤:
步骤S51:种群初始化,将已有的测试用例作为初始种群;
步骤S52:对于所述初始种群中的每一个种子:将种子作为输入执行测试程序,记录执行过程中覆盖的基本块序列,将基本块序列中基本块的权重之和作为种子的适应度;
步骤S53:设置种群最大的迭代数,将当前的迭代数设置为1;
步骤S54:若当前迭代次数大于种群最大的迭代数,方法结束;否则,进入步骤S55;
步骤S55:根据适应度的值选择种群中的种子,选择适应度值大的种子构建父代种群,用于交叉变异子代种群;
步骤S56:对父代种群中的任意两个种子在随机位置进行交叉,并使用模糊测试的变异策略对交叉后得到的个体进行变异操作,得到子代个体,即为新的种子,作为种群中的种子;种群迭代次数的值加1,进入步骤S54。
5.如权利要求4所述的方法,其特征在于,所述模糊测试的变异策略包括位反转、特定值替换和随机位置的变异;位反转包括对相邻的一位、两位、四位和八位的值进行反转变化;特定值替换则是使用预先定义的字典中的特殊值,在字节和字的单位上进行预定义的特殊值替换;随机位置变异则是随机选择种子文件中的位置,在选定的位置上进行比特或者字节单位的变异,变异则包括加减随机数、替换为特殊值和边界值以及对随机长度的内容进行随机内容替换。
6.一种漏洞导向的模糊测试装置,其特征在于,所述装置包括:
特征获取模块:配置为对于给定的二进制测试程序和给定的目标漏洞函数,分析所述二进制测试程序,获取二进制测试程序中每一个函数的控制流图和数据流图,将所述控制流图和所述数据流图结合生成融合语义图;所述融合语义图中的节点为基本块节点,对所述基本块节点内部的语义特征进行提取,得到所述融合语义图中每一个基本块节点的语义特征;进而得到所述二进制测试程序中每一个函数的融合语义图的结构特征和所述融合语义图中基本块节点的语义特征;从已有的漏洞特征库中得到目标漏洞函数的结构特征和语义特征;
对二进制测试程序中的函数与目标漏洞函数进行向量嵌入和比较:使用训练好的语义相似性学习模型对所述二进制测试程序的函数进行向量嵌入,得到每一个函数的特征向量;使用语义相似性学习模型对目标漏洞函数的特征进行向量嵌入,得到漏洞特征向量;使用定义的距离函数得到所述二进制测试程序中每一个函数特征向量与目标漏洞函数特征向量之间的相似性分值;
排序模块:配置为对二进制测试程序中的函数与目标漏洞函数的相似性分值按从高到低的顺序排序,增加相似性分值大于或等于预设阈值的函数的权重,减少相似性分值小于预设阈值的函数的权重;得到各个函数的权重;
权重获取模块:配置为基于各个函数的权重,确定每一个函数中基本块的初始权重;
更新模块:配置为对所述二进制测试程序进行若干次的动态执行,获取所述二进制测试程序的多个执行路径;基于所述多个执行路径,得到执行路径中覆盖的基本块节点的执行频率,确定基本块节点中的边缘节点和常覆盖节点;所述边缘节点为分支语句的候选分支节点中,执行频率小于预置边缘阈值的基本块节点;所述常覆盖节点为执行路径中所有分支的下一执行节点中,执行频率高于预置常覆盖阈值的基本块节点;按照基本块的节点类型,对所述基本块的权重进行更新;
测试用例生成模块:配置为确定导向式模糊测试的若干个种子,所述导向式模糊测试的种子基于预先设置的变异策略生成新的测试用例,且所述导向式模糊测试的种子基于遗传算法确定;其中,基于更新后的基本块的权重,基于适应度函数,计算每一个种子对应的执行过程中,得到的执行基本块序列权重之和作为适应度值,并根据所述适应度值选择部分种子作为父代;由父代种子进行交叉、变异,得到子代种子。
7.一种漏洞导向的模糊测试系统,其特征在于,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如权利要求1-5之任一项所述方法。
8.一种计算机可读存储介质,其特征在于,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如权利要求1-6之任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210275061.3A CN114626071B (zh) | 2022-03-21 | 2022-03-21 | 一种漏洞导向的模糊测试方法、系统和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210275061.3A CN114626071B (zh) | 2022-03-21 | 2022-03-21 | 一种漏洞导向的模糊测试方法、系统和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114626071A true CN114626071A (zh) | 2022-06-14 |
CN114626071B CN114626071B (zh) | 2023-04-07 |
Family
ID=81904212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210275061.3A Active CN114626071B (zh) | 2022-03-21 | 2022-03-21 | 一种漏洞导向的模糊测试方法、系统和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114626071B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115033895A (zh) * | 2022-08-12 | 2022-09-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
CN115510451A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种基于随机游走的固件补丁存在性判定方法和系统 |
CN116305173A (zh) * | 2023-05-24 | 2023-06-23 | 中国人民解放军国防科技大学 | 一种整数漏洞查找方法、装置、计算机设备和存储介质 |
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109067800A (zh) * | 2018-09-29 | 2018-12-21 | 南京明博互联网安全创新研究院有限公司 | 一种固件漏洞的跨平台关联检测方法 |
CN112328505A (zh) * | 2021-01-04 | 2021-02-05 | 中国人民解放军国防科技大学 | 一种用于提升模糊测试的覆盖率的方法和系统 |
CN113419971A (zh) * | 2021-08-25 | 2021-09-21 | 北京邮电大学 | 安卓系统服务漏洞检测方法及相关装置 |
CN113704078A (zh) * | 2020-05-21 | 2021-11-26 | 上海交通大学 | 构建调用链转换图及引导生成x.509证书变种方法 |
-
2022
- 2022-03-21 CN CN202210275061.3A patent/CN114626071B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109067800A (zh) * | 2018-09-29 | 2018-12-21 | 南京明博互联网安全创新研究院有限公司 | 一种固件漏洞的跨平台关联检测方法 |
CN113704078A (zh) * | 2020-05-21 | 2021-11-26 | 上海交通大学 | 构建调用链转换图及引导生成x.509证书变种方法 |
CN112328505A (zh) * | 2021-01-04 | 2021-02-05 | 中国人民解放军国防科技大学 | 一种用于提升模糊测试的覆盖率的方法和系统 |
CN113419971A (zh) * | 2021-08-25 | 2021-09-21 | 北京邮电大学 | 安卓系统服务漏洞检测方法及相关装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
CN115033895A (zh) * | 2022-08-12 | 2022-09-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
CN115033895B (zh) * | 2022-08-12 | 2022-12-09 | 中国电子科技集团公司第三十研究所 | 一种二进制程序供应链安全检测方法及装置 |
CN115510451A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种基于随机游走的固件补丁存在性判定方法和系统 |
CN115510451B (zh) * | 2022-09-20 | 2023-09-19 | 中国人民解放军国防科技大学 | 一种基于随机游走的固件补丁存在性判定方法和系统 |
CN116305173A (zh) * | 2023-05-24 | 2023-06-23 | 中国人民解放军国防科技大学 | 一种整数漏洞查找方法、装置、计算机设备和存储介质 |
CN116451244A (zh) * | 2023-06-12 | 2023-07-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
CN116451244B (zh) * | 2023-06-12 | 2023-08-18 | 北京中科卓信软件测评技术中心 | 基于软件漏洞成因导向的定向灰盒模糊测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114626071B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114626071B (zh) | 一种漏洞导向的模糊测试方法、系统和介质 | |
Sharma et al. | A survey on software testing techniques using genetic algorithm | |
CN110008710B (zh) | 基于深度强化学习和程序路径插桩的漏洞检测方法 | |
CN112328505B (zh) | 一种用于提升模糊测试的覆盖率的方法和系统 | |
US11687540B2 (en) | Fast, approximate conditional distribution sampling | |
Saifullah et al. | Learning from examples to find fully qualified names of api elements in code snippets | |
Giordana et al. | Phase transitions in relational learning | |
CN115098292B (zh) | 应用程序崩溃根原因识别方法、装置及电子设备 | |
Mishra et al. | Test case generation and optimization for critical path testing using genetic algorithm | |
Park et al. | A survey of parametric static analysis | |
Dougherty et al. | Algorithmic methods for covering arrays of higher index | |
CN112052166A (zh) | 一种基于支配关系的测试用例生成方法与装置 | |
US20230333971A1 (en) | Workload generation for optimal stress testing of big data management systems | |
KR20200027834A (ko) | 불균형 데이터를 위한 리프리젠테이션 모델 기반의 데이터 처리 방법 및 장치 | |
CN113448821A (zh) | 一种识别工程缺陷的方法和装置 | |
Mishra et al. | White box testing using genetic algorithm—An extensive study | |
CN114139636A (zh) | 异常作业处理方法及装置 | |
CN112699376A (zh) | 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质 | |
CN115422092B (zh) | 一种基于多方法融合的软件bug定位方法 | |
Karlaš et al. | Canonpipe: Data Debugging with Shapley Importance over Machine Learning Pipelines | |
Rotaru et al. | Test case prioritization based on neural network classification with artifacts traceability | |
US20180101463A1 (en) | Boosting the efficiency of static program analysis using configuration tuning | |
Marinescu et al. | Advances in and/or branch-and-bound search for constraint optimization | |
US20240054369A1 (en) | Ai-based selection using cascaded model explanations | |
Kaur et al. | Prediction of Aging-Related Bugs Using Software Code Metrics |
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 |