CN115712563A - 一种基于文法变异的模糊测试方法 - Google Patents
一种基于文法变异的模糊测试方法 Download PDFInfo
- Publication number
- CN115712563A CN115712563A CN202211364961.1A CN202211364961A CN115712563A CN 115712563 A CN115712563 A CN 115712563A CN 202211364961 A CN202211364961 A CN 202211364961A CN 115712563 A CN115712563 A CN 115712563A
- Authority
- CN
- China
- Prior art keywords
- grammar
- variation
- node
- protocol
- nodes
- 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
- 238000010998 test method Methods 0.000 title claims abstract description 19
- 238000012360 testing method Methods 0.000 claims abstract description 78
- 230000035772 mutation Effects 0.000 claims description 53
- 230000002159 abnormal effect Effects 0.000 claims description 19
- 238000004519 manufacturing process Methods 0.000 claims description 7
- 238000013138 pruning Methods 0.000 claims description 5
- 230000001172 regenerating effect Effects 0.000 claims description 3
- 230000007306 turnover Effects 0.000 claims description 3
- 238000005192 partition Methods 0.000 claims description 2
- 238000000034 method Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000002708 enhancing effect Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明提供一种基于文法变异的模糊测试方法,包括以下步骤:S101:建立文法模型;S102:基于所述文法模型构建文法解析树,对协议样本数据进行解析;S103:通过所述文法解析树判断是否存在未测试节点;若存在所述未测试节点,则执行步骤S105根据所述未测试节点的类型使用不同变异策略生成变异测试用例;若不存在所述未测试节点,则执行步骤S104判断协议样本测试是否完全,若所述协议样本测试不完全,则重新执行步骤S102。本发明提供的基于文法变异的模糊测试方法,实现了基于文法模型对各个字段进行变异,避免了对相同字段进行重复测试的情况,大量减少用例的冗余。
Description
技术领域
本发明实施例涉及模糊测试技术领域,特别是涉及一种基于文法变异的模糊测试方法。
背景技术
协议定义了两个或多个实体间通信的消息格式与时序,以及在发送或接收消息时的交互行为,而协议通信的复杂性增大了行为描述的难度。
协议通常使用自然语言进行描述,虽然表达能力强、可读性好,但由于存在对协议的不同理解,设计出来的规范没有严格标准,易产生二义性,甚至可能存在严重错误,且对应的协议实现过程一般由人工进行,效率低下且测试的自动化难以实现,因此改用形式化语言描述协议特征,相比于自然语言更准确简明,使用逻辑的方法消除二义问题,提高协议设计的鲁棒性。形式描述模型是一种常见的形式化描述方法,通过形式描述模型可以获得抽象的协议模型,包括有限状态机模型、Petri网模型等。
协议作为网络通信协议的一种,由语法,语义和时序三大基本要素组成,其中语法是是协议消息中的关键字和数据格式的规范,包括数据长度、字段边界和类型定义,语义是对数据内容、含义以及控制信息的说明,时序则用于明确协议实体间的通信顺序、定时和状态。
不同的协议承载着不同的业务,在解决业务实际时,协议存在控制字段和数据信息两大部分内容,控制字段的语义表示了与后续字段的约束关系,可以决定相关字段的取值范围或者组成结构。
以CAN协议的CRC错误为例,在发送消息时,发送节点会根据特定的多项式计算出由数据帧SOF位到数据域最末位的Checksum值,并将该值放在数据帧的CRC域,随着数据帧广播到总线上,接收节点在收到数据后,应用同样的多项式计算Checksum值,并与收到的Checksum值对比。如果两者一致,正常接收;如果不一致,那么接收节点就检测到一个CRC错误且舍弃,发送错误帧请求发送节点重传消息。
如何准确、完整地描述这些约束关系是建立合适协议模型必不可少的,而现有的形式描述技术大多只能描述协议报文的语法特征,缺少对语义以及取值约束关系的分析。
因此针对协议的模糊测试,有必要掌握其协议规范,并可以生成符合要求的测试用例。
发明内容
本发明提供一种基于文法变异的模糊测试方法,实现了基于文法模型对各个字段进行变异,避免了对相同字段进行重复测试的情况,大量减少用例的冗余。
本发明实施例提供一种基于文法变异的模糊测试方法,包括以下步骤:
步骤S101:建立文法模型;
步骤S102:基于所述文法模型构建文法解析树,对协议样本数据进行解析;
步骤S103:通过所述文法解析树判断是否存在未测试节点;
若存在所述未测试节点,则执行步骤S105根据所述未测试节点的类型使用不同变异策略生成变异测试用例;
若不存在所述未测试节点,则执行步骤S104判断协议样本测试是否完全,若所述协议样本测试不完全,则重新执行步骤S102。
优选地,所述步骤S105还包括将所述变异测试用例发送至目标系统进行测试。
优选地,所述步骤S101中的所述建立文法模型具体包括以下步骤:
根据Knuth属性文法概念进行建模;
为每一个文法符号附加值扩展成一组属性;
对所述每一个文法符号的每个产生式配备所述一组属性的语义规则;
对所述属性进行计算和传递。
优选地,所述步骤S102中的所述构建文法解析树具体包括以下步骤:
获取多个协议报文,通过所述文法模型和报文格式确定所述文法解析树结构,从所述报文的起始字段开始,以协议单元为中间节点,以协议字段为叶子节点,依据相应的属性规则匹配所述多个协议报文获得所述协议字段的值。
优选地,所述步骤S103中的所述生成变异测试用例包括以下步骤:
后序遍历所述文法解析树,变异所有可变异节点,得到变异后的每个节点的异常数据;
对长度字段的值进行计算,提取所有叶子节点的数值,根据协议格式进行组合得到生成的测试用例集合。
优选地,所述步骤S103中的所述生成变异测试用例还包括以下步骤:
增加一个数据集合,对每个节点进行判断是否属于集合中的元素,若所述节点为已测试节点,则将所述已测试节点添加到所述数据集合中。
优选地,所述未测试节点的类型包括叶子节点和中间节点,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异;当所述未测试节点的类型为中间节点时,通过递归寻找其子节点进行变异。
优选地,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异包括:
分隔符变异,在字段之间或行间进行分割,通过替换、删除、增加分隔符的方式完成变异;或
长度变异,通过删减或填充DATA字段数据长度,对字段的边界值进行测试或通过随机数进行替换完成变异;或
计数变异,通过对所述叶子节点进行修剪或复制完成变异。
优选地,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异还包括:
校验变异和协议标识变异,对数据进行变异时,重新生成校验和字段的取值;或
格式控制变异和协议数据变异,通过随机选择数据中的一位或连续二进制序列进行翻转,随机生成多个字节组成的二进制序列,替换原有数据中的部分或全部字节;或
格式化字符串变异,若属于单个格式化字符串则随机替换不同类型的字符串,若属于多个格式化字符串组合则随机替换。
优选地,当所述未测试节点的类型为中间节点时,通过递归寻找其子节点进行变异包括:
组合字段变异,针对相邻的子节点进行组合变异操作;或
属性规则变异,执行与属性规则相反的策略进行变异;或
结构体变异,直接对结构体所在的解析树进行操作。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例的基于文法变异的模糊测试方法,实现了基于文法模型对各个字段进行变异,避免了对相同字段进行重复测试的情况,大量减少用例的冗余;
进一步地,考虑到协议字段和协议单元在文法解析树中的位置的不同,因此分别针对叶子节点和中间节点,并结合协议特征给出相应的变异策略,首先确定当前节点是否属于叶子节点,再根据节点相应的协议字段类型利用相对应的策略进行变异,如果是中间节点,则通过递归寻找其子节点进行变异,并利用相对应的策略进行变异并存储,并将所有异常数据返回,从而充分利用协议的语义特性,综合考虑相关属性规则,加强测试用例的针对性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一个实施例提供的基于文法变异的模糊测试方法的流程示意图;
图2为本发明的一个实施例提供的基于文法变异的模糊测试方法中的建立文法模型的流程示意图;
图3为本发明的一个实施例提供的基于文法变异的模糊测试方法中的构建文法解析树的流程示意图;
图4为本发明的一个实施例提供的基于文法变异的模糊测试方法中的生成变异测试用例的流程示意图;
图5为本发明的一个实施例提供的基于文法变异的模糊测试方法中的变异策略的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
基于现有技术存在的问题,本发明实施例提供一种基于文法变异的模糊测试方法,实现了基于文法模型对各个字段进行变异,避免了对相同字段进行重复测试的情况,大量减少用例的冗余。
图1为本发明的一个实施例提供的基于文法变异的模糊测试方法的流程示意图。现在参看图1,本发明实施例提供一种基于文法变异的模糊测试方法,包括以下步骤:
步骤S101:建立文法模型;
步骤S102:基于所述文法模型构建文法解析树,对协议样本数据进行解析;
步骤S103:通过所述文法解析树判断是否存在未测试节点;
若存在所述未测试节点,则执行步骤S105根据所述未测试节点的类型使用不同变异策略生成变异测试用例;
若不存在所述未测试节点,则执行步骤S104判断协议样本测试是否完全,若所述协议样本测试不完全,则重新执行步骤S102。
在具体实施中,所述步骤S105还包括将所述变异测试用例发送至目标系统进行测试。
图2为本发明的一个实施例提供的基于文法变异的模糊测试方法中的建立文法模型的流程示意图。现在查看图2,所述步骤S101中的所述建立文法模型具体包括以下步骤:
步骤S201:根据Knuth文法属性概念进行建模;
步骤S202:为每一个文法符号附加值扩展成一组属性;
步骤S203:对所述每一个文法符号的每个产生式配备所述一组属性的语义规则;
步骤S204:对所述属性进行计算和传递。
具体地,根据Knuth属性文法概念进行建模,在上下文无关文法能够描述语法结构的基础上,通过为每一个文法附加值扩展成属性,表示相关的语义信息,如类型、值、代码序列、符号表内容等。并且对文法的每个产生式都配备了一组属性的语义规则,对所述属性进行计算和传递,进一步提高表达上下文相关数据的能力,例如将子节点的值REAL取出传递给叶子节点,从而在消除属性和结构间的界限的同时,也能准确地描述协议结构化数据的格式以及约束关系。每个产生式可配备一条或多条语义规则,这些语义规则说明了每个产生式所涉及的语法单位之间的语义关系,通过属性计算表达。
具体地,属性文法是Knuth在1968年提出的,以上下文无关文法为基础,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称为属性),代表与文法符号相关信息,如类型、值、代码序列、符号表内容等。对所述属性进行计算和传递包括,例如:产生式:L->En,语义规则:print(E.val),语义规则对属性进行计算和传递。对应于每个产生式A→α都有一套与之相关联的语义规则,每条规则的形式为(f是一个函数):b:=f(c1,c2,......,ck)。
图3为本发明的一个实施例提供的基于文法变异的模糊测试方法中的构建文法解析树的流程示意图。现在参看图3,,所述步骤S102中的所述构建文法解析树具体包括以下步骤:
步骤S301:获取多个协议报文;
步骤S302:通过所述文法模型和报文格式确定所述文法解析树结构;
步骤S303:从所述报文的起始字段开始,以协议单元为中间节点,以协议字段为叶子节点;
步骤S304:依据相应的属性规则匹配所述多个协议报文获得所述协议字段的值。
具体地,叶子节点(Leaf Node)下面不再有节点的节点,即末端。
少量的样本难以完整描述数据格式,因此采用多个协议报文作为输入。报文作为协议格式文法接受的语句,其结构可用唯一确定的解析树来表示,可以更加清晰地表示语法、语义以及两者间的约束关系,因此文法解析树的构建是从起始字段开始,以协议单元为中间节点,以协议字段为叶子节点,依据相应的属性规则匹配协议报文获得所述协议字段的值。
通过定义同一个文法模型即结构相同的部分,针对结构不同之处则利用结构属性来表示,不仅很好地表示了不同格式的协议报文,同时还保留了它们之间的联系。在具体模糊测试时,由于定义同一个文法模型结构,即结构相同的部分,将结构相同的部分抽出来了,因此不会造成用例的大量冗余以及对相同字段进行重复测试的情况。
图4为本发明的一个实施例提供的基于文法变异的模糊测试方法中的生成变异测试用例的流程示意图。现在参看图4,所述步骤S103中的所述生成变异测试用例包括以下步骤:
步骤S401:以所述文法解析树和所述文法模型作为输入;
步骤S402:后序遍历所述文法解析树,变异所有可变异节点;
步骤S403:得到变异后的每个节点的异常数据;
步骤S404:对长度字段的值进行计算,提取所有叶子节点的数值;
步骤S405:根据协议格式进行组合得到生成的测试用例集合。
具体地,不同协议具有各自协议格式,以ICMP协议报文格式为例:类型字段占8位,用来描述特定类型的ICMP报文。代码字段占8位,进一步描述某类型的ICMP报文的不同功能。校验和字段占16位,覆盖整个ICMP报文,包括头部和数据。其中这些字段称为协议字段。
测试用例生成算法以函数构造出的文法解析树和文法模型作为输入参数,测试用例集合作为为输出,与随机变异不同,为了避免重复测试,算法采用后序遍历文法解析树进行节点选择,通过后序遍历文法解析树,选择其中的节点进行变异。除了不需要变异的协议字段,默认对所有字段按照相应的变异策略进行变异。
首先后序遍历文法解析树,采用后序遍历的好处是可以让中间节点的变异操作总是在其子节点变异完成之后执行,避免混乱。接着执行初始化,然后遍历解析树中所有的节点。通过遍历解析树以及记录已测元素,有效地避免了节点被遗漏或重复被测的情况。
具体地,子节点(Child Node)是除根节点之外,本身下面还连接有节点的节点。
通过算法变异后得到了每个节点的异常数据,为了使得测试用例更加完整有效,算法根据当前节点的属性规则,重新计算相关节点的数据值。对长度字段的值进行更新,保证其约束关系不变,最后提取所有叶子节点的数值,按照协议格式进行组合,所得到的数据就是生成的测试用例集合。
在具体实施中,所述步骤S103中的所述生成变异测试用例还包括以下步骤:
增加一个数据集合,对每个节点进行判断是否属于集合中的元素,若所述节点为已测试节点,则将所述已测试节点添加到所述数据集合中。
通过额外增加一个数据集合来记录已经测试过的节点,针对每个节点判断是否属于集合中的元素,若不包含其中,则说明还未被测试,优先将其变异并添加到集合中去,以避免下一个样本测试中对同样字段的重复测试,从而可以优先选择未测试的节点进行变异。
图5为本发明的一个实施例提供的基于文法变异的模糊测试方法中的变异策略的流程示意图。现在参看图5,
步骤S501:各个节点为输入参数;
步骤S502:判断所述未测试节点的类型为叶子节点;
步骤S503:所述未测试节点的类型包括叶子节点和中间节点,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异;
步骤S504:当所述未测试节点的类型为中间节点时,通过递归寻找其子节点进行变异;
步骤S505:输出异常数据。
对协议的模糊测试,关键是构造畸形数据来发现协议实现中的异常情况,而畸形数据的生成是通过一定变异策略对解析树中的节点进行修改,基本变异策略只是纯随机或者是仅基于类型变异,信息较为片面,本方法充分利用协议的语义特性,综合考虑相关属性规则,加强测试用例的针对性。考虑到协议字段和协议单元在文法解析树中的位置的不同,因此分别针对叶子节点(即协议字段)和中间节点(即协议单元),并结合协议特征给出相应的变异策略。
整体的变异策略是以文法解析树中各个节点为输入参数,异常数据集合为输出,首先确定当前节点是否属于叶子节点,再根据节点相应的协议字段类型利用相对应的策略进行变异;如果是中间节点,则通过递归寻找其子节点进行变异,并利用相对应的策略进行变异并存储,并将所有异常数据返回。
在具体实施中,叶子节点即协议字段,对于协议异常数据的构造要参考字段的语义属性,因此结合协议的语义属性,使用如下变异策略。
当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异包括:
分隔符变异,在字段之间或行间进行分割,通过替换、删除、增加分隔符的方式完成变异。分隔符用来标识字段分隔位置,一般由类似“//”、“/”、“:”等特殊字符构成。在协议中,通常用在字段之间或者行间分隔,它可以通过替换、删除分隔符以及增加长度的方式完成变异,替换分隔符的策略是针对字段间的单个分隔符可使用“{”、“\n”等其他不同的分隔符代替。如果长度大于1,变异数据就由相同长度的多个分隔符随机组合而成。增加分隔符的变异方法则是通过改变其原有长度大小,重复多次或生成任意长度字符串替换原有分隔符。
长度变异,通过删减或填充DATA字段数据长度,对字段的边界值进行测试或通过随机数进行替换完成变异。具有长度语义属性的字段限制了后续字段的取值范围,因此进行变异时,需要考虑约束关系,譬如某协议字段protocol Length具有长度语义属性,在对其进行变异的同时,为了尽可能的保持约束关系不变,需要适当地删减或填充DATA字段数据长度。对于这种数值类型的字段,主要通过字段的边界值进行测试,如0xffff,-1,0xff等,此外也可以通过随机数进行替换,这种异常数据往往能发现程序中的整数溢出漏洞。
计数变异,通过对所述叶子节点进行修剪或复制完成变异。具有计数属性的字段表示组成协议单元的相同字段数量,修改字段取值的同时,为满足约束条件其组成的协议字段的数量要随之变化。映射到解析树上就是对特定的节点或子树进行修剪或复制操作,计数变异也属于数值类型。
在具体实施中,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异还包括:
校验变异和协议标识变异,对数据进行变异时,重新生成校验和字段的取值。对校验和字段的变异不能采取随机方式,在对相关数据进行变异时,校验和字段的取值需要重新生成;对协议标识字段则不进行任何改变,因为在对协议进行模糊测试的过程中,即使构造了大量的畸形测试数据,但这些测试数据中的绝大部分会被协议的校验机制所拒绝,同理如果协议标识字段不一致,报文数据也会被直接舍弃,设备不会执行任何处理,这样的测试效率是极低的,所以通过特定的语义属性来限制变异策略,从而可以达到提高测试用例的通过率的效果。
格式控制变异和协议数据变异,通过随机选择数据中的一位或连续二进制序列进行翻转,随机生成多个字节组成的二进制序列,替换原有数据中的部分或全部字节。协议中的数据域一般没有任何特殊语义,其字段类型也通常以二进制为主,因此针对协议数据字段的变异方法,通过随机选择数据中的某一位或连续二进制序列进行翻转;与普通字符串类似,可能在末尾包含一个终结符,因此能够在结尾基于文法模型的协议模糊测试方法处通过删除、添加字段长度和其他字符集填充的方法进行变异;不论长度限制,随机生成多个字节组成的二进制序列,替换原有数据中的部分或全部字节。具有格式控制语义特性的字段在协议中往往也是以二进制类型的形式出现。
格式化字符串变异的策略是使用不同格式化字符串替换,若属于单个格式化字符串,则随机替换不同类型的字符串,例如将身份证号码看作一个有格式的字符串,那么变异是基于身份证的格式去进行变异。如果属于多个格式化字符串组合则随机替换,例如身份证学号、邮政编号作为3个有格式的字符串组合成一个数组,然后从中挑选1个或者2个进行变异。删除格式化字符串会影响后续字段的识别与解析,但可以通过这种变异策略来观察程序能否正确处理格式化字符串异常的情况。增加格式化字符串的方法则是在其中随机加入类似%d等特定字符串,改变长度大小。
中间节点即协议单元字段,对于协议单元的变异方法包括组合字段变异,属性规则变异和结构体变异。在具体实施中,当所述未测试节点的类型为中间节点时,使用如下变异策略。
组合字段变异,针对相邻的子节点进行组合变异操作。对于一个中间节点,其异常数据由子节点的异常数据两两组合而成,但需要保证至少出现一次,在协议报文中,两个关联字段往往相邻,因此仅针对相邻的子节点实施组合变异操作。假设协议字段A、B、C的异常数据集合分别为{A1}、{B1,B2}和{C1,C2,C3},按照正常排列顺序会产生6个用例,但若遇到较复杂的协议,就会产生组合爆炸,因此通过任意两个节点的异常数据组合至少在一个测试用例中同时出现的策略加以限制,按照这种方法生成的用例数量只有3个,再针对节点是否相邻进一步减少面向协议的用例数。
属性规则变异,执行与属性规则相反的策略进行变异。例如针对CAN协议中数据段Data的属性规则,通过更改func1的取值,将本来决定特定结构的功能码字段对应到WRITE等其他结构上,这种策略的变异可以判断程序在相关约束关系的代码实现上是否存在缺陷。
结构体变异,直接对结构体所在的解析树进行操作。例如以CAN协议中数据段中某节点变异为例,可通过更换某子树在文法分析树中的位置,或者对其子树进行修剪、复制等操作,来实现对某节点的变异。
测试用例的生成首先是进行节点的选择,接着根据上述针对选取的节点的不同类型按照相应的策略变异,在得出最终结果之前,为了构成完整有效的测试用例,需要依据属性规则对变异节点相关的节点重新计算并更新,最后输出测试用例集合。
综上所述,本发明实施例的基于文法变异的模糊测试方法,实现了基于文法模型对各个字段进行变异,避免了对相同字段进行重复测试的情况,大量减少用例的冗余;
进一步地,考虑到协议字段和协议单元在文法解析树中的位置的不同,因此分别针对叶子节点和中间节点,并结合协议特征给出相应的变异策略,首先确定当前节点是否属于叶子节点,再根据节点相应的协议字段类型利用相对应的策略进行变异,如果是中间节点,则通过递归寻找其子节点进行变异,并利用相对应的策略进行变异并存储,并将所有异常数据返回,从而充分利用协议的语义特性,综合考虑相关属性规则,加强测试用例的针对性。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种基于文法变异的模糊测试方法,其特征在于,包括以下步骤:
步骤S101:建立文法模型;
步骤S102:基于所述文法模型构建文法解析树,对协议样本数据进行解析;
步骤S103:通过所述文法解析树判断是否存在未测试节点;
若存在所述未测试节点,则执行步骤S105根据所述未测试节点的类型使用不同变异策略生成变异测试用例;
若不存在所述未测试节点,则执行步骤S104判断协议样本测试是否完全,若所述协议样本测试不完全,则重新执行步骤S102。
2.根据权利要求1所述的基于文法变异的模糊测试方法,其特征在于,所述步骤S105还包括将所述变异测试用例发送至目标系统进行测试。
3.根据权利要求1所述的基于文法变异的模糊测试方法,其特征在于,所述步骤S101中的所述建立文法模型具体包括以下步骤:
根据Knuth属性文法概念进行建模;
为每一个文法符号附加值扩展成一组属性;
对所述每一个文法符号的每个产生式配备所述一组属性的语义规则;
对所述属性进行计算和传递。
4.根据权利要求1所述的基于文法变异的模糊测试方法,其特征在于,所述步骤S102中的所述构建文法解析树具体包括以下步骤:
获取多个协议报文,通过所述文法模型和报文格式确定所述文法解析树结构,从所述报文的起始字段开始,以协议单元为中间节点,以协议字段为叶子节点,依据相应的属性规则匹配所述多个协议报文获得所述协议字段的值。
5.根据权利要求1所述的基于文法变异的模糊测试方法,其特征在于,所述步骤S103中的所述生成变异测试用例包括以下步骤:
以所述文法解析树和所述文法模型作为输入;
后序遍历所述文法解析树,变异所有可变异节点;
得到变异后的每个节点的异常数据;
对长度字段的值进行计算,提取所有叶子节点的数值;
根据协议格式进行组合得到生成的测试用例集合。
6.根据权利要求5所述的基于文法变异的模糊测试方法,其特征在于,所述步骤S103中的所述生成变异测试用例还包括以下步骤:
增加一个数据集合,对每个节点进行判断是否属于集合中的元素,若所述节点为已测试节点,则将所述已测试节点添加到所述数据集合中。
7.根据权利要求1所述的基于文法变异的模糊测试方法,其特征在于,所述未测试节点的类型包括叶子节点和中间节点,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异;当所述未测试节点的类型为中间节点时,通过递归寻找其子节点进行变异。
8.根据权利要求7所述的基于文法变异的模糊测试方法,其特征在于,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异包括:
分隔符变异,在字段之间或行间进行分割,通过替换、删除、增加分隔符的方式完成变异;或
长度变异,通过删减或填充DATA字段数据长度,对字段的边界值进行测试或通过随机数进行替换完成变异;或
计数变异,通过对所述叶子节点进行修剪或复制完成变异。
9.根据权利要求7所述的基于文法变异的模糊测试方法,其特征在于,当所述未测试节点的类型为叶子节点时,根据所述叶子节点的协议字段类型进行变异还包括:
校验变异和协议标识变异,对数据进行变异时,重新生成校验和字段的取值;或
格式控制变异和协议数据变异,通过随机选择数据中的一位或连续二进制序列进行翻转,随机生成多个字节组成的二进制序列,替换原有数据中的部分或全部字节;或
格式化字符串变异,若属于单个格式化字符串则随机替换不同类型的字符串,若属于多个格式化字符串组合则随机替换。
10.根据权利要求7所述的基于文法变异的模糊测试方法,其特征在于,当所述未测试节点的类型为中间节点时,通过递归寻找其子节点进行变异包括:
组合字段变异,针对相邻的子节点进行组合变异操作;或
属性规则变异,执行与属性规则相反的策略进行变异;或
结构体变异,直接对结构体所在的解析树进行操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211364961.1A CN115712563A (zh) | 2022-11-03 | 2022-11-03 | 一种基于文法变异的模糊测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211364961.1A CN115712563A (zh) | 2022-11-03 | 2022-11-03 | 一种基于文法变异的模糊测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115712563A true CN115712563A (zh) | 2023-02-24 |
Family
ID=85232107
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211364961.1A Pending CN115712563A (zh) | 2022-11-03 | 2022-11-03 | 一种基于文法变异的模糊测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115712563A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116909572A (zh) * | 2023-08-04 | 2023-10-20 | 上海安般信息科技有限公司 | 一种基于自定义文法的解析器及推导树代码生成系统 |
CN117435506A (zh) * | 2023-12-15 | 2024-01-23 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004061651A2 (en) * | 2003-01-07 | 2004-07-22 | International Business Machines Corporation | A method and system for dynamically creating parsers in a message broker |
CN111123888A (zh) * | 2019-12-19 | 2020-05-08 | 江苏中天科技软件技术有限公司 | 一种工控协议测试方法、系统及电子设备和存储介质 |
CN114500345A (zh) * | 2022-01-25 | 2022-05-13 | 上海安般信息科技有限公司 | 一种基于自定义协议配置的模糊测试与诊断系统 |
-
2022
- 2022-11-03 CN CN202211364961.1A patent/CN115712563A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004061651A2 (en) * | 2003-01-07 | 2004-07-22 | International Business Machines Corporation | A method and system for dynamically creating parsers in a message broker |
CN111123888A (zh) * | 2019-12-19 | 2020-05-08 | 江苏中天科技软件技术有限公司 | 一种工控协议测试方法、系统及电子设备和存储介质 |
CN114500345A (zh) * | 2022-01-25 | 2022-05-13 | 上海安般信息科技有限公司 | 一种基于自定义协议配置的模糊测试与诊断系统 |
Non-Patent Citations (1)
Title |
---|
张晶等: "《编译原理与实践》", 哈尔滨工程大学出版社, pages: 113 - 117 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116909572A (zh) * | 2023-08-04 | 2023-10-20 | 上海安般信息科技有限公司 | 一种基于自定义文法的解析器及推导树代码生成系统 |
CN116909572B (zh) * | 2023-08-04 | 2024-03-12 | 上海安般信息科技有限公司 | 一种基于自定义文法的解析器及推导树代码生成系统 |
CN117435506A (zh) * | 2023-12-15 | 2024-01-23 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
CN117435506B (zh) * | 2023-12-15 | 2024-04-16 | 中兴通讯股份有限公司 | 模糊测试方法、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115712563A (zh) | 一种基于文法变异的模糊测试方法 | |
CN111123888B (zh) | 一种工控协议测试方法、系统及电子设备和存储介质 | |
EP2609720B1 (en) | Method and apparatus for filtering streaming data | |
US8442931B2 (en) | Graph-based data search | |
CN108737384B (zh) | 用编译器生成的句法树进行比特流解码的系统和方法 | |
CA2936218C (en) | Method and apparatus for concurrent filtering of multiple components of streaming data | |
CN111176991B (zh) | 一种嵌入式软件接口用例自动化生成方法 | |
CN104506340A (zh) | 基于工业以太网故障诊断方法中决策树的创建方法 | |
CN112073420B (zh) | 一种网络协议解析方法、装置及相关设备 | |
CN110096628B (zh) | 一种基于字符串的快速匹配识别方法和装置 | |
CN112532517B (zh) | 基于领域特定语言实现ospf协议配置综合方案 | |
CN115065623B (zh) | 一种主被动相结合的私有工控协议逆向分析方法 | |
CN114153980A (zh) | 知识图谱构建方法和装置、检查方法、存储介质 | |
CN114006928A (zh) | 一种基于多协议实时通信的物联网数据处理方法 | |
KR100596409B1 (ko) | 네트워크 시뮬레이션 패키지를 위한 시뮬레이션 모델링 및분석 장치와 그 방법 | |
CN116248337A (zh) | 一种基于测试用例自动化生成的协议模糊测试方法及装置 | |
Chambart et al. | Mixing lossy and perfect fifo channels | |
CN114489594A (zh) | 一种命令解析器的构建方法、命令解析处理方法及装置 | |
Grandoni | On min-power Steiner tree | |
CN116482713A (zh) | 一种用于北斗导航接收机的导航数据校验方法 | |
CN113568598B (zh) | 基于yosys实现求和运算的FPGA逻辑综合方法及装置 | |
CN113949749B (zh) | Xml报文处理方法及装置 | |
CN114615052A (zh) | 一种基于知识编译的入侵检测方法及系统 | |
Ortner et al. | Verification of BDD normalization | |
CN112217896A (zh) | 一种json报文转换方法以及相关装置 |
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 |