工业监控组态软件模糊测试方法研究
2016-09-06吴波云雷金先涛刘北水
吴波,云雷,金先涛,刘北水
(工业和信息化部电子第五研究所,广东 广州 510610)
工业监控组态软件模糊测试方法研究
吴波,云雷,金先涛,刘北水
(工业和信息化部电子第五研究所,广东广州510610)
针对当前工业监控组态软件 (以下简称监控组态软件)信息安全保障水平低、信息安全漏洞多、危害大,以及缺乏高效的漏洞检测方法的问题,提出了一种面向监控组态软件的漏洞挖掘方法,采用模糊测试技术来检测监控组态软件的漏洞。分析了监控组态软件的特点,设计了针对监控组态软件的模糊测试框架,并进一步地对模糊测试中测试数据的生成方法进行了重点论述。结果表明:该模糊测试框架和测试数据的生成方法能够较好地应用于监控组态软件的漏洞挖掘工作中。
工业监控组态软件;漏洞挖掘;模糊测试;遗传算法
0 引言
监控组态软件是一种可以实现数据采集和监视控制的工业专用软件。它被置于工业企业信息系统层次结构中的过程监控层,运行在操作站、操作面板等人机界面 (HMI:Human Machine Interface)的监控设备中。监控组态软件在工业控制系统中应用广泛,是我国诸多关键基础设施的自动化控制系统的重要组成部分,是实现核设施、电力、石油石化、化工、钢铁和冶金等重要工业系统安全、稳定地运行的重要软件。
传统的监控组态软件一般采用专用技术开发,应用环境相对封闭,考虑信息安全问题不足,安全防护能力薄弱,存在大量的信息安全漏洞。随着信息和通信技术 (ICT:Information and Communication Techno1ogy)的发展,以及工业化和信息化的深度融合,通用IT技术和产品被集成到了监控组态软件中,并且监控组态软件与企业经营管理系统甚至互联网的连接也变得日益普遍,这在很大程度上提高了生产效率,改进了企业的管理水平,但同时也引入了大量的信息安全风险[1]。近年来发生的多起工业控制系统信息安全事件大多都利用了监控组态软件中的安全漏洞,例如:2010年的Stuxnet病毒利用了西门子监控组态软件WinCC中的硬编码漏洞和DLL加载策略漏洞;2014年的Havex病毒利用了监控组态软件中OPC Server组件的相关漏洞[2]。
针对软件中存在的各种安全漏洞的检测和分析技术一直受到了学术界和产业界的广泛关注。目前,软件安全漏洞的测试分析方法主要有静态分析、形式化安全测试、基于模型的安全测试、语法测试、基于故障注入的安全测试和模糊测试等几种。其中,模糊测试具有可用性好、误报率低、测试效率高和对目标软件依赖低等特点,在软件漏洞挖掘领域被广泛地使用[3]。但是,由于模糊测试技术具有测试代码深度有限、测试数据不能灵活地调整和测试智能性低等缺点,因而其往往不能满足监控组态软件等工业控制系统组件的测试需求[4]。
本文在分析监控组态软件的特点的基础上,提出了基于遗传算法的监控组态软件的模糊测试方法。首先,分析了现有的模糊测试技术的流程、关键技术和应用特点;然后,分析了监控组态软件的体系结构和数据流等信息安全特性;最后,基于监控组态软件的信息安全特性,提出了监控组态软件的模糊测试框架,并将遗传算法引入到了模糊测试的测试数据的生成过程中,以提高测试效率,为工业监控组态软件的漏洞挖掘提供支撑。
1 模糊测试
模糊测试通过构造出能使软件崩溃的畸形输入数据来发现系统中存在的缺陷,它使用大量的半有效的数据作为软件输入,以软件是否出现异常作为标志来发现软件中可能存在的安全漏洞。模糊测试一般包含以下几个阶段:识别目标、识别输入、生成模糊测试数据、执行模糊测试数据、监视异常和分析异常可利用性,如图1所示[5]。
图1 模糊测试的阶段
其中,生成模糊测试数据是模糊测试中最为关键的一个阶段。一般来说,按照测试数据的生成方式,模糊测试可以分两类:基于生成的模糊测试和基于变异的模糊测试[6]。然而,当前模糊测试在生成测试数据阶段依然具有较大的随机性,从而导致了其在测试针对性、测试代码覆盖率和测试代码深度等方面存在不足。目前,研究人员普遍将人工智能方法引入到了模糊测试的测试数据生成阶段,通过启发式的测试数据生成技术来解决这些问题。其中,遗传算法、混合符号执行技术和动态污点分析技术被广泛地应用,以指导生成高质量的测试数据,提高模糊测试的效率[7]。
在测试效率不断地提升的情况下,模糊测试的发展呈现多样化之势,针对不同对象的模糊测试工具已大量地出现,包括:针对文件格式进行模糊测试的Fi1eFuzz、SPIKEfi1e;针对网络协议进行模糊测试的SPIKE、Peach;针对Web应用进行模糊测试的WebScarab、Codenomicon HTTP;针对Web浏览器使用的ActiveX控件进行模糊测试的COMRaider、AxMan等。每种模糊测试工具都只能针对特定的测试对象,使用特定的模糊测试方法,即使是通用的模糊测试框架,也需要用户根据测试目标进行定制开发,现有的模糊测试工具的适用性都十分有限[5,8]。
另外,网络协议模糊测试器根据其部署方式还可以分为普通式和内联式两种。目前绝大多数模糊测试器均属于普通式范畴,即将自身作为客户端,测试对象作为服务器端;内联式则采用中间人的方式,将自身部署在服务器和客户端之间,对截获的数据包进行分析和变异,实时地生成畸形报文,发送给被测对象,同时接受返回结果,决定下一步的变异策略。内联式能够实现对服务器和客户端的双向测试,普通式只能对服务器进行测试[9]。
2 监控组态软件
监控组态软件是工业控制系统中必不可少的组件,一般部署在工业企业信息系统层次结构中的过程监控层,处于“承上启下”的位置,它使用灵活的组态方式,可以为用户提供一种快速地构建实时数据采集和监视控制功能的能力。目前,国外市场上的监控组态软件主要有GE的iFIX、Wonderware的 Intouch、Siemens的 WinCC、Citect的 CitectSCADA和NI的Labview,而国内市场上的监控组态软件则以力控、亚控等为主。监控组态软件的体系结构一般如图2所示。
图2 监控组态软件的体系结构和数据流向
监控组态软件通过通信驱动程序连接工厂中的现场设备,现场设备包括PLC、I/O设备和DCS服务器等,然后以轮询的方式读写现场设备寄存器中的过程数据,并将过程数据传输至内存映像中;内存映像是监控组态软件中存储通信驱动程序轮询记录的区域,其通过通信驱动程序刷新存储的记录;实时数据库以轮询或基于例外的方式获取内存映像中的过程数据,建立数据标签对过程数据进行管理,并为应用模块提供数据源;监控组态软件应用模块获取实时数据库中的数据,实现监视控制、数据存档、生成报表和报警等功能。从现场设备到监控组态软件的数据为双向流动。由此可知,与现场设备进行通信的驱动程序是监控组态软件与下位现场设备交互的关键接口,而驱动程序的核心是工业通信协议的实现,因此对其进行安全测试十分必要。
当前,监控组态软件一般采用C/S和B/S两种部署方式,客户端人机界面中的数据显示、趋势显示和报警管理等都大量地使用OLE、ActiveX等基于COM(组件对象模型)的组件技术。ActiveX控件是监控组态软件使用的主要的组件技术,通常用于实现客户端中动态信息的处理,它访问实时数据库,将所需的数据取出并在监控画面上显示,例如:使用数据域控件、趋势图控件和报表控件分别实现数据显示、图形显示和报表显示。ActiveX控件可以嵌入到C/S客户端的应用程序中和B/S客户端的浏览器中,实现丰富的过程监控功能。因此,ActiveX控件是监控组态软件与上层操作人员交互的关键接口,对其进行安全测试同样十分必要。
3 面向监控组态软件的模糊测试
3.1模糊测试框架
监控组态软件的模糊测试框架如图3所示。
图3 监控组态软件的模糊测试框架
模糊测试要依据“全面兼顾、突出重点、兼顾效率”的原则,针对整个程序、所有模块进行,特别是那些需要与外部系统进行数据交换 (例如:操作人员的输入、其他系统或装置的输入和来自网络上的数据输入等)的模块应该重点测试。模糊测试还需要根据各种输入类型来制定针对性高的测试方案,以提高测试的效率。另外,对于工业控制系统,监控组态软件所在的上位机通常既作为服务端,为操作员站提供监视控制功能,又作为客户端,对作为服务端的现场设备进行数据访问。因此,对于监控组态软件的模糊测试需要同时覆盖其服务端功能和客户端功能[10]。
通过以上分析发现,与现场设备通信使用的工业网络协议、与操作员交互使用的ActiveX控件是监控组态软件“承上启下”的两个重要接口,因此,本文针对监控组态软件的工业网络协议和ActiveX控件建立了模糊测试框架。另外,为了覆盖监控组态软件的服务端功能和客户端功能,在本模糊测试框架中同时使用普通式和内联式两种模糊测试部署方式。图3中,上层模糊测试器通过普通部署方式对监控组态软件的ActiveX控件进行测试;下层模糊测试器以内联方式部署在监控组态软件与现场设备之间,对监控组态软件发送的请求数据进行转发,然后对现场设备的响应数据进行变异并将其发送至监控组态软件,以此来对监控组态软件的网络协议开展测试。模糊测试框架中的模糊测试器既使用主流的开源或商业模糊测试器,例如:ActiveX模糊测试器COMRaider、通用模糊测试器SPIKE等,又针对监控组态软件的通信协议开发了工业网络协议模糊测试器。开发的模糊测试器支持Modbus等主流工业网络协议,可以对监控组态软件发送的工业网络协议请求进行解析并生成应答数据,然后依据模糊测试策略对应答数据进行变异并将其发送至监控组态软件,开展模糊测试。
3.2测试数据的生成方法
生成测试数据是模糊测试的关键阶段,对测试效率的影响巨大。本文将遗传算法应用到模糊测试数据的生成阶段,可以实现测试数据冗余度的降低和代码覆盖率的提高,从而提升模糊测试的效率,基于遗传算法的模糊测试的原理如图4所示。首先,模糊测试器获取监控组态软件的一组正常输入,经过编码形成初始测试集;然后,使用调试器监控测试数据在目标软件中的执行情况,并将代码覆盖率等执行信息反馈至遗传算法;最后,遗传算法依据反馈信息计算测试数据的适应度值,指导测试数据进行遗传操作,形成新一代测试集并执行下一轮测试。此过程迭代执行,直到达到迭代次数或得到满足要求的测试数据为止[11]。图4中,如何设计遗传算法,以使其适用于测试数据的生成是关键,具体包括如何将测试数据进行编码、如何进行遗传操作和如何设计适应度函数等。
遗传算法的基本流程如图5所示。
图4 基于遗传算法的模糊测试的原理
图5 遗传算法的基本流程
a)编码
编码是遗传算法的第一步,也是遗传算法的关键。遗传算法的整个进化过程是建立在编码机制的基础上的,它把实际问题空间的参数转换为遗传算法空间的基因个体,即测试数据在遗传算法中的表示。针对不同的问题,可以选择不同的编码方法,常用的编码方法有二进制编码、实数编码、格雷码和海明码等。
本文在设计编码方法时,使用反汇编和网络数据包分析技术分析目标软件的输入所包含的参数和基本格式,从而确定编码中各个基因编码的位置和长度等信息,保证编码的有效性。由于二进制编码在各个遗传算子中的操作更加容易实现,所以本文采用二进制编码方法进行编码。对于数值参数,根据参数的取值范围,确定二进制串的长度;对于字符型参数,使用字符对应的ASCII码转换成的二进制串作为编码。另外,对于输入包含了多个参数的情况,采用多参数级联的方法进行编码,即把编码后的参数级联成一个染色体,且固定每个参数的编码长度和位置。
b)遗传操作
遗传操作包括选择、交叉和变异3个基本遗传算子。选择操作的方法有轮盘赌选择法、随机遍历抽样法、截断选择法和锦标赛选择法等。其中,轮盘赌选择法是常用的选择操作方法,它把种群中所有染色体的适应度的总和看作轮盘的一周,每个染色体按其适应度在总和中所占的比例占据轮盘的一个扇区,适应度大的染色体所占据的轮盘扇区大,在选择操作中被选中的概率高,反之亦然。另外,截断选择法是最容易实现的选择操作方法,它按染色体的适应度进行排序,按截断阈值 (被选择个体的百分比)选择适应度高的染色体。本文采用轮盘赌选择法,另外使用截断选择法实现精英保留策略。
交叉操作和变异操作是为了防止种群进化停滞或退化,保持种群的多样性,将可变性引入种群中。交叉操作常用的方法有单点交叉、多点交叉、均匀交叉和实值重组等;变异操作常用的方法有基本位变异、均匀变异和高斯变异等。为了避免破坏测试数据,本文采用单点交叉方法实现交叉操作,即随机选择一个交叉点,子代在交叉点之前的部分从一个父代基因中得到,在交叉点之后的部分从另一个父代基因中得到。对于变异操作,本文采用基本位变异方法,即对个体编码串随机指定的某一位或某几位基因执行变异运算。
另外,为了能够对交叉操作和变异操作进行控制,在这两个算子中分别引入交叉概率Pc和变异概率Pm,Pc和Pm能够根据适应度自动地改变。当种群中各个个体的适应度趋于一致或趋于局部最优时,Pc和Pm增大;而当种群的适应度比较分散时,Pc和Pm减小。同时,对适应度高于种群平均适应度的个体,对应比较低的Pc和Pm;而对适应度低于种群平均适应度的个体,对应较高的Pc和Pm。
c)适应度函数
遗传算法依据设计的适应度函数计算个体的适应度值,判断个体的优劣,进而指导算法向哪个方向进行。适应度函数的设计需要充分地代表遗传算法的目标,模糊测试中遗传算法的目标可转化为生成具有最大多样性和高代码覆盖率的测试数据。所以,本文采用测试数据的代码覆盖率作为遗传算法的适应度值。首先,使用IDA Pro等逆向工具分析监控组态软件的关键函数和基本块的入口,然后使用O11yDbg等调试器关联到监控组态软件,在分析得到的函数和基本块入口上设置断点,通过统计测试数据触发的断点数量来计算其代码覆盖率。适应度函数F的计算公式如下:
式 (1)中:P——测试数据触发的断点数量;
Psum——目标软件中设置的断点总数。
最后,在执行模糊测试的过程中,需要根据实际情况对编码长度、种群大小和迭代次数等项目进行调节。
4 结束语
针对工业控制系统当前面临的严峻信息安全问题,本文分析探讨了监控组态软件的漏洞挖掘方法,提出了针对监控组态软件的、基于遗传算法的模糊测试方法。主要针对监控组态软件的信息安全特性设计了模糊测试框架,并在分析现有的模糊测试方法的不足的基础上,引入遗传算法对测试数据的生成进行了优化。本文可为监控组态软件的安全测试和漏洞挖掘提供有力的支撑。但是,对于本文提出的测试方法,只对部分功能进行了实现,目前测试工作还需要大量的人工参与,因此,实现自动化的全闭环模糊测试并对测试过程进行优化是本文后续的工作重点。
[1]彭勇,江常青,谢丰,等.工业控制系统信息安全研究进展 [J].清华大学学报,2012,52(10):1396-1408.
[2]FARWELL J P,ROHOZINSKI R.Stuxnet and the future of cyber war[J].Surviva1,2011,53(1):23-40.
[3]李舟军,张俊贤,廖湘科,等.软件安全漏洞检测技术[J].计算机学报,2015,38(4):717-723.
[4]SUTTON M,GREENE A,AMINI P.Fuzzing:brute force vu1nerabi1ity discovery[M].Hong Kong:Pearson Education,2007.
[5]MILLER B P,FREDRIKSEN L,SO B.An empirica1 study of the re1iabi1ity of UNIX uti1ities[J].Communications of the Acm,1990,33(12):32-44.
[6]李彤,黄轩,黄睿.模糊测试中测试用例生成方法 [J].计算机系统应用,2015,24(4):139-143.
[7]TRACEY N,CLARK J,MANDER K,et a1.Automated test data generation for exception conditions[J].Software:Practice and Experience,2000,30(1):61-79.
[8]AITEL D.The advantages of b1ock-based protoco1 ana1ysis for security testing[OB/OL].(2011-04-24)[2016-01-07].http://www.immunitysec.con/down1oads/advantagesof-b1ock_based_ana1ysis.pdf.
[9]熊琦,彭勇,伊胜伟,等.工控网络协议Fuzzing测试技术研究综述 [J].小型微型计算机系统,2015,36(3):497-502.
[10]EDMONDS J.Security ana1ysis of mu1ti1ayer protoco1s in SCADA networks[D].Tu1sa:University of Tu1sa,2006.
[11]章淑琴.基于遗传算法的模糊测试技术研究 [D].武汉:华中科技大学,2011.
Research on the Fuzzing Test Method of Industrial Configuration Software
WU Bo,YUN Lei,JIN Xian-tao,LIU Bei-shui
(CEPREI,Guangzhou 510610,China)
As industria1 configuration software(hereinafter referred to as configuration software)has the prob1ems of 1ow information security assurance 1eve1,numerous information security vu1nerabi1ities,great damage and insufficient efficient vu1nerabi1ity detection method at present,a vulnerability mining method for configuration software is proposed,in which fuzzing test technology is adopted to detect the vulnerability of configuration software.The characteristics of configuration software are ana1yzed,and the fuzzing test framework for configuration software is designed.Furthermore,the generation method of the test data in fuzzing test is main1y discussed. The resu1ts show that the fuzzing test framwork and the test data generation method can be we11 app1ied in the vu1nerabi1ity mining work of configuration software.
industria1 configuration software;vu1nerabi1ity mining;fuzzing test;genetic a1gorithm
TP 311.55
A
1672-5468(2016)03-0033-06
10.3969/j.issn.1672-5468.2016.03.007
2015-12-11
2016-01-08
吴波 (1984-),男,陕西咸阳人,工业和信息化部电子第五研究所信息安全研究中心工程师,博士,主要从事工业控制系统信息安全研究工作。