基于Sulley改进的工控协议模糊测试架构设计

2017-10-21 03:40刘仁辉赵云飞许凤凯
网络安全与数据管理 2017年19期
关键词:网络协议工控测试用例

马 洁,刘仁辉,赵云飞,许凤凯

(华北计算机系统工程研究所,北京 100083)

基于Sulley改进的工控协议模糊测试架构设计

马 洁,刘仁辉,赵云飞,许凤凯

(华北计算机系统工程研究所,北京 100083)

模糊测试(Fuzzing)可以有效发现协议漏洞。然而不同于网络协议,工控协议模糊测试具有协议种类众多、私有协议解析难等特点。对此,文章转换问题解决思路,从工控工程师的角度入手,解析了Sulley的模糊测试架构和流程,设计了基于Sulley改进的工控协议模糊测试架构,采用基于块的可视化拖拽式界面进行私有协议的数据构造,公有协议采用套件的形式进行导入,添加输入优化模块以适应于工控系统,该框架有助于解决工控协议模糊测试中易用性差、测试负载大、测试效率低的问题。

模糊测试;工控协议;Sulley

0 引言

工控协议作为数据的组织规范,其健壮性直接关系到关键工控数据的安全。模糊测试技术作为协议健壮性测试的一种常用技术,通过向应用提供非预期的输入并监控输出中的异常来发现故障[1]。网络协议模糊测试可以有效地挖掘缓存区溢出、整数处理、抗拒绝服务、格式化字符串、竞争条件等漏洞[2]。

传统的网络协议模糊测试框架日渐成熟,但是并不适用于工控协议。工控协议自身具有协议种类多、协议构造非公开、面向控制等特点,使得模糊测试前期对协议进行解析的门槛非常高,协议脚本构造过程耗时耗力,大大降低了模糊测试在工控协议领域的易操作性。其次,工控设备无法承载大量测试用例的输入,对大量随机发送的数据免疫,因此模糊测试发送的大量测试数据实际上在到达协议处理程序之前就被抛弃,造成测试效率低下的问题。

Sulley是一款开源的通用网络协议模糊测试框架,相比其他工具,它将自动化虚拟技术融合到框架中,可以很好地跟踪数据交互和进程,抓取网络流量,记录崩溃信息。然而若将其直接应用于工控协议模糊测试中,与其他工具一样具有易用性差、测试负载大、测试效率低的缺陷。本文优化了Sulley架构,设计了一种专门为工控系统开发人员自测使用的工控协议模糊测试架构,有助于解决工控协议模糊测试的困难,使模糊测试更加便捷,测试效率更高。

1 现有的协议模糊测试架构分析

1.1传统网络协议模糊测试架构分析

网络协议模糊测试架构由输入向量确定模块、模糊测试数据生成模块、模糊测试执行模块、监控模块这四个模块构成。其中直接影响测试效果的是输入向量确定模块和模糊测试数据生成或变异模块。

在输入向量确定模块,最初,对于公开协议,由测试者根据已有知识和经验构造协议,编写测试脚本。然而测试的前提是测试者必须对协议的规约和交互有深刻的了解。对于未知协议,一般采用逆向工程的方法实现协议的解析。无论是公开协议还是未知协议,半人工化的协议模糊测试均要求测试者付出较多的时间精力来进行协议构造。后来,自动化协议解析方法被提出,目前的研究主要采取基于网络流量和基于动态污点分析的自动化解析方法。学者也不断进行改进,例如:孙哲[3]等将特征提取算法、流量聚类分类算法和深度数据包检测技术结合,实现了一个自动化协议分析漏洞挖掘系统的原型;文献[4]中使用动态污点跟踪法和混合符号执行技术首次解决协议中的校验和防护机制问题;彭勇等[5]将内存模糊测试技术融入到私有协议的测试中,减少了协议解析的工作量。但是基于网络流量的解析方法存在测试效果受网络流量抓取的多样性及特征提取参数设置的影响的缺点,动态污点分析方法对被测设备的存储空间和处理能力要求较高。

在模糊测试数据生成模块,为了减少测试用例的重复性,提升测试效率,加大测试代码覆盖率,文献[6]提出了一种随机信号处理和正则表达式相结合的测试用例生成方法。随机信号处理用来减少等价或类似的输入,正则表达式提升了测试的代码覆盖率。文献[7]则运用分类树由上到下将协议结构分为四层:协议、字段、字段属性、字段值,然后使用启发性算子生成测试用例。还有一些学者通过改进遗传算法来实现对测试用例的优化[8-9]。

1.2针对工控协议的现有模糊测试架构分析

工控协议除了已公开的MODBUS、OPC等协议之外,还包含有大量的格式未知的私有协议。被测的工控设备大多是嵌入式的,不能满足自动化协议解析对存储空间和处理能力的要求,且不能负载普通模糊测试所发送的大量测试数据。因此网络协议的模糊测试架构并不能直接应用在工控协议模糊测试中。

目前针对工控协议进行模糊测试的工具大部分采取单独开发的某一种或几种工控协议模糊测试套件形式或者是将工控协议测试例程添加到通用协议模糊测试器的方法。单独的工控协议模糊测试套件包括Digitalbond公司开发的ICCPSic套件,Mu Dynamic公司开发的可对MODBUS/TCP、DNP3和IEC61850协议进行模糊测试的Mu测试套件。Devarajan开发了可用于开源网络协议测试框架Sulley的ICCP、MODBUS、DNP3测试例程[8]。

已有的工控协议模糊测试套件和例程均只针对一种或几种公开的工控协议,不具有工控协议模糊测试的通用性,且鲜有对未公开的工控协议进行模糊测试。

2 Sulley模糊测试架构解析

Sulley架构共包括四个部分:数据构造(Data Organization)、会话管理(Session Management)、工具(Utilities)、代理(Agents),如图1所示。

图1 Sulley的模糊测试架构

(1) 数据构造:Sulley使用基于块的思想进行数据构造,它提供包括整数(integer)、字符串(string)等一系列原型(primitive),可自定义复杂类型以及帮助例程。每个原型都有一个模糊库(fuzz_library),用来存储各个原型的畸形数据,模糊库里每个畸形数据是构成协议测试用例的最基本单位。不同的原型组成块(block),块和原型组成请求(request),请求用来在会话管理模块中生成会话图来完成协议的构成。

(2) 会话管理:该模块实现对被测目标的初始化、会话的管理及会话图的遍历,会话图遍历时会从根节点依据每条路径遍历每个点,每个点即每个请求,请求再逐层调用块及原型的模糊库来构成每个测试用例。

(3) 代理:在这部分中Sulley提供3个代理(vmwar虚拟机、进程监控网络监控和网络监控代理)用于保证测试程序发生崩溃时测试能够重新恢复并正常进行,同时可以监控进程和网络流量。

(4) 工具(Utilities):当崩溃发生之后,该模块提供的一系列工具可以帮助定位异常以及引起异常的测试用例,辅助分析崩溃发生的原因。

基于上述架构,Sulley完成模糊测试的流程如图2所示。首先测试人员需要根据协议结构和字段以.py脚本的形式来自定义请求,随后编写测试脚本,测试脚本中实现各个请求的导入、实例化会话和被测目标、设置代理参数。最后运行测试脚本,Sulley形成会话图,并对会话图的每条路径和节点进行遍历,完成对协议的模糊测试。

图2 Sulley的模糊测试流程

3 Sulley架构存在的缺陷

尽管Sulley基于块的思想可以使得协议构造更加有组织性,将测试用例的遍历以遍历会话图的形式实现,高效快捷,但是Sulley发送的测试用例实际上是由每个原型的模糊库里的数据构成,这些数据大部分是基本字符的多次重复或是边界值,这就使得生成的测试用例具有较大的相关性。Sulley发送到被测设备的数据实际上包含了大量具有较高相关性的测试用例。

其次,从Sulley的模糊测试流程中可知,使用Sulley进行模糊测试需要测试者分别进行请求脚本和测试脚本的编写,要求测试者对协议字段、python语法有较清晰的了解。对于未公开协议格式的私有工控协议,Sulley无能为力。

4 基于Sulley改进的工控协议模糊测试架构

该基于Sulley改进的工控协议模糊测试架构包含可视化数据输入模块、套件模块、输入优化模块、会话管理模块、监控代理模块和异常报告模块,如图3所示。本架构沿用了Sulley优秀的会话管理、监控代理及异常报告模块,着重对数据构造和生成部分进行改进。

图3 基于Sulley改进的工控协议模糊测试架构

首先,将协议划分为二三层协议和应用层协议,应用层协议又分为公开协议和私有协议。对于已公开工控协议和二三层协议,协议结构明了,并且公布的协议漏洞较多,因此这两类协议采取测试套件的方式作为输入向量,结合高发的漏洞和协议结构开发协议套件。尽管开发时付出较多,然而一旦开发成功便可以方便测试者重复使用。对于私有协议,结构未知,所以采取基于块的可视化构造方法来确定输入向量。工控工程师熟知协议结构,但苦于脚本语言的学习和编写,可视化拖拽界面可以解决这一困境。可视化拖拽仍然采用Sulley基于块的构造方法,将各种原型、工具、函数以可视化的界面呈现,通过拖拽构建块和请求。

由于工控设备的存储空间和计算能力有限,传统的模糊测试产生的大量测试用例一方面具有较高的相关性,另一方面大量数据发送到工控设备容易造成宕机,使得测试用例不能深入到协议处理模块,造成测试效率低下,所以消除相关性较高的测试用例,减少无效用例便非常重要。本架构引入输入优化模块,在可视化拖拽方式生成测试脚本后,测试用例被传送到优化模块以去除相关性较高的测试用例。

5 结论

本文对工控协议模糊测试进行了研究,主要工作内容如下:

(1)探讨总结了现有协议模糊测试尤其是在输入向量确定阶段和测试用例生成阶段的研究,以及现有工控协议模糊器的缺点;

(2)对开源模糊测试框架Sulley的架构和测试流程进行详细解析,设计了基于Sulley改进的工控协议模糊测试架构。利用工控系统工程师完备的协议知识,将工程师作为模糊测试工具的使用主体,通过可视化拖拽的方式构造协议块来降低入门门槛,减少测试脚本的人工编写。采用分层测试的策略,将通用的二三层协议和已公开的工控协议进行封装以便测试人员进行直接使用,私有工控协议单独使用可视化方式进行数据构造,实现了通用和私有协议测试的兼容。在现有架构中加入输入优化模块,解决测试用例相关性高的问题,提升了工控协议模糊测试效率。

[1] SUTTON M, GREENE A, AMINI P.模糊测试:强制性安全漏洞挖掘[M]. 黄陇,于莉莉,李虑,译.北京:机械工业出版社, 2009.

[2] 李红辉,齐佳,刘峰,等. 模糊测试技术研究[J]. 中国科学, 2014, 44(10): 1305-1322.

[3] 孙哲,刘大光,武学礼,等. 基于模糊测试的网络协议自动化漏洞挖掘工具设计与实现[J]. 信息网络安全,2014(6):23-30.

[4] WANG T L, WEI T, GU G F, et al. TaintScope: a checksum-aware directed fuzzing tool for automatic software vulnerability detection[C]. 2010 IEEE Symposium on Security and Privacy, 2010: 497-512.

[5] 彭勇, 王婷, 熊琦,等. 针对私有协议的模糊测试技术研究[J]. 北京交通大学学报,2013,37(5):8-12.

[6] SUI A F, TANG W, HU J J, et al. An effective fuzz input generation method for protocol testing[C]. IEEE 13th International Conference on Communication Technology, 2011: 728-731.

[7] MA R, JI W D, HU C Z, et al. Fuzz testing data generation for network protocol using classification tree[C]. Communications Security Conference IET, 2014: 1-5.

[8] 谢丰, 彭勇, 赵伟, 等. 工业控制设备安全测试技术[J]. 清华大学学报(自然科学版), 2014, 54(1): 29-34.

[9] 向騻, 赵波, 纪祥敏, 等. 一种基于改进Fuzzing架构的工业控制设备漏洞挖掘框架[J]. 武汉大学学报(理学版), 2013, 59(5): 411-415.

The design of fuzzing architecture for industry control protocols based on Sulley

Ma Jie, Liu Renhui, Zhao Yunfei, Xu Fengkai

(National Computer System Engineering Research Institute of China, Beijing 100083, China)

Fuzzing can detect protocol vulnerabilities effectively. Different from network protocols, the industry control protocols are various and it is difficult to get the regulation of private industry control protocols. Therefore, the resolution is proposed by converting the subject of fuzzing test from testers to industry engineers. Firstly, fuzzing architecture and testing process of Sulley are analyzed. Based on that, an improved fuzzing architecture for industry control protocols is designed. In the new architecture, block-based visual interfaces are used for building private protocols. Public industry control protocols are tested by importing test suite. Besides, an optimization module to reduce testing data input is added into the architecture for the purpose of adjusting to industry devices. This architecture is meaningful to resolve problems of industry control protocols fuzzing including poor usability, large testing load and low efficiency.

fuzzing; industry control protocols; Sulley

TP393

A

10.19358/j.issn.1674- 7720.2017.19.001

马洁,刘仁辉,赵云飞,等.基于Sulley改进的工控协议模糊测试架构设计[J].微型机与应用,2017,36(19):3-5.

2017-05-02)

马洁(1993-),女,硕士,主要研究方向:工控信息安全。刘仁辉(1968-),男,硕士,高级工程师,主要研究方向:自动化控制、工控信息安全。赵云飞(1969-),男,硕士,高级工程师,主要研究方向:自动化控制、工控信息安全。

猜你喜欢
网络协议工控测试用例
回归测试中测试用例优化技术研究与探索
基于SmartUnit的安全通信系统单元测试用例自动生成
一种蓝牙多跳网络协议的设计与研究
工控速派 一个工控技术服务的江湖
工控速浱 一个工控技术服务的江湖
基于载波技术的多点温度测量系统设计
基于DPI技术的语音视频流量监控系统设计与实现
热点追踪 工控安全低调而不失重要
基于攻击图的工控系统脆弱性量化方法
基于依赖结构的测试用例优先级技术