基于工控私有协议的模糊测试方法技术

技术编号:16367116 阅读:128 留言:0更新日期:2017-10-10 23:34
基于工控私有协议的模糊测试方法,通过在正常工控网络环境中捕获的私有协议数据流量,通过私有协议树构造算法,构造一个针对该私有协议的协议树,对请求报文和响应报文进行有效的分类。学习基本的协议信息,通过统计个体类的数据序列,使用概率统计,长度域识别算法,Apriori关联规则算法和Needleman/Wunsch双序列比对算法,对协议特征进行学习。使用变异规则对不同协议特征进行变异,生成测试用例。在测试的过程中监控与被测设备的连接情况,使用请求与响应特征检测被测设备响应数据情况。该方法能够解决针对工控私有协议模糊测试的效率问题,提高测试用例的有效性,包括数据预处理模块,协议学习模块,模糊测试模块,异常报警模块。

Fuzzy testing method based on industrial control private protocol

The fuzzy control method based on the test protocol, through private protocol data flow capture in normal industrial network environment, through private protocol tree construction algorithm, construct a protocol for the private tree, on the request message and the response message for effective classification. Study protocol basic information, through the data statistics of individual sequences, using probability statistics, length domain recognition algorithm, Apriori algorithm of association rules and Needleman/Wunsch double sequence alignment algorithm, the characteristics of the study protocol. Use variant rules to mutate the characteristics of different protocols and generate test cases. In the process of testing, the connection between the monitoring and the tested equipment is monitored, and the response data of the equipment under test is detected by using the request and response characteristics. This method can solve the problem of efficiency test for industrial fuzzy private protocols, improve the effectiveness of test cases, including data preprocessing module, protocol fuzzy learning module, test module, alarm module.

【技术实现步骤摘要】
基于工控私有协议的模糊测试方法
本专利技术属于工业网络安全
和模糊测试
的结合,涉及了一种工控私有协议的学习方法和基于工控私有协议的模糊测试方法。
技术介绍
工业控制系统(IndustrialControlSystems,ICS)是指工业生产过程中的控制网络和系统,是国家关键基础设施的关键组成部分。目前,工业控制系统已广泛应用于石油石化,交通控制,电力设施,制造业以及核工业等各工业领域。随着我国信息化和工业化的深度融合,工业控制系统在工业生产过程中得到了越来越广泛的应用,越来越多的工业现场设备集成以太网通信功能,与ERP甚至互联网相连,在提高数据共享效率,改进企业管理水平的同时也引入了黑客,病毒木马等安全风险。由于工业控制系统与石油化工等工业领域息息相关,一旦工业控制系统等国家安全基础设施受到网络攻击,将会造成财产损失、人员伤亡等严重后果,对社会稳定造成重大威胁。近年来,针对工业控制网络的攻击屡见不鲜。2010年,网络超级武器“Stuxnet”病毒通过针对性的入侵ICS系统,严重威胁到伊朗布什尔核电站核反应堆的安全运营,这次被称为“震网”的攻击事件使人们对关键基础设施网络本文档来自技高网...
基于工控私有协议的模糊测试方法

【技术保护点】
基于工控私有协议的模糊测试方法,其特征在于,该方法包括数据预处理模块、协议学习模块、模糊测试模块、异常报警模块;数据预处理模块;此模块作用是采集样本数据包,将样本数据包读取到程序内存中;此模块由两个功能子模块构成;功能一,样本采集模块,在程序运行阶段,在主从通信链路之间使用镜像端口的方式采集一个工业流程周期内的双向数据包,保存为pcap文件,作为样本集,放置在程序根目录下;功能二,样本读取模块,此功能通过利用对WinPcap封装好的SharpPcap,使用用于文件数据捕获的ICaptureDevice接口,使用TcpDump规则对样本集内的数据包进行过滤,如果不属于需要进行分析的数据报文,则将...

【技术特征摘要】
1.基于工控私有协议的模糊测试方法,其特征在于,该方法包括数据预处理模块、协议学习模块、模糊测试模块、异常报警模块;数据预处理模块;此模块作用是采集样本数据包,将样本数据包读取到程序内存中;此模块由两个功能子模块构成;功能一,样本采集模块,在程序运行阶段,在主从通信链路之间使用镜像端口的方式采集一个工业流程周期内的双向数据包,保存为pcap文件,作为样本集,放置在程序根目录下;功能二,样本读取模块,此功能通过利用对WinPcap封装好的SharpPcap,使用用于文件数据捕获的ICaptureDevice接口,使用TcpDump规则对样本集内的数据包进行过滤,如果不属于需要进行分析的数据报文,则将其丢弃;将需要分析的协议报文通过请求与响应对应的形式保存到程序内部的请求响应队列中,再将所有请求保存到请求队列中;两个缓存队列提交给协议学习模块使用;协议学习模块;此模块的作用是根据数据预处理模块提供的缓存队列,利用学习算法,首先将请求队列中的协议报文进行分类,然后针对每类报文进行请求字段特征的学习,最后对请求与响应之间字段特征的关系进行学习,此模块由两个功能子模块构成;功能一,报文分类模块,首先获取数据处理模块中的请求响应队列和请求队列,根据请求队列,学习统计出请求数据包样本的可变域和不可变域,最大报文长度,最小报文长度,可变域中该字节的变化率,称这些属性为基本属性,通过请求响应队列和请求队列以及统计学习到的上述基本属性,实例化一个节点作为根节点;通常,工控协议存在控制命令标识符,命令标识符往往在样本中属于可变域并且变化率低,并且在协议字段头部的位置,通过可变域的变化率寻找变化率最小,并且前一个字节不为0x00的第一个字节索引为划分依据字节,根据此字节的不同将两个缓存队列进行划分,并且分别统计上述的基本属性,根据统计信息实例化多个节点作为根节点的叶子节点;在具有叶子节点的情况下,需要判断叶子节点是否需要继续划分,统计一个节点中的最小变化率索引的集合,判断叶子节点是否需要继续划分的依据为,一个节点的子节点集合中,如果子节点的最小变化率索引的集合有交集,则该子节点集合中所有的节点都应划分,否则停止划分;如果满足划分的条件,则应该确定使用哪一个字节进行划分,确定使用哪一个字节进行划分的依据为,根据一个节点,获取此节点中变化率最小,并且前一个字节不为0x00的字节,查看该字节是否存在于该节点的兄弟节点的不可变域中,如果存在,则该节点和其他兄弟节点各自按照其变化率最小且前一个字节不为0x00的字节进行划分,否则统计每个子节点其变化率最小且前一个字节不为0x00的字节,取出该字节在各个兄弟节点中索引最小的索引,每个子节点依据此字节进行划分;划分出来的子节点继续根据是否划分的条件和划分的节点进行操作,最多不超过4层,直到所有节点不可再划分为止;功能二,协议学习模块,分类完毕后,对每个叶子节点,首先划分该节点的可变域和不可变域,统计该节点可变域的样本频率,然后,收集属于不可变域且前一个字节为0x00,或属于可变域的节点作为长度域的初始化空间,以向量集的形式,统计长度域最小的可能范围;接着使用Apriori算法学习协议字段间的关联规则,此关联规则的学习共有两个步骤,第一,寻找数据包间的单独项,统计出现的次数形成初始候选集,然后根据最小支持度进行裁剪,得到初始频繁集,通过频繁集的自连接生成下一轮的候选集,直到进行裁剪之后频繁集内个体为零为止,得到最终的频繁集;第二,根据频繁集,首先统计频繁集中所有出现的子集,统计每个子集出现的次数;然后,根据子集的支持度,使用条件概率的方法,计算不相交的两个子集间的关联概率,以最小置信度进行裁剪,得出该叶子节点的强关联规则;学习的最后,需要使用请求响应队列,学习请求与响应的对应的特征关系,该方法有三个步骤,步骤一,针对请求响应队列中的一对请求响应数据,以字节为单位,使用双序列比对算法中的Needleman/Wunsch算法,将请求的个数加一作为行数,响应的个数加一作为列数,构造比对矩阵,使用动态规划的思想和填充规则,将矩阵内部进行填充,步骤二,从矩阵的右下角开始,使用回溯规则进行规则,将相等的字节索引进行记录,获得一对请求与响应间的比对序列,步骤三,将该节点下的请求响应数据依次进行步骤一、二的操作,最后对所有数据所得的结果求交集,得出最终的请求响应特征比对结果;将学习到的可变域与不可变域,可变域的样本频率,长度域向量集,关联规则、请求响应特征比对结果依附于相关的叶子节点上;模糊测试模块;此模块的作用是根据协议学习模块学习的协议特征,构造符合协议特征的应用报文并且在协议特征的基础上进行变异操作,生成模糊测试用例,之后通过数据通信模块将测试用例发生给被测对象;此模块由两个功能子模块构成,功能一,用例生成模块,以叶子节点作为处理单元,以字节作为变化单位;首先,通过该节点的最后一个不可变域的索引、样本最大长度、样本最小长度,确定样本的data数据域,以随机的方式生成data数据域的长度,再进行随机填充;然后,统计该节点的不可变域和该节点的父节点的不可变域的差集,将该集合作为第一步变异的空间,随机选择字节进行随机填充,将所有不可变域存入一个记录队列;接着,以Apriori关联规则的结果概率,选择关联规则的条件或结果,使用可变域的变异规则,进行随机变异,再次使用可变域的变异规则,将识别出的长度域进行随机变异,把关联规则中的条件结果和长度域均加入记录队列;最后,从第一个字节向后遍历非data数据域的部分,如果该字节不存在于记录队列意味着该字节还未生成,使用可变域的变异规则,生成该可变域,最终将生成的各种域进行拼接,形成一个测试用例;功能二,数据通信模块,将生成的测试用例通过Socket异步通信的方式,首先建立连接,然后send测试数据,接着监听响应数据,receive响应信息,将响应数据和对应的测试数据进行记录,最后断开连接,进行下一个测试用例的生成和发送;异常报警模块,此模块的作用是在测试用例发送的同时,实时对接收到的响应以及被测对象的状态进行监控,如果发生异常,通过报警记录的功能对信息记录;该模块由两个功能子模块构成;功能一,异常监控模块,在发送测试用例,接收到测试用例的响应数据之后,通过学习的请求与响应之间的特征关系,对记录的请求与响应进行匹配,查看是否符合该叶子节点下的多序列比对特征,如果不匹配,则进行报警操作;在发送测试用例之前,检测Socket的TCP是否连接成功,如果不成功,则进行报警操作;功能二,报警记录模块,该模块的作用是将报警的信息进行记录显示,需要将报警进行记录到数据库中。2.基于工控私有协议的模糊测试方法,其特征在于,其步骤包括:步骤11:在正常工控工艺环境中,采集私有协议的通信流量,使用wireshark保存为pcap文件;程序通过SharpPcap的ICaptureDevice接口实例化虚拟的捕获设备,使用TcpDump规则对样本集进行过滤,将所有的请求数据保存在请求队列,将所有的请求响应数据保存在请求响应队列;步骤12:通过两个缓存队列,使用协议树生成算法对私有协议报文进行分类,以实例化树节点方法和是否继续划分的判断条件以及划分依据条件,生成一个私有协议特征分类树;其中分类的过程和判断依据条件为:首先获取数据处理模块中的请求响应队列和请求队列,根据请求队列,学习统计出请求数据包样本的可变域和不可变域,最大报文长度,最小报文长度,可变域中该字节的变化率,称这些属性为基本属性,通过请求响应队列和请求队列以及统计学习到的上述基本属性,实例化一个节点作为根节点;通过可变域的变化率寻找变化率最小,并且前一个字节不为0x00的第一个字节索引为划分依据字节,根据此字节的不同将两个缓存队列进行划分,并且分别统计上述的基本属性,根据统计信息实例化多个节点作为根节点的叶子节点;在具有叶子节点的情况下,需要判断叶子节点是否需要继续划分,统计一个节点中的最小变化率索引的集合,判断叶子节点是否需要继续划分的依据为,一个节点的子节点集合中,如果子节点的最小变化率索引的集合有交集,则该子节点集合中所有的节点都应划分,否则停止划分;如果满足划分的条件,则应该确定使用哪一个字节进行划分,确定使用哪一个字节进行划分的依据为,根据一个节点,获取此节点中变化率最小,并且前一个字节不为0x00的字节,查看该字节是否存在于该节点的兄弟节点的不可变域中,如果存在,则该节点和其他兄弟节点各自按照其变化率最小且前一个字节不为0x00的字节进行划分,否则统计每个子节点其变化率最小且前一个字节不为0x00的字节,取出该字节在各个兄弟节点中索引最小的索引,每个子节点依据此字节进行划分;划分出来的子节点继续根据是否划分的条件和划分的节点进行操作,最多不超过4层,直到所有节点不可再划分为止;对该树进行广度优先搜索遍历,遍历到每一个节点时,统计该节点内数据样本的最大长度和最小长度;以最小长度为遍历字节序列统计该节点的可变域和不可变域;根据统计出的可变域,统计序列组中相同域中出现的数据,计算相同域中不同数据在序列样本中出现的频率,;得到该节点的可变域的样本频率;对该节点中的每个数据包数据的序列,穷举所有可能出现的连续字节的组合,计算每种组合的字节长度值,从起始位遍历每一个可变域,查看该可变域中字节的值是否和出现在该字节索引之后的连续字节组合的长度相匹配,如果匹配,则形成一个长度域向量,S表示起始域序号,E表示终止域序号,L表示长度域序号,P表示长度域在可变域之内的偏移,H表示长度域的长度,则匹配信息以{S,E,L,P,H}的向量形式记录下来,将一个数据包所有的匹配信息形成一系列的长度向量集,对所有数据包的长度向量集做相同的操作,然后求它们的交集;最后得出识别出的长度域集合,此长度域的数量可能不唯一,但都符合报文样本数据情况;对该节点的可变域进行统计,生成样本数据集;统计样本数据集内部的所有可变域的频率,生成初始候选集;使用最小支持度进行裁剪,然后进行自连接操作,统计每个个体在初始样本集内出现的次数,生成第二轮的候选集,再次进行上述自连接并且统计候选集出现频率的操作,进行自连接操作和统计频繁集的时候需要满足两个条件:两个项集进行连接的条件是它们有K-1项是相同的,并且如果一个项集有一个子集不为频繁集中的项集则该项集也不为频繁集中的项集;在裁剪之后如果候选集为空则停止操作,上一轮的候选集成为频繁集;统计这个频繁集中的项集符合索引前后关系且不相交的两个子集,前者置信度的条件,后者为置信度的结论;X为置信度的条件,Y为置信度的结论,其中X,Y均表示每个报文序列特征域之中的数据,Supp函数表示X与Y同时在样本集中出现的概率其值表示X与Y的支持度,Conf函数表示在X出现的情况下,Y出现的概率,其值表示X与Y的置信度,则支持度和置信度的计算方法为:对每一个条件结果进行计算之后,生成Apriori关联规则列表,依附于该叶子节点上;获取节点的请求响应列表,对每一对请求响应构建双序列比对矩阵X,矩阵的行为m+1,列为n+1,m为请求数据长度,n为响应数据长度,首先对矩阵的0行和第0列进行填充,填充的方法为:X(i,0)=0;X(0,j)=0(0≤i≤m,0≤j≤n)然后以从左上到右下的方向填充矩阵中的其他元素,填充的方法为:Ai和Bj代表第i个索引的请求字节值和第j个索引的响应字节值,max为取最大值的函数;接着通过矩阵,从矩阵的右下角开始...

【专利技术属性】
技术研发人员:赖英旭杨凯翔刘岩蔡晓田刘静庄俊玺
申请(专利权)人:北京工业大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1