一种工控协议测试方法、系统及电子设备和存储介质与流程

文档序号:20669089发布日期:2020-05-08 17:09阅读:176来源:国知局
一种工控协议测试方法、系统及电子设备和存储介质与流程

本申请涉及工控系统技术领域,更具体地说,涉及一种工控协议测试方法、系统及一种电子设备和一种计算机可读存储介质。



背景技术:

工业控制系统(industrialcontrolsystems,ics)通常是由计算机设备和工业生产控制部件组成的系统,工业控制系统是电力、冶金、交通、能源等工业基础设施的核心组成部分,也是国民经济、社会运行和国家安全的重要基础。工业控制系统与互联网技术深度融合,工业控制系统中越来越多的通用协议取代私有协议,大量采用通用硬件和通用软件,使其不再是一个独立封闭的系统,开放性与日俱增,因此系统安全漏洞和缺陷容易被攻击者所利用,导致工控系统的安全问题更加突显。工业控制系统的脆弱性归根结底就是漏洞问题,安全漏洞是工控系统面临的首要安全问题,根据历年公开的ics漏洞数量来看,工控安全漏洞逐年增加。

面向工控系统的网络与信息安全攻击呈高级定制化趋势,攻击机理复杂、隐蔽性高、专业性强,工控协议安全缺陷成为新的攻击目标。工控系统的安全策略配置不完善、安全更新不及时、安全防护不到位等问题,使得系统存在被入侵的风险,但由于面向工控系统的科学、系统化的攻击仿真验证技术缺失,一方面导致无法及时有效的识别工控系统的攻击入侵行为,另一方面也会制约工控安全防护措施的适用性与防御有效性。工控系统的入侵攻击与传统信息系统攻击相比存在较大差异,需要深入了解工控业务逻辑,进行深度定制,通过恶意控制指令的模拟实现对系统的破坏,而目前由于工控通信协议注重实时性,部分典型工控通信协议缺乏安全机制,使工控控制命令易被伪造,威胁工控设备安全稳定运行,为此,如何对工控协议进行安全性分析以提高电力工控系统协议层面安全威胁的应对能力是本领域技术人员需要解决的问题。



技术实现要素:

本申请的目的在于提供一种工控协议测试方法、系统及一种电子设备和一种计算机可读存储介质,提升了工控系统协议脆弱性分析能力以及电力工控系统协议层面安全威胁的应对能力。

为实现上述目的,本申请提供了一种工控协议测试方法,包括:

获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;

对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;

基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;

利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。

可选的,所述获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树,包括:

获取文法描述模型和工控协议样本数据,并接收用户输入的起始字段;

判断所述起始字段是否为所述文法描述模型中的起始字段;

如果是,则将所述起始字段创建为所述文法解析树的根节点;

在所述文法描述模型的产生式集合中查找以所述起始字段作为起始字段的目标产生式集合;

依次对所有所述目标产生式集合进行处理,得到文法解析树中每层的各个节点;

根据所述工控协议样本数据确定所述各个节点的属性值,构建生成对应的文法解析树。

可选的,所述构建生成对应的文法解析树之后,还包括:

对所述文法解析树进行遍历,对比所述文法解析树中的每个节点是否存在子节点与节点自身相同;

如果是,则将所述子节点作为当前节点的父节点的子节点,并删除所述当前节点。

可选的,所述基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,包括:

判断所述未测试节点的节点类型是否为叶子节点或中间节点;

若所述未测试节点的节点类型为叶子节点,则根据所述未测试节点的字段属性选择对应的变异策略进行变异处理;

若所述未测试节点的节点类型为中间节点,则对所述未测试节点进行结构内变异处理或结构体变异处理。

可选的,所述若所述未测试节点的节点类型为叶子节点,则根据所述未测试节点的字段属性选择对应的变异策略进行变异处理,包括:

若所述未测试节点的节点类型为叶子节点,则确定所述未测试节点的字段属性;所述字段属性为字段类型、字段长度、字段值或字段对应语义中的任一项信息;

若所述字段属性为字段类型,则根据所述字段类型对所述未测试节点进行分隔符字段变异处理或格式标识字段变异处理;

若所述字段属性为字段长度,则对所述未测试节点进行长度字段变异处理或计数字段变异处理;

若所述字段属性为字段对应语义,则对所述未测试节点进行二进制字段变异处理。

可选的,所述若所述未测试节点的节点类型为中间节点,则对所述未测试节点进行结构内变异处理或结构体变异处理,包括:

若所述未测试节点的节点类型为中间节点,则对所述未测试节点进行属性规则变异,或通过递归查找到所述未测试节点的目标子节点,并对所述目标子节点生成的数据进行组合字段变异,实现结构内变异处理;

或,对以所述未测试节点为起始节点的子树进行复制、删除或调整位置的操作实现结构体变异处理。

可选的,对所述未测试节点进行变异处理,生成测试用例,包括:

对所述未测试节点进行变异处理,并根据所述未测试节点的文法元素对应的属性规则对所述未测试节点相关字段的属性值进行计算更新;

通过读取变异后文法解析树中叶子节点的值,得到测试用例集合。

为实现上述目的,本申请提供了一种工控协议测试系统,包括:

构建模块,用于获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;

查找模块,用于对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;

变异模块,用于基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;

测试模块,用于利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。

为实现上述目的,本申请提供了一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现前述公开的任一种工控协议测试方法的步骤。

为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现前述公开的任一种工控协议测试方法的步骤。

通过以上方案可知,本申请提供的一种工控协议测试方法,包括:获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。由上可知,本申请结合工控协议样本数据和文法描述模型构建文法解析树,查找文法解析树中的未测试节点进行变异,得到对应的测试用例,利用测试用例对待测工控协议进行测试,进而可利用测试结果进行后续针对工控协议的脆弱性分析,以提升工控系统协议脆弱性分析能力以及电力工控系统协议层面安全威胁的应对能力。

本申请还公开了一种工控协议测试系统及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例公开的一种工控协议测试方法的流程图;

图2为本申请实施例公开的针对步骤s101的一种细化流程图;

图3为本申请实施例公开的一种具体的协议样本数据的示例;

图4-a、4-b、4-c、4-d为本申请实施例公开的针对协议样本数据构建对应文法解析树的具体示意图;

图5为本申请实施例公开的一种工控协议测试系统的结构图;

图6为本申请实施例公开的一种电子设备的结构图;

图7为本申请实施例公开的另一种电子设备的结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在现有技术中,由于工控通信协议注重实时性,部分典型工控通信协议缺乏安全机制,使工控控制命令易被伪造,威胁工控设备安全稳定运行,且未能针对工控系统的协议进行深入分析,缺乏工控协议漏洞利用等相关技术的研究分析工作,为此,如何对工控协议进行安全性分析以提高电力工控系统协议层面安全威胁的应对能力是本领域技术人员需要解决的问题。

因此,本申请实施例公开了一种工控协议测试方法,提升了工控系统协议脆弱性分析能力以及电力工控系统协议层面安全威胁的应对能力。

参见图1,本申请实施例公开的一种工控协议测试方法的流程图,如图1所示,包括:

s101:获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;

本申请实施例中,首先获取文法描述模型和工控协议样本数据。文法描述模型可以为用于描述文法、解析文法的一种形式化表达方法,能够将客观状态转化成数学的形式进行表示,有助于分析和处理。文法具体可采用下述元素构成对应的四元组:g=(n,σ,p,s),其中,n表示非终结符号,σ表示终结符号且与n无交集,p表示产生式规则,s表示起始符号且s∈n,以上述形式表示的文法所产生的字符串集合均由终结符号集σ中的符号构成,并且可以从起始符号s出发,应用产生式规则p而得到。另外,为了避免单个样本数据无法覆盖完整的数据格式的问题,方法采用工控协议的样本数据集作为测试输入。通过重复地对每个样本数据进行解析、变异和测试,实现针对被测对象的完全测试。

具体地,可以利用文法描述模型和工控协议样本数据构建文法解析树,构建思路可以具体为从起始字段开始,以复合字段作为中间节点,以原子字段作为叶子节点,并根据文法元素的属性规则从样本数据中提取出相应字段的属性值以辅助文法解析树的构建。

需要指出的是,属性规则可具体分为继承属性规则和综合属性规则。继承属性规则:假设复合字段a具有产生式a→b+c,形如c.γ=func(a.αorb.β)的属性规则即为继承属性规则,属性γ即为c的继承属性。继承属性规则描述了文法模型中某字段的属性值依赖于其父节点字段或兄弟节点字段属性值的约束关系。综合属性规则:假设复合字段a具有产生式a→b+c,形如a.α=func(b.βorc.γ)的属性规则即为综合属性规则,属性α即为a的综合属性。综合属性规则描述了文法模型中某字段的属性值依赖于其构成字段属性值的约束关系。由于原子字段为不可分割的字段,因此只有复合字段具有综合属性

s102:对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;

在本步骤中,与随机变异不同,可以采用一定的策略进行节点选择,通过后序遍历文法解析树,选择其中的节点进行变异。在变异元素未人工指定的情况下,默认对全部字段进行变异。为了避免协议报文间公共字段的重复测试,引入已测文法元素集合,用于记录已经被测试的节点对应的文法元素。通过遍历文法解析树的所有节点并与该集合元素进行对比,针对性地选择变异节点,以避免下一个样本测试中对相同字段进行重复测试。上述过程中,通过对文法解析树的遍历和已测节点的记录,有效避免了节点的漏测和重复测试。

本申请实施例中,通过后序遍历文法解析树与已测试节点进行对比来查找未测试节点作为变异对象,能够直接对文法分析树进行选择变异,省略了传统的脚本测试方法的脚本编写工作;且后序遍历顺序可以使得结构的变异总在其构成元素变异完成之后,有助于利用其子节点的变异结果进行组合变异。

s103:基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;

需要说明的是,工控协议模糊测试的关键是通过构造畸形数据来发现协议实现中的脆弱性,而畸形数据的生成可以通过一定的变异策略对解析树中的节点进行修改。作为一种可行的实施方式,本申请实施例可利用工控协议的特征和语义特性综合考虑相关属性规则,来缩小异常数据的搜索范围,从而提高测试用例的有效性。

具体地,可以利用工控协议字段所指示的具体含义来指示变异处理方法。在文法描述模型中,字段的含义是通过属性、产生式以及属性规则来传达的,因此可将字段的上述信息作为变异策略的关键参考因素。考虑到原子字段和复合字段不同的属性、结构以及在文法分析树中的位置,本步骤可具体采用两种不同的变异方法:叶子节点变异策略和中间节点变异策略。也即,本申请实施例可以在确定未测试节点之后,判断该未测试节点的节点类型是否为叶子节点或中间节点;若未测试节点的节点类型为叶子节点,则根据未测试节点的字段属性选择对应的变异策略进行变异处理;若未测试节点的节点类型为中间节点,则对未测试节点进行结构内变异处理或结构体变异处理。

在本步骤中,在对未测试节点进行变异处理之后,生成对应的测试用例之前,需要注意的是需要依据属性规则对与变异节点相关的节点值进行更新,从而构成完整有效的测试用例。具体地,可以在对未测试节点进行变异处理之后,根据未测试节点的文法元素对应的属性规则对未测试节点相关字段的属性值进行计算更新;通过读取变异后文法解析树中叶子节点的值,得到测试用例集合。

在一种优选的实施方式中,为了避免生成重复的测试用例,本申请实施例还可结合哈希值对测试用例进行去重处理。

s104:利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。

可以理解的是,在对未测试节点进行变异处理生成对应的测试用例之后,可以将测试用例输入应用了待测工控协议的待测系统中进行测试,从而得到针对待测工控协议的测试结果。

本申请实施例具体从工控协议入手发现和分析协议脆弱性及安全漏洞,尽早采取防护措施,以保障工控系统的安全可靠运行,将系统的脆弱性及安全威胁分析与工控实际业务深度结合,深层次识别系统协议层面的安全威胁,同时对实现工控系统规约及指令级的安全防护具有重要的指导意义。

通过以上方案可知,本申请提供的一种工控协议测试方法,包括:获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。由上可知,本申请结合工控协议样本数据和文法描述模型构建文法解析树,查找文法解析树中的未测试节点进行变异,得到对应的测试用例,利用测试用例对待测工控协议进行测试,进而可利用测试结果进行后续针对工控协议的脆弱性分析,以提升工控系统协议脆弱性分析能力以及电力工控系统协议层面安全威胁的应对能力。

本申请实施例公开了一种具体的工控协议测试方法,相对于上一实施例,本实施例对前述技术方案中的步骤s101作了进一步的说明和优化。具体的,如图2所示,上述步骤s101的细化流程可以包括:

s11:获取文法描述模型和工控协议样本数据,并接收用户输入的起始字段;

需要说明的是,本申请实施例可具体利用解析树构建函数实现文法解析树的构建。具体地,解析树构建函数以文法描述模型、工控协议样本数据以及用户输入的起始字段作为输入,以输出对应的文法解析树。

s12:判断所述起始字段是否为所述文法描述模型中的起始字段;如果是,则进入步骤s13;

s13:将所述起始字段创建为所述文法解析树的根节点;

具体地,在获取到输入的起始字段之后,将判断该起始字段是否为文法描述模型中的起始字段。如果是,则创建为文法解析树的根节点,并将输入的字段作为当前处理节点。如果否,则将文法描述模型中的起始字段创建为文法解析树的根节点。

s14:在所述文法描述模型的产生式集合中查找以所述起始字段作为起始字段的目标产生式集合;

s15:依次对所有所述目标产生式集合进行处理,得到文法解析树中每层的各个节点;

进一步地,在文法描述模型的产生式集合中查找到以上述起始字段作为起始字段的所有目标产生式集合,并调用产生式处理函数对每一个产生式集合进行处理。具体地,上述产生式处理函数实现解析树构造算法的核心功能,其以产生式集合、当前处理节点和工控协议样本数据作为输入参数,遍历产生式的右侧构成元素,与工控协议样本数据依次进行比对,以分析是否为已知的或者曾经分析过的某个协议。如果匹配成功,则直接将这个字段的属性值提取出来。

s16:根据所述工控协议样本数据确定所述各个节点的属性值,构建生成对应的文法解析树。

需要指出的是,在处理每一个构成元素之前,需要首先计算其继承属性的值,因为继承属性值很可能会影响到后续字段的解析。具体可根据文法描述模型的字段类型进行不同处理,若为原子字段,则直接通过字段的属性值提取该字段在协议样本数据中的取值,同时创建为当前处理节点的子节点加入文法解析树中;若为包含结构属性的复合字段,则先根据属性规则计算协议样本数据对应的结构属性值,创建为当前处理节点的子节点加入文法解析树,进而查找该符合字段的产生式,通过递归调用产生式处理函数直到协议报文数据解析完成或模型推导终止。当复合字段的产生式解析完成之后,还需对其综合属性进行计算。

考虑到循环结构中的冗余会增加遍历文法解析树的复杂度,作为一种优选的实施方式,本申请实施例可实现对于文法解析树的剪枝,即可对文法解析树进行遍历,以对比文法解析树中的每个节点是否存在子节点与节点自身相同;如果相同,则将该子节点作为当前节点的父节点的子节点,并删除当前节点。

为了论证本申请实施例工控协议测试方法中提供的解析树构建算法的可行性,下面以modbus/tcp协议作为样本数据进行解析。结合协议描述脚本,对图3中的modbus/tcp协议样本数据进行分析,由于数据存在以太网头、ip头和tcp等头部数据,因此实际报文数据为图3中框内所示部分。

具体地,以adu作为起始字段进行模型推导,建立文法解析树的根节点adu,根节点的值为整个协议报文数据,adu对应的产生式p1为adu→mbap+pdu,由此,根据产生式p1进行推导,解析得到对应的文法解析树,产生式右侧的组成元素均为复合字段,得到对应的文法解析树如图4-a所示。

进一步从mbap字段作为起始字段开始进行匹配,对应的产生式p2为mbap→transactionid+protocolid+protocollength+unitid,由此,根据产生式p2进行推导,匹配第一个文法符号transactionid,根据其长度属性提取2个字节的样本数据0019,因此字段实际值为25,以此类推protocolid的实际值为0000,protocollength的值为0006,unitid值为01,根据p2可得pdu的长度属性值为5,因此取协议报文的5个字节赋值给pdu字段,生成的文法解析树如图4-b所示。

进而从字段pdu出发进行匹配,字段pdu对应的产生式p3为pdu→funcode+data,根据产生式p3进行推导,匹配右侧第一个文法符号funcode,根据其长度属性提取1个字节的样本数据03,余下的报文数据作为data字段的值,构成的文法解析树如图4-c所示。

查找data字段的属性规则,结合已经解析得到的funcode值属性,可以推出对应字段的结构为read字段的结构,然后将data字段替换为read字段,read对应的产生式p4为read→startaddress+numregisters,根据产生式p4依次匹配起始地址、寄存器数量两个原子字段,最后形成当前协议样本数据对应的文法解析树如图4-d所示。

下面对本申请实施例公开的工控协议测试方法中的针对未测试节点进行变异处理的过程进行详细介绍和说明。具体地,若未测试节点的节点类型为叶子节点,则确定未测试节点的字段属性;字段属性包括但不限于字段类型、字段长度、字段值或字段对应语义。若字段属性为字段类型,则根据字段类型对未测试节点进行分隔符字段变异处理或格式标识字段变异处理;若字段属性为字段长度,则对未测试节点进行长度字段变异处理或计数字段变异处理;若字段属性为字段对应语义,则对未测试节点进行二进制字段变异处理。

具体地,上述字段类型可以包括但不限于分隔符字段和格式标识字段。其中,分隔符作为数据格式中分割两个字段的标识符号,一般由特殊字符构成,如空格、“<”、“:”等。在工控协议中,通常用在字段之间或者行间分隔,分隔符字段的变异可以采用更换分隔符、删除分割符以及增加分隔符的长度的方式来进行变异。例如,针对字段间分隔符字段和行间分隔符字段的变异,若长度为1,可采用“{”、“/”、“0x00”等分隔符进行替换;若长度大于1,可采用相同长度的若干个分隔符构成的分隔符序列来替换。删除分隔符会影响模糊测试中对工控协议字段的识别与解析,因此可以通过这种变异策略来检测程序能否正确处理分隔符异常的情况。增加分隔符的变异方法则是通过改变分隔符原有的长度,重复分隔符或者构造任意长度的字符串替换原有分隔符。

格式标识字段是指用于指导后续元素的数据格式和位置的描述字段,字符型常见的错误类型即为格式标识字段漏洞。格式标识字段对应的变异方法可与分隔符字段的变异原理相似,可使用不同的格式标识字段替换。如果是单个格式标识字段,则随机替换不同类型的格式标识字段;如果是多个格式标识字段组合则随机替换。删除格式标识字段会影响后续字段的识别与解析,因此可以通过这种变异策略来检测程序能否正确处理格式标识字段异常的情况。增加格式标识字段的方法可以通过在字符串中添加类似%d、%x和%s等格式串序列,以达到访问内存、读取软件中潜在关键信息的目的,而利用%n格式串还能将恶意代码写入内存。

另外,除了上述具有特殊语义的字符型字段外,还可增加针对一般字段的变异方法,即可生成超长或超短字符串,根据字段的长度属性选取超过或不足约定的字段长度的字符串来发现数据中可能存在的缓冲区溢出漏洞,例如,100个“a”字符、1000个“a”字符等等。然而由于部分软件开发者已经意识到了长字符串的危害性,会特别搜索并阻止包含相同字符的长字符串,因此可以采用随机生成不同字符的长字符串的方式进行变异。

若字段属性为字段长度,则可对未测试节点进行长度字段变异处理或计数字段变异处理。一般的数值类型字段的变异方法可以结合字段的长度属性,进行边界值和特殊值测试,能够有效地触发整数溢出漏洞。而针对具体语义的长度、计数的特殊字段,除了一般的变异方法外,还需针对其语义特点进行相应的变异。

具体地,长度字段指示了数据格式中其他字段的长度属性,其变异应当和对应字段的变异同时进行。因此在对长度字段进行边界值和特殊值变异时,还要根据长度约束关系,对相关字段的长度进行缩减和增加,增加的长度采用复制相关字段的内容或特殊值填充。计数字段指示了数据格式中某个字段的个数,它与长度字段变异相似,在对计数字段值进行变异的同时,还需改变相应的被计数字段的个数。从文法解析树的角度看,也就是需要对相应的节点或子树进行复制或修剪。

需要指出的是,工控协议中的数据域一般是没有通用语义的字段,属于二进制类型字段,针对该部分二进制类型字段的变异,一般可以采用位变换方法,即随机选择数据中的某一位或者连续的二进制序列进行翻转;与普通字符串相似,其末尾也能包含结束符,因此可以对其末尾还可以采用删除该字段、增加填充字段长度以及采用其他字符集填充的方法进行变异

文法解析树的中间节点也就是数据格式中的复合字段。若未测试节点的节点类型为中间节点,则对未测试节点进行结构内变异处理或结构体变异处理。

复合字段是由若干个原子字段和复合字段组合而成,产生式描述了复合字段的语法结构,与产生式对应的属性规则解释说明了复合字段内的约束关系。针对这一特点,结构内的变异可以分为组合字段变异和属性规则变异两种策略。

组合字段变异,即将中间节点的子节点所生成的异常数据进行组合变异生成异常数据,也即,可以对不同字段的异常数据按照任意两个异常数据唯一出现的方式进行组合。然而在工控协议的数据域中,两个联系紧密的字段一般处于相邻位置,因此为了避免出现组合爆炸问题,可以对相邻的子节点进行组合变异。假设字段a、b、c的异常数据集合分别为{a1,a2}、{b1,b2}和{c1,c2,c3},按照传统的排列组合方法,将生成12个测试用例。若在子节点异常数据集合较大的情况下,无疑会产生组合爆炸的问题。因此,可采用组合算法使任意两个字段的两个异常数据组合至少在一个测试用例中出现,按照这种方法生成的测试用例集合为:{(a1b1c1),(a1b2c2),(a2b1c3),(a2b2c1),(a2b1c2),(a1b2c3)}。

对于属性规则,可采用违背属性规则的方法进行变异处理。针对相等关系的属性规则,可采用变异两个相关字段来打破相等关系;针对其他属性规则,可采用变换匹配规则的方式进行变异。通过这种变异处理可以验证出软件在约束关系的实现上是否存在漏洞。

结构体变异,是指在文法解析树的基础上,对结构体所形成的子树进行整体变异。具体可通过调整子树在文法解析树中的位置,以及对子树进行删除、复制等操作,来实现结构体变异处理。

下面对本申请实施例提供的一种工控协议测试系统进行介绍,下文描述的一种工控协议测试系统与上文描述的一种工控协议测试方法可以相互参照。

参见图5,本申请实施例提供的一种工控协议测试系统的结构图,如图5所示,包括:

构建模块201,用于获取文法描述模型和工控协议样本数据,并利用所述文法描述模型和所述工控协议样本数据构建文法解析树;

查找模块202,用于对所述文法解析树进行遍历,查找所述文法解析树中的未测试节点;

变异模块203,用于基于预设变异策略和所述未测试节点的文法元素对应的属性规则,对所述未测试节点进行变异处理,生成测试用例;

测试模块204,用于利用所述测试用例对待测工控协议进行测试,得到针对所述待测工控协议的测试结果。

关于上述模块201至204的具体实施过程可参考前述实施例公开的相应内容,在此不再进行赘述。

本申请还提供了一种电子设备,参见图6,本申请实施例提供的一种电子设备的结构图,如图6所示,包括:

存储器100,用于存储计算机程序;

处理器200,用于执行所述计算机程序时可以实现上述实施例所提供的步骤。

具体的,存储器100包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令,该内存储器为非易失性存储介质中的操作系统和计算机可读指令的运行提供环境。处理器200在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,为电子设备提供计算和控制能力,执行所述存储器100中保存的计算机程序时,可以实现前述任一实施例公开的工控协议测试方法的步骤。

在上述实施例的基础上,作为优选实施方式,参见图7,所述电子设备还包括:

输入接口300,与处理器200相连,用于获取外部导入的计算机程序、参数和指令,经处理器200控制保存至存储器100中。该输入接口300可以与输入装置相连,接收用户手动输入的参数或指令。该输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是键盘、触控板或鼠标等。

显示单元400,与处理器200相连,用于显示处理器200处理的数据以及用于显示可视化的用户界面。该显示单元400可以为led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。

网络端口500,与处理器200相连,用于与外部各终端设备进行通信连接。该通信连接所采用的通信技术可以为有线通信技术或无线通信技术,如移动高清链接技术(mhl)、通用串行总线(usb)、高清多媒体接口(hdmi)、无线保真技术(wifi)、蓝牙通信技术、低功耗蓝牙通信技术、基于ieee802.11s的通信技术等。

图7仅示出了具有组件100-500的电子设备,本领域技术人员可以理解的是,图7示出的结构并不构成对电子设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

本申请还提供了一种计算机可读存储介质,该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现前述任一实施例公开的工控协议测试方法的步骤。

本申请结合工控协议样本数据和文法描述模型构建文法解析树,查找文法解析树中的未测试节点进行变异,得到对应的测试用例,利用测试用例对待测工控协议进行测试,进而可利用测试结果进行后续针对工控协议的脆弱性分析,以提升工控系统协议脆弱性分析能力以及电力工控系统协议层面安全威胁的应对能力。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1