CN113934621A - 模糊测试方法、***、电子设备及介质 - Google Patents

模糊测试方法、***、电子设备及介质 Download PDF

Info

Publication number
CN113934621A
CN113934621A CN202111040139.5A CN202111040139A CN113934621A CN 113934621 A CN113934621 A CN 113934621A CN 202111040139 A CN202111040139 A CN 202111040139A CN 113934621 A CN113934621 A CN 113934621A
Authority
CN
China
Prior art keywords
message
tested program
seed
program
variation
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.)
Pending
Application number
CN202111040139.5A
Other languages
English (en)
Inventor
孙利民
方栋梁
宋站威
吕世超
孙玉砚
朱红松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202111040139.5A priority Critical patent/CN113934621A/zh
Publication of CN113934621A publication Critical patent/CN113934621A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种模糊测试方法、***、电子设备及介质,其中方法包括确定种子报文和种子报文中的动态字段;调整种子报文中的动态字段,形成变异报文;将变异报文输入至被测程序,监测被测程序状态,得出测试结果。本发明通过确定种子报文动态字段,并针对动态字段进行调整形成变异报文的手段,省去了针对固定字段进行调整的步骤,有效提升了变异报文的形成效率。

Description

模糊测试方法、***、电子设备及介质
技术领域
本发明涉及软件测试技术领域,尤其涉及一种模糊测试方法、***、电子设备及介质。
背景技术
随着软件***的发展,其复杂程度不断增加,出现运行错误或者安全风险的机会也随之提升。为了提升软件程序运行的稳定性和安全性,往往需要专门的测试方法和测试***对软件程序进行验证。
模糊测试是一种通过向目标***提供非预期的输入并监视异常结果来发现软件漏洞的方法。它能揭示出程序中的重要bug,验证出现实世界中的错误模式并在被测程序被实际攻击前对潜在的应当被堵塞的攻击渠道进行提示。
现有的模糊测试方法和程序产品,由于其应用面广泛的特性,致使其对于被动式的被测程序(即主动与设备进行通信、被动接收设备的响应数据的被测程序)针对性适配不佳,存在着测试繁琐、漏洞挖掘效率低的问题。
发明内容
本发明提供一种模糊测试方法、***、电子设备及介质,用以解决现有技术中软件漏洞挖掘效率低的缺陷,实现软件漏洞的有效挖掘。
本发明提供一种模糊测试方法,包括:
根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
根据本发明提供的一种模糊测试方法,所述种子报文是根据优先权重从多个通信报文中选择得到的,所述多个通信报文是从所述设备获取的响应报文,所述响应报文是由所述设备在受到所述被测程序触发下生成的;所述优先权重是根据通信报文长度、通信报文交互深度以及被测程序处理通信报文执行的程序基本块的数量中的任一者或任多者组合确定的。
根据本发明提供的一种模糊测试方法,所述种子报文中的动态字段是通过比较多个种子报文确定的、在多个种子报文中字段值不同的字段集合。
根据本发明提供的一种模糊测试方法,所述得出测试结果的步骤包括:
确定所述被测程序运行异常,则将根据所述被测程序运行异常结果与对应的所述变异报文作为测试结果;
确定所述被测程序运行正常,则更新变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态。
根据本发明提供的一种模糊测试方法,所述模糊测试方法还包括:
更新所述变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态的步骤。
根据本发明提供的一种模糊测试方法,所述模糊测试方法还包括:
确定所述被测程序运行异常,重启被测程序。
根据本发明提供的一种模糊测试方法,所述根据测试协议将种子报文中的动态字段实例化,包括:
提取所述种子报文中动态字段的格式信息;所述格式信息包括种子报文对应的通信协议;
根据所述种子报文中动态字段的格式信息,实例化种子报文中的动态字段。
本发明还提供一种被动式模糊测试***,包括:
变异模块,根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
测试模块,根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述模糊测试方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述模糊测试方法的步骤。
本发明提供的模糊测试方法、***、电子设备及介质,通过确定种子报文动态字段,并针对动态字段进行调整形成变异报文的手段,省去了针对固定字段进行调整的步骤,有效提升了变异报文的形成效率,为测试和漏洞挖掘过程提供了基础,进而达到了测试简便、漏洞挖掘效率提升的有益效果。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的模糊测试方法的流程示意图;
图2是本发明实施例提供的模糊测试方法的阶段流程示意图;
图3是本发明实施例提供的被动式模糊测试装置的交互示意图;
图4是本发明实施例提供的模糊测试方法的时序示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图4描述本发明的模糊测试方法。
如图1所示,本发明实施例提供一种模糊测试方法,本方法的执行主体可以是测试***、测试***中运行的测试程序或控制器,在本发明中不受限制。本方法包括如下步骤:
步骤100,根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
步骤200,根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
本实施例中,种子报文实质上被测程序所有可能触发的通信报文中的一种。
种子报文的确定可以通过如下思路实现:
遍历被测程序的全部通信操作,得到被测程序可能触发的全部通信报文;
评估每条通信报文作为种子报文变异的优先级权重;种子报文的优先级权重由该报文长度,报文对应的交互深度和报文被监控软件解析处理时的触发的覆盖率信息共同决定;
利用种子报文的优先级权重,定义每个种子报文被选中变异的概率;通过基于概率的种子报文选择算法,实时选出种子报文。
种子报文中的动态字段的确定可以通过如下思路实现:
分析比较重复操作产生的通信数据包,得到其中的需要动态调整的字段信息,即动态字段。
动态字段的实例化是基于通信协议规定进行的实例化,实例化后,可以形成有限个变异报文供步骤200使用,也可以形成变异报文通式、集合或者生成模型,进而能够提供任意数量的变异报文供步骤200使用。
步骤200中,被测程序的状态包括运行正常和运行异常。运行异常的被测程序状态可以为软件崩溃,如进程结束、卡死、重启等。
值得说明的是,本实施例提供的方法中,所述被测程序为客户端程序,即所述被测程序与设备/用户交互,在一个典型的应用场景下,所述被测程序为监控指定设备的监控软件;
具体来说,不同于常规的测试对象如服务端程序,主动发送测试数据即可。本实施例的测试对象为客户端,需先发起请求,然后才能被动接收测试数据。
因此,本实施例进一步提供一种代理机制,用于将变异报文输入至被测程序,解决了自动化测试协议客户端对象困难的问题。
以测试***为本实施例的执行主体为例,对所述代理机制进行说明如下。
测试***运行GUI(图形用户界面)代理,控制所述被测软件(如监控软件)触发所述被测软件的通信行为;测试***运行流量代理,控制所述被测软件接收响应报文;
根据设定的条件选定任一个或任多个响应报文作为种子报文;
所述响应报文是指用户/设备发送的、被测软件接收的报文。
本实施例的有益效果在于:
通过确定种子报文动态字段,并针对动态字段进行调整形成变异报文的手段,省去了针对固定字段进行调整的步骤,有效提升了变异报文的形成效率,为测试和漏洞挖掘过程提供了基础,进而达到了测试简便、漏洞挖掘效率提升的有益效果。
根据上述实施例,在本实施例中:
所述种子报文是根据优先权重从多个通信报文中选择得到的,所述多个通信报文是从所述设备获取的响应报文,所述响应报文是由所述设备在受到所述被测程序触发下生成的;所述优先权重是根据通信报文长度、通信报文交互深度以及被测程序处理通信报文执行的程序基本块的数量中的任一者或任多者组合确定的。
所述响应报文是被测程序在不同控制指令下触发,设备返回的多个通信报文;
所述种子报文中的动态字段是通过比较多个种子报文确定的、在多个种子报文中字段值不同的字段集合。
所述多个种子报文是被测程序在相同控制指令下触发,由设备返回的多个种子报文。
本实施例中,所述可以通过如下思路实现获取被测程序响应于不同设定操作触发的多个通信报文:
针对被测程序,获取能够产生网络通信行为的操作过程;
根据记录的操作过程,构建自动化触发工具;
利用自动化触发工具,运行被测程序触发通信,并抓取网络通信数据包;
对抓取的网络通信数据包预处理、过滤得到被测程序的通信网络数据包集合;
解析网络数据包集合,得到通信报文。
这一获取思路能够解决传统漏洞挖掘工具不支持被动式通信的监控软件的问题和测试过程中的GUI操作流程自动化管理难的问题。
本实施例可以通过如下思路实现比较所述多个种子报文,确定种子报文中的动态字段:
针对网络通信数据包集合,使用协议分析框架分析处理得到每个通信报文的格式信息。并对通信包中的每个(请求,响应)对,构建一个通信字典,字典中的KEY为请求报文,VALUE为响应报文。
通过分析比较重复操作产生的通信数据包,得到其中的需要动态调整的字段信息,即动态字段。
本实施例中,当一个种子报文的测试完成后,可以继续选定更新下一个种子报文,并继续进行测试,直至达到设定的测试停止条件。
在一些优选的实施方式中,所述交互深度可以理解为通信交互过程中发送不同报文的次数,如某次会话中,客户端A向服务端B发送了10条不同报文,那么第10条报文的交互深度为10。再如,某次会话,客户端A向服务端B发送了3条不同报文,那么第3条报文的交互深度为3、第2条报文的交互深度为2。
本实施例的有益效果在于:
本实施例通过通信报文的报文长度、交互深度以及被测程序覆盖率这三个参数为基础,确定通信报文作为种子报文进行后续变异的优先权重,能够将报文长度更大、交互深度更深、被测程序覆盖率更高的通信报文优先确定为种子报文,从而使得种子报文经变异后的测试过程能够覆盖被测程序的更多模块、涉及更深更多的交互对象、压缩被测程序的设计冗余,从而使得测试的效率得到有效提升。
根据上述任一实施例,在本实施例中:
所述得出测试结果的步骤包括:
确定所述被测程序运行异常,则将根据所述被测程序运行异常结果与对应的所述变异报文作为测试结果;
确定所述被测程序运行正常,则更新变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态。
或者,所述模糊测试方法还包括:
更新所述变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态的步骤。
确定所述被测程序运行异常,重启被测程序。
也就是说,所述将变异报文输入至被测程序,监测被测程序状态,得出测试结果的步骤具有两种实现方案。
第一种是崩溃截止测试方案,具体步骤如下:
所述得出测试结果的步骤包括:
确定被测程序运行异常,则将致使被测程序运行异常的变异报文作为测试结果;
确定被测程序运行正常,则更新变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态的步骤,直至满足设定的测试停止条件。
第一种方案的测试过程终止于被测程序崩溃,或者被测程序始终运行正常,但达到了设定的测试停止条件,例如已经遍历了所有可能的变异报文、达到了设定的测试时间或者达到了设定的测试次数。
这种方案的测试结果有两种可能,即被测程序崩溃于某一特定的变异报文,或者被测程序在某特定变异报文集合下运行正常。
第二种是循环测试方案,具体步骤如下:
所述得出测试结果的步骤包括:
若被测程序运行异常,则:
将致使被测程序运行异常的变异报文添加至测试结果;
重启被测程序;
更新变异报文,返回所述将变异报文输入至被测程序,监测被测程序状态的步骤;
若被测程序运行正常,则更新变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态的步骤,直至满足设定的测试停止条件,得出测试结果。
第二种方案的测试过程终止于测试环境达到了设定的测试停止条件,例如已经遍历了所有可能的变异报文、达到了设定的测试时间或者达到了设定的测试次数。
这种方案测试结果的本质是记录使得被测程序崩溃的特定变异报文内容,在此基础上,还可以进一步记录使得被测程序运行正常的特定变异报文内容。
本实施例的有益效果在于:
本实施例通过监控被测程序状态后,执行判断更新,形成测试结果的步骤,解决了自动化向监控软件输入畸形数据(即变异报文)难的问题。
根据上述任一实施例,在本实施例中:
所述根据测试协议将种子报文中的动态字段实例化的步骤包括:
提取种子报文中动态字段的格式信息;所述格式信息包括种子报文对应的通信协议;
根据种子报文中动态字段的格式信息,实例化种子报文中的动态字段。
本实施例中,格式信息的获取可以基于如下思路实现:
对种子报文的私有协议进行分析,提取所述私有协议的格式信息和通信规则。
调整种子报文中动态字段的步骤需要根据所述私有协议的格式信息和通信规则进行,因而除特殊情况外,产生的变异报文数量是有限的,故测试停止条件可以为所有可能的变异报文均被测试过。
本实施例的有益效果在于:
本实施例通过对私有协议的解析,得到种子报文的格式信息,从而为后续变异报文的自动生成提供了基础,解决了私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的问题。
根据上述任一实施例,本实施例针对工业控制领域提供一种具体实施方式如下。
首先对这一特定应用场景进行说明如下。
一个典型应用场景是工业控制领域中的监控软件测试,随着工业控制领域的信息化和自动化的深度融合,近年来工业控制***越来越多的采用成本低、互操作性好的互联网技术方案,比如采用基于TCP/IP的通信协议。这种直接应用互联网技术方案的行为打破了工业控制***原有的封闭性和隔离性,从而增加了来自互联网的攻击威胁。事实上,针对工业控制***的各种网络攻击事件日益增多,暴露出工业控制***中存在大量的安全漏洞。主动发现工业控制***的监控软件中存在的安全漏洞并进行修复成为了一项重要的安全防护措施。
由于工业控制***中的监控软件主动与设备通信,被动接收来自设备的响应数据,且采用专用的协议通信,通信内容与操作人员在GUI上的操作流程高度相关,传统的漏洞挖掘工具如Boofuzz、Peach、AFL不支持被动式通信的监控软件在测试过程中的GUI操作流程的自动化管理,难以自动化向监控软件输入畸形数据,以及面临工业控制***私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的挑战。
本实施例针对工业控制***中的监控软件提出一种被动式模糊测试的漏洞挖掘方法,用来有效发现工业控制***监控软件的协议实现中存在的安全漏洞。模糊测试是一种挖掘软件安全漏洞、检测软件健壮性的一种黑盒方法,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。
本实施例针对工业控制***监控软件的协议实现模块中的安全性,提供一种模糊测试方法,解决传统漏洞挖掘工具不支持被动式通信的监控软件在测试过程中的GUI操作流程自动化管理难,自动化向监控软件输入畸形数据难的问题,以及工业控制***私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的问题,达到有效发现工业控制***监控软件的协议实现模块中存在的安全缺陷的目的。
如图2所示,本实施例涉及的方法流程包括:预处理阶段和模糊测试阶段。(1)预处理阶段:分析监控软件的GUI,收集能够触发网络通信行为的GUI操作;分析私有协议的字段和生成通信规则,将通信报文进行字段划分以及建立通信模板帮助自动化通信;(2)模糊测试阶段:结合通信报文长度、交互的深度以及在监控软件中解析时的路径覆盖信息,定义每个报文作为种子变异的优先级权重,提出一种基于权重的种子报文选择机制;基于预处理阶段得到的报文字段格式信息,生成报文变异模板,实时生成变异报文;提供基于TrafficProxy和GUI Proxy的自动化报文输入机制,将变异的测试报文输入给监控软件处理;采用基于Windows***的EventLog服务,检查是否触发监控软件漏洞。本发明针对工业控制***中的监控软件,达到了有效发现其协议模块实现的安全缺陷的目的。
本实施例具体包括如下步骤:
步骤1,根据监控软件的GUI界面设置逻辑或代码,获取能够产生网络通信行为的操作过程。
步骤1中,可以针对预选的特定监控软件GUI界面进行分析,获取能引起网络通信行为的GUI操作顺序,包括:Button点击、鼠标坐标点击、快捷键操作、输入框填写、选择框选择等。
步骤2,利用步骤1中获取的每一个操作过程,基于AutoIT框架生成自动化触发GUI操作的小程序。
步骤2中,设计自动化GUI操作小程序可以支持如下事件:监控软件启动命令,按钮点击,鼠标坐标点击,选择框选择,Menu选择,快捷键输入、文本框填写,杀死监控软件进程等。
步骤3,利用步骤1中的所有操作,通过数据包嗅探器抓取其触发的网络通信数据包,预处理过滤得到监控软件和设备通信的网络数据包集合。
步骤4,利用步骤3中捕获的网络通信数据包集合,使用协议分析框架分析处理得到数据包中每个通信报文的格式信息。并对通信包中的每个(请求,响应)对,构建一个通信字典,字典中的KEY为请求报文,VALUE为响应报文。同时,通过分析比较重复操作产生的通信数据包,得到其中的需要动态调整的字段信息,重点关注Sequence Number字段和Session ID等字段,从而构建一个动态的通信模板。
步骤4中,对捕获的通信流量进行分析,建立关于协议的知识,包括获得协议格式信息和协议通信模板。
a)提取协议字段格式信息,包括:字段类型和字段内容。字段类型包括Number,Binary,String,字段内容则对应于划分的报文内容。
基于Netzob进行分割处理获得协议字段信息时。对具体的字段类型进行分类:长度小于4字节的视为Number类型,长度大于4字节且是连续的可视字符串则分类为String类型,剩下的字段都归为Binary类型。
b)构建协议通信模板,包括:协议通信过程中的请求报文和应答报文之间的对应关系以及应答报文中的动态字段。动态字段主要包括:Sequence Number字段,Session ID字段以及Checksum字段。
通过重复操作比对对应报文的差异字段,获得其中的动态字段。
步骤5,利用步骤3中的网络通信报文,评估每条报文作为种子报文变异的优先级权重。种子报文的优先级权重由该报文长度,报文对应的交互深度和报文被监控软件解析处理时的触发的覆盖率信息共同决定。
步骤5中,根据三个特征来评估种子报文的优先级,包括:报文在整个通信过程中的深度,由交互过程的次序决定;报文在解析时触发监控软件的基本块的个数,由监控软件实时处理通信报文时执行的程序基本块的个数决定;报文本身的复杂度,由步骤4所述的方法得到字段的个数。
步骤6,利用步骤5得到的种子报文的优先级权重,定义每个种子报文被选中变异的概率。提供基于概率的种子报文选择算法,实时选出种子报文。针对选择的种子报文,基于步骤4报文的格式信息,产生变异模板,然后实时生成变异的报文。
步骤7,自动化将实时生成的变异报文输入给监控软件。构建基于代理的自动化通信报文输入机制,具体的,设计GUIProxy用来提供对监控软件的GUI操作的自动化控制,设计TrafficProxy用来对监控软件通信行为的自动化控制。然后利用自动化通信报文输入机制将变异报文输入给监控软件处理。
步骤8,在完成步骤7后,向GUIProxy发送命令探测监控软件状态,确认是否发生崩溃。如果监控软件发生崩溃,则可根据畸形数据包编写POC脚本进行漏洞验证,从而验证目标设备中存在的安全漏洞。
步骤8中,GUI Proxy主动通过Window***的Event Log服务,查找有关监控软件发生异常的日志记录,包括:Application Error和Application hang等日志记录。如果检测的最新产生的异常日志记录,则记录对应的畸形报文,作为验证漏洞的POC,用于复现该漏洞。
步骤9,重复步骤6、步骤7、步骤8,继续对监控软件自动化模糊测试,若达到测试时间上限,或不能产生新的变异数据包,则测试过程停止。
如图3所示,本实施例步骤7中,可以提供两个代理程序来控制监控的行为:包括GUI操作和接收的网络通信数据。通过GUI Proxy控制监控软件的GUI操作以触发其网络通信行为,接受来自Fuzzing主程序的控制命令,调用步骤2所准备的自动化操作程序;通过Traffic Proxy控制监控软件接收的响应报文,以实现在接收特定报文时提供变异的畸形报文。
在上述技术方案的基础上,本实施例还可以做如下改进。
进一步,所述步骤1中,通过查找GUI界面中能触发网络通信行为的GUI操作的方法包括但不限于查找GUI界面控件,查找厂商提供的产品说明书,以及根据经验查找网络通信行为。针对的通信行为具体操作包括但不限于连接PLC,上载PLC程序,下载PLC程序,切换PLC模式(如编程模式),启停PLC等。
进一步,所述步骤4中,利用协议分析框架分析得到通信报文的格式信息。需要对通信报文根据长度进行聚类,然后使用Netzob协议分析框架对聚类的报文进行格式对齐分割。对每一个分割得到的报文字段,定义的类型包括但不限于:Number类型,小于等于4个字节的数据;String类型,连续的可视字符;Binary类型,剩余的报文类型。对于构建的协议通信模板,可能会出现重复KEY的情况,对此将重复的KEY合并为一个,对应的VALUE则去重构建一个列表。对于其中识别的动态字段,通过重放包含这些动态字段的报文来排除无影响字段。
进一步,在所述步骤7中,通过给GUIProxy发送的命令包括但不限于Kill,Launch,Detect,Operation:[cmd],其中Kill表示杀死运行的监控软件的进程,Launch表示启动监控软件程序,Detect表示检查监控软件的运行状态是否发生崩溃,Operation:[cmd]表示具体的操作命令,它会直接调用执行提前写好的GUI操作的小程序。通过给TrafficProxy发送的命令包括但不限于Status,Forward,Modify,Close,其中Status表示检查监控软件和TrafficProxy的连接状态以及其中缓存的通信报文,Forward表示直接利用通信模板产生反馈报文,Modify表示利用提供的变异报文输入给监控软件,Close表示关闭监控软件和TrafficProxy的通信连接。
进一步,步骤8中,Fuzzing主程序通过主动向GUIProxy请求监控软件的状态来发现漏洞是否被触发。其中GUIProxy会主动请求Windows***的EventLog服务来检查Application的状态,如果发现在EventLog记录的日志上发现了目标监控软件的Application Error的日志,则GUIProxy会向Fuzzing主程序返回漏洞被发现的信息。
本实施例的有益效果在于:
本实施例用以解决传统漏洞挖掘工具不支持被动式通信的监控软件在测试过程中的GUI操作流程自动化管理难,自动化向监控软件输入畸形数据难的问题,以及工业控制***私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的问题,实现了有效发现工业控制***监控软件的协议实现模块中的安全缺陷的目的。
根据上述实施例,在本实施例中:
为有效发现工业控制***监控软件的协议实现模块存在的安全漏洞,解决传统漏洞挖掘工具不支持被动式通信的监控软件在测试过程中的GUI操作流程自动化管理难,自动化向监控软件输入畸形数据难的问题,以及工业控制***私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的问题,本实施例提出一种被动式模糊测试的漏洞挖掘方法,该实施例解决了上面问题并取得了有效发现工业控制***监控软件的协议实现模块中的安全缺陷的效果,在真实环境下的商业产品中发现了多个0day漏洞,具有较强的使用价值。
本实施例主要是通过预处理阶段获取监控软件和PLC设备通信的网络数据包以及触发这些通信行为的GUI操作,然后基于这些捕获的通信数据包构建通信模板并准备好自动化控制GUI操作执行的小程序,使得在Fuzzing阶段能自动化操作监控软件并正确区分来自监控软件的请求,同时能根据特定的请求回复变异的数据包,从而实现对监控软件的模糊测试。在此过程中,Fuzzer主程序通过向GUIProxy发送控制命令,自动控制监控软件的GUI操作,通过向Traffic Proxy发送控制命令,自动化控制反馈给监控软件的通信数据包,尤其是提供变异的通信数据包,实现模糊测试的目标。更进一步地,我们提出一种基于覆盖率的机制定义了每条报文作为种子报文变异的优先级权重,并依此在Fuzzing时动态选择种子报文去产生畸形数据。完成畸形数据输入后,通过向GUI Proxy请求监控的状态,判断是否触发漏洞,以达到准确有效发现工业控制***监控软件中存在的安全缺陷的目的。
下面将结合图4示出的时序图,对本实施例的具体步骤进行如下说明:
a)对于给定的监控软件,分析能产生网络通信行为的GUI操作,并记录操作顺序。测试人员通过手工操作监控软件的GUI界面,同时利用数据包嗅探器如Wireshark监控是否产生相关的网络流量,如果有则用文本记录该操作的步骤。
b)利用步骤a)中记录的每一个操作过程,基于AutoIT框架编写自动化触发GUI操作的小程序,并将其编译形成可执行的二进制程序,该程序可通过Python脚本调用,触发GUI操作流程。
c)利用步骤a)中的所有操作,通过数据包嗅探器抓取并保存其触发的网络通信数据包,通过执行过滤命令限制ip.src何ip.dst的范围,其中ip.src为运行监控软件的主机的地址,ip.dst为PLC设备的网咯地址,从而得到监控软件和设备通信的网络数据包集合。
d)利用步骤c)中捕获的网络通信数据包集合,对私有协议进行分析。分析私有协议的目的主要有两个:1)获得私有协议的格式信息。先对通信数据包根据长度进行聚类,然后使用协议自动化分析框架Netzob分析处理得到每个通信报文的字段格式信息,并将获得的字段格式提供类型标签,每个字段必然是三种类型之一:Number,Str,Binary。最后将得到分割后的报文格式信息,并将该信息以Json文件格式存储,备后续步骤使用。2)获得私有协议的通信规则。通信规则用于模拟通信时,当捕获监控软件发起的请求,利用通信规则,我们能提供正确的响应或者变异对应的响应报文。具体的,我们先对通信包中的每个(请求,响应)对,构建一个通信字典,字典中的KEY为请求报文,VALUE为响应报文。同时,通过分析比较重复操作产生的通信数据包,得到其中的需要动态调整的字段信息,我们重点关注Sequence Number字段和Session ID等字段,从而构建一个动态的通信模板。对于其它需要动态调整的字段,我们需要做一些重放分析,判断它是否影响报文重放,如果影响,则需要对该字段的语义进行逆向分析。最后,我们将通信模板也以Json文件格式存储。
如下是其中的一个原始报文信息:
Figure BDA0003248973500000171
基于Netzob框架分析处理,我们得到对应的分割的格式信息:
Figure BDA0003248973500000172
可以看到该报文被分割成三个字段,有两种字段类型分别是Number和Binary。如下是构建的一个通信模板片段:
Figure BDA0003248973500000181
该片段表示,当来自GX Works2的请求为0x5a0000ff时,我们需要拿着0xda0000ff6a020c000100ea0200100202d42b7f1f4b2d5323876c1003”进行响应或者变异,本示例为给出动态字段。
步骤5,利用步骤3中的网络通信报文,评估每条报文作为种子报文变异的优先级权重。种子报文的优先级权重由该报文长度,报文对应的交互深度和报文被监控软件解析处理时的触发的覆盖率信息共同决定,并采用以下公式进行评估:
Figure BDA0003248973500000182
其中N表示一个GUI操作产生的去重的报文的个数,depthi表示第i个报文交互的深度,bb_cnti表示第i个报文在监控软件中被处理时触发的基本块执行的个数,fld_cnti表示第i个报文被识别出来的字段的个数,一般与报文长度正相关。1/3用来对整个通信过程每个报文权重的归一化,使得其权重和为1,和被选中的概率成正相关。
e)利用步骤d)得到的种子报文的优先级权重,定义每个种子报文被选中变异的概率。提供基于概率的种子报文选择算法,实时选出种子报文。针对选择的种子报文,基于步骤d)报文的格式信息,产生变异模板,然后实时生成变异的报文。其中利用boofuzz模糊测试框架读取报文的格式信息,自动化生成变异模板,并在实时Fuzzing时调用seed.mutate方法和seed.render方法,生成变异的测试用例。
f)自动化将实时生成的变异报文输入给监控软件。参考图2,构建基于代理的自动化通信报文输入机制,具体的,设计GUIProxy用来提供对监控软件的GUI操作的自动化控制,设计TrafficProxy用来对监控软件通信行为的自动化控制。在实际Fuzzing过程中,整个自动化输入数据操作的序列如图3所示,Fuzzing主程序是Controller,它初始化向GUIProxy发送一个启动监控软件的命令,然后GUI Proxy则运行监控软件。接着,Controller向GUI Proxy发送控制GUI操作触发网络通信行为的命令,此时GUI Proxy则调用之前步骤b)准备好的GUI操作小程序,会触发监控软件向Traffic Proxy发起请求。同时,Controller周期性请求Traffic Proxy当前是否有来自监控软件的请求,如果发现有,则根据具体情况提供变异的报文,由Traffic Proxy将该报文响应给监控软件完成畸形数据的输入。该过程完全自动化,可将变异报文输入给监控软件处理。
g)在完成步骤f)后,Controller向GUI Proxy发送命令探测监控软件状态,确认是否发生崩溃。如果监控软件发生崩溃,GUI Proxy则向Windows***的Event Log服务查找异常日志,如果发现崩溃则返回异常信息给Controller,则可根据畸形数据包编写POC脚本进行漏洞验证,从而验证目标设备中存在的安全漏洞。
h)重复步骤e)、步骤f)、步骤g),继续对监控软件自动化模糊测试,若达到测试时间上限,或不能产生新的变异数据包,则测试过程停止。
本实施例的有益效果在于:
有效发现工业控制***监控软件的协议实现模块存在的安全漏洞,解决传统漏洞挖掘工具不支持被动式通信的监控软件在测试过程中的GUI操作流程自动化管理难,自动化向监控软件输入畸形数据难的问题,以及工业控制***私有协议格式未知、交互流程未知带来的漏洞挖掘效率低下的问题。
本实施例能够有效发现工业控制***监控软件的协议实现模块中的安全缺陷的效果,在真实环境下的商业产品中发现了多个0day漏洞,具有较强的使用价值。
下面对本发明提供的被动式模糊测试***进行描述,下文描述的被动式模糊测试***与上文描述的模糊测试方法可相互对应参照。
本发明实施例提供一种被动式模糊测试***,包括:
变异模块,根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
测试模块,根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
本实施例的有益效果在于:
通过确定种子报文动态字段,并针对动态字段进行调整形成变异报文的手段,省去了针对固定字段进行调整的步骤,有效提升了变异报文的形成效率,为测试和漏洞挖掘过程提供了基础,进而达到了测试简便、漏洞挖掘效率提升的有益效果。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行模糊测试方法,该方法包括:确定种子报文和种子报文中的动态字段;调整种子报文中的动态字段,形成变异报文;将变异报文输入至被测程序,监测被测程序状态,得出测试结果。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的模糊测试方法,该方法包括:确定种子报文和种子报文中的动态字段;调整种子报文中的动态字段,形成变异报文;将变异报文输入至被测程序,监测被测程序状态,得出测试结果。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的模糊测试方法,该方法包括:确定种子报文和种子报文中的动态字段;调整种子报文中的动态字段,形成变异报文;将变异报文输入至被测程序,监测被测程序状态,得出测试结果。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种模糊测试方法,其特征在于,包括:
根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
2.根据权利要求1所述的模糊测试方法,其特征在于,所述种子报文是根据优先权重从多个通信报文中选择得到的,所述多个通信报文是从所述设备获取的响应报文,所述响应报文是由所述设备在受到所述被测程序触发下生成的;所述优先权重是根据通信报文长度、通信报文交互深度以及被测程序处理通信报文执行的程序基本块的数量中的任一者或任多者组合确定的。
3.根据权利要求1所述的模糊测试方法,其特征在于,所述种子报文中的动态字段是通过比较多个种子报文确定的、在多个种子报文中字段值不同的字段集合。
4.根据权利要求1至3中任一项所述的模糊测试方法,其特征在于,所述得出测试结果的步骤包括:
确定所述被测程序运行异常,则将根据所述被测程序运行异常结果与对应的所述变异报文作为测试结果;
确定所述被测程序运行正常,则更新变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态。
5.根据权利要求1至3中任一项所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:
更新所述变异报文,并返回所述将变异报文输入至被测程序,监测被测程序状态的步骤。
6.根据权利要求1至3中任一项所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:
确定所述被测程序运行异常,重启被测程序。
7.根据权利要求1至3中任一项所述的模糊测试方法,其特征在于,所述根据测试协议将种子报文中的动态字段实例化,包括:
提取所述种子报文中动态字段的格式信息;所述格式信息包括种子报文对应的通信协议;
根据所述种子报文中动态字段的格式信息,实例化种子报文中的动态字段。
8.一种被动式模糊测试***,其特征在于,包括:
变异模块,根据测试协议将种子报文中的动态字段实例化,并保留固定字段,形成至少一个变异报文,其中所述种子报文是根据设备与被测程序之间的通信协议生成的,所述动态字段对应的字段值是可配置的设备运行参数或用户参数;
测试模块,根据所述变异报文运行被测程序,监测被测程序状态,得出测试结果,所述测试结果包含所述变异报文与被测程序状态的对应关系。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述模糊测试方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述模糊测试方法的步骤。
CN202111040139.5A 2021-09-06 2021-09-06 模糊测试方法、***、电子设备及介质 Pending CN113934621A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111040139.5A CN113934621A (zh) 2021-09-06 2021-09-06 模糊测试方法、***、电子设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111040139.5A CN113934621A (zh) 2021-09-06 2021-09-06 模糊测试方法、***、电子设备及介质

Publications (1)

Publication Number Publication Date
CN113934621A true CN113934621A (zh) 2022-01-14

Family

ID=79275123

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111040139.5A Pending CN113934621A (zh) 2021-09-06 2021-09-06 模糊测试方法、***、电子设备及介质

Country Status (1)

Country Link
CN (1) CN113934621A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114553490A (zh) * 2022-01-25 2022-05-27 浙江木链物联网科技有限公司 工业用被动模糊测试方法、***和可读存储介质
CN115242676A (zh) * 2022-07-28 2022-10-25 度小满科技(北京)有限公司 软件***容量压力测试方法、装置、电子设备及存储介质
CN116225962A (zh) * 2023-03-31 2023-06-06 四川邦辰信息科技有限公司 用于模糊测试的json变异方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105721230A (zh) * 2014-11-30 2016-06-29 中国科学院沈阳自动化研究所 一种面向Modbus协议的模糊测试方法
CN105763392A (zh) * 2016-02-19 2016-07-13 中国人民解放军理工大学 一种基于协议状态的工控协议模糊测试方法
CN105827469A (zh) * 2014-12-29 2016-08-03 国家电网公司 一种modbus tcp实现缺陷测试仪及其检测方法
CN110191019A (zh) * 2019-05-28 2019-08-30 北京百度网讯科技有限公司 车辆can总线的测试方法、装置、计算机设备和存储介质
CN110505111A (zh) * 2019-07-09 2019-11-26 杭州电子科技大学 基于流量重放的工控协议模糊测试方法
US20200351191A1 (en) * 2019-05-02 2020-11-05 National Chiao Tung University Automatic protocol test method by reverse engineering from packet traces to extended finite state machine
CN112235241A (zh) * 2020-09-08 2021-01-15 广州大学 基于模糊测试的工控蜜罐特征提取方法、***及介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105721230A (zh) * 2014-11-30 2016-06-29 中国科学院沈阳自动化研究所 一种面向Modbus协议的模糊测试方法
CN105827469A (zh) * 2014-12-29 2016-08-03 国家电网公司 一种modbus tcp实现缺陷测试仪及其检测方法
CN105763392A (zh) * 2016-02-19 2016-07-13 中国人民解放军理工大学 一种基于协议状态的工控协议模糊测试方法
US20200351191A1 (en) * 2019-05-02 2020-11-05 National Chiao Tung University Automatic protocol test method by reverse engineering from packet traces to extended finite state machine
CN110191019A (zh) * 2019-05-28 2019-08-30 北京百度网讯科技有限公司 车辆can总线的测试方法、装置、计算机设备和存储介质
CN110505111A (zh) * 2019-07-09 2019-11-26 杭州电子科技大学 基于流量重放的工控协议模糊测试方法
CN112235241A (zh) * 2020-09-08 2021-01-15 广州大学 基于模糊测试的工控蜜罐特征提取方法、***及介质

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114553490A (zh) * 2022-01-25 2022-05-27 浙江木链物联网科技有限公司 工业用被动模糊测试方法、***和可读存储介质
CN114553490B (zh) * 2022-01-25 2024-02-09 浙江木链物联网科技有限公司 工业用被动模糊测试方法、***和可读存储介质
CN115242676A (zh) * 2022-07-28 2022-10-25 度小满科技(北京)有限公司 软件***容量压力测试方法、装置、电子设备及存储介质
CN115242676B (zh) * 2022-07-28 2023-10-03 度小满科技(北京)有限公司 软件***容量压力测试方法、装置、电子设备及存储介质
CN116225962A (zh) * 2023-03-31 2023-06-06 四川邦辰信息科技有限公司 用于模糊测试的json变异方法

Similar Documents

Publication Publication Date Title
CN113934621A (zh) 模糊测试方法、***、电子设备及介质
US8006136B2 (en) Automatic grammar based fault detection and isolation
US9639456B2 (en) Network-based testing service and method of testing in a network
CN110912776B (zh) 一种实体路由器管理协议的自动化模糊测试方法及装置
US20140047275A1 (en) Flow based fault testing
CN111488577B (zh) 一种基于人工智能的模型建立方法和风险评估方法及装置
US20090034423A1 (en) Automated detection of TCP anomalies
CN108337266B (zh) 一种高效的协议客户端漏洞发掘方法与***
CN108241580B (zh) 客户端程序的测试方法及终端
CN107168844B (zh) 一种性能监控的方法及装置
CN111510339B (zh) 一种工业互联网数据监测方法和装置
CN113158197B (zh) 一种基于主动iast的sql注入漏洞检测方法、***
CN111628900A (zh) 基于网络协议的模糊测试方法、装置和计算机可读介质
KR20150025106A (ko) 애플리케이션 검증결과 모니터링 서비스를 위한 검증장치, 단말장치, 시스템, 방법 및 컴퓨터로 판독 가능한 기록 매체
CN112398839B (zh) 工控漏洞挖掘方法及装置
CN110365714A (zh) 主机入侵检测方法、装置、设备及计算机存储介质
Landauer et al. A framework for automatic labeling of log datasets from model-driven testbeds for HIDS evaluation
CN115879116A (zh) 越权漏洞检测的方法、装置、存储介质及计算机程序产品
CN116318783A (zh) 基于安全指标的网络工控设备安全监测方法及装置
CN113760753B (zh) 基于灰盒模糊技术的quic协议测试方法
Allen et al. A model-based approach to the security testing of network protocol implementations
CN112363931A (zh) Web***测试方法及装置
CN117648262B (zh) 模糊测试方法、存储介质和电子装置
CN113472739B (zh) 针对控制设备私有协议的脆弱性发现方法和装置
CN116933272B (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