CN114063606A - Plc协议模糊测试方法及装置、电子设备、存储介质 - Google Patents
Plc协议模糊测试方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN114063606A CN114063606A CN202210038505.1A CN202210038505A CN114063606A CN 114063606 A CN114063606 A CN 114063606A CN 202210038505 A CN202210038505 A CN 202210038505A CN 114063606 A CN114063606 A CN 114063606A
- Authority
- CN
- China
- Prior art keywords
- plc
- seed
- deterministic
- mutation
- tested
- 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
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B23/00—Testing or monitoring of control systems or parts thereof
- G05B23/02—Electric testing or monitoring
- G05B23/0205—Electric testing or monitoring by means of a monitoring system capable of detecting and responding to faults
- G05B23/0218—Electric testing or monitoring by means of a monitoring system capable of detecting and responding to faults characterised by the fault detection method dealing with either existing or incipient faults
- G05B23/0221—Preprocessing measurements, e.g. data collection rate adjustment; Standardization of measurements; Time series or signal analysis, e.g. frequency analysis or wavelets; Trustworthiness of measurements; Indexes therefor; Measurements using easily measured parameters to estimate parameters difficult to measure; Virtual sensor creation; De-noising; Sensor fusion; Unconventional preprocessing inherently present in specific fault detection methods like PCA-based methods
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Automation & Control Theory (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种PLC协议模糊测试方法及装置、电子设备、存储介质,包括:构建种子库;从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;将所述确定性变异用例作为请求报文发送给被测PLC;如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;将所述随机变异用例作为请求报文发送给被测PLC;接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。模糊测试效率得到显著提升。
Description
技术领域
本申请涉及工业控制系统安全领域,尤其涉及一种PLC协议模糊测试方法及装置、电子设备、存储介质。
背景技术
可编程逻辑控制器(PLC)是广泛应用于各种工业控制系统的基本部件,大多数PLC提供了专有且可编程的TCP/IP连接配置,如果没有额外硬件限制通信,这种简化使得用户能够远程访问这些设备,同时,攻击者也可能直接与PLC进行交互。因此,有必要分析控制系统与集成开发环境(IDE)之间的通信,模糊专有的工业协议,以发现安全问题。
模糊测试是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,以发现可能的程序错误。协议模糊测试是指以协议报文交互作为测试手段,生成与所选协议规则相符合的报文,即测试用例,通过向被测对象发送测试用例来进行模糊测试,以发现被测设备固件中可能存在的bug。
然后,针对PLC协议模糊测试存在着以下两点局限:
(1)无法获取代码覆盖率,导致难以对模糊测试的结果进行分类,因此也无法对后续的变异进行指导,导致难以产生更为高效的测试用例。
(2)没有固定的语法结构,大部分PLC的协议结构都是各不相同的,在语法结构上存在较大的差异性;即使在同一个协议中,也存在大量不同的功能码,不同功能码之间的语法结构同样具有较大差异。因此难以设计对应的语法模型来生成测试用例。
由于上述两点局限的存在,模糊测试运行过程中只能盲目的增加字段长度和种类,耗费大量时间产生新的输入但是仍然无法触发新的分支。尽管能够定位到触发bug的种子文件,但是无法对其有效利用,指导生成更能够触发漏洞的种子。因此PLC协议模糊测试没有反馈的指导,无法提高种子文件的质量,难以高效进行测试。
发明内容
本申请实施例的目的是提供一种PLC协议模糊测试方法及装置、电子设备、存储介质,以解决相关技术中存在的测试效率低的技术问题。
根据本申请实施例的第一方面,提供一种PLC协议模糊测试方法,其特征在于,包括:
构建种子库;
从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;
将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;
将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;
如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;
将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
进一步地,构建种子库,包括:
获取被测PLC的通信报文;
从所述通信报文中选出包含被测功能码的报文,所述被测功能码为被测PLC的读取数据功能码;
将包含被测功能码的报文的载荷加入种子库。
进一步地,从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例,包括:
从所述种子库中选取还未进行过确定性变异的种子;
按照确定性变异的变异策略,对所述种子从种子的头部开始逐位、逐字节、逐字、逐双字进行变异,生成确定性变异用例。
进一步地,从所述种子库中随机选取种子进行随机变异,生成随机变异用例,包括:
从所述种子库中随机选定某个种子中的随机字段,采用随机变异的变异策略进行随机变异,生成随机变异用例。
进一步地,还包括:
监测与被测PLC之间的网络连接状态,当连接异常中断,说明被测PLC发生异常,记录此时正在发送的请求报文,随后重启被测PLC并重新建立连接。
进一步地,还包括:
当发送的请求报文的总数每次达到设定阈值时,合并树中的部分节点,并对树中路径进行裁剪。
进一步地,合并树中的部分节点,并对树中路径进行裁剪,包括:
当某个节点的子节点数量超过阈值时,将该节点的若干个子节点合并为一个,并保留每个子节点原本的取值;
对树中的每个节点,综合考虑子节点数量及在树中的深度,计算综合评分;
当所述综合评分超过阈值时,将以树中以该节点为根的子树完全删除,仅保留该子树的根节点。
根据本申请实施例的第二方面,提供一种PLC协议模糊测试装置,包括:
构建模块,用于构建种子库;
第一变异模块,用于从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;
第一发送模块,用于将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
第二变异模块,用于如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;
第二发送模块,用于将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
接收模块,用于接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;
判断模块,用于如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;
更新模块,用于将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
根据本申请实施例的第三方面,提供一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的方法。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如第一方面所述方法的步骤。
本申请的实施例提供的技术方案可以包括以下有益效果:
由上述实施例可知,相比传统模糊测试方法,本发明利用PLC通信时的响应报文,指导测试用例的生成,减小了对于协议语义信息的依赖;使用树的数据结构存储PLC的响应报文,提升了模糊测试效率;相比传统工具,本发明方法的模糊测试效率得到显著提升。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是根据一示例性实施例示出的一种PLC协议模糊测试方法的流程图。
图2是根据一示例性实施例示出的步骤S11的流程图。
图3是根据一示例性实施例示出的步骤S12的流程图。
图4是根据一示例性实施例示出的步骤S16中将响应报文以树的数据结构进行保存的示例框图。
图5是根据一示例性实施例示出的步骤S17中有价值的响应报文加入到树中的示例框图。
图6是根据一示例性实施例示出的步骤S19的流程图。
图7是根据一示例性实施例示出的步骤S20的流程图。
图8是根据一示例性实施例示出的步骤S20的流程子图。
图9是根据一示例性实施例示出的步骤201中树的合并操作示例框图。
图10是根据一示例性实施例示出的步骤203中树的裁剪操作示例框图。
图11是根据一示例性实施例示出的一种PLC协议模糊测试装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
图1是根据一示例性实施例示出的一种PLC协议模糊测试方法的流程图,如图1所示,该方法应用于终端中,可以包括以下步骤S11-步骤S18。
步骤S11,构建种子库。
已有的方法通常需要预先定义好协议字段的组成结构,然后根据此结构生成测试用例,而忽视了对模糊测试结果反馈的搜集和利用。而高质量的种子能帮助我们进一步指导新输入的生成,所以在不影响程序执行速度的情况下,搜集高质量输入,并以此作为新的种子文件是非常有意义的。因此有必要对模糊测试的种子进行搜集,并根据报文的反馈信息制定筛选标准,自动更新能够提高模糊测试程序覆盖率的种子库,使得PLC 协议模糊测试突破传统方法中不对反馈信息进行利用的弊端,高效运行并且不断更新种子库,有效提高覆盖率从而挖掘更多漏洞。
在一可能的实现方式中,参考图2,步骤S11,构建种子库,可以包括以下步骤:
步骤S111,获取被测PLC的通信报文;
以某品牌的某款PLC作为被测对象,将该被测PLC的读取数据功能码作为被测功能码。通过Wireshark等抓包软件抓取被测PLC的通信报文。
步骤S112,从所述通信报文中选出包含被测功能码的报文,所述被测功能码为被测PLC的读取数据功能码;
步骤S113,将包含被测功能码的报文的载荷加入种子库。
步骤S12,从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例。
通过确定性变异,将种子库中的所有种子进行确定性变异,生成确定性变异用例。
具体地,参考图3,该步骤S12可以包括以下子步骤:
步骤S121,从所述种子库中选取还未进行过确定性变异的种子;
具体地,从种子库中储存的所有未进行过确定性变异的报文的载荷中,随机选取一个,准备进行变异操作。例如,此处随机选取种子载荷内容为“\x20\x01\x13\x00\x00\x00\x00\x00\x64\x00”,“\x20”代表一个字节,其值为十六进制数20,其它字节以此类推。
步骤S122,按照确定性变异的变异策略,对所述种子从种子的头部开始逐位、逐字节、逐字、逐双字进行变异,生成确定性变异用例。
具体地,对步骤S121中选中的种子,按照固定的变异策略,对种子的内容进行变异。可以指定某些字节不参与变异,亦可不指定,此处指定种子的第一个字节不参与变异。
人为指定不参与变异的字节的好处在于可以提升测试效果,某些字节,例如功能码,在变异后有较大概率产生无效的变异用例,将这些字节固定,可以提高有效变异用例的占比,提升测试效果。
逐位、逐字节、逐字、逐双字的变异方式的好处在于可以尽可能全面地涵盖变异的可能性,同时不至于使变异产生的变异用例数量过多。
这里确定性变异的变异策略包括以下几种:
bitflip:翻转种子中的某个位、字节、或字。
arithmetic:对种子中的某个字节、字、或双字加减一定数值,默认为20。
interesting value:使用特定的数值替换种子中的某个字节、字、或双字;特定数值包括0、最大值等,例如将某个字节替换为最大值,即0xFF。
确定性变异从种子的头部开始,逐位、逐字节、逐字、逐双字应用上述策略。
步骤S13,将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文。
具体地,以步骤S121中选中的种子为例,该种子经过interesting value变异策略产生的变异用例之一为“\x20\x01\x13\xFF\xFF\xFF\xFF\x00\x64\x00”,将该变异用例作为请求报文的内容发送给被测PLC,接收到被测PLC返回响应“\xFD\x90\x91\x4D\x9E\x12\x00\x13\xFF\x00\x00”。
步骤S14,如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例。
从所述种子库中随机选定某个种子中的随机字段,采用随机变异的变异策略进行随机变异,生成随机变异用例。
随机变异的变异策略可以包括:bitflip、arithmetic、interesting value、随机数值。其中:
bitflip、arithmetic、interesting value策略与确定性变异的变异策略中的相同。
随机数值:使用随机数值替换种子中的某个字节。
随机变异环节与确定性变异的变异策略的区别在于,确定性变异的变异策略从种子的头部开始逐位应用所有变异策略,没有随机成分。而随机变异环节每次循环随机选定某个种子中的随机字段,并随机应用一个策略,具有不确定性。
步骤S15,将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文。
具体地,以步骤S121中选中的种子为例,该种子经过随机数值变异策略产生的用例之一为“\x00\x20\x17\x13\x00\x00\x00\x00\x00\x64\x00”,将该变异用例作为请求报文的内容发送给被测PLC,接收到被测PLC返回响应报文“\xFD\x86\x80\x7C\x9E\x12\x00\x17\x00\x00\x00”。
步骤S16,接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存。
具体地,以步骤S13、S15中,从被测PLC返回的响应报文为例,将这两条响应以树的数据结构存储。将响应报文中的每个字节作为一个节点,按照顺序依次连接,存储在树中,如图4所示,由于响应报文内容较长,此处仅在图中列出响应报文的前几个字节。
使用树的数据结构存储报文的好处在于,可以将响应报文中部分相同的字节使用同一个节点存储,与逐条保存响应报文内容的方法相比,可以有效节约存储空间,提高运行效率。
树的根节点不储存数据,仅作为起点,除根节点之外的每个节点储存某条响应报文的一个字节,如果某个字节B是另一个字节A的子节点,则代表在某条响应中,字节B是字节A的下一个字节。同时,每个树的节点包含一个计数器。
每当一条响应报文加入时,将其载荷的第一个字节保存为根节点的子节点,如果该字节的子节点已经存在,则增加该节点的计数器数目,不添加新的节点;第二个字节以同样方法保存为第一个节点的子节点(或增加已有节点的计数器数目),以此类推,直至全部载荷加入到树中。
步骤S17,如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的。
具体地,如图4所示,图4为树中已有的内容,此时在树中加入一条新的响应报文“\xFD\x86\x80\x7C\x9E\x20\x01”,如图5所示,此时树中增添了新的节点,因此该响应报文是有价值的。
判断响应报文是否有价值是为了保证变异生成的变异用例的能够尽可能多地触发被测PLC的不同类型的响应报文,触发的响应类型越多,覆盖率即越高,就越可能触发被测PLC中潜在的漏洞。
步骤S18,将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
参考图6,为了记录被测PLC在测试过程中发生的异常,一示例性实施例示出了一种PLC协议模糊测试方法,该方法还包括:
步骤S19,监测与被测PLC之间的网络连接状态,当连接异常中断,说明被测PLC发生异常,记录此时正在发送的请求报文,随后重启被测PLC并重新建立连接。该步骤可以步骤S13之后或步骤15之后执行。
具体地,当向被测PLC发送某条请求报文后,触发了PLC中的漏洞,PLC死机,网络连接异常中断。记录该请求报文后,向被测PLC发送重启指令,重启PLC。重启指令由于与被测PLC的品牌型号相关,因此需要由用户根据被测PLC的品牌型号自行定义。
连接状态监测的作用在于确认何时触发了被测PLC的漏洞,同时确保在触发漏洞时能够第一时间记录下触发漏洞的请求报文。
参考图7,为了优化模糊测试的效果,一示例性实施例示出了一种PLC协议模糊测试方法,该方法还包括:
步骤S20,当发送的请求报文的总数每次达到设定阈值时,合并树中的部分节点,并对树中路径进行裁剪。该步骤可以在完成步骤S13和步骤15之后执行,也可在最后一个步骤执行。
例如,每发送5000条请求报文,即进行一次合并、裁剪操作。设定阈值可以根据需求自行调整。
树的合并与裁剪操作的目的在于减小树的规模,优化模糊测试效果。由于合并与裁剪操作需要花费相对较长的时间,因此不能随时进行。每隔一定数量的请求报文之后才进行一次树的合并与裁剪操作的好处在于,在优化模糊测试效果的同时,尽可能减少了对模糊测试程序运行速度的影响。
参考图8,具体地,合并树中的部分节点,并对树中路径进行裁剪,包括:
步骤S201,当某个节点的子节点数量超过阈值时,将该节点的若干个子节点合并为一个,并保留每个子节点原本的取值;
具体地,如图9所示,本实施例中定义合并阈值为128,此时树中的“9E”节点下有129个子节点,节点值分别为十六进制的0,1,2……80,子节点数量超过了阈值128,因此将这129个节点合并为一个。合并后如图9下半所示,此时树中的“9E”节点下只有一个节点,该节点的值为(0,1,2,……80),即被合并的129个节点的值。
树的合并操作的好处在于,可以消除树中过于细碎的分支,减少树的分支数,对于响应报文中可能存在的随机变化的字节有较好的处理能力,从而提升模糊测试的效果。
步骤S202,对树中的每个节点,综合考虑子节点数量及在树中的深度,计算综合评分;
具体地,如图10所示,此时树中的“9E”节点下有256个子节点,节点值分别为十六进制的0,1,2……FF。节点在树中的深度指节点距离树的根节点有几个节点,本实施例中,节点“9E”距离根节点有5个节点,即深度为5,据此计算综合评分。
计算综合评分的好处在于综合考虑了节点的深度和子节点数量带来的影响。
按以下公式计算综合评分:
步骤S203,当所述综合评分超过阈值时,将以树中以该节点为根的子树完全删除,仅保留该子树的根节点。
具体地,本实施例中定义裁剪阈值为240,节点“9E”的评分为256+3*5=271,大于阈值240,因此将以节点“9E”为根的子树完全删除,仅保留节点“9E”,如图10下半所示。
另外,当某个节点同时满足合并与裁剪的条件时,则只进行裁剪。
引入裁剪操作的好处在于,对于被测PLC返回的长响应报文,可以减短其长度,避免树的深度过大,防止模糊测试的运行效率下降。
为了对被测PLC进行充分的测试,以发现被测PLC可能存在的漏洞,重复步骤S12到步骤S20的流程。上述模糊测试流程反复循环,流程的终止条件主要包括两个:用户发出停止命令;被测PLC发生不可恢复的错误,例如PLC崩溃,连接断开。
相比传统模糊测试方法,本发明利用PLC通信时的响应报文,指导测试用例的生成,减小了对于协议语义信息的依赖;使用树的数据结构存储PLC的响应报文,提升了模糊测试效率;相比传统工具,本发明方法的模糊测试效率及效果得到显著提升。
与前述的PLC协议模糊测试方法的实施例相对应,本申请还提供了PLC协议模糊测试装置的实施例。
图11是根据一示例性实施例示出的一种PLC协议模糊测试装置框图。参照图11,该装置包括:
构建模块21,用于构建种子库;
第一变异模块22,用于从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;
第一发送模块23,用于将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
第二变异模块24,用于如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;
第二发送模块25,用于将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
接收模块26,用于接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;
判断模块27,用于如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;
更新模块28,用于将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
相应的,本申请还提供一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述的PLC协议模糊测试方法。
相应的,本申请还提供一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如上述的PLC协议模糊测试方法。
本领域技术人员在考虑说明书及实践这里公开的内容后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (10)
1.一种PLC协议模糊测试方法,其特征在于,包括:
构建种子库;
从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;
将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;
将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;
如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;
将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
2.根据权利要求1所述的方法,其特征在于,构建种子库,包括:
获取被测PLC的通信报文;
从所述通信报文中选出包含被测功能码的报文,所述被测功能码为被测PLC的读取数据功能码;
将包含被测功能码的报文的载荷加入种子库。
3.根据权利要求1所述的方法,其特征在于,从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例,包括:
从所述种子库中选取还未进行过确定性变异的种子;
按照确定性变异的变异策略,对所述种子从种子的头部开始逐位、逐字节、逐字、逐双字进行变异,生成确定性变异用例。
4.根据权利要求1所述的方法,其特征在于,从所述种子库中随机选取种子进行随机变异,生成随机变异用例,包括:
从所述种子库中随机选定某个种子中的随机字段,采用随机变异的变异策略进行随机变异,生成随机变异用例。
5.根据权利要求1所述的方法,其特征在于,还包括:
监测与被测PLC之间的网络连接状态,当连接异常中断,说明被测PLC发生异常,记录此时正在发送的请求报文,随后重启被测PLC并重新建立连接。
6.根据权利要求1所述的方法,其特征在于,还包括:
当发送的请求报文的总数每次达到设定阈值时,合并树中的部分节点,并对树中路径进行裁剪。
7.根据权利要求6所述的方法,其特征在于,合并树中的部分节点,并对树中路径进行裁剪,包括:
当某个节点的子节点数量超过阈值时,将该节点的若干个子节点合并为一个,并保留每个子节点原本的取值;
对树中的每个节点,综合考虑子节点数量及在树中的深度,计算综合评分;
当所述综合评分超过阈值时,将以树中以该节点为根的子树完全删除,仅保留该子树的根节点。
8.一种PLC协议模糊测试装置,其特征在于,包括:
构建模块,用于构建种子库;
第一变异模块,用于从所述种子库中选取还未进行过确定性变异的种子进行确定性变异,生成确定性变异用例;
第一发送模块,用于将所述确定性变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
第二变异模块,用于如果所述种子库中的所有种子均已进行过确定性变异,则从所述种子库中随机选取种子进行随机变异,生成随机变异用例;
第二发送模块,用于将所述随机变异用例作为请求报文发送给被测PLC,以使得所述被测PLC收到所述请求报文后返回响应报文;
接收模块,用于接收被测PLC返回的响应报文,将所述响应报文以树的数据结构进行保存;
判断模块,用于如果某一条响应报文在所述树的数据结构中添加了新的节点,则认为该响应报文是有价值的;
更新模块,用于将有价值的响应报文对应的请求报文储存至种子库中,以更新所述种子库。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210038505.1A CN114063606B (zh) | 2022-01-13 | 2022-01-13 | Plc协议模糊测试方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210038505.1A CN114063606B (zh) | 2022-01-13 | 2022-01-13 | Plc协议模糊测试方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114063606A true CN114063606A (zh) | 2022-02-18 |
CN114063606B CN114063606B (zh) | 2022-06-21 |
Family
ID=80231129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210038505.1A Active CN114063606B (zh) | 2022-01-13 | 2022-01-13 | Plc协议模糊测试方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114063606B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116841243A (zh) * | 2023-06-19 | 2023-10-03 | 浙江大学 | 一种智能化plc协议格式推断方法、模糊测试方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20010000267A (ko) * | 2000-08-31 | 2001-01-05 | 안병엽 | 동적 프로토콜 적합성 시험 방법 및 장치 |
CN106330601A (zh) * | 2016-08-19 | 2017-01-11 | 北京匡恩网络科技有限责任公司 | 测试用例生成方法及装置 |
CN107241226A (zh) * | 2017-06-29 | 2017-10-10 | 北京工业大学 | 基于工控私有协议的模糊测试方法 |
CN107665191A (zh) * | 2017-10-19 | 2018-02-06 | 中国人民解放军陆军工程大学 | 一种基于扩展前缀树的私有协议报文格式推断方法 |
CN109101422A (zh) * | 2018-07-24 | 2018-12-28 | 北京理工大学 | 一种基于afl的模糊测试变异方法和装置 |
CN111123888A (zh) * | 2019-12-19 | 2020-05-08 | 江苏中天科技软件技术有限公司 | 一种工控协议测试方法、系统及电子设备和存储介质 |
KR102209676B1 (ko) * | 2020-07-20 | 2021-01-28 | 세종대학교산학협력단 | 펌웨어 퍼징 장치 및 방법 |
CN112395209A (zh) * | 2021-01-21 | 2021-02-23 | 博智安全科技股份有限公司 | 工控协议模糊测试用例生成方法、装置、设备及存储介质 |
CN113886225A (zh) * | 2021-09-18 | 2022-01-04 | 国网河南省电力公司电力科学研究院 | 一种面向未知工控协议的模糊测试系统和方法 |
-
2022
- 2022-01-13 CN CN202210038505.1A patent/CN114063606B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20010000267A (ko) * | 2000-08-31 | 2001-01-05 | 안병엽 | 동적 프로토콜 적합성 시험 방법 및 장치 |
CN106330601A (zh) * | 2016-08-19 | 2017-01-11 | 北京匡恩网络科技有限责任公司 | 测试用例生成方法及装置 |
CN107241226A (zh) * | 2017-06-29 | 2017-10-10 | 北京工业大学 | 基于工控私有协议的模糊测试方法 |
CN107665191A (zh) * | 2017-10-19 | 2018-02-06 | 中国人民解放军陆军工程大学 | 一种基于扩展前缀树的私有协议报文格式推断方法 |
CN109101422A (zh) * | 2018-07-24 | 2018-12-28 | 北京理工大学 | 一种基于afl的模糊测试变异方法和装置 |
CN111123888A (zh) * | 2019-12-19 | 2020-05-08 | 江苏中天科技软件技术有限公司 | 一种工控协议测试方法、系统及电子设备和存储介质 |
KR102209676B1 (ko) * | 2020-07-20 | 2021-01-28 | 세종대학교산학협력단 | 펌웨어 퍼징 장치 및 방법 |
CN112395209A (zh) * | 2021-01-21 | 2021-02-23 | 博智安全科技股份有限公司 | 工控协议模糊测试用例生成方法、装置、设备及存储介质 |
CN113886225A (zh) * | 2021-09-18 | 2022-01-04 | 国网河南省电力公司电力科学研究院 | 一种面向未知工控协议的模糊测试系统和方法 |
Non-Patent Citations (6)
Title |
---|
刘永金 等: "一种西门子S7私有协议的Fuzzing漏洞检测方法", 《上海电力大学学报》 * |
吴丹丹: "面向工控协议的模糊测试方法研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
段斌: "基于动态污点分析的工控设备硬件漏洞挖掘方法研究", 《技术研究》 * |
赖英旭 等: "基于模糊测试的工控网络协议漏洞挖掘方法", 《计算机集成制造系统》 * |
邵帅: "基于模糊测试的工控PLC系统漏洞挖掘技术研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
项力 等: "基于遗传算法的Modbus TCP协议模糊测试技术研究", 《船舶电子工程》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116841243A (zh) * | 2023-06-19 | 2023-10-03 | 浙江大学 | 一种智能化plc协议格式推断方法、模糊测试方法及装置 |
CN116841243B (zh) * | 2023-06-19 | 2024-01-09 | 浙江大学 | 一种智能化plc协议格式推断方法、模糊测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114063606B (zh) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9602340B2 (en) | Performance monitoring | |
US8739145B2 (en) | Super nested block method to minimize coverage testing overhead | |
CN114063606B (zh) | Plc协议模糊测试方法及装置、电子设备、存储介质 | |
CN107113199B (zh) | 用于分析和处理通信序列的分析装置 | |
CN112052156B (zh) | 一种模糊测试方法、装置和系统 | |
CN112288249A (zh) | 业务流程执行方法、装置、计算机设备和介质 | |
CN105512562B (zh) | 一种漏洞挖掘方法、装置及电子设备 | |
CN110955604B (zh) | 一种信息显示方法、装置、服务器及存储介质 | |
CN113934621A (zh) | 模糊测试方法、系统、电子设备及介质 | |
CN110554877A (zh) | 一种json数据解析方法、装置、设备及储存介质 | |
Kranzlmüller et al. | NOPE: A nondeterministic program evaluator | |
CN110347572B (zh) | 一种性能日志输出方法、装置、系统、设备及介质 | |
CN112069052B (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN116094850A (zh) | 基于系统状态追踪图引导的网络协议漏洞检测方法及系统 | |
CN114706778A (zh) | 云服务api的模糊测试方法和装置 | |
CN106445784B (zh) | 一种信息监控方法及装置 | |
CN114840418A (zh) | 模糊测试方法及装置 | |
KR101866826B1 (ko) | 게임 서버의 운용 에스펙트 호출 방법 | |
CN116933272B (zh) | 一种游戏漏洞实时分析方法、装置及系统 | |
CN114785847B (zh) | 网络控制软件开发配置方法、终端及存储介质 | |
US11921603B2 (en) | Automated interoperational tracking in computing systems | |
CN112827183B (zh) | 一种游戏数据处理的方法和装置 | |
CN114968714A (zh) | 基于链表的节点数据整合方法、系统、终端及存储介质 | |
CN117857336A (zh) | 配置信息的发送、装置、电子设备和存储介质 | |
CN117873446A (zh) | 工单链路追踪方法、装置、设备及介质 |
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 |