一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于遗传算法的未知工控协议模糊测试方法及系统与流程

2023-01-02 13:16:56 来源:中国专利 TAG:


1.本公开涉及网络安全领域,尤其涉及未知工控协议的模糊测试技术领域。


背景技术:

2.传统的针对网络协议的漏洞挖掘方法需要提前了解协议规范,研发人员通常花费大量时间进行协议格式的学习和理解才能开发出有效的漏洞挖掘测试用例,然而在工控领域存在大量私有协议,协议规范不公开,因此基于先验知识的传统漏洞挖掘技术无法直接应用于未知协议。
3.现有技术存在如下缺陷:1)针对已知协议漏洞挖掘,需要提前掌握协议规约,对人员要求高,并且测试用例无通用性,需要针对每个协议研发测试用例;2)针对未知协议漏洞挖掘,传统方法无法对其进行测试,然而工控领域存在许多不公开的协议,不能满足要求;3)传统测试方法通过模糊测试,发送大量报文,其中有许多是无效数据,测试效率低下。


技术实现要素:

4.本公开提供了一种基于遗传算法的未知工控协议模糊测试的方法及系统。
5.根据本公开的第一方面,提供了一种未知工控协议模糊测试方法,该方法包括:将插桩代码插入工控机固件程序中,得到插桩程序;选取所述工控机固件程序使用的网络协议的多个报文作为初代样本群;进行样本群迭代,所述样本群迭代包括:将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率,其中,n的初始值为1;根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本;根据预先设定的交叉概率,得到n 1代子代样本;根据预先设定的变异概率,对所述n 1代子代样本进行基因突变作为n 1代样本群;n=n 1;重复进行样本群迭代,直到发现程序异常或达到指定迭代次数。
6.在第一方面的一些实现方式中,所述将插桩代码插入工控机固件程序中,得到插桩程序包括:对工控机固件程序及其动态库进行反汇编分析,统计指令数量、函数数量、文件数量、基本块数量以及分支数量;在所述工控机固件程序的基本块入口与出口处进行指令插桩。
7.在第一方面的一些实现方式中,所述将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率包括:
模糊测试端向8888端口发出开始测试的指令,由插桩模块清空共享内存中原有的样本覆盖率;模糊测试端将所述第n代样本群发送到插桩程序,由桩代码自动计算每一个样本的覆盖率,并将所述每一个样本的覆盖率同步到共享内存;模糊测试端向8888端口发出样本覆盖率获取指令,由插桩模块从共享内存中获取所述每一个样本的覆盖率,并返回给模糊测试端。
8.在第一方面的一些实现方式中,所述桩代码自动计算每一个样本的覆盖率包括:桩代码记录基本块中每一个执行的指令地址;根据所述指令地址获取每一个执行的函数名、二进制文件名,并对有效函数名和文件名执行次数进行累加;根据已执行的有效函数名和文件名数量除以函数数量、文件数量,得出函数覆盖率和文件覆盖率;根据已执行的有效分支数量除以分支数量,得到分支覆盖率;根据已执行的有效基本块数量除以基本块数量,得到基本块覆盖率。
9.在第一方面的一些实现方式中,根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本包括:根据所述每一个样本的覆盖率,使用轮盘赌算法选取需要进行遗传变异的父代样本。
10.在第一方面的一些实现方式中,根据预先设定的交叉概率,得到n 1代子代样本包括:根据预先设定的交叉概率确定父代样本是否进行交叉;若进行交叉,则将交叉后的样本作为n 1代子代样本;若不进行交叉,则将所述父代样本作为n 1代子代样本。
11.根据本公开的第二方面,提供了一种未知工控协议模糊测试系统,该系统包括:插桩模块,用于将插桩代码插入工控机固件程序中,得到插桩程序;样本选取模块,用于选取所述工控机固件程序使用的网络协议的多个报文作为初代样本群;测试模块,用于进行样本群迭代,所述样本群迭代包括:将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率,其中,n的初始值为1;根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本;根据预先设定的交叉概率,得到n 1代子代样本;根据预先设定的变异概率,对所述n 1代子代样本进行基因突变作为n 1代样本群;n=n 1;重复进行样本群迭代,直到发现程序异常或达到指定迭代次数。
12.根据本公开的第三方面,提供了一种电子设备。该电子设备包括:存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现如以上所述的方法。
13.根据本公开的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如根据本公开的第一方面的方法。
14.应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
15.结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。附图用于更好地理解本方案,不构成对本公开的限定在附图中,相同或相似的附图标记表示相同或相似的元素,其中:图1示出了能够在其中实现本公开的实施例的示例性运行环境示意图;图2示出了能够在其中实现本公开的实施例的方法流程示意图;图3示出了根据本公开的实施例的一种未知工控协议模糊测试方法的流程图;图4示出了根据本公开的实施例的一种未知工控协议模糊测试系统的框图;图5示出了能够实施本公开的实施例的示例性电子设备的方框图。
具体实施方式
16.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本公开保护的范围。
17.另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
18.本公开中,选择初代遗传样本,通过对正常业务程序抓包,获取正常业务流程中会产生的流量数据,去除干扰流量和错误数据报后构建初代种群,发送初代种群数据到完成插桩的被测服务程序,然后通过插桩模块自定义的8888端口,取回每个样本的代码块覆盖率,通过覆盖率进行样本选优,使得样本覆盖率越来越大,覆盖的代码块越来越多,以提高测试效果和测试效率。
19.图1示出了能够在其中实现本公开的实施例的示例性运行环境示意图。
20.如图1所示,在运行环境系统架构中包括访问层、接口层和服务层。访问层包括pc浏览器和pc客户端,接口层包括websocket、http/https、tcp;服务层包括服务通信、测试模块、插桩模块、测试管理。其中,服务通信包括rest架构模式和自定义的架构模式两种;测试模块包括样本输入、样本发送、样本选取、适应度取回、样本交叉、样本突变、服务端监控等;插桩模块包括固件提取、固件插桩、适应度发送等;测试管理包括端口扫描、任务管理、报告管理等。
21.图2示出了能够在其中实现本公开的实施例的方法流程示意图。
22.如图2所示,首先选取初代样本,将选取的初代样本发送到插桩后的程序中,并取回样本覆盖率,然后利用轮盘赌算法选取进行遗传变异的父代样本,如果进行了交叉,则产生子代样本,如果没有进行交叉,则继续使用父代样本;然后对上述样本进行突变,如果进行了突变,则产生新一代样本,若果没有进行突变,则继续使用原样本;重复上述步骤,直至
达到最大迭代次数。
23.图3示出了根据本公开的实施例的一种未知工控协议模糊测试方法的流程图。
24.如图3所示,所述未知工控协议模糊测试方法300包括:s301:将插桩代码插入工控机固件程序中,得到插桩程序;s302:选取所述工控机固件程序使用的网络协议的多个报文作为初代样本群;s303:进行样本群迭代,所述样本群迭代包括:将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率,其中,n的初始值为1;s304:根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本;s305:根据预先设定的交叉概率,得到n 1代子代样本;s306:根据预先设定的变异概率,对所述n 1代子代样本进行基因突变作为n 1代样本群;s307:n=n 1;s308:重复进行样本群迭代,直到发现程序异常或达到指定迭代次数。
25.在s301中,将插桩代码插入工控机固件程序中,得到插桩程序包括:对工控机固件程序及其动态库进行反汇编分析,统计指令数量、函数数量、文件数量、基本块数量以及分支数量;在所述工控机固件程序的基本块入口与出口处进行指令插桩。
26.在一些实施方式中,人工选取待插桩的程序,将插桩代码插入代码块中,以便进行代码覆盖率的统计。
27.具体的,对待插桩程序以及其动态库进行反汇编分析,统计其指令数量、函数数量、文件数量、基本块数量(指一组顺序执行的指令,基本块中第一条指令被执行后,后续的指令也会被全部执行,每个基本块中所有指令的执行次数是相同的,即基本块只有一个入口一个出口,出口指令跳转到其他基本块)、分支数量(基本块之间的跳转视为分支);在目标程序的基本块入口与出口处进行指令插桩。
28.在一些实施方式中,还包括,判断固件文件格式,文件格式分为压缩和非压缩格式,压缩格式直接解压,非压缩格式需要分析文件信息,然后根据文件头内容解析文件内容,按照boot段、kernel段进行读取和解压;根据解压后的文件,确定文件系统和固件运行环境。
29.在s302中,选取所述工控机固件程序使用的网络协议的多个报文作为初代样本群。
30.在一些实施方式中,常见程序使用的网络协议的报文有tcp报文、ip报文、以太网数据帧等。
31.具体的,通过对正常业务程序抓包,获取正常业务流程中会产生的流量数据,去除干扰流量和错误数据报后构建初代种群。
32.根据本公开的实施例,针对常规已知协议与未知协议,均无需提前掌握协议规约,无需研发专用测试用例。将工控机固件程序使用的网络协议的多个报文作为初代样本群,利用遗传算法选优的特性,避免了大量无效测试,提高了测试效率。
33.在s303中,所述将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率包括:
模糊测试端向8888端口发出开始测试的指令,由插桩模块清空共享内存中原有的样本覆盖率;模糊测试端将所述第n代样本群发送到插桩程序,由桩代码自动计算每一个样本的覆盖率,并将所述每一个样本的覆盖率同步到共享内存;模糊测试端向8888端口发出样本覆盖率获取指令,由插桩模块从共享内存中获取所述每一个样本的覆盖率,并返回给模糊测试端。
34.在一些实施方式中,插桩模块进程开启8888端口,监听远程请求;远程测试开始,向8888端口发出开始测试的指令,插桩主模块清空共享内存中的覆盖率信息;远程发送测试数据到固件系统,桩代码自动开始工作,将覆盖率数据同步到共享内存;远程测试结束,向8888端口发出覆盖率获取指令,插桩主模块从共享内存中获取覆盖率,并返回给客户端。
35.在一些实施方式中,所述桩代码自动计算每一个样本的覆盖率包括:桩代码记录基本块中每一个执行的指令地址;根据所述指令地址获取每一个执行的函数名、二进制文件名,并对有效函数名和文件名执行次数进行累加;根据已执行的有效函数名和文件名数量除以函数数量、文件数量,得出函数覆盖率和文件覆盖率;根据已执行的有效分支数量除以分支数量,得到分支覆盖率;根据已执行的有效基本块数量除以基本块数量,得到基本块覆盖率。
36.根据本公开的实施例,桩代码与插桩主模块进程通过共享内存进行通信,用于传递覆盖率信息。
37.在s304中,根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本包括:根据所述每一个样本的覆盖率,使用轮盘赌算法选取需要进行遗传变异的父代样本。
38.在一些实施方式中,轮盘赌算法选择父代样本的方法为:设样本个体表示为(i=1,2,3...n),n为种群大小,个体适应度表示为,该部分被选中的概率为;适应度计算方式为:以分支指令为例,首先统计程序执行样本的有效分支数量a,除以总分支数量b,即为适应度:;可以理解的是,每个样本的覆盖率即为其适应度,每个样本的适应度值越大,被选择的概率就越大,被选择概率计算公式为:;每个个体的累计概率计算公式为:;
累积概率表示每个个体之前所有个体的选择概率之和,它相当于在转盘上的“跨度”,“跨度”越大越容易选到。举例说明:表一使用累计概率执行轮盘赌,随机生成一个(0,1)之间的数,判断随机数落在轮盘的哪个区间,例如,如表一所示:随机数为0.06,落在[0,0.07)区间,则选中,如果随机数为0.3,落在[0.2,0.4)则选中。
[0039]
在一些实施方式中,选取需要进行遗传变异的父代样本还可以采用随机通用取样、比赛选择、健身比例选择、排名选择等算法。
[0040]
在s305中,根据预先设定的交叉概率,得到n 1代子代样本包括:根据预先设定的交叉概率确定父代样本是否进行交叉;若进行交叉,则将交叉后的样本作为n 1代子代样本;若不进行交叉,则将所述父代样本作为n 1代子代样本。
[0041]
根据本公开的实施例,依据预先设定的交叉概率,决定父代样本是否进行交叉,如果进行了交叉,则产生子代样本;如果没有进行交叉,继续使用原来的父代样本,并将其作为新的子代样本。
[0042]
在一些实施方式中,通用的交叉算法包括:一点交叉、多点交叉、统一交叉、全算术重组等。
[0043]
具体的,一点交叉,即选择一个随机的交叉点,并将其两个父代样本的尾部部分交换以获得新的子代。
[0044]
多点交叉,将其中交替排列的段进行交换以获得新的子代。
[0045]
统一交叉,即不将染色体分成片段,而是分别对待每个基因,可以选择偏向某一个父代样本,使得子代中获得该父代更多的遗传物质。
[0046]
在s306中,根据预先设定的变异概率,对所述n 1代子代样本进行基因突变作为n 1代样本群。
[0047]
在一些实施方式中,通过预先设定变异概率,变异概率也可以按变异个体的适应度值以及当代样本的平均适应度值计算得出,根据变异概率对样本群进行基因突变,得到新一代子代样本。
[0048]
在一些实施方式中,常用的变异算子包括:位翻转突变、随机复位、交换突变、争夺突变、翻转突变。
[0049]
具体的,在位翻转突变中,选择一个或多个随机位并翻转它们,此算法适用于二进制编码的遗传算法。
[0050]
随机复位是整数表示的位翻转的扩展。其中,从一组允许值的随机值分配给随机
选择的基因。
[0051]
在交换突变中,随机选择染色体上的两个位置,并交换这些值。
[0052]
争夺突变,即从整个染色体,选择一个基因子集,并且它们的值被随机扰乱或洗牌。
[0053]
在反转突变中,选择一些基因的子集,如加扰突变,而不是混洗子集,只是反转子集中的整个字符。
[0054]
在s307中,n=n 1。
[0055]
在s308中,重复进行样本群迭代,直到发现程序异常或达到指定迭代次数。
[0056]
根据本公开的实施例,对选取的样本群进行迭代以实现对未知工控协议的模糊测试,用遗传算法选优的特性,避免了大量无效测试,提高了测试效率。
[0057]
根据本公开的实施例,选择初代遗传样本,发送初代种群数据到完成插桩的被测服务程序,然后通过插桩模块自定义的8888端口,取回每个样本的代码块覆盖率,通过覆盖率进行样本选优,使得样本覆盖率越来越大,覆盖的代码块越来越多,提高了测试效果和测试效率。
[0058]
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本公开所必须的。
[0059]
以上是关于方法实施例的介绍,以下通过装置实施例,对本公开所述方案进行进一步说明。
[0060]
图4示出了根据本公开的实施例的一种未知工控协议模糊测试系统的框图。
[0061]
如图4所示,所述未知工控协议模糊测试系统400包括:插桩模块401,用于将插桩代码插入工控机固件程序中,得到插桩程序;样本选取模块402,用于选取所述工控机固件程序使用的网络协议的多个报文作为初代样本群;测试模块403,用于进行样本群迭代,所述样本群迭代包括:将第n代样本群发送到所述插桩程序进行模糊测试,并获取每一个样本的覆盖率,其中,n的初始值为1;根据所述每一个样本的覆盖率,选取需要进行遗传变异的父代样本;根据预先设定的交叉概率,得到n 1代子代样本;根据预先设定的变异概率,对所述n 1代子代样本进行基因突变作为n 1代样本群;n=n 1;重复进行样本群迭代,直到发现程序异常或达到指定迭代次数。
[0062]
在一些实施方式中,还包括固件提取模块,用于判断固件文件格式,文件格式分为压缩和非压缩格式,压缩格式直接解压,非压缩格式进行分析文件信息,根据文件头内容解析文件内容,按照boot段、kernel段进行读取和解压;根据解压后的文件,确定文件系统和固件运行环境。
[0063]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种
计算机程序产品。
[0064]
图5示出了可以用来实施本公开的实施例的电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0065]
电子设备500包括计算单元501,其可以根据存储在rom502中的计算机程序或者从存储单元508加载到ram503中的计算机程序,来执行各种适当的动作和处理。在ram503中,还可存储电子设备500操作所需的各种程序和数据。计算单元501、rom502以及ram503通过总线504彼此相连。i/o接口505也连接至总线504。
[0066]
电子设备500中的多个部件连接至i/o接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许电子设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0067]
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如未知工控协议模糊测试方法300。例如,在一些实施例中,未知工控协议模糊测试方法300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由rom502和/或通信单元509而被载入和/或安装到电子设备500上。当计算机程序加载到ram503并由计算单元501执行时,可以执行上文描述的未知工控协议模糊测试方法300的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行未知工控协议模糊测试方法300。
[0068]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0069]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0070]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0071]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0072]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0073]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开的技术方案所期望的结果,本文在此不进行限制。
[0074]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献