一种基于语法正确变异和语义有效实例化的模糊测试方法与流程

未命名 09-09 阅读:94 评论:0


1.本发明实施例涉及模糊测试技术领域,特别是涉及一种基于语法正确变异和语义有效实例化的模糊测试方法。


背景技术:

2.数据库管理系统(database management system,dbms)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。绝大部分企业使用dbms管理自己的各种数据,并通过dbms使用这些数据,为客户提供各种服务,可以说dbms是信息技术领域最重要的软件之一,在信息技术领域占据至关重要的地位。结构化查询语言(structured query language,sql)是一种特殊目的的编程语言,用于存取数据以及查询、更新和管理关系数据库系统。通过sql语句使用dbms是用户使用dbms时最常用的方法。像其他复杂系统一样,dbms内往往存在许多未被发现的漏洞。这些漏洞轻则会导致程序崩溃,重则会导致权限提升、未授权访问以及任意代码执行等严重问题,如果被攻击者使用,将会造成严重的后果。模糊测试技术是一种通过不断向程序中输入随机生成的测试用例,根据程序运行情况找出会触发程序漏洞的输入,从而定位漏洞位置的技术。因其高效、自动化等特性,已经成为被广泛应用于各个领域。与传统文件型模糊测试相比,针对dbms的模糊测试需要能够生成语法正确及语义正确的输入,使得生成的sql语句能够通过数据库内部的语法检查和语义检查,覆盖到更深层的代码。现有的dbms模糊测试技术缺乏必要的引导机制,只能通过盲目的随机变异生成sql语句,因此难以探索更深层次的代码,并且在变异过程中,很可能生成语法错误或语义无效的sql语句,这些语句无法通过dbms最基本的检查,从而无法探索到更深的代码,这些都严重降低了模糊测试的效率。
3.目前,随着信息技术的发展,各种信息技术产品在人民生产生活中占据了重要地位,无论是利用漏洞对dbms发动dos攻击,阻止其正常使用,还是利用漏洞提升权限,窃取用户信息,都会对企业和用户造成严重损失,dbms安全问题也成为一个至关重要的问题。
4.因此,有必要提供一种基于语法正确变异和语义有效实例化的模糊测试方法,可以有效解决上述问题。


技术实现要素:

5.本发明提供一种基于语法正确变异和语义有效实例化的模糊测试方法及装置,通过语法正确变异的sql语句以及语义有效的实例,大大提高了模糊测试的效率。
6.本发明实施例提供一种基于语法正确变异和语义有效实例化的模糊测试方法,包括:初始化阶段,导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析阶段,使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;
变异阶段,遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化阶段,向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验阶段,将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。
7.优选地,所述语法信息通过以下方式抽取:对上下文无关文法进行范式转换,范式转换后的上下文无关文法中每条生成式包括多个非终结符和多个终结符;对所述范式转换后的上下文无关文法进行编码,所述多个非终结符和所述多个终结符分别使用第一组编号和第二组编号,所述第一组编号和所述第二组编号不相同。
8.优选地,所述每条生成式中的奇数编号表示终结符,所述每条生成式中的偶数编号表示非终结符。
9.优选地,若所述生成式中的符号数量不符,则使用预设编号作为占位符。
10.优选地,在对所述终结符进行编号时,将编号对应的非终结符以字符串的形式保存入一个数组,该数组的索引为该非终结符的编号,该数组是所述语法信息的组成部分。
11.优选地,所述向所述第一ir树的子节点赋予正确的值包括推导所述第一ir树的子节点之间的依赖关系,根据所述依赖关系向所述第一ir树的子节点赋予正确的值。
12.优选地,所述对每个节点使用所述语法信息进行语法正确的变异包括根据该节点的编号在所述语法信息中查询对应的条目,如果所述对应的条目有多个,则随机选择其中一个。
13.优选地,所述对应的条目包括终结符编号和非终结符编号,对于所述终结符编号,按照所述奇数编号的位置将其赋予对应位置的子节点,对于所述非终结符编号,根据该编号在所述第二组sql语句中随机选择跟该节点具有相同编号的第一ir树的子节点,使用所述具有相同编号的第一ir树的子节点进行替换。
14.优选地,所述dbms发生崩溃或终止运行具体通过所述dbms提供的c++接口返回的执行信息进行判断;如果所述dbms发生崩溃或终止运行,则保留相应的sql语句;如果所述dbms未发生崩溃或终止运行,则判断覆盖率是否增加,若所述覆盖率未增加则丢弃相应的sql语句;若所述覆盖率增加,则判断是否出现语法或语义错误,若出现语法或语义错误则丢弃相应的sql语句,否则保留相应的sql语句。
15.本发明实施例还提供一种基于语法正确变异和语义有效实例化的模糊测试装置,包括:初始化模块,其用于导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析模块,其用于使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;
变异模块,其用于遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化模块,其用于向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验模块,其用于将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。
16.与现有技术相比,本发明实施例的技术方案具有以下有益效果:本发明实施例的基于语法正确变异和语义有效实例化的模糊测试方法及装置,包括:初始化阶段,导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析阶段,使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;变异阶段,遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化阶段,向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验阶段,将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句,由于增加了语法信息引导变异方法,使变异得到的相应的sql语句一定是语法正确的,提高了模糊测试的效率;进一步地,使用更复杂的静态推导规则并对ir树结构进行必要调整,在实例化时有更高的概率生成语义有效的sql语句,进一步提高了模糊测试的效率;进一步地,所述dbms发生崩溃或终止运行具体通过所述dbms提供的c++接口返回的执行信息进行判断;如果所述dbms发生崩溃或终止运行,则保留相应的sql语句;如果所述dbms未发生崩溃或终止运行,则判断覆盖率是否增加,若所述覆盖率未增加则丢弃相应的sql语句;若所述覆盖率增加,则判断是否出现语法或语义错误,若出现语法或语义错误则丢弃相应的sql语句,否则保留相应的sql语句,由于增加了基于sql语句正确性的筛选机制,提前丢弃出错的sql语句,从而增加产生正确sql语句的概率,进一步提高了模糊测试的效率。
附图说明
17.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
18.图1为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的流程示意图;图2为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的另一流程示意图;图3为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的语法信息的处理方法示意图;图4为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模
糊测试方法的解析阶段具体过程的示意图;图5为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的变异阶段具体过程的示意图;图6为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的检验阶段具体过程的示意图;图7为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试装置的模块示意图。
具体实施方式
19.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
20.下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
21.基于现有技术存在的问题,本发明提供一种基于语法正确变异和语义有效实例化的模糊测试方法及装置,通过语法正确变异的sql语句以及语义有效的实例,大大提高了模糊测试的效率。
22.图1为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的流程示意图;图2为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的另一流程示意图。现在参看图1和图2,本发明实施例提供一种基于语法正确变异和语义有效实例化的模糊测试方法,包括:步骤s101:初始化阶段,导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;步骤s102:解析阶段,使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;步骤s103:变异阶段,遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;步骤s104:实例化阶段,向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;步骤s105:检验阶段,将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。
23.在具体实施中,所述语法信息通过以下方式抽取:对上下文无关文法进行范式转换,范式转换后的上下文无关文法中每条生成式包括多个非终结符和多个终结符;对所述范式转换后的上下文无关文法进行编码,所述多个非终结符和所述多个终结符分别使用第一组编号和第二组编号,所述第一组编号和所述第二组编号不相同。
24.在具体实施中,生成式属于上下文无关文法的一部分,用于描述sql语句的语法,
所述每条生成式中的奇数编号表示终结符,所述每条生成式中的偶数编号表示非终结符。
25.在具体实施中,若所述生成式中的符号数量不符,则使用预设编号作为占位符。
26.在具体实施中,在对所述终结符进行编号时,将编号对应的非终结符以字符串的形式保存入一个数组,该数组的索引为该非终结符的编号,该数组是所述语法信息的组成部分。
27.在具体实施中,所述向所述第一ir树的子节点赋予正确的值包括推导所述第一ir树的子节点之间的依赖关系,根据所述依赖关系向所述第一ir树的子节点赋予正确的值。其中,子节点是指对于第一ir树中任一节点,由该节点延伸出的所有节点都是该节点的子节点。
28.在具体实施中,所述对每个节点使用所述语法信息进行语法正确的变异包括根据该节点的编号在所述语法信息中查询对应的条目,如果所述对应的条目有多个,则随机选择其中一个。具体地,生成式需要经过编码之后变成条目,由于生成式中的信息无法直接被变异阶段使用,需要经过编码,变成条目后才能被变异阶段使用。
29.在具体实施中,所述对应的条目包括终结符编号和非终结符编号,对于所述终结符编号,按照所述奇数编号的位置将其赋予对应位置的子节点,对于所述非终结符编号,根据该编号在所述第二组sql语句中随机选择跟该节点具有相同编号的第一ir树的子节点,使用所述具有相同编号的第一ir树的子节点进行替换。
30.在具体实施中,所述dbms发生崩溃或终止运行具体通过所述dbms提供的c++接口返回的执行信息进行判断;如果所述dbms发生崩溃或终止运行,则保留相应的sql语句;如果所述dbms未发生崩溃或终止运行,则判断覆盖率是否增加,若所述覆盖率未增加则丢弃相应的sql语句;若所述覆盖率增加,则判断是否出现语法或语义错误,若出现语法或语义错误则丢弃相应的sql语句,否则保留相应的sql语句。
31.在具体实施中,一种基于语法正确变异和语义有效实例化的模糊测试方法包括初始化阶段、解析阶段、变异阶段、实例化阶段和检验阶段。相邻阶段具有递进关系,每个阶段的输出将作为下个阶段的输入参与各项处理。实现的主要过程如下:首先对程序进行初始化,导入语法信息、初始语句和初始变异素材。在解析阶段,从种子集中选择第一组sql语句,进行语法解析,解析过程中会对ast(abstract syntax tree,抽象语法树)的节点类型进行标记,在得到ast后,将ast转换为第一ir树,进入变异阶段。在变异阶段,程序会选择第一ir树中的节点,根据导入的语法信息,从第二组sql语句中选择第一ir树对该节点的子树进行替换,得到第二ir树。在实例化阶段,程序根据第二ir树中节点的类型使用规则对第二ir树的结构进行调整,并使用预设规则对ir树中各个子节点的关系进行静态推导,即向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句,所述第三组sql语句为字符串形式。最后,在检验阶段,将字符串形式的第三组sql语句输入dbms,监控dbms的运行状态,判断是否触发漏洞以及是否保存相应的sql语句作为新的输入。
32.初始化阶段的主要目的是向程序内导入语法信息、初始输入和初始变异素材,以供之后阶段使用。其中,初始输入是指一些作为初始输入的sql语句,这些初始输入包括多
条sql语句,即第一组sql语句,构成了完整的上下文关系。为了提升效率,这些初始输入经过人工选择,一般使用一些具有复杂结构的sql语句和一些具有复杂上下文关系的sql语句组合,好的初始输入能够增加模糊测试过程前期的效率。初始变异素材是指一组sql语句,即第二组sql语句,这些语句在初始化阶段被解析并转换为第一ir树,保存在变异素材库中,并按照节点类型进行索引。在变异阶段,会根据节点类型从第二组sql语句库中随机选择节点,对第一ir树进行变异,具体过程详见变异阶段。
33.图3为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的语法信息的处理方法示意图。现在参看图3,语法信息是指对sql语法进行范式转换和编码处理后得到的信息,该信息可以直接用于指导变异。其中,最初为sql语法信息,以上下文无关文法的方式定义,之后进行范式转换,将其转换为每个生成式中最多包含2个非终结符的形式。最后对非终结符和终结符分别使用第一组编号和第二组编号进行数字编码,生成语法信息,其中,每个条目固定为5个编号,奇数编号即第1、3、5位表示终结符编号,偶数编号即第2、4位表示非终结符编号,其中如果终结符或非终结符数量不足,则使用代表空值的编号占位,第一组编号和第二组编号不相同,分别使用不同的编码表。在对终结符进行编号时,会将编号对应的非终结符以字符串的形式保存入一个数组,其数组索引就是该非终结符的编号,在将第二ir树转换为第三组sql语句时,会使用该数组将非终结符编号转换为终结符字符串。
34.图4为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的解析阶段具体过程的示意图。现在参看图4,解析阶段的主要目的是将文本形式的第一组sql语句转换为第一ir树格式,以供下一阶段使用。该阶段主要包含两个部分,第一个部分是将文本形式的第一组sql语句解析为ast,具体可以使用bison完成对第一组sql语句的解析,bison是一个开源软件,用于自动生成语法分析器程序。由bison生成的语法分析器可以分析使用上下文无关文法的语言,并在规约时执行用户定义的代码,用户定义的代码主要是用一个编号对非终结符节点类型进行标记,该编号与语法信息中非终结符使用的编号一致。第二部分是将ast转换为第一ir树,该过程会对ast结构进行修改,将ast子节点数量限定为5个,从左至右第1、3、5节点表示终结符,第2、4节点表示非终结符,其中如果终结符或非终结符数量不足,则使用空节点代替,该结构与语法信息中的条目结构一致。之后使用编号代替具体的非终结符和终结符,其中非终结符与终结符的编号与语法信息中的编号相同。
35.图5为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的变异阶段具体过程的示意图。现在参看图5,变异阶段的主要目的是遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异。对于每个选择的节点,变异过程分为两步,第一步是根据该节点的编号在语法信息中查询对应的条目,并从对应的条目中随机选择一条指引变异。第二步根据条目对该节点的子节点进行修改,对于代表终结符的节点,简单替换节点中记录的编号,对于代表非终结符的节点,在变异素材库中随机选择一个具有相同编号的ir节点,使用以该节点为根节点的ir树替换以被修改节点为根节点的ir树。由于在变异时使用了sql的语法信息,因此通过这种方式得到的第二ir树在转换为第三组sql语句后一定是语法正确的。
36.实例化阶段的主要目的是调整第二ir树的结构并为第二ir树叶节点赋值,使其能
够转换为语法正确且语义有效的sql语句,之后将第二ir树转换为第三组sql语句,以供下一阶段使用。调整和赋值主要是通过一系列人工编写的规则实现的,首先,根据sql语句的种类选择不同的规则,使用选中的规则检查第二ir树的节点,对不符合规则的节点进行调整,之后依据规则对第二ir树的叶节点之间的依赖关系进行静态推导,根据推导出的依赖关系对叶节点进行赋值。最后,通过遍历第二ir树得到对应的第三组sql语句,具体方法是使用从左到右深度优先的方法遍历第二ir树,当到达代表终结符的节点时,根据编号在记录了所有终结符的字符串数组中获取该终结符的字符串形式,拼接到输出字符串后,到达第二ir树叶节点后,将字符串形式的节点值拼接到输出字符串后,到达代表非终结符的字符串时,继续遍历。其中,叶节点是指没有子节点的节点。
37.图6为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试方法的检验阶段具体过程的示意图。现在参看图6,检验阶段的主要目的是将sql语句输入dbms,根据dbms反馈的结果处理输入的sql语句。将第三组sql语句输入dbms,监控dbms运行状态并收集覆盖率信息,如果dbms出现崩溃或终止运行,则将该sql语句保存起来,以供后续人工分析使用。如果未出现崩溃或终止运行,则检查本次输入的sql语句是否使覆盖率增加,如果未使覆盖率增加,则丢弃该sql语句。如果使覆盖率增加,则检查本次输入的sql语句是否是语法正确且语义有效的,如果不正确或无效,则丢弃该sql语句。如果该语句正确,则将该语句加入种子集,未来使用该sql语句进行变异,并将该语句加入变异素材库,添加对应索引,以供之后的变异使用。最后,从种子集中选择下一个sql语句,开始下一轮测试。
38.图7为本发明的一个实施例提供的一种基于语法正确变异和语义有效实例化的模糊测试装置的模块示意图。现在参看图7,本发明实施例还提供一种基于语法正确变异和语义有效实例化的模糊测试装置,包括:初始化模块71,其用于导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析模块72,其用于使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;变异模块73,其用于遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化模块74,其用于向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验模块75,其用于将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。
39.综上所述,本发明实施例提供的基于语法正确变异和语义有效实例化的模糊测试方法及装置,包括:初始化阶段,导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析阶段,使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;变异阶段,遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化阶段,向所述第一ir树的子节
点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验阶段,将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句,由于增加了语法信息引导变异方法,使变异得到的sql语句一定是语法正确的,提高了模糊测试的效率;进一步地,使用更复杂的静态推导规则并对ir树结构进行必要调整,在实例化时有更高的概率生成语义有效的sql语句,进一步提高了模糊测试的效率;进一步地,所述dbms发生崩溃或终止运行具体通过所述dbms提供的c++接口返回的执行信息进行判断;如果所述dbms发生崩溃或终止运行,则保留相应的sql语句;如果所述dbms未发生崩溃或终止运行,则判断覆盖率是否增加,若所述覆盖率未增加则丢弃相应的sql语句;若所述覆盖率增加,则判断是否出现语法或语义错误,若出现语法或语义错误则丢弃相应的sql语句,否则保留相应的sql语句,由于增加了基于sql语句正确性的筛选机制,提前丢弃出错的sql语句,从而增加产生正确sql语句的概率,进一步提高了模糊测试的效率。
40.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

技术特征:
1.一种基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,包括:初始化阶段,导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析阶段,使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;变异阶段,遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化阶段,向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验阶段,将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。2.根据权利要求1所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述语法信息通过以下方式抽取:对上下文无关文法进行范式转换,范式转换后的上下文无关文法中每条生成式包括多个非终结符和多个终结符;对所述范式转换后的上下文无关文法进行编码,所述多个非终结符和所述多个终结符分别使用第一组编号和第二组编号,所述第一组编号和所述第二组编号不相同。3.根据权利要求2所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述每条生成式中的奇数编号表示终结符,所述每条生成式中的偶数编号表示非终结符。4.根据权利要求3所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,若所述生成式中的符号数量不符,则使用预设编号作为占位符。5.根据权利要求2所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,在对所述终结符进行编号时,将编号对应的非终结符以字符串的形式保存入一个数组,该数组的索引为该非终结符的编号,该数组是所述语法信息的组成部分。6.根据权利要求1所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述向所述第一ir树的子节点赋予正确的值包括推导所述第一ir树的子节点之间的依赖关系,根据所述依赖关系向所述第一ir树的子节点赋予正确的值。7.根据权利要求3所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述对每个节点使用所述语法信息进行语法正确的变异包括根据该节点的编号在所述语法信息中查询对应的条目,如果所述对应的条目有多个,则随机选择其中一个。8.根据权利要求7所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述对应的条目包括终结符编号和非终结符编号,对于所述终结符编号,按照所述奇数编号的位置将其赋予对应位置的子节点,对于所述非终结符编号,根据该编号在所述第二组sql语句中随机选择跟该节点具有相同编号的第一ir树的子节点,使用所述具有相同编号的第一ir树的子节点进行替换。9.根据权利要求1所述的基于语法正确变异和语义有效实例化的模糊测试方法,其特征在于,所述dbms发生崩溃或终止运行具体通过所述dbms提供的c++接口返回的执行信息进行判断;
如果所述dbms发生崩溃或终止运行,则保留相应的sql语句;如果所述dbms未发生崩溃或终止运行,则判断覆盖率是否增加,若所述覆盖率未增加则丢弃相应的sql语句;若所述覆盖率增加,则判断是否出现语法或语义错误,若出现语法或语义错误则丢弃相应的sql语句,否则保留相应的sql语句。10.一种基于语法正确变异和语义有效实例化的模糊测试装置,其特征在于,包括:初始化模块,其用于导入语法信息、初始输入和初始变异素材,所述初始输入包括第一组sql语句,所述初始变异素材包括第二组sql语句;解析模块,其用于使用bison将所述第一组sql语句解析为抽象语法树,记录所述抽象语法树的节点类型,将所述抽象语法树转换为第一ir树,所述第一ir树具有二叉树结构;变异模块,其用于遍历所述第一ir树中的所有节点,对每个节点使用所述语法信息进行语法正确的变异;实例化模块,其用于向所述第一ir树的子节点赋予正确的值以得到第二ir树,将所述第二ir树转换为第三组sql语句;检验模块,其用于将所述第三组sql语句输入dbms,如果所述dbms发生崩溃或终止运行,则保留相应的sql语句。

技术总结
本发明提供一种基于语法正确变异和语义有效实例化的模糊测试方法及装置,包括:导入语法信息、第一组SQL语句、第二组SQL语句;使用bison将第一组SQL语句解析为抽象语法树并转换为第一IR树;遍历第一IR树中的所有节点,对每个节点使用语法信息进行语法正确的变异;向第一IR树的子节点赋予正确的值以得到第二IR树并转换为第三组SQL语句;将第三组SQL语句输入DBMS,如果DBMS发生崩溃或终止运行,则保留相应的SQL语句。本发明提供的基于语法正确变异和语义有效实例化的模糊测试方法及装置,通过语法正确变异的SQL语句以及语义有效的实例,大大提高了模糊测试的效率。大大提高了模糊测试的效率。大大提高了模糊测试的效率。


技术研发人员:汪毅 贾鹏 郭嵩 李晓冉
受保护的技术使用者:上海安般信息科技有限公司
技术研发日:2023.08.04
技术公布日:2023/9/7
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐