孟强 孟瑜炜 俞荣栋
摘要:工业控制系统是国家关键基础设施的重要组成部分,其在与信息化技术高度融合的过程中,面临着严峻的网络与信息安全风险的挑战。作为最常见的网络攻击方式,漏洞的利用攻击占据了工业控制系统安全事件中的绝大多数。因此,如何有效识别和发现工控系统漏洞,成为了解决工控系统安全问题的重要方面。模糊测试技术,由于不严格依赖于协议和系统逆向,一直以来都是漏洞发现的有效手段。然而,由于工控系统自身相对封闭的架构、相对苛刻的运行环境以及大量工控私有协议在线运行等实际问题,使得利用模糊测试的技术手段发现工控系统漏洞存在更大的挑战。本文从模糊测试技术的原理和发展现状入手,总结梳理了工控系统模糊测试技术的制约和限制条件。结合现有工控系统模糊测试工具和架构,提出了基于模糊测试的工控系统漏洞发现和分析系统的总体设计思路,依托抽象化的工控系统模糊测试通用架构,可以实现基于模糊测试技术的工控系统漏洞挖掘平台的定义和高效工具开发,对于指导相关工具研制具有重要意义。
关键词:工业控制系统;模糊测试;漏洞发现;漏洞分析;通用架构
Research on Fuzzing Testing Based Vulnerability Mining and Analysis System for Industrial Control Systems
MENG Qiang1,3,MENG Yuwei1,3,YU Rongdong2,3*
1 Zhejiang Energy Group,Hangzhou,Zhejiang,310007;
2 Zhejiang Energy Industrial Information Engineering Provincial Key Enterprise Research Institute,Hangzhou,Zhejiang,311121;
3 Zhejiang Energy Group Research Institute,Hangzhou,Zhejiang,311121
ABSTRACT:Industrial Control Systems(ICS)are the most important part of the national critical infrastructure. Within the merging process between the industrial control systems and information technologies,ICS is facing severe challenges in cyber security. As the most common cyber attacks,the vulnerabilities exploits are taking the majority of the cyber security incidents in ICS. Therefore,how to effectively identify and finding hidden vulnerabilities in ICS is becoming the key issue in ICS security area. Fuzzing testing,which may not strictly depend on the reverse engineering,is widely recognized as the effective means. However,due to the relatively closed architecture,the tough running environment,as well as the running proprietary protocols,there exists more challenges when using fuzzing testing in ICS. In this paper,we firstly review the theory of the fuzzing testing,and survey the current technical schemes. Based on the current fuzzing testing tools and frameworks,we propose a general architecture of the fuzzing testing based vulnerability mining and analysis system,which is based on a general model of the fuzzing testing framework for ICS. The general architecture is significant for the definition of the vulnerability mining and analysis system,and will promote the efficient development of the new fuzzing testing tools used for ICS.
KEY WORDS:Industrial control systems,Fuzzing testing,Vulnerability mining,General framework.
1引言
以电力网络、供水网络、天然气管网为代表的关键基础设施通常由工业控制系统实现数据采集与状态监管[1]。工业控制系统(ICS,Industrial Control System)通常包括过程控制系統(PCS,Process Control System),分布式控制系统(DCS,Distributed Control System),监视控制与数据采集(SCADA,Supervised Control And Data Acquisition)系统等[1,2]。利用上述工业控制系统的数据采集、状态监控和反馈控制能力,系统管理者可以实现关键基础设施的稳定运行和可靠操作。
然而,随着工业信息化进程的快速发展,工业控制系统在极大提高生产效率的同时,也带来了越发严峻的网络空间安全威胁。各类针对工业控制系统的安全事件层出不穷,严重威胁国家安全和社会稳定[2]。2010年导致伊朗布什尔核电站重大损失的“震网”(Stuxnet)病毒,首次将工业控制系统威胁清晰的展现在世人面前[3]。紧随其后,“火焰”(Flame)病毒[4]和“Havex”病毒[5]使得数以千计的能源企业深受其苦。2015年和2016年连续两次发作的“BlackEnergy”恶意软件及其变种,导致乌克兰电网发生大规模停电事故,受波及的用户超过150万[6]。这一连串的工业控制系统安全事件表明,针对工控系统的网络攻击已经不再是危言耸听的警告,而是实在的威胁。
在形形色的工控系统安全威胁中,利用工业控制系统的漏洞发起攻击是最行之有效的方式之一[7]。因此,如何高效的发现工控系统漏洞是工业控制系统安全研究者们最关注的方向。作为一种专用的软件系统,工业控制系统不可避免的存在各种漏洞,一旦漏洞被攻击者发现,就可能被其利用,使系统遭受未授权的数据访问或者破坏。因此,先于攻击者发现并及时修补漏洞可以有效地减少来自网络的威胁,也成为工控系统安全研究的热点方向。
常见的工业控制系统漏洞挖掘方法包括:手工测试、代码静态分析技术、代码运行态分析技术、二进制比较技术以及模糊测试技术(Fuzzing)等[8,9]。由于工控系统软件规模大、功能复杂,而且普遍采用专用协议,使得代码获取和逆向分析困难,因此对于工控系统的漏洞挖掘,模糊测试技术拥有无可比拟的优势。
模糊测试技术(Fuzzing)的基本思想与黑盒测试类似,是一种基于缺陷注入的软件漏洞挖掘技术。模糊测试的基本思想是,通过向待测试的目标软件输入一些半有效的数据,同时监控程序的运行状况,依靠分析程序的异常状态来发现目标软件存在的漏洞。相比较其他漏洞挖掘方法,模糊测试技术不依赖与对系统代码的深入分析,而且大量操作可以自动化执行,再加之漏洞误报率低,这些特点使得模糊测试技术在漏洞挖掘中具有无可比拟的比较优势[9]。
然而,与传统IT系统不同,在工业控制系统中,模糊测试技术的使用也面临着很多实际的困难和问题。首先,工业控制系统中大量采用资料不公开的私有协议,导致需要对协议进行一定程度的逆向之后才能开展模糊测试;其次,由于工控协议面向控制操作,控制字段较多,导致需要较多类型的变异数据包,可能导致测试效率不高;第三,由于涉及到实时操作,工控模糊测试器可能只能捕获到很小的数据流量;第四,有些工控协议栈可能具有自修复的能力,在异常发生后系统会重启,从而使得异常难以被捕获。
本文在梳理总结模糊测试技术研究发展动态,特别是国内外工业控制系统中模糊测试技术需求和现状的基础上,提出了基于模糊测试的工控系统漏洞发现和分析平台系统的总体架构。架构从工业控制系统模糊测试的一般流程出发,对现有模糊测试技术进行抽象性概括,形成了工控系统模糊测试的通用架构,用户可以根据各自工控系统的实际配置,灵活选用已有工具或开发套件包,针对工控私有协议开展模糊测试,进而通过分析异常行为的发生机理,实现对工控系统漏洞的发现和分析。
2 国内外研究现状
经过多年发展,模糊测试技术已经取得了丰富的成果,同时结合工控系统特点的模糊测试技术也正处于关键技术攻关期。本章将首先总结模糊测试技术的发展历史和当前技术水平,之后结合国内外技术发展情况,梳理工业控制系统中模糊测试技术和相关工具。
2.1 模糊测试技术现状
模糊测试技术最早由威斯康星大学的B. P. Miller于1989年提出,其开发的一个模糊测试工具Fuzz用于对UNIX系统的软件进行测试[10]。模糊测试的概念提出之后,由于其在软件缺陷发现方面的突出效果,得到了软件行业的高度关注,面向不同协议[11,12]、适合不同平台[13,14]的模糊测试工具层出不穷。芬兰Oulu大学研发的网络协议安全测试软件PROTOS[11]在协议的安全性测试方面发挥了巨大作用,甚至最近发生的OpenSSL心脏滴血(Heartbleed)漏洞[15]的发现工具也是PROTOS的后续改进版。
模糊测试从技术分类的角度,根据测试用例生成的方式以及待测对象的代码开放程度可以分为基于变异/生成的模糊测试,以及基于黑盒/白盒的模糊测试。其中基于变异/生成的模糊测试是从测试用例的生成方式出发,分别采用对已有数据进行变异从而构造测试用例,和根据待测对象特点进行全新建模生成全新測试用例集合的方式开展。基于黑盒/白盒的模糊测试,则是从代码开放程度考虑,因为有的待测程序是公开可以获得的,因此可以结合如符号执行等方法进行代码遍历测试,黑盒测试则相反,是在完全无法获得程序的前提下进行[16]。工业控制系统的安全测试方面,大量常见的是黑盒测试,因为大量协议采用非公开的私有协议方式实现。
经过多年发展,模糊测试技术得到了长足的进步,相对其他漏洞挖掘方法表现出很多优势。但也仍然存在技术上的问题,主要表现在以下三个方面:
(1)测试用例的生成应该更加高效,测试用例的有效性直接关系模糊测试的成败。虽然随着运算能力的提高,测试用例的数量已经增加很多,但是在黑盒测试条件下,依然由于测试用例设置的模糊性,导致测试效果不佳。因此,如何提高测试用例生成的有效性,是模糊测试技术研究领域多年来的重要方向。
(2)测试的自动化程度有待提高,模糊测试过程需要经常性地引入人工,参与测试用例的生成,极大限制了模糊测试的效率。如何提高测试的自动化和智能化水平,也是模糊测试领域研究者们的重要探索方向。
(3)复杂漏洞的发现能力应得到提高,常见的模糊测试仅能够发现单点故障的漏洞。随着软件系统的日益庞大,越来越多漏洞的发现有赖于多维条件的组合触发。因此,如何提高现有模糊测试技术在发现复杂漏洞方面的能力,也是学术界探讨的热点问题。
2.2 工业控制系统中的模糊测试技术
工业控制系统中的模糊测试技术与传统的信息系统的情况有所不同。工控系统中大量使用私有协议,这些协议普遍缺乏深入透彻的分析。工控系统专家对于私有协议解析常感到无能为力,而信息系统专家虽然善于解析此类私有协议,但工控系统厂商并非愿意向信息系统专家公开私有协议的情况。这是工控系统模糊测试面临的常见问题。
目前也有一些模糊测试工具适用于一些非私有设计的工控协议。Devarajan于2007年在著名的Sulley模糊测试框架中[17]引入针对ICCP、Modbus、DNP3等工控协议的支持。SecuriTeam在其beSTORM[18]测试器中增加了对DNP3的支持。Mu Dynamics也在其Mu Test套件中提供了对IEC61850、Modbus和DNP3的支持[19]。
总的来说,模糊测试技术经过近30年的发展,已经成为软件漏洞发现的重要技术手段。近年来,随着工业控制系统安全研究的兴起,研究者开始聚焦模糊测试技术在工控系统安全和漏洞发现方面的研究。尽管取得了很大突破,也形成了一些技术框架,但在实用性,特别是针对私有协议的安全性评测方面还有较多的技术挑战。
3 基于模糊测试的工控系统漏洞发现系统
工控系统中由于大量采用私有协议,协议具体细节难以获知,导致在实际进行漏洞发现时,经常面临以下三种选择:一是利用随机数据流进行模糊测试;二是采用某些启发式算法在实时流或预先捕获的流量上进行变异;三是尝试逆向私有协议。由于协议逆向较为复杂,因此主要工作就集中在了与模糊测试相关的两个选项中。在本文后续的论述中,将围绕工控系统模糊测试的基本流程和方法阐述利用模糊测试进行工控漏洞发现的一般方法和通用系统架构。
3.1 工控系统模糊测试的一般流程
与传统IT系统相似,工控系统模糊测试的一般流程如图1所示,主要包括五部分:即数据建模,测试用例的生成,测试用例的运行,结果记录与分析,以及离线或在线的漏洞发现。
由于TCP/IP技术的广泛应用,目前越来越多的工控私有协议采用将原有协议搭载到TCP/IP架构上使用的模式,如DNP3 over TCP/IP等[20]。因此,工业控制系统的上位机与下位机之间通信通常是以一个TCP/IP的握手开始,之后增加一个私有协议的握手交互。在私有协议握手结束后,命令或数据的传输才正式开始。这种一般性流程也启发我们,在对工控系统进行模糊测试时需要首先确保私有协议的握手可以进行,同时还要对协议的数据单元进行一些初步分析,确保模糊测试可以正常开展。
3.2 工控系统模糊测试通用架构
为实现一个完整的工控系统模糊测试流程,通用架构如图2所示。具体的模块功能如下:
(1)解包模块。工控系统的模糊测试框架应该提供至少两种包解析方式。一种是上下位机之间的即时通信,另外一種是从预先捕获的流量文件(pcap文件)实现读取。一旦数据获取实现,解包模块将把捕获的包信息按照协议单元进行划分,并存储到相应的数据对象[21]。这部分常用的工具是LibPcap[22]以及LibPcap的其他编程语言的变种。
(2)分析模块。分析模块的核心是私有协议的解析,在不完全实现私有协议逆向的情况下,需要采用各种模式识别的算法首先确定生成的包与实际包的相似性,从而确定私有协议的握手包,进而从握手包中确定关键发送的命令。
(3)模糊测试包的发送模块,其主要功能在于在模糊测试过程中发送和接收数据包。分析模块中获取的信息可以用于模拟协议握手包,并通过数据包构造相关组件发送给待测设备。协议握手建立后,协议特殊的命令也可以发送给待测设备。
(4)监测模块。显著区别于传统IT系统的模糊测试框架,工控系统中模糊测试监测的不仅仅是网络连接,更重要的是设备的过程控制状态。为便于监测模糊测试的效果,测试人员可能需要多维度的观察整个工业过程,包括网络数据交互、系统运行状态,甚至需要接入示波器查看相应电平值的变化。可以说,监测模块是工控系统模糊测试显著区别于传统IT系统模糊测试的部分。例如,一个待测设备的开关量是一个指定周期内的方波,由于模糊测试的变异数据包发送,可能导致一个完整的方波被延迟成两端分割的电平,从而导致设备异常故障的发生。
4 总结
随着工控系统与信息系统深度融合,工控系统面临着前所未有的网络与信息安全挑战。在这其中,利用相对封闭的工控系统漏洞进行网络破坏的事件层出不穷。模糊测试技术作为发现系统漏洞的高效手段,在工控系统漏洞发现中占有举足轻重的地位。本文结合模糊测试技术的发展现状,在参考现有工控系统模糊测试工具架构的基础上,提出了一个工控系统模糊测试的通用架构,并以此架构为核心提出了基于模糊测试的工控系统漏洞发现和分析系统的设计思路。该架构对现有模糊测试技术、工具和组件进行抽象概括,可以广泛地适用于多种不同类型的工控系统挖掘场景。
在后续研究中,我们将在通用架构的指导下,选择具体的工业控制系统和目标私有协议,进行有针对性地专用模糊测试工具研发和相应的漏洞分析平台系统的搭建,提高相关工具研发的效率,进而提升针对工业控制系统的漏洞发现能力。
致谢
本文中基于模糊测试的工控系统漏洞发现和分析系统研究工作是在浙江浙能技术研究院有限公司郑渭建、孙科达等工作人员的大力支持下完成的,在此向他们表示衷心的感谢。
参考文献:
[1]彭勇,江常青,谢丰,戴忠华,熊琦,高洋. 工业控制系统信息安全研究进展[J],清华大学学报:自然科学版,(2012)10:1396-1408.
[2]B. Miller,D. Rowe. A survey SCADA of and critical infrastructure incidents[C],in Proceedings of the 1st Annual Conference on Research in Information Technology,Calgary,October 2012.
[3]R. Langner. Stuxnet:dissecting a cyberwarfare weapon[J],in IEEE Security and Privacy,vol. 9,no. 3,pp. 49-51,May 2011.
[4]K. Munro. Deconstructing Flame:the limitations of traditional defences[J],in Computer Fraud and Security,vol. 2012,no. 10,pp. 8-11,October 2012.
[5]J. Vavra,M. Hromada. An evaluation of cyber threats to industrial control systems[C],in International Conference on Military Technologies,Brno,2015.
[6]胡红升. 初论网络时代电力关键信息基础设施保护[J],(3)12:1134-1140,2017.
[7]B. Zhu,A. Joseph,S. Sastry. A taxonomy of cyber attacks on SCADA systems[C],in 2011 International Conference on Internet of Things,Dalian,2011..
[8]尚文利,万明,赵剑明,乔全胜,曾鹏. 面向工业嵌入式设备的漏洞分析方法研究[J],自动化仪表,(2015)10:1-4,2015.
[9]张雄,李舟军. 模糊测试技术研究综述[J],计算机科学,(43)5:1-8,2016.
[10]B. P. Miller,D. Koski,C. Lee. Fuzz revisited:A reexamination of the reliability of UNIX utilities and services[R],Computer Sciences Department,University of Wisconsin,1995.
[11]G. Shu,D. Lee. Testing security properties of protocol implementations – a machine learning based approach[C],in 27th International Conference on Distributed Computing Systems(ICDCS 07),IEEE,2007.
[12]D. Aitel. The advantages of block-based protocol analysis of security testing[R],Immunity Inc,New York,Feb. 2002.
[13]SPIKE. http://www.immunitysec.com/resources-free-software.html.
[14]Peach. http://peachfuzz.sourceforge.ne.
[15]戚小光,許玉敏,韩菲,周锐. “心脏出血”漏洞的危害、应对及影响[J],信息安全与通信保密,(2014)5:60-62.
[16]王夏菁,胡昌振,马锐,高欣竺. 二进制程序漏洞挖掘关键技术研究综述[J],信息网络安全,2017(08):1-13.
[17]G. Devarajan. Unraveling SCADA protocols:using Sulley fuzzer[C],in DefCon 15 Hacking Conference,2007.
[18]Beyond Security. Black box software testing,McLean,Virginia.
[19]Mu Dynamics. Mu Test Suite,www.mudynamics.com/products/mu-test-suite.html..
[20]X.Lu,Z. Lu,W. Wang,J. Ma. On network performance evaluation toward the smart grid:a case study of DNP3 over TCP/IP,in IEEE Global Telecommunications Conference,Houston TX,2011 .
[21]M. Niedermaier,F. Fischer,A. von Bodisco. PropFuzz – An IT-security fuzzing framework for proprietary ICS protocols,in 2017 International Conference on Applied Electronics,Pilsen,2017..
[22]LibPcap,www.tcpdump.org..
作者简介:
[1]孟强(1982-),男,工学硕士,工程师,主要从事大型能源集团信息化管理,工业控制系统网络安全研究工作。
[2]孟瑜炜(1983-),男,工学博士,工程师,主要从事大型能源集团信息化管理,工业自动化,工业控制系统网络安全研究工作。
通讯作者:
俞荣栋(1981-),男,工学博士,工程师,主要从事工控自动化、工业信息化研究工作。