文献标识码:A
DOI:10.16157/j.issn.0258-7998.2016.07.020
中文引用格式:李航,董伟,朱广宇. 基于Fuzzing测试的工业控制协议漏洞挖掘技术研究[J].电子技术应用,2016,42(7):79-82.
英文引用格式:Li Hang,Dong Wei,Zhu Guangyu. Research on industrial control protocol vulnerability mining technology based on Fuzzing test[J].Application of Electronic Technique,2016,42(7):79-82.
0 引言
随着两化的深度融合,工业控制系统集成了自动化技术、网络技术和信息技术,工业企业也由原来的“孤岛式”、完全封闭的状况,向互联互通方向大力发展。工业企业的信息化建设提高了企业的生产经营效率,也带来了工业控制系统信息安全的风险。最近几年,针对工业控制系统的攻击层出不穷,且攻击的深度和强度进一步增强,“震网”和“火焰”病毒肆虐,已经说明了工业控制系统信息安全问题的严重性。2015年12月,乌克兰电网被攻破,导致大面积停电;2016年1月,以色列宣称本国电网遭受了大规模信息安全攻击等,更是直指工业控制系统的脆弱性。由于工业控制系统大量应用在国家重要基础设施内,若被恶意攻击,使得控制系统崩溃,后果将不堪设想。
对于工业企业来说,及时发现信息安全风险,尽早对大量工业企业控制系统进行检测测试,发现其安全漏洞并及时加固,才可提高其自身的工控信息安全抵抗能力。但是,目前使用的工业控制标准基本参照国际标准,工控产品大部分都是国外品牌,我国政府并没有强制性的审查制度和认证体系,工控设备厂商不会完全主动对我国工业企业开放,只能采用黑盒技术,从标准协议入手,利用Fuzzing测试手段,挖掘工业控制系统和产品的安全漏洞,做到尽早发现、尽早加固。
1 Fuzzing测试
Fuzzing测试是采用黑盒测试的思想和技术,将一组随机生成的数据作为程序的输入,并监视程序的异常状态,通过记录导致异常的输入来进一步回溯程序的缺陷位置。早期的Fuzzing技术仅是应用在软件测试方面的一种简单的随机测试技术,但却有效地发现了许多程序中的错误。
一般情况下,Fuzzing工具包括一个随机数据生成器,用来产生随机二进制数据或者字符串,同时,为了协助追踪错误原因和地址,Fuzzing还引入了一些脚本用来加强测试过程的自动化,记录程序崩溃现场。为了避免产生大量无效的测试数据,参数脚本给出了引擎生成的测试用例中数据的格式、长度等与数据之间的一些关系,如SPIKE、Sulley使用的类C格式的脚本、Peach使用的XML格式的脚本。许多Fuzzing工具的数据生成方式基于变异技术,而样本文件则是这些工具用来变异测试数据的基准。基于样本文件产生的测试数据,可以大大提高测试用例的有效性,可以提高测试的代码覆盖率,可以减轻测试用例构造的复杂度[1]。图1为模糊测试阶段。
针对工业控制系统标准协议的Fuzzing测试,需要结合工业控制系统的特征,一种比较有效的方式就是对工业控制系统标准协议的格式进行分析,通过对有效字段的有效变换来增加输入的有效性。这种方式的实现主要是忽略掉协议的固定字段进而减少输入数据的产生数量,提高测试效率和测试的有效性。其次为了进一步提高数据的生成效率,可以采用多元联动的方式来生成数据,即:由原来的每次变换只变换一个字段改成每次变换同时变换多个相关的字段。这样的数据生成器可以产生更加有效的输入[2]。为了解决随机产生数据带来的状态爆炸等问题,在数据生成器中加入了数据行为和状态机,这样的生成方式超越了黑盒测试的限制,介于黑盒测试和白盒测试之间,而状态机的加入更是提高了数据之间的关联特性,使得生成测试数据的有效性大大提高。
2MMS标准
IEC61850标准是电力系统自动化领域唯一的全球通用标准。其中MMS标准协议是基于通用网络通信平台的IEC61850标准的8-1指定协议,大量应用在电力系统自动化领域。
MMS标准是为了便于信息处理系统互联而制定的成套国际标准之一,它作为开放系统互联OSI的基本参考模型的一个应用层服务元素ASE,列入OSI环境中的应用层之中。
MMS是最大、最复杂的应用层协议标准之一,其目的是定义由MMS提供的各种服务,MMS服务由MMS协议提供。协议采用ISO8649及ISO8822分别定义关联控制服务元素ACSE和表示层的适用服务。也就是说,MMS作为OSI应用层标准,它需要使用OSI表示层(第六层)向其提供服务[3]。
3 基于Fuzzing测试的漏洞挖掘研究及问题分析
本文研究对象为电力自动化系统自动化设备中的继电保护设备,该设备是变电站二次电力系统中最重要的一个设备。当电力系统发生故障或异常工况时,可以自动将故障设备从系统中切除,或者发出信号由值班人员消除异常工况根源,以减轻或者避免设备损坏和对相邻地区供电的影响。
3.1 Fuzzing测试工具架构
Fuzzing测试工具为自主研发,该产品硬件设备为定制化开发,具有6个10/100/1 000 M业务电口、16路数字量输入接口、2路继电器输出接口、1路RJ45 console接口(RS232协议)、1路232/485(DB9)接口。
软件系统采用B/S结构,功能模块分为:控制模块、端口扫描模块、测试用例生成与加载模块、Fuzz模块、Monitor模块;测试工具还集成了数据行为学习功能的自学习模块,可根据数据情况自学习数据结构,建立数据分析库,提高Fuzzing测试算法的效率。Fuzzing测试工具涵盖Ethernet、ARP、IP、ICMP、IGMP、UDP以及TCP等常用网络协议的模糊测试,同时还支持Modbus TCP/IP、DNP3.0、EtherNet/IP-CIP、Foudation Fieldbus、IEC104、IEC-61850、MMS、PROFINET以及OPC UA等工控协议。软件系统的功能模块图如图2所示。
3.2 基于Fuzzing的漏洞挖掘过程
针对继电保护的测试采用Fuzzing测试技术,利用桥接方式,在被测设备和其上位机系统之间建立物理连接,具有监听、学习、测试等模式。
按照图3的连接示意图将被测设备和测试工具连接在一起,对被测设备进行测试时,首先对被测报文进行监听(如图4),分析得出其被测设备与上位机系统通信规约为MMS标准协议。
确定MMS标准协议后,启动测试程序,选择ARP、ICMP、TCP等状态监视器,用来监控被测设备的通信状态,同时选择MMS标准协议语法测试模块。此时被测设备与测试工具通信状态良好,如图5监视器连接状态比对图所示。
图5左侧说明在测试开始时,ARP、ICMP、TCP等状态监视器显示正常,被测设备与测试工具之间通信连接正常。启动以后,会利用Fuzzing技术进行MMS协议语法测试用例的构造。MMS-TPKT数据语法测试用例中,按照TPKT格式,版本号和保留位为固定字段,长度和数据段进行多种变异,从而生成大量格式正确的随机数据。在测试过程中,会打开一个TCP连接,发送数据包并尝试接收数据包,如果不能接收,则关闭该TCP连接,并且打开一个新的TCP连接。如果不能打开一个新的TCP连接,则表示上一条测试数据导致设备发生了异常,并且对该数据的版本号值、保留位以及相关子集的大小等进行分析,得出产生异常的原因。
在启动测试并持续一段时间后,如图5右侧所示,ARP、ICMP状态监视器发生丢包,TCP状态监视器连接中断,被测设备出现拒绝服务状态,完全无法工作。
3.3 问题回溯以及结果分析
对被测设备发生的问题进行数据分析,采用回溯方式,同时分析测试报文,如图6。
MMS协议栈是基于TCP/IP的,作为定义在开放系统互联模型(OSI)之上的应用层协议,在TCP/IP之上构建MMS通信的映射方式有2种:(1)在TCP/IP与会话层之间采用RFC1006作为MMS的适配层;(2)在MMS与TCP/IP之间直接映射。
当把ISO/OSI应用移植到TCP/IP环境中时,可采用2种方式:(1)移植每一个单独的应用,在TCP上开发本地协议;(2)通过TCP/IP提供的ISO/OSI的传输服务,此方法为所有的基于传输服务的应用提供通用方案。
ISO8073传输协议在对等层间以非连续的单元传输信息,这些单元叫作传输协议数据单元(TPDU),为了在TCP上实现TS服务,需要将TPDU封装入一个非连续的报文单元——TPKT。
由于TCP报文字节流是没有边界的,为了达到NS服务的要求,要通过一种机制实现TPDU的定界,TPKT恰好实现了这种封装。
TPKT包含报文头、TPDU两部分。通过TCP实现NS服务要实现报文的封装和拆分,以向上层提供非连续的报文而非字节流。TPKT的具体格式如表1。
分析得出,MMS标准利用了TPKT协议,而TPKT(transport services on top of the TCP)协议是应用层数据传输协议,它处于TCP协议之上,用来传输应用层数据负载,而在电力设备中,基于MMS协议的数据用来传输通信的负载数据,或者承载更高层的协议。
利用问题报文并结合MMS协议进行分析,发现如下问题:
(1)在TCP流上进行传输的数据是没有界限的,而TPKT提供了报文分界,于是当发送的报文的TPKT的length字段超过了设备缓存的长度,length字段设置为50 000,实际测试用例累计达到50 004,就可能造成设备内存溢出进而造成设备宕机,拒绝服务。
(2)在测试用例中组装了正确的协议头,但是协议负载部分填充了不符合MMS协议规约的数据,如果设备对这种报文的处理存在缺陷,可能导致协议栈崩溃,出现拒绝服务。
在回溯过程中,如果回溯的区间过短,那么Fuzzing测试工具监视器不会出现问题,只有回溯的区间达到某一个临界值后问题才会重现漏洞。由此可见,漏洞的出现和数据的积累有着直接的相关性。
4 结束语
本文介绍了Fuzzing测试技术的基本情况,分析了MMS标准协议的结构和工作特点,利用自主研发的Fuzzing测试工具,完成了针对电力设备的漏洞挖掘及分析工作,有效证明了基于Fuzzing测试技术的工业控制协议漏洞挖掘技术的可行性。同时对于工业控制系统及设备来说,被恶意攻击后拒绝服务,会给工业企业正常生产带来非常大的影响。可以利用这项研究,与工业企业、工控系统及设备生产制造商合作,开展相关测试的研究并形成测试规范和标准,在系统以及设备上线前、运行调试中、后期维护中进行测试工作,发现系统本身的漏洞,及时进行补丁升级或者实施有效防护措施,有效提升工业控制系统的信息安全性。
参考文献
[1] Michael Sutton,Adam Greene,Pedram Amini.模糊测试-强制发掘安全漏洞的利器[M].段念,赵勇,译.北京:电子工业出版社,2013.
[2] 张宝峰,张翀斌,许源.基于模糊测试的网络协议漏洞挖掘[J].清华大学学报:自然科学版,2009,49(S):14-15.
[3] ISO 9506-1,ISO 9506-2,ISO/IEC 8802-3.Communication networks and systems in substations Part8-1:Specific Communication Service Mapping(SCSM)——Mappings to MMS[S].2011.