1.基于流量追溯的工控协议模糊测试用例生成方法,其特征在于具体步骤如下:步骤1.配置文件读取;
步骤2.测试协议相关的协议报文提取;
步骤3.测试用例模版填充,生成测试用例脚本;
通过对真实流量进行解析、提取报文应用层数据,将报文数据转换为Python语言代码表示,注入到测试用例模版中,生成测试用例脚本,在不需要人工编写测试用例的基础上,快速进行模糊测试;同时使用多个不同类型的测试用例进行针对性和随机性的组合来对目标设备进行测试;
所述的步骤1中的配置文件使用JSON格式,包含字段:捕获的报文文件路径pcapPath、需要进行模糊测试的字段fields。
2.根据权利1所述基于流量追溯的工控协议模糊测试用例生成方法,其特征在于:步骤
2对已有协议报文文件提取测试协议相关的协议报文方法是使用传入PCAP格式的报文文件路径,读取协议信息;具体如下:步骤2-1.使用开源解析报文工具,解析报文文件,获得每一个报文的运输层、应用层的协议树状结构;每个协议的字段都会被解析成为开源库Scapy中对应的类型对象,同时对每个协议增加payload字段用于引用上一层协议数据结果,最后输出解析后的报文;
步骤2-2.对应用层的协议和运输层标志位进行判断,过滤不相关报文,提取测试相关报文。
3.根据权利2所述基于流量追溯的工控协议模糊测试用例生成方法,其特征在于:步骤
3测试用例模版填充方法会遍历已提取的协议报文,将其转换为代码表示,注入测试用例模版,最后得到测试用例脚本,其中每个脚本能够单独运行,用于对此类报文的测试,不再需要人工编写测试用例,具体实现如下:步骤3-1.将报文转换为Python语言代码表示;首先遍历协议报文,因为在步骤2-1中已经得到每个报文的运输层、应用层协议树状结构,对每个报文自下而上的递归遍历每层协议;
步骤3-2.调用转换函数将每一层协议转换为Python语言代码;转换函数根据协议字段类型不同,使用不同的转换方法:(1)针对列表型字段,遍历字段中包含的每一个元素,递归调用转换函数,最后使用中括号包含每个元素的代码表示;
(2)针对字符串型字段,将字段的每一个字符转换为十六进制表示,再使用单引号包含转换结果;
(3)针对测试配置文件中指定的字段,根据字段类型选择对应的模糊函数,对于字符串型字段,模糊函数使用特殊字符来构造字段值,同时构造超过字段长度限制的字符串来检测溢出漏洞;对于整型字段,使用字段长度范围内的模糊函数生成随机值和边界值;在选择模糊函数后,转换为RandFunc()表示的Python代码,其中RandFunc为之前选择的模糊函数;
(4)针对对象类型字段,对其每个字段递归调用转换函数,最后合并为对象构造函数代码,其中字段的转换结果作为构造函数参数传入;
步骤3-3.将Python代码表示的报文数据输出,进入步骤3-4;
步骤3-4.将步骤3-3中得到的协议报文代码表示,注入到测试用例模版中;
步骤3-5.根据步骤2中提取的测试相关协议报文,按顺序连接成图模型,其中的节点是每个需要发送的报文;最后将图模型的代码注入测试用例模版后写入文件,得到测试用例脚本文件。