本申请涉及工业控制系统安全领域,尤其涉及一种智能化plc协议格式推断方法、模糊测试方法及装置。
背景技术:
1、工控协议是一种二进制协议并且由于工控设备的私有性,绝大多数厂家并不公开协议的格式。倘若不按照协议格式进行随机变异,生成的测试用例大多是无法成功通过系统的语法检测的。现有工作对于协议格式的推断大多通过协议逆向,但是协议逆向耗费的时间成本和人力资源是巨大的,且需要大量的专家知识作为前提,并且协议逆向作为一项手工技术是无法做到可延展和自动化的。
2、模糊测试是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,以发现可能的程序错误。协议模糊测试是指以协议交互作为测试手段,生成与所选协议规则相符合的协议,即测试用例,通过向被测对象发送测试用例来进行模糊测试,以发现被测设备固件中可能存在的bug。
3、然后,针对plc协议模糊测试存在着以下两点局限:(1)没有固定的语法结构,大部分plc的协议结构都是各不相同的,在语法结构上存在较大的差异性;即使在同一个协议中,也存在大量不同的功能码,不同功能码之间的语法结构同样具有较大差异。(2)大部分专有协议并不公开格式,并且协议格式较为复杂,如果生成的测试用例无法满足语法检测,那么无法正常被系统接收。通常可以通过设计生成模型来解决此类问题,但由于格式位置难以设计对应的语法模型来生成测试用例。
技术实现思路
1、本申请实施例的目的是提供一种智能化plc协议格式推断方法、模糊测试方法及装置,以解决现有技术中由于无法获取格式而导致生成的测试用例大多是无效的问题、以及模糊测试效率低的问题。本申请在仅获得部分初始协议作为输入的条件下,可实现对plc的高效模糊测试。
2、根据本申请实施例的第一方面,提供一种基于响应信息的智能化plc协议格式推断方法,包括;
3、s1:通过上位机软件与plc交互获取涵盖所有功能的通信协议作为初始种子库;
4、s2:从所述初始种子库中依次选取通信协议,按照固定的变异策略,先进行单字节的确定性变异生成第一测试用例,并将所述第一测试用例发送给plc;
5、s3:响应于所述第一测试用例,接收plc返回的第一响应协议,将所述第一响应协议按字节顺序以树的数据结构保存为协议树;
6、s4:将进行单字节确定性变异后的字节与之后的字节逐个累加在一起再次进行确定性变异,生成第二测试用例,并将所述第二测试用例发送给plc;
7、s5:响应于所述第二测试用例,接收plc返回的第二响应协议,将所述第二响应协议逐个加入所述协议树中,如果某一条第二响应协议在所述协议树中添加了新的节点,或者某一条第二响应协议并不存在于所述协议树中,则认为该第二响应协议是有价值的;
8、s6:如果累加的字节变异后产生了有价值的响应,则说明此字节与之前的字节语义不同,在此处对协议格式进行划分;如果累加一定数量的字节仍然没有出现有价值的响应,则按照相反的方向再次累加字节,重复s2到s5。
9、可选的,所述固定的变异策略包括bit flip、arithmetic、interesting value。
10、可选的,将所述第一响应协议按字节顺序以树的数据结构保存为协议树,包括:
11、树的根节点只作为起点,不储存所述第一响应协议的内容;
12、每个树的节点储存所述第一响应协议的一个字节,同时包含一个计数器。
13、根据本申请实施例的第二方面,提供一种基于响应信息的智能化plc协议格式推断装置,包括;
14、获取模块,用于通过上位机软件与plc交互获取涵盖所有功能的通信协议作为初始种子库;
15、第一生成模块,用于从所述初始种子库中依次选取通信协议,按照固定的变异策略,先进行单字节的确定性变异生成第一测试用例,并将所述第一测试用例发送给plc;
16、保存模块,用于响应于所述第一测试用例,接收plc返回的第一响应协议,将所述第一响应协议按字节顺序以树的数据结构保存为协议树;
17、第二生成模块,用于将进行单字节确定性变异后的字节与之后的字节逐个累加在一起再次进行确定性变异,生成第二测试用例,并将所述第二测试用例发送给plc;
18、第一判断模块,用于响应于所述第二测试用例,接收plc返回的第二响应协议,将所述第二响应协议逐个加入所述协议树中,如果某一条第二响应协议在所述协议树中添加了新的节点,或者某一条第二响应协议并不存在于所述协议树中,则认为该第二响应协议是有价值的;
19、第二判断模块,用于如果累加的字节变异后产生了有价值的响应,则说明此字节与之前的字节语义不同,在此处对协议格式进行划分;如果累加一定数量的字节仍然没有出现有价值的响应,则按照相反的方向再次累加字节,重复第一生成模块到第一判断模块。
20、根据本申请实施例的第三方面,提供一种模糊测试方法,包括:
21、执行第一方面所述的基于响应信息的智能化plc协议格式推断方法;
22、对协议格式进行划分后,得到每条协议中不同语义的各个字段的边界位置,以边界位置作为单位进行变异,生成测试用例,向被测对象发送所述测试用例来进行模糊测试。
23、根据本申请实施例的第四方面,提供一种模糊测试装置,包括:
24、执行模块,用于执行第一方面所述的基于响应信息的智能化plc协议格式推断方法;
25、测试模块,用于对协议格式进行划分后,得到每条协议中不同语义的各个字段的边界位置,以边界位置作为单位进行变异,生成测试用例,向被测对象发送所述测试用例来进行模糊测试。
26、根据本申请实施例的第五方面,提供一种电子设备,包括:
27、一个或多个处理器;
28、存储器,用于存储一个或多个程序;
29、当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的方法。
30、根据本申请实施例的第六方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
31、本申请的实施例提供的技术方案可以包括以下有益效果:
32、本申请采用基于响应信息的智能推断方法,克服二进制私有协议格式未知的局限性,进而使得模糊测试能够产生更多符合语法要求的输入,提高了模糊测试的漏洞挖掘效率。
33、采用协议树的存储结构,克服存储协议所造成的空间资源浪费,进而便于比对协议的独特性,同时能够建立协议和请求一一对应的关系,为漏洞复现提供便利。
34、采用了正向推理后再进行一次反向推理的方法,克服变异功能码导致响应太过丰富而产生的误差,进而能够得到更为精确的格式划分。
35、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
1.一种基于响应信息的智能化plc协议格式推断方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述固定的变异策略包括bit flip、arithmetic、interestingvalue。
3.根据权利要求1所述的方法,其特征在于,将所述第一响应协议按字节顺序以树的数据结构保存为协议树,包括:
4.一种基于响应信息的智能化plc协议格式推断装置,其特征在于,包括;
5.根据权利要求4所述的装置,其特征在于,所述固定的变异策略包括bit flip、arithmetic、interestingvalue。
6.根据权利要求4所述的装置,其特征在于,将所述第一响应协议按字节顺序以树的数据结构保存为协议树,包括:
7.一种模糊测试方法,其特征在于,包括:
8.一种模糊测试装置,其特征在于,包括:
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-3、7中任一项所述方法的步骤。