时间:2022年02月13日 分类:科学技术论文 次数:
摘要近年来,工业互联网的安全事件日益频发,尤其是工业控制系统(industrialcontrolsystems,ICS),揭示了目前ICS中已经存在较多的安全隐患,并且那些针对ICS安全隐患的大多数攻击和防御方法都需要对工控协议进行分析.然而,目前ICS中大多数私有工控协议都具有与普通互联网协议完全不同的典型特征,如结构、字段精度、周期性等方面,导致针对互联网协议的逆向分析技术通常都无法直接适用于工控协议.因此,针对工控协议的逆向分析技术已经成为近几年学术界和产业界的研究热点.首先结合2种典型工控协议,深入分析和总结了工控协议的结构特征.其次,给出了工控协议逆向分析框架,深入剖析了基于程序执行和基于报文序列的工控协议逆向分析框架的特点,并依次从人机参与程度和协议格式提取方式这2个角度,重点针对基于报文序列的工控协议分析方法进行详细阐述和对比分析.最后探讨了现有逆向分析方法的特点及不足,并对工控协议逆向分析技术的未来研究方向进行展望与分析.
关键词工业控制系统;协议逆向工程;工业控制协议;报文序列;启发式规则
随着工业数字化、网络化、智能化的快速发展,工业互联网已经成为国家先进制造的重要基础设施,其安全问题也逐渐受到重视,尤其是工业控制系统(industrialcontrolsystems,ICS)安全已成为实施制造强国和网络强国战略的重要保障[1G2].然而,日益频发的ICS安全事件表明ICS已经存在大量安全漏洞和隐患[3G4],如2017年乌克兰、俄罗斯等多国的银行、电力、通信系统均遭受Petya勒索病毒袭击,2019年委内瑞拉遭受电网攻击,2021年伊朗国家铁路系统遭受网络入侵等[5].ICS通过专有的工业控制协议(简称“工控协议”)实现各组件间的通信,进而控制工控网络内的各种工控设备.然而,基于商业性和安全性等原因[6]。
大多数工控设备厂商都不提供公开协议文档,造成ICS中存在大量私有、非标准的工控协议[7],为ICS的网络行为管理、模糊测试[8]、入侵检测[9G11]带来了巨大挑战.协议逆向工程(protocolreverseengineering,PRE)是指在不依赖协议描述的情况下,通过对协议实体的网络输入∕输出、系统行为和指令执行流程进行监控和分析,提取协议语法、语义和同步信息,从而推断出未知协议的消息格式和状态机模型的过程[12].最初的PRE技术完全基于人工分析的方式进行,需要耗费大量时间和精力.
而后由于PRE在网络入侵检测、深度数据包分析、模糊测试等领域应用效果显著,逐渐引发众多学者研究,PRE技术也因此得到迅速发展,由最初的“人工分析”过渡到目前的“自动化分析”,并逐渐发展成2个分支[12G13]:第一个分支是基于程序执行的协议逆向分析技术,通过监视协议实体对消息的处理过程以及各消息片段的使用方式,以获取协议的结构及字段语义,比如2007年Caballero等人提出Polyglot[14],基于动态污点技术完成对协议消息的字段划分。
另一个分支是基于报文序列的协议逆向分析技术,通过对网络内的目标报文流量进行分析,以获取协议的结构及字段语义,并随着自然语言处理、机器学习等人工智能技术的不断成熟,这类协议逆向分析技术也得到了迅速发展[15],不仅研究对象从文本协议扩展到二进制协议,而且方法类型也不断丰富,比如基于序列比对的Discoverer[16],NetZob[17],MSAGHMM[18]等方法,基于概率模型的Biprominer[19],ProGraph[20],HsMM[21]等方法,基于频繁集的AutoReEngine[22],SPREA[23],HIERARCHICALCSP[24]方法,基于语义分析的FieldHunter[25],WASp[26]等方法.此外,协议逆向分析方法也从最初的字段划分和结构识别逐渐向语义推断、状态机重构拓展,如PETX[27],ReverX[28],BFS[29]等方法.然而,相比于互联网系统,ICS对工控设备的操作精度和响应速度通常要求更高,但那些底层工控设备的计算性能却相对有限,难以处理较为复杂的工控指令和数据[1,3].
因此,为了保证ICS的实时性和稳定性,工控协议通常采用二进制编码,并且功能相对固定,结构也比较简洁,甚至只通过一个或几个比特来表示相应功能,导致目前大多数针对互联网协议的逆向分析方法无法直接适用于工控协议[12,30],但同时工控协议的这些特征也为其逆向分析提供了一定依据.结合工控协议的共性特征,近几年不断有学者基于互联网协议逆向分析技术,提出针对工控协议的逆向分析方法.
一方面,部分学者基于程序执行对工控协议进行逆向分析,比如2018年魏骁等人[30]和Chen等人[31]分别都借助污点分析技术,实现对工控协议的字段划分和结构识别,并具有较高的识别准确度,但由于这类方法对ICS的稳定性影响和可控性要求都比较高,且实施和分析难度也较大,导致目前该方向的研究仍相对较少.另一方面,部分学者基于报文序列对工控协议进行逆向分析,并主要分为2类方法:
1)主要针对互联网协议逆向分析技术进行改进或重新设计,以实现工控协议的自动化逆向分析,比如Wu等人[32]通过pairGHMM方法对序列比对算法进行改进,以完善相邻字段的对比,提高工控协议格式提取的效率和准确度,Wang等人[33]针对基于NGgram模型的协议逆向分析方法进行改进,提出VGgram模型将协议字段识别精度提高到“半字节”.然而,这类方法虽然都能够实现工控协议格式的自动化提取,但只有较少方法能够进一步完成工控协议字段的语义推断.
2)借助专家的先验知识,对现有公开工控协议的关键字段特征进行分析,归纳出相应字段的“启发式规则”,以提前实现对部分关键字段的识别,比如MSERA[34],IPART[35],IPRFW[36]等方法,这类人机协同型方法不仅能够进一步提高工控协议格式提取的效率和准确度,而且还有利于工控协议字段的语义推断.综上所述,本文将系统性研究和分析目前工控协议的逆向分析技术,主要将其分为两大类:基于程序执行的分析技术和基于报文序列的分析技术.再重点根据“人机参与程度”将基于报文序列的方法分为全自动型方法和人机协同型方法.具体包括4点内容:
1)重点针对2种典型工控协议Modbus和DNP3的结构特征进行详细分析,进而归纳工控协议的共性特征;2)阐述“基于程序执行”和“基于报文序列”这2种工控协议逆向分析框架的基本流程与特点,并从多个角度全面讨论各自框架中“互联网协议逆向分析方法”和“工控协议逆向分析方法”的区别;3)分别针对“基于程序执行”和“基于报文序列”的工控协议逆向分析方法展开深入剖析,并重点从“人机协同程度”和“协议格式提取方式”这2个角度,对基于报文序列的工控协议逆向分析方法进行分类讨论与对比分析;4)讨论和分析目前各种工控协议逆向分析方法的特点和不足,并进一步分析和展望工控协议逆向分析技术的未来可能发展方向.
1工控协议分析及其特征
相比于互联网协议,虽然工控协议目前仍没有统一的设计规范,但基于ICS的高精度、高实时性和高可靠性的要求,以及底层工控设备相对有限的计算性能,通常工控协议的结构更加简明,功能更加固定[35G36].因此,针对工控协议的典型特征进行分析和归纳,将非常有助于工控协议的逆向研究[37].
1.1典型工控协议分析
目前比较常见的公开工控协议主要包括:工控标准协议Modbus、工业以太网协议Ethemet∕IP、输配电通信协议IEC104∕IEC61850系列协议簇、分布式网络协议DNP3和开放式实时以太网协议EtherCAT[38]等,本节将重点针对Modbus和DNP3这2种经典工控协议的结构特征进行分析[39G40].1)ModbusModbus是1979年Modicon公司为可编程逻辑控制器(PLC)通信而提出的一种开放串行通信协议,由于其在工业网络中易于部署和扩展,目前被广泛采用,并成为工业领域通信协议的业界标准[39].
Modbus协议是一种基于“主∕从架构”的协议,用于Modbus节点之间带有发送请求和读取响应类型的消息通信,在一个数据链路上通常只能处理247个地址,限制了可以连接到主控站点的从机数量(Modbus∕TCP除外).Modbus信息都以“帧”的方式传输,每个信息帧有确定的起始点和结束点,便于接收设备识别,但目前几乎所有的Modbus实现都是官方标准的变体,它们在开始∕结束标志、校验模式和格式等方面都存在一定差异,也进而导致不同供应商的设备之间可能无法正确通信[41].
目前常见的Modbus协议变体主要包括3种:ModbusRTU,ModbusASCII和Modbus∕TCP.其中,Modbus∕TCP基于TCP∕IP开发,工业设备通过以太网进行数据交互,其数据帧格式与RTU非常类似,并去掉其中的校验码,因此此处仅重点介绍Modbus的RTU和ASCII协议.
①ModbusRTUModbusRTU是一种采用二进制编码的Modbus实现方式,结构相对紧凑.在RTU模式下,整个信息帧必须作为一个连续的流传输,并且不同的消息帧之间至少需要相隔传输3.5B所需要的空闲时间,如果小于该时间,接收设备会将此消息作为前一信息帧的延续.ModbusRTU采用CRC校验码,以保证消息传输的可靠性.
在格式方面,ModbusRTU信息帧主要包括4个字段:设备地址、功能码、数据和CRC校验字段.其中,起始位和结束位分别表示3.5B以上的消息间隔时间;“设备地址”表示从机地址,即需要对该消息进行回应的从机,其他非该地址的从机可以不回应;“功能码”表示具体操作,比如“06”代表“写操作”;“数据”代表需要操作的具体数据;“CRC检验”用于检验该消息在传输过程中是否出错,主要根据前3个字段计算相应的CRC检验码.
②ModbusASCIIModbusASCII是一种人类可读的、冗长的表示方式,由于国内工业控制中很少采用ASCII码作为标准,所以ModusASCII在国内的工控领域运用很少.在ModbusASCII模式下,每个字节都被拆分成2个ASCII字符进行发送,即2B,因此其发送量是RTU模式的2倍.ModbusASCII消息帧通过特定字符判定起始位置,以英文冒号“:”(3A)表示开始,以“回车”(0D)和“换行”(0A)表示结束,各占1B和2B.
其中,“数据数量”表示后续“数据”字段中的字节个数,其他字段含义和RTU模式类似.2)DNP3DNP3协议是一种分布式网络协议,解决了SCADA行业中协议混杂、没有公认标准的问题.SCADA可以通过该协议与主站、RTU及IED进行通信,针对电磁干扰、元件老化等恶劣环境具有一定可靠性,并通过CRC校验保证数据的准确性.目前DNP3协议已广泛应用于各类ICS中,如电力、水处理等行业[40].DNP3协议完全基于TCP∕IP,并具有类似OSI的协议栈结构[42],主要包括数据链路层、传输控制层和应用层,且各层数据单元的结构特征基本类似.因此,此处仅以数据链路层的数据单元为例,分析DNP3协议报文的结构特征。
1.2工控协议特征
通过对ModbusRTU,ModbusASCII和DNP3等典型工控协议的结构特征进行分析,目前这些工控协议虽然还没有统一的设计规范,但在编码、结构、周期性等方面都存在一些共性特征[43],主要包括7点:
1)二进制编码.为保证ICS的高实时性和可用性,工控协议通常不加密,大多数都采用二进制编码,少量采用ASCII进行编码.
2)结构简明.即使部分工控协议存在“协议栈”的多层结构,如DNP3,S7Comm协议等,但每一层协议的数据报文结构都较为简明,功能相对固定,长度比较短,总体呈现一种“扁平化”的结构,只包含头部和数据,并且各字段之间没有额外的关键字或分隔符.
3)字段精度较细.工控协议字段的划分颗粒度通常较细,虽然字段长度通常为一个字节的整数倍,但字段内的功能划分可能会精确到Bit级,比如DNP3的控制字段.Fig.5Frameworkofindustrialcontrolprotocolreversebasedontaintanalysis图5基于污点分析的工控协议逆向框架4)周期性强.工控协议报文传输通常都具有较强的周期性,特别是交互信息和控制信息,并且同类型协议报文在长度和格式方面存在相似性.
5)起始标志明显.工控协议数据帧具有明显的起始标志,通常采用“时间间隔”或者“标志位”等方式.6)差错校验.为了保证数据帧传输的正确率,大多数工控协议都存在“差错校验”字段,通常采用CRC或者LRC校验.但部分基于TCP∕IP以太网的工控协议通常会采用TCP∕IP和链路层校验机制来校验分组交换的准确性,如Modbus∕TCP.
7)状态机简单.ICS中通常是主机发送命令,从机响应并执行命令,通信模式较为简单,因此,工控协议一般只有简单的状态机.针对工控协议的这些共性特征,一方面,可以基于互联网协议的逆向分析方法,进一步改进或重新设计针对工控协议的自动化逆向分析方法;另一方面,也可以通过专家分析,归纳工控协议各种特征字段的“启发式规则”,以进一步提高工控协议的逆向分析效果和准确性.
2工控协议逆向分析框架
工控协议逆向分析技术作为近几年协议逆向技术在工控领域的具体应用[44],几乎没有经历最初的“基于人工分析”的阶段,目前主要分为2种方式:“基于程序执行”和“基于报文序列”的工控协议逆向分析技术[15,45].
2.1基于程序执行的分析框架
工控程序执行期间,协议报文中不同字段通常会被各自的函数调用,并且相同函数通常也只调用相同字段的数据.因此,基于程序执行的工控协议逆向分析技术可以通过跟踪并分析目标工控协议程序执行期间函数堆栈、指令序列、数据、寄存器等信息的变化情况,以完成工控协议的字段划分和语义推断[46],而工控协议的结构简明、周期性强等特征也更加有利于这类方法的实施.
目前针对工控协议程序分析主要是借助“污点分析”思想实现,并分为“静态污点分析”和“动态污点分析”,它们的区别主要在于是否需要运行程序.前者可以不运行程序,仅需要对程序源代码进行分析[47];而后者需要运行程序,通过调试、代码注入等方式[48]对目标程序进行分析[49].但是由于工控程序源代码通常较难获取等原因,目前大多数都是借助“动态污点分析”实现对工控程序函数、指令和数据的跟踪与分析[50],主要分为目标监控、目标跟踪与分析和协议推断3个阶段[51].
首先,确定可监控的目标协议程序,将其二进制程序或协议报文作为监控目标;然后,通过动态污点分析方法与插桩技术跟踪并记录目标程序运行期间的函数、指令和字段数据的执行轨迹;最后,结合它们之间的“共现”情况,比如,某些协议数据字节在哪些函数中出现或者某些函数的二进制指令调用过哪些协议字节,进而推断出工控协议字段的边界,并结合工控协议字段的特征,进一步完成工控协议报文的格式提取、语义推断及状态机重构.
2.2基于报文序列的分析框架
基于报文序列的工控协议逆向分析技术主要针对工控协议通信实体间的网络报文流量进行分析,重点结合工控协议的特征,通过序列比对、聚类等算法完成协议的格式提取等操作.由于这类方法仅需要收集和分析实体间的通信流量,不仅易于实施,而且对目标系统的稳定性等影响都比较小,因此成为目前研究较多的方法.
该类技术的框架流程基本类似于互联网协议逆向分析技术[52],但为了更好地适用于工控协议,部分学者将工控协议的共性特征引入到原有的互联网协议逆向分析框架,改进或重新设计了工控协议逆向分析的部分环节(如格式提取),形成一种“全自动型”的工控协议逆向分析技术,具有较高的自动性和通用性.
而另一部分学者基于公开工控协议中各种关键字段的特征,归纳出相应的“启发式规则”,并通过“人工干预”的方式提前识别私有工控协议中的部分关键字段,以进一步提高后续逆向分析环节的效率和准确率,进而形成一种“人机协同型”的工控协议逆向分析技术.但值得注意的是,这2类技术都是将研究重心集中在工控协议的“格式提取”阶段,特别是关键字段的划分,因为该阶段的准确性直接关系到后续“语义推断”和“状态机重构”的准确性[53].
基于报文序列的工控协议逆向分析技术主要包括输入预处理、格式提取、语义推断和状态机重构4个阶段[15],其中,格式提取可以进一步分为字段划分和结构识别.第1阶段是输入预处理.首先根据目标协议实体特征对网络流量数据进行过滤,划分为不同的会话;然后再结合工控协议的基本特征(如报文长度、报文相似度等),对目标报文序列进行初步聚类,得到多组报文序列集合.
第2阶段是格式提取,主要包括字段划分和结构识别2个步骤.首先针每组同类型的报文序列集合,结合工控协议关键字段的特征,使用序列比对、统计分析、概率模型、深度学习等算法,完成工控特征字段的划分;再重点通过各种聚类算法,完成工控协议的结构识别.
第3阶段是语义推断.针对每个聚类中同一种协议结构,结合工控协议各种关键字段的特征(如位置、长度、数值、熵等)和上下文信息,推断相应字段的语义.因此该阶段通常要求对工控协议的应用背景和设计规范等先验知识具有一定了解,但由于目前工控协议领域仍缺少统一的设计规范,并且各工控厂家很少公开各自的协议文档,导致没有足够的先验知识,使得语义推断仍然是工控协议逆向分析的难点.
第4阶段是状态机重构.消息数据帧中通常存在一些能够反映消息状态的状态字段,根据不同消息的状态字段取值和各类消息之间的顺序,初步完成状态机构建,随后再进一步完成状态机化简.但是一方面由于该阶段比较依赖格式提取和语义推断的结果,另一方面,由于大多数工控协议只有简单的状态机,所以目前针对工控协议状态机重构的研究也比较少.
基于报文序列的协议逆向分析技术通常对报文样本的覆盖率和协议规范等先验知识具有一定要求,因此,对于稳定性较高且缺少协议设计先验知识的ICS来说,针对工控协议进行逆向分析仍具有一定难度.表2分别从5个角度将其与同类型互联网的协议逆向分析技术进行对比.
2.3小结
本节重点阐述了“基于程序执行”和“基于报文序列”这2类工控协议逆向分析框架的基本流程与特点,并从多个角度将工控协议逆向分析技术与同类型的互联网协议逆向分析技术进行对比分析,总结各自的优势和逆势.其次,针对工控协议逆向分析技术,进一步剖析“基于程序执行”和“基于报文序列”这2类分析技术的优势和逆势,可以明显看出基于报文序列的逆向分析技术更加易于实施,且对ICS影响较小,因此目前针对该类技术的研究比较多,并旨在进一步提高对工控协议的识别精度和准确度.
3基于程序执行的工控协议逆向
根据第2节的分析,基于程序执行的工控协议逆向分析技术通过跟踪并分析目标工控程序执行期间指令序列、数据、寄存器等信息的变化情况,实现工控协议的格式提取和语义推断,并且此类大多数方法都是借助“污点分析”的思想,如Polyglot[14],AutoFormat[54],Prospex[55]等.
2018年魏骁等人[30]提出了一种基于静态二进制分析的工控协议解析方法,将“污点分析”思想应用于静态二进制分析过程[47,56],主要包括数据预处理、交叉引用分析、协议帧重构和语义提取4个阶段:1)读取IDAPro反汇编后的汇编代码,并通过“代码交叉引用”和“源于动态污点的数据交叉引用”剔除与通信过程无关的函数;2)调用IDC函数,获取交叉引用信息和函数间的依赖关系,并推断函数类型;3)基于前一阶段推断结果,判断函数代码特征,完成对目标协议帧的重构与分类,形成记录初步字段结构和常量字段值的帧结构;4)针对各协议帧字段的特征,如校验域字段通常伴随大量移位运算,完成协议帧的语义信息提取.
4基于报文序列的全自动型工控协议逆向
相比于基于程序执行的逆向分析技术,基于报文序列的逆向分析技术更易于实施,且对ICS的影响较小.因此部分学者将工控协议的共性特征引入现有的互联网协议逆向分析框架,并重点对“格式提取”环节进行改进或重新设计,使其更加适用于工控协议,形成一种“全自动型”的分析技术,完全通过机器或者仅通过少量的人工协助,完成对工控协议的逆向分析[57].本章节主要根据“格式提取”方式的不同将其分为4类[15]:基于序列比对的方法、基于频繁集的方法、基于概率模型的方法和基于深度学习的方法
5基于报文序列的人机协同型工控协议逆向
基于报文序列的全自动型工控协议逆向分析技术主要结合工控协议的共性特征,完全通过“机器”或者少量的“人工协助”实现对工控协议的自动化逆向分析,而另一部分学者结合已知工控协议中各种关键字段的特征,归纳出相应的“启发式规则”,并在“格式提取”阶段通过“人工干预”的方式提前识别私有工控协议中的部分关键字段,以进一步提高后续逆向分析环节的效率和准确率,进而形成一种“人机协同型”的工控协议逆向分析技术[72].本章节依然根据“格式提取”方式将其分为4类:基于序列比对的方法、基于频繁集的方法、基于语义的方法和基于数理特征的方法.
5.1基于序列比对的方法
2021年Wang等人[34]认为“流水线式”的传统协议逆向方法无法将后面阶段识别的有效信息反馈到前面阶段,限制了工控协议逆向的准确性.,因此,文献[34]提出一种多阶段集成逆向分析法———MSERA,以完成OMRON_FINS,BACnet和Heidenhain等多种工控协议的逆向分析.该方法首先通过工控协议中各种特征字段的“启发式规则”,提前对各种特征字段的范围和语义进行预挖掘,如协议标识符、序列号、位置标识符等,并且提出“语义优先级”解决部分字段的“语义重叠”问题;然后将所推断的结果代入后续的逆向环节,通过序列比对算法和DBSCAN聚类算法[73]将高相似度分组划分为同一类别,并根据字段的动态变化特征,将同一类别中的数据包划分为字段;最后,再对无法通过预挖掘得到的字段语义进行重新分析.
此外,还通过“字段校正”方法对一些异常字段进行了修正.MSERA方法通过“启发式识别+机器识别+修正”的方式,确实能够提高工控协议逆向的准确度,但是当连续多个字段的内容没有改变时,MSERA也很难区分出这些字段,这也是基于报文序列的协议逆向分析技术无法克服的固有困难.
5.2基于频繁集的方法
2014年Zhang等人[74]认为如果部分子序列连续出现的频率比较高,并且其后续字节具有很高的可变性,则该子序列很可能是一个关键字段,因此提出了Prowork方法,使用投票专家(votingexpert,VE)算法[75]推断关键字边界,并根据其属性(如长度、偏移量和频率)对候选关键字段进行识别.其中,VE算法在连续序列上使用窗口滑动,并通过决策规则C(x)在每个步骤中选出最可能的单词边界,用于分割没有分隔符的文本,因此非常适用于二进制协议的字段划分.
6讨论
6.1方法对比分析
相比于互联网协议,工控协议虽然没有统一的设计规范和大量的先验知识,导致大多数互联网协议逆向分析方法无法完全适用,但它们具有结构简明、周期性强等共性特征,为工控协议的逆向分析提供了更多依据.结合工控协议的共性特征,目前基于程序执行的工控协议逆向分析技术主要借助“污点分析”的思想,针对工控程序执行期间的函数、指令和数据的轨迹进行跟踪与分析,能够达到较高的识别精度和准确度,但是该方法不仅对ICS的稳定性影响较大,而且在工控领域难以实施,导致目前针对该类方法的研究仍比较少.
而基于报文序列的工控协议逆向分析方法仅需要对捕获的网络流量进行分析,虽然识别精度和准确度不如基于程序执行的工控协议逆向分析方法,但是它易于实施且对ICS的影响比较小,自动化程度也相对较高,因此成为目前研究较多的方向.本文重点按照人机参与程度的不同将其分为全自动型和人机协同型,再按照格式提取方式不同,继续分为基于序列比对的方法、基于频繁集的方法和基于概率模型的方法等.其中,表5重点针对“基于报文序列”的工控协议逆向分析方法,从多个维度进行对比分析与总结,主要包括时间、分析粒度、字段划分、结构识别、语义推断、状态机重构等.
作者:黄涛1,2付安民1,2季宇凯1毛安1王占丰3胡超4