文章快速检索  
  高级检索
基于特征矩阵的工控协议模糊测试方法
尚文利1,2,4,5, 李文轩1,2,3,4, 陈春雨1,2,5, 和晓军3, 曾鹏1,2,4,5     
1. 中国科学院网络化控制系统重点实验室, 辽宁 沈阳 110016;
2. 中国科学院沈阳自动化研究所, 辽宁 沈阳 110016;
3. 沈阳理工大学自动化与电气工程学院, 辽宁 沈阳 110159;
4. 中国科学院机器人与智能制造创新研究院, 辽宁 沈阳 110169;
5. 中国科学院大学, 北京 100049
摘要: 针对现有工控协议模糊测试框架生成的测试用例存在覆盖度低和效率低的问题,提出了一种基于特征矩阵的测试用例生成方法.首先通过解析协议规约提取协议特征和约束规则,利用各协议特征的属性值进行笛卡尔积进而构造协议特征矩阵,然后设计针对性的结构变异策略作用于特征矩阵,同时不断采用约束规则降低用例冗余进而得到高质量的组合测试用例集.最后提出基于特征矩阵的测试用例生成算法,并将本方案与Peach框架进行对比实验,其结果表明该方法能够有效地提高测试用例覆盖度和测试执行效率,并具有漏洞检测能力.
关键词: 工控协议     模糊测试     特征矩阵     约束规则     组合测试    
Fuzzing Method Based on Feature Matrix for Industrial Control Protocols
SHANG Wenli1,2,4,5, LI Wenxuan1,2,3,4, CHEN Chunyu1,2,5, HE Xiaojun3, ZENG Peng1,2,4,5     
1. Key Laboratory of Network Control System, Chinese Academy of Sciences, Shenyang 110016, China;
2. Shenyang Institute of Automation, Chinese Academy of Sciences, Shenyang 110016, China;
3. School of Automation and Electrical Engineering, Shenyang Ligong University, Shenyang 110159, China;
4. Institutes for Robotics and Intelligent Manufacturing, Chinese Academy of Sciences, Shenyang 110169, China;
5. University of Chinese Academy of Sciences, Beijing 100049, China
Abstract: To address the problem of low coverage and efficiency of the test cases generated by the existing industrial control protocol fuzzy test framework, we propose a test case generation method based on feature matrix. First, through an analysis of the protocol agreement to extract protocol features and constraint rules, the protocol feature matrix is constructed by the Cartesian product of the property values of each protocol feature. Then, the targeted structural variation strategy is designed to act on the feature matrix, while the constraint rules are used to reduce the redundancy of test cases and obtain a high-quality combination test case set. Finally, the test case generation algorithm based on the feature matrix is proposed. A comparison with the Peach framework shows that the method can effectively improve the coverage of test cases and test execution efficiency. Moreover, the method can detect vulnerabilities.
Keywords: industrial control protocol     fuzzing test     feature matrix     constraint rule     combination testing    

0 引言

工业控制系统作为电力、制造业、水处理等国家关键基础设施的重要组成部分[1],近年来伴随着两化融合的高速发展,工业资产所有者意识到互联网能为工业发展带来新的机遇,进而打破传统工业封闭性的桎梏,将其工控网络与IT网络互联,这不仅加速了工控网络与传统IT网络进一步融合[2],同时也增大对工业以太网技术的需求.然而在为工业发展带来机遇的背后,不可避免地将传统IT领域的安全威胁引入到工控领域,同时随着全球范围内工控网络安全事件数量的不断增加,这将原本自诩为封闭即安全的工控网络暴露于公众视野.

目前工业控制系统的核心组成仍然是以可编程逻辑控制器(PLC)为代表的可编程嵌入式设备,但自身的安全防护能力较弱,认证机制和访问控制明显不足,很容易遭到攻击者的非法入侵,进而对整个控制系统造成不同程度的破坏.显然攻击者利用通信协议存在的脆弱性,恶意地控制PLC启停,甚至植入PLC逻辑控制代码导致高级可持续性威胁[3],所造成的严重后果可想而知.同时,这也表明从协议安全的角度入手来保障工控系统中网络数据传输的机密性、完整性和不可否认性,提高工业控制系统信息安全的防护能力,势必会成为行之有效的安全防护手段.因此,从工控系统的网络通信角度出发是解决工控系统网络安全问题的趋势所在[4].

自从2010年首次检测出破坏能源基础设施的震网病毒Stuxnet,直至2017年勒索病毒WannaCry的肆虐,其病毒行径对国民的生命财产乃至国家战略层面所造成的影响无一不暴露工控系统内部存在着严重的安全问题.然而2011年初我国才开始重视工控系统中的安全缺陷,起步晚于一些工业大国,表现为脆弱性分析相对不足[5-7],尤其是对于工控系统中SCADA(supervisory control and data acquisition)、DCS(distributed control system)、PLC(programmable logic controller)等各部分组件内部通信协议实现过程中存在的安全性问题,绝大部分厂商只注重嵌入式设备与通信协议在生产及运营过程中的实时功能性,进而将可用性放在第一位,很少或者从未考虑到安全威胁一旦介入时该如何应对.当网络攻击来临时,这必然会造成工控系统毫无抵抗的局面[8],也是传统IT威胁涌向工业系统的最根本原因之所在.虽然一些厂商借助传统IT的补丁手段尝试解决现存的脆弱性问题,但由于该方案涉及工控系统实时性和间断生产等问题,进而不能实时进行补丁修复,显然从传统IT网络安全的视角来看待并解决工控领域潜在的安全问题并不是十分合理,因此亟需从工控通信协议的角度开展安全性测试研究,提前揭露工控系统内部安全隐患,才能主动提升工控系统的安全防护水平.

近年来,国内外基于协议安全的一些测试研究表明,对工控协议进行模糊测试是发掘工控系统内部潜在脆弱性较为有效的手段.虽然模糊测试(fuzzing)最开始普遍用于软件测试领域[9],但随着模糊测试的不断发展与演变,现如今致力于网络协议的安全测试研究,同时在工控领域其普遍定义为通过变异或生成的方式获得触发异常的模糊测试值,经可攻击接口将测试值发送至被测目标,从而根据测试目标产生的异常响应分析是否存在脆弱性.然而在执行测试之前,测试人员必须要根据所能搜集的信息量采取合适的测试方法,即按照信息量由小到大分为黑盒、灰盒、白盒测试[10],这里需要明确的是,模糊测试的关键在于构造高质量的测试用例,因为测试用例的优良程度直接决定着模糊测试的最终结果[11].

国外有关工控协议安全测试的研究成果已然屡见不鲜,大多数通过改进现有协议测试框架达到测试不同工控协议的目的,例如2007年Devarajan[12]改进Sulley框架以支持ICCP、Modbus、DNP3等工控协议,这也标志着工控fuzzing测试正式拉开序幕;Koch等[13]基于ScapyFuzzer提出了针对Profinet协议族进行fuzzing测试的ProFuzz;Codenomicon公司基于Modbus协议的Defensics商用测试套件能够支持大量的网络协议,其中包括ModbusTCP协议[14];Bratus等[15]针对工控公、私有协议提出了在GPF(general purpose fuzzer)模糊器基础上改进的LZFuzz模糊测试工具;Wurldtech公司构建的BlackPeer工控协议测试框架以及Achilles模糊测试器,可支持Modbus、DNP3等多种工控协议[16];Kim等[17]针对智能电网领域提出了基于协议域分类的模糊测试方法,考虑到工控网络的特点及其协议层之间的漏洞存在依赖性和继承性,该方案可适用于各种工控系统协议;Men等[18]提出一个EUFuzzer的新型fuzzing工具,能够识别特定协议的数据包字段并将所有字段分为4类,该方案能成功触发HMI上的SCADA协议实现过程中存在的缺陷;Katsigiannis等[19]针对ModbusTCP提出了一种MTF-Storm的高效模糊器,能够实现逐字段的组合测试用例生成并通过划分字段值范围来降低测试空间,实验表明该模糊器可以评估9种不同实现方式的Modbus TCP协议,不同程度地检测出拒绝服务攻击和崩溃现象;Lee等[20]通过分析汽车内部CAN(controller area network)数据包结构进而随机构造测试用例,验证了利用fuzzing可以暴露出汽车网络潜在的脆弱性.反观国内研究现状,虽处于起步,但安全研究者们也提出很多有效的解决方案,如张亚丰等[21]利用改进范式语法对协议建模,通过语义变异策略构造高效的测试用例集,同时利用协议状态机[22]进行对工控协议进行状态引导,并在SCADA(supervisory control and data acquisition)和PLC之间进行双向测试,能够验证存在的拒绝服务漏洞;赖英旭等[23]利用变异因子、协议树及协议特征学习对Modbus TCP进行fuzzing测试,从而达到漏洞挖掘的目的;张典波等[24]改进了Peach测试框架以支持Profinet-DCP协议进行漏洞检测;Dong等[25]针对工控协议提出了基于变异树的估值剪枝优化模糊测试模型及其算法,测试效率远高于刘海龙等[26]所提出的FTSG(fuzzing test suite generation)测试模型.综上所述,目前大多数的研究工作倾向于改进fuzzing框架和构建测试模型两个角度,整体上待测目标对所构造的测试用例仍然有着很高的免疫度,同时由于fuzzing自身的性质,测试冗余在一定程度上无法避免,但能够结合算法进行组合优化.

为了进一步优化测试用例所存在的问题,本文想针对工控协议Modbus TCP提出特征矩阵的协议测试模型,利用变异因子矩阵施加变异策略,并提取协议域、字段及字节规则,形成约束规则集筛选无效用例,以保证构造高质量的测试用例,最后提出测试用例生成算法并修改Peach模糊框架其内部变异模块验证本方案的可行性.

1 协议理论基础

本文从ModbusTCP协议[28]通信的网络层、传输层和应用层入手分析,并进一步解析网络层、传输层的报文头部及应用层的载荷信息,为构造高质量的测试用例提取协议单元中必要的字段及结构信息,如图 1所示将Modbus TCP协议进行层次解析.

图 1 Modbus TCP协议结构解析 Fig.1 Analysis of Modbus TCP protocol structure

图 1中,网络层可形式化描述为一个2元组NET={ < SIP,DIP>},分别对应通信设备中的源地址与目的地址;在传输层中Modbus TCP协议报文必须通过特定的502端口提供一个侦听套接字,才能允许工控设备间信息交互.本文建立5元组进行形式化描述,即TRAN={ < SPort,Dport,SeqNum,AckNum,AppLen>},分别表示源端口、目的端口、发送标识、确认标识和应用层长度;而应用层作为Modbus TCP协议深度解析的重要部分,也是构造测试用例及变异策略的核心部分,将其形式化描述为6元组,即APP={ < TranID,ProID,Length,UnitID,FunCode,Data>},该6元组分别为传输标志符、协议标志符、长度、单元标志符、功能码及数据段,Data={ < StartAdd,RegNum>},StartAdd,RegNum分别表示协议中Data域的起始地址和寄存器数量.基于请求响应模式的ModbusTCP协议一旦开始处理请求,服务端必须建立事务处理生成一个响应,同时根据处理结果分为正常和异常响应,其中正常响应表征为请求、响应报文中的功能码保持一致,而异常响应也是体现在功能码上[27],其目的是将异常处理过程中的错误信息以异常码的形式反馈给客户端,其部分异常码如表 1所示.

表 1 部分异常码功能描述 Tab.1 Functional description of some exception codes
异常码 Modbus TCP功能描述
0x81 非法的功能码
0x82 非法的数据地址
0x83 非法的数据值
0x84 服务器繁忙
2 构建协议约束规则集

由于工控协议规约中存在着一定的规则,提取规则对于提高测试用例质量有着重要意义,因此需要对协议数据包的格式加以分析,包括关键字段、语义结构等,同时利用协议规则生成测试用例,尽可能地越过待测协议中固定字段、长度等协议域的检查,最终得到既满足协议规约又不是无效的测试数据.本文主要从3个方面进行规则提取,包括协议字段关系、通信数据关系和协议异常机制,其提取过程如图 2所示.

图 2 协议规则提取过程 Fig.2 Protocol rule extraction process

具体分析过程为:

1) 协议字段关系:由于传输层、应用层字段间存在着长度关系,令Li表示Modbus TCP协议所有字段中各字段长度,其中i∈{AppLen,TranID,ProID,Length,UnitID,FunCode,StartAdd,RegNum}:

2) 通信数据关系:正常通信期间的请求与响应报文传输标志符、功能码应保持一致,即Req.TranID==Res.TranID,Req.UnitID==Res.UnitID.

3) 协议异常机制:显然对于不同协议的异常机制各不相同,而就Modbus TCP协议而言,主要从3个方面进行考虑:

(1) 若ProID!=0,则不能执行Modbus TCP协议的通信行为,同时产生无效的事务处理,服务端返回异常响应码.

(2) 由于TCP/IP是利用IP地址进行寻址,因此单元标志符在ModbusTCP传输过程中并不起作用,一般默认为UnitID==0xFF.

(3) 若功能码FunCode无效,则返回异常响应码,其异常码格式为Res.FunCode==Req.FunCode+0x80.

无论是正常或是异常响应机制,均可作为验证测试用例是否有效的衡量指标,因此当构造测试用例时,本文提取约束规则集对产生的无效用例进行过滤,从而在降低用例冗余的同时保证用例质量,其部分规则描述如表 2所示.

表 2 部分约束规则描述 Tab.2 Description of partial constraint rules
序号 对应规则具体描述
Rule 1
Rule 2
Rule 3 Req.TranID==Res.TranID
Rule 4 Req.UnitID==Res.UnitID
Rule 5 While(ProID!=0){Abnormal response}
Rule 6 UnitID==0xFF
Rule 7 While(!FunCode)
{Res.FunCode==Req.FunCode+0x80}
3 基于特征矩阵的工控协议模糊测试方法

为了进一步提高协议模糊测试性能,在增大测试用例覆盖度的基础上保证整个测试方案具较高的测试效率,本文提出利用特征矩阵构建协议序列模型生成测试用例的方法,从协议特征矩阵PGM(protocol feature matrix)和变异因子矩阵MFM(mutation factor matrix)分别矩阵化测试数据和变异因子,利用矩阵运算和笛卡尔积施加变异策略,从而增大测试用例集的覆盖度.

3.1 构建协议特征矩阵

通过深度解析协议规约对协议单元划分特征集合划并建立矩阵模型,从而初步形成协议测试数据.其中分别将传输标志(T)、协议标志(P)、长度(L)、单元标志(U)、功能码(F)和数据域(D)视为6个协议字段特征集,本文将协议特征矩阵PGM描述为一个6元特征关系组:

对应矩阵形式为

其中,矩阵行数不定、列数固定且第1行中各个元素表示对应该列的属性值标签,并不参与计算,仅作为标记使用;“*”号表示当前字段特征的单一数值,其值可能与当前列的某一元素值相同,也可能异同;矩阵中每个特征值下角标的第1位表示所在列数,后两位表示该特征集合的不同元素值编号.

由于协议标志符ProID==0为工控设备建立连接的充分必要条件,因此p所在列的特征值需全部置为0,即PGM矩阵中部分特征值经调整后,该矩阵为

该矩阵中的每一行均是一个协议输入向量PIV(protocol input vector):

每列元素表示对应特征的特征值集合,其中tTpPlLuUfFdD且PIV=T×P×L×U×F×D,即6个特征集合之间满足笛卡尔积. PIV是一个6元组向量,其等价于矩阵PGM的行向量.因此显然协议测试用例的输入形式InputForm可在广义上定义为

其中,“+”表示对各特征集合中元素值进行拼接,而上述定义中形如εX的元素表示对应协议特征集合X的某一属性值ε.例如,T101,0,L302U403F502D603则为经过笛卡尔积后所构造一条输入数据.

同时功能码的不同取值表示该输入具有对应的控制功能,并且随着数据域特征值dD的变化,长度特征值lL会随之改变,例如当前功能码特征值为F501,对应元素值dD中的起始地址和寄存器数值并结合其取值范围进行相应更改,这必然会根据Rule 2对lL进行更新.因此工控协议测试将根据不同功能码控制各类字段值,最终得到一组关联的测试用例.

3.2 构建变异因子矩阵

根据国家信息全漏洞共享平台CNVD(China National Vulnerability Database)[29]所公布的工控网络漏洞成因主要分布在缓冲区、数值边界和字符串三个方面.因此本文从协议语义结构、协议字段和字节这些角度进行综合考量以选取变异因子,并定义变异类型及相应的元操作,进而构建变异因子矩阵MFM.其具体变异层次及其元操作如表 3所示.

表 3 变异策略描述 Tab.3 Description of variation strategies
层次 元操作
层次 元操作
语义结构 交换、删除、重复、添加
消息域 修改、变换、插入、删除、重复
字节 位翻转

通过上述分析可将矩阵MFM形式化描述为一个3元关系组:

对应其矩阵形式为

其中矩阵第一行每个元素为列属性标签,不参与计算,且各列元素对应由变体元素组成的变异特征集合,即数值特征集V、替换特征集R和编码特征集E且矩阵中每行可视为一个变体控制向量VCV(variant control vector):

同理该向量等价于矩阵MFM的行向量,其各元素涵盖变异因子的3种变异特征,且同时满足vVrReE特征集合所属关系及MFM=V×R×E,即通过变异特征集合间元素的笛卡尔积进而生成不同的组合变异策略,上述变异类型的具体特征及部分变体定义如表 4所示.

表 4 变异类型特征及部分变体描述 Tab.4 Description of variation type characteristics and partial variants
特征 变异类型 变异值描述
数值类型 数值、字符串 -1,0,1,0xff,0xffff等,“AAAAA…”,“%s%n@# & …”
替换类型 交换、删除、重复、添加、修改 对协议字段值施加变体操作
编码类型 ASCⅡ、Unicode、大小写转换、空值 “4D4D4D4D”,null不进行编码转换
3.3 测试用例的具体构造过程

对于协议模糊测试而言,构造高效的测试用例是测试关键,因此本文将详细阐述用例构造方法及特点,从待测功能码的角度出发提出基于滑动矩阵(sliding matrix)S的向量提取模式,并逐行提取矩阵MFM行向量中的变异特征作用于矩阵PGM中待测功能码所在行的部分特征值,根据约束规则调整LD等关联字段的特征值,从而形成新的协议攻击向量即生成测试用例.

在提取上述两个矩阵的局部向量过程中,定义PGMMFM维数分别为n×6和n×3,其中n值分别为矩阵PGMMFM的行数,而S则是由维数m×n的0-1矩阵构成,Sm值表示当前提取PGM中所含待测功能码输入数据的最大行数,其中矩阵S中0、1的填充则是依据待测功能码所在PGM的行数进行确定,若矩阵PGM中第f列存在3个待测功能码的位置分别为1、3、4行,则m值为4,同时待测位置对应S的第1行第1列、第3行第3列及第4行第4列的值分别为1,即矩阵S

(1)

其中,S中全0行的含义表示为忽略对PGM中当前功能码所在行的提取.而对于矩阵MFM,则利用单位矩阵的子向量便能够实现对其进行逐行提取且子向量可定义为

显然m对应着矩阵MFM所提取的行数,其中具体向量提取过程为

(2)
(3)

其中,i为待测功能码的所在行数;j∈[1,m],提取向量中形如Fxy表示对应两个矩阵中各特征所处第x行第y列的特征值F.

向量提取的目的在于将多维矩阵分解成单维向量集合,同时针对单一向量中的部分特征值进行有针对性的逐块分割、逐字段变异方法,从而有效增大测试用例覆盖面.因此引入笛卡尔积实现逐一变异的方法,主要将PIViVCVj中元素相互匹配成多个 < 特征值,变异特征>对,其匹配过程如式(4)所示:

(4)

实质上相当于针对每个字段施加3种变体因子,对应生成三种变异值,其字段变异过程为

显然协议号为0的部分不可变异,特征D为可变异字段,而特征L虽然可以变异,但需要根据Rule 2更新其对应特征值才能满足规约要求.然而从变异后测试用例数量来看,任意PIV可衍生出3×1×3×3×1×3=81个测试用例,而m维矩阵PGM变异后可得到81m个用例组成的待测矩阵TC,其完全能够满足测试用例全覆盖的需求.

由于基于笛卡尔积的方式仅在PGM矩阵内部进行匹配,但有时触发协议脆弱性问题不仅仅是单一用例所能触发的,可能由多条用例共同触发或者某条用例重复执行才能引发异常,因此本文在笛卡尔积基础上从整体结构出发,利用单位阵的分解矩阵C实现增添删改重等结构性变换,同时需对矩阵C进行形式化定义,其中Tm×nC=[α1,α2,…,αm]T且定义为:

1) 重复TC中第i行测试用例,其中αi表示选定的行向量,i′代表第i行测试用例的复制行号,其变换过程如式(5)所示:

(5)

2) 替换TC中任意行向量中某一字段为空格,令ij分别表示第ij列特征值进行替换操作,其替换过程如式(6)所示,其中C′与C″为0-1对角阵.

(6)

3) 在不变异其他字段的前提下,引入列变换矩阵MTm×nC的单维向量中部分字段施加插入变异操作,如在第ij列后插入k个空格,其插入过程如式(7)所示:

(7)

因此利用上述矩阵内部变异和结构性变体操作在实现大范围变异的同时精确地控制可变异字段,进而细粒度地生成组合测试用例,灵活地对变异体的作用顺序进行调整,从而构造高质量的测试用例集.

4 实验与结果分析 4.1 实验设计

为了验证测试用例在执行过程中的有效性,本文将用例的构造策略封装成mutator模块,并利用Peach测试框架结合自定义的mutator进行方案验证.首先根据所制定的测试策略构建协议特征矩阵解析模块Matrix_Interpreter.py,进而矩阵化协议测试数据,并构建变异模块Matrix_Mutator.py实现矩阵的内部及结构性变异,同时利用约束规则模块Rule.py过滤无效和冗余用例,最后借助Peach框架对ModbusTCP协议仿真软件进行测试,并利用3个评价指标对该方案进行评估,分别为测试用例的命中率、测试执行效率和检测漏洞的能力.

4.2 测试验证架构设计

本文测试框架的设计如图 3所示.首先,根据捕获的协议报文及协议规约进行协议特征提取并矩阵化测试数据,利用设计的变异策略对测试数据进行变异操作,不断引入规则集降低测试冗余;然后,执行测试并记录测试过程中的交互数据;最后,从记录的数据中分析测试用例数量与执行效率以及是否存在异常或漏洞情况,进而验证该方案的可行性.

图 3 测试验证框架 Fig.3 Test verification framework

该实验将Modbus Slave仿真软件作为待测目标服务器,利用Peach和本文的测试方案MatrixPeach分别模拟客户端实现主从通信结构,从而针对不同功能码执行模糊测试,同时在测试过程中使用Wireshark工具对交互报文进行旁路监听并记录测试数据,最后对其进行结果分析和测试性能对比.

4.3 算法设计实现

为了更加系统地阐述测试用例生成及优化过程,本文设计并实现了基于特征矩阵的测试用例生成算法,其主要为3个部分,分别为内部变异、结构变异、测试生成,每个部分都引入约束规则集降低测试冗余,其具体算法过程见算法1所示.

算法1     基于特征矩阵的测试用例生成算法
输入:特征矩阵PGMMFM,滑动矩阵S
输出:样本测试用例集Testcases
1   PGM←Field Feature;MFM←Mutation Factor;
Rule←Constraint Rule;Testcases←Ø ;
2   PGM,VCV=Ø ,TC=Ø ;
3   Vector_Cartesian_Product(PGMMFM,Rule){
4     for each i∈[1,maxNum]do
5       for each j∈[1,m]do
6         PGMi=si·PGM
7         VCVj=sj·MFM;8         PAV←PGMi×VCVj∧Rule;
9         TCTC∪{PAV};
10      end for
11    end for
12   }
13   Structure_Mutation(CTC,Rule){
14     while StrategyFlag==True do
15       ToperateC←Transform(CTC);
16       TCTC∪{ToperateC};
17    end while
18   }
19   Generate_Testcase(TC,Rule){
20          for each tC in TC then
21          Testcases←Serialization(tC,Rule);
22       end for
23     }

算法1中,第1行、第2行分别定义及初始化特征矩阵及用例集合;第3行~第12行利用滑动矩阵S选取单维向量进行组合字段变异,构成初始测试用例并更新TC;第13行~第18行利用矩阵变换进行结构性变异,operate中包括增删改重等操作,并将生成的测试用例更新至TC;第19行~第23行根据约束规则将TC中元素序列化成协议报文数据格式,并加入至Testcases集合中形成最终的测试用例集合.

4.4 实验结果与分析

本实验分别对功能码0x01读线圈、0x03读保持寄存器、0x06写单个寄存器及0x16屏蔽写寄存器进行测试验证,并利用式(8)进行测试命中率评估.

(8)

图 4中不难看出采用本方案变异策略所生成测试用例的命中率要优于Peach的变异模块,其中MP曲线代表本文采用方案MatrixPeach,而曲线P代表Peach框架.

图 4 基于不同功能码的测试用例执行结果 Fig.4 Test case execution results based on different function codes

从用例执行效率来看,Peach的平均执行时间在3.5 h左右,而MatrixPeach则为1 h左右,结合图 4可看出,对功能码0x03、0x06、0x16测试时,首次用例通过时本方案所用的测试用例数较少,从而执行时间较短,所以MatrixPeach的执行效率要高于Peach.

从检测漏洞的能力角度来看,在测试0x16功能码时虽然二者均成功修改寄存器的值,但通过分析测试记录,MatrixPeach检测出Modbus Slave存在着非法写入的异常情况,现象为当T 相同的测试用例分别执行时均能正常写入,而Peach却并未检测到.

综上所述,本文针对工控协议所提出的变异策略整体上提高了测试用例的质量,在降低无效冗余的同时提高了测试效率,虽未测出潜在的未知漏洞,但仍验证了已知漏洞.根据上述测试结果不难看出,该变异策略大大提高了测试性能并具有一定的漏洞检测能力.

5 结束语

本文提出了一种基于特征矩阵模型的工控协议模糊测试方法,通过协议字段属性值间的笛卡尔积初始化测试数据,并提取其矩阵化后的单、多维矩阵向量进行针对性的组合变异,同时不断利用约束规则集对违反协议规约的非法用例进行过滤从而生成测试用例集,最终提出基于本方案的测试用例生成算法进行测试验证.结果表明本方案能够针对ModbusTCP协议中可变异字段进行细粒度地变异,同时约束规则集的作用很大程度上降低了无效用例的数量,从而提高了测试用例的覆盖度和有效性,并具有一定的漏洞检测能力.未来将考虑采用在优化组合策略的基础上,尝试利用一种测试方案解决多种协议的测试优化问题,同时进一步提升测试性能.

参考文献
[1] 程鹏. 工业控制系统信息安全[J]. 信息安全与通信保密, 2014, 4(1): 74–77.
Cheng P. Information security for industrial control systems[J]. Information Security and Communications Privacy, 2014, 4(1): 74–77.
[2] 陶耀东, 李宁, 曾广圣. 工业控制系统安全综述[J]. 计算机工程与应用, 2016, 52(13): 8–18.
Tao Y D, Li N, Zeng G S. Review of industrial control systems security[J]. Computer Engineeringand Applications, 2016, 52(13): 8–18.
[3] 熊琦, 彭勇, 伊胜伟, 等. 工控网络协议Fuzzing测试技术研究综述[J]. 小型微型计算机系统, 2015, 36(3): 497–502.
Xiong Q, Peng Y, Yi S W, et al. Survey on the fuzzing technology in industrial network protocols[J]. Journal of Chinese Computer Systems, 2015, 36(3): 497–502.
[4] Shbeeb A, Singer B, Bodungen C, et al. Hacking exposed industrial control systems:ICS and SCADA security secrets &solutions[M]. New York, NY, USA: Stephen HiltMcGraw-Hill Education, 2016.
[5] 卢慧康.工业控制系统脆弱性测试与风险评估研究[D].上海: 华东理工大学, 2014.
Lu H K. Research on industrial control system vulnerability testing and risk assessment[D]. Shanghai: East China University of Science and Technology, 2014. http://cdmd.cnki.com.cn/Article/CDMD-10251-1014169318.htm
[6] Dong G, Sun P, Shi W, et al. A novel valuation pruning optimization fuzzing test model based on mutation tree for industrial control systems[J]. Applied Soft Computing, 2018, 36(2): 896–902.
[7] Pfrang S, Meier D, Michael F, et al. Advancing protocol fuzzing for industrial automation and control systems[C]//4th International Conference on Information Systems Security and Privacy. 2018: 570-580.
[8] 王昱镔, 陈思, 程楠. 工业控制系统信息安全防护研究[J]. 信息网络安全, 2016(9): 35–39.
Wang Y B, Chen S, Cheng N. Research on industrial control system security defense[J]. Netinfo Security, 2016(9): 35–39.
[9] 马金鑫, 张涛, 李舟军, 等. Fuzzing过程中的若干优化方法[J]. 清华大学学报(自然科学版), 2016(5): 478–483.
Ma J X, Zhang T, Li Z J, et al. Improved fuzzy analysis methods[J]. Journal of Tsinghua University (Science and Technology), 2016(5): 478–483.
[10] Sutton M, Greene A, Amini P. Fuzzing:Brute force vulnerability discovery[M]. Boston, USA: Pears on Education, 2007: 3-19.
[11] 戴超, 张鹿. 黑客大曝光:工业控制系统安全[M]. 北京: 机械工业出版社, 2017: 114-156.
Dai C, Zhang L. Hacking exposed industrial control systems:ICS and SCADA security secrets & solutions[M]. Beijing: China Machine Press, 2017: 114-156.
[12] Devarajan G. Unraveling SCADA protocols: Using Sulleyfuzzer[EB/OL].[2018-02-10].http://www.defcon.org/html/defcon-15/dc-15-speakers.html.
[13] Koch R. Profuzz[EB/OL].[2018-03-20].https: //github.com/HSASec/ProFuzz.
[14] Kang J, Park J H. A secure-coding and vulnerability check system based on smart-fuzzing and exploit[J]. Neurocomputing, 2017, 256(20): 23–34.
[15] Bratus S, Hansen A, Shubina A. LZFuzz: A fast compression-based fuzzer for poorly documented protocols[R]. Hanover, NH, USA: Dartmouth College, 2008.
[16] Nicholson A, Webber S, Dyer S, et al. SCADA security in the light of Cyber-Warfare[J]. Computers & Security, 2012, 31(4): 418–436.
[17] Kim S J, Jo W Y, Shon T. A novel vulnerability analysis approach to generate fuzzing test case in industrial control systems[C]//Information Technology, Networking, Electronic & Automation Control Conference. Piscataway, NJ, USA: IEEE, 2016: 20-22.
[18] Men J P, Xu G Q, Han Z, et al. Finding sands in the eyes:Vulnerabilities discovery in IoTwithEUFuzzer on human machine interface[J]. IEEE Access, 2019: 103751–103759.
[19] Katsigiannis K, Serpanos D. MTF-storm: A high performance fuzzer for Modbus/TCP[C]//2018 IEEE 23rd International Conference on Emerging Technologies and Factory Automation(ETFA). Piscataway, NJ, USA: IEEE, 2018: 926-931.
[20] Lee H, Choi K, Chung K, et al. Fuzzing CAN packets into automobiles[C]//2015 IEEE 29th International Conference on Advanced Information Networking and Applications. Piscataway, NJ, USA: IEEE 2015: 2332-5658.
[21] 张亚丰, 洪征, 吴礼发, 等. 基于范式语法的工控协议Fuzzing测试技术[J]. 计算机应用研究, 2016, 33(8): 2433–2439.
Zhang Y F, Hong Z, Wu L F, et al. Form-syntax based fuzzing method for industrial control protocols[J]. Application Research of Computers, 2016, 33(8): 2433–2439.
[22] 张亚丰, 洪征, 吴礼发, 等. 基于状态的工控协议Fuzzing测试技术[J]. 计算机科学, 2017, 44(5): 132–140.
Zhang Y F, Hong Z, Wu L F, et al. Protocol state based fuzzing method for industrial control protocols[J]. Computer Science, 2017, 44(5): 132–140.
[23] 赖英旭, 杨凯翔, 刘静, 等. 基于模糊测试的工控网络协议漏洞挖掘方法[J]. 计算机集成制造系统, 2018, 24(5): 1–22.
Lai Y X, Yang K X, Liu J, et al. A vulnerability mining method for industrial control network protocol based on fuzz testing[J]. Computer Integrated Manufacturing Systems, 2018, 24(5): 1–22.
[24] Zhang D B, Wang J F, Zhang H. Peach improvement onProfinet-DCP for industrial control system vulnerability detection[C/OL]//2nd International Conference on Electrical, Computer Engineering and Electronics. Paris, France: Atlantis Press, 2015.[2018-03-20]. https: //www.atlantis-press.com/proceedings/icecee-15/24790.
[25] Dong G, Sun P, Shi W, et al. A novel valuation pruning optimization fuzzing test model based on mutation tree for industrial control systems[J]. Applied Soft Computing, 2018, 70: 896–902. DOI:10.1016/j.asoc.2018.02.036
[26] 刘海龙, 汪永益, 潘祖烈. 基于变异树的Fuzzing技术研究[J]. 计算机工程与设计, 2011, 32(11): 3618–3621, 3632.
Liu H L, Wang YY, Pan Z L. Research on Fuzzing technology based on Tree-Mutator[J]. Computer Engineering and Design, 2011, 32(11): 3618–3621, 3632.
[27] 万明, 尚文利, 曾鹏, 等. 基于功能码深度检测的Modbus/TCP通信访问控制方法[J]. 信息与控制, 2016, 45(2): 248–256.
Wan M, Shang W L, Zeng P, et al. Modbus/TCP communication control method based on deep function code inspection[J]. Information and Control, 2016, 45(2): 248–256.
[28] Modbus Messaging Implementation Guide V1.0b[EB/OL]. (1998-12-18)[2018-03-29].http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf.
[29] National Internet Emergency Center. China national vulnerability database[DB/OL]. (2018-06-25)[2018-08-13].http://ics.cnvd.org.cn/.
http://dx.doi.org/10.13976/j.cnki.xk.2020.9466
中国科学院主管,中国科学院沈阳自动化研究所、中国自动化学会共同主办。
0

文章信息

尚文利, 李文轩, 陈春雨, 和晓军, 曾鹏
SHANG Wenli, LI Wenxuan, CHEN Chunyu, HE Xiaojun, ZENG Peng
基于特征矩阵的工控协议模糊测试方法
Fuzzing Method Based on Feature Matrix for Industrial Control Protocols
信息与控制, 2020, 49(4): 436-443, 454.
Information and Control, 2020, 49(4): 436-443, 454.
http://dx.doi.org/10.13976/j.cnki.xk.2020.9466

文章历史

收稿/录用/修回: 2019-08-23/2019-11-28/2020-04-17

工作空间