一种电力工控网络指令异常分析方法
2020-05-24黄秀丽缪巍巍孙佳炜
张 明,黄秀丽,缪巍巍,裴 培,孙佳炜
(1.江苏省电力有限公司,江苏 南京210000;2.全球能源互联网研究院有限公司 信息网络安全国网重点实验室,江苏 南京 210003)
国家电网积极构建全球能源互联网,利用特高压电网实现能源的大范围优化配置,在清洁电源引起电网波动、用电高峰突发等场景下,大规模源网荷系统能够将不易控制的分散负荷调整为自适应资源,主动协同保障电网的稳定,有效提升电网功率动态平衡能力。目前网荷互动的通信协议主要以IEC 60870-5-104为基准,并做了部分扩充的104规约。104规约解决了网荷互动终端的各项监控数据传输问题,然而对协议的安全描述以及指令间的异常识别没有提出有效解决方案,严重威胁了电力基础设施的安全。国内外针对此问题的主流解决方法是协议格式解析[1-4],但是传统协议解析方法很难普适,构造规约的上下文无关文法表示相对困难,同时解析过程多是基于堆栈、脚本或编译器式的推理过程,解析速度受到限制。因此,迫切需要对工控系统协议指令级的特征处理进行研究。
大规模源网荷友好互动系统是复杂的非线性系统,受到多种外界因素影响,其宏观指令行为往往复杂多变,数据中既含有多种周期类波动,又有非线性升、降趋势,还受到不确定的随机因素的干扰,所以,如何选择和优化非线性模型成为近年来分析指令级异常特征的研究重点,如何将非线性时序数据异常状态分析与自相关特性联系在一起是一个亟待解决的问题[5-7]。孤立森林算法尤其适于分析复杂交互系统中的异常状态,已经在实时(Real-time)系统、电子电路、通讯网络等大规模系统中应用[8]。本文提出一种网荷互动的工控网络指令异常的分析方法,针对通信协议的规范格式和业务指令特征对协议进行解析,抽取指令级特征,采用孤立森林算法实现对网荷互动的工控网络中正常指令的区分,在正常指令以外的离群点可以视为异常指令。
1 孤立森林算法
源网荷系统的主要拓扑如图1所示,智能网荷互动终端通过用户交互机实时向变电站上传可切负荷量,变电站对各网荷互动终端的可切负荷量进行汇集,上传到核心交换机,核心交换机将这些可切负荷量进一步汇集,并上传至源网荷主站。在电网发生故障时,源网荷主站根据预定义策略,通过变电站向各网荷互动终端发送切负荷命令,网荷互动终端接受主站命令后,对可切负荷量进行切除,保证电网安全稳定运行。在系统交互过程中,源网荷系统中的诸多风险点存在被利用的可能性,产生大量重复的异常网络流事件。通过对这些事件按根源进行分类,使用类别表示异常类型,可以精准分类攻击类型。
孤立森林是一种基于集成算法的快速异常检测方法[9,10],它一般用于网络安全中的攻击检测,金融交易中的欺诈检测等。孤立森林属于非参数(Non-parametric)和无监督(Unsupervised)方法,即无需定义数学模型也无需进行有标记的训练。对于如何查找哪些点是否容易被孤立(Isolated),孤立森林使用了一套策略:假设数据空间(Data space)被一个随机超平面切割,切一次可以生成两个子空间,然后再使用一个随机超平面切割每个子空间并将其循环,直到每子空间只包含一个数据。直观地,可以发现具有高密度的簇可以被多次切割,但是那些密度很低的点容易很早就停到一个子空间。
如图1所示,孤立森林由t个孤立树iTree(Isolation tree)组成,每个iTree是一个二叉树结构,算法步骤如下:
(1)从N条数据中均匀抽样出Ψ个子样本(Subsample),放入树的根节点;
(2)随机指定一个维度(Attribute),并在这个维度的所有值范围内(最小值与最大值之间)随机选一个切割点p;
(3)对样本进行二叉划分:将样本中小于该切割点的样本划分到节点的左边,大于等于该切割点的样本划分到节点的右边;
(4)这样得到了一个分裂条件和左、右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据不可再分即只包括一个样本,或树的高度达到log2(Ψ)。
当所有的iTree树构建完成后,就可以对测试数据进行预测。对于一个测试数据x,令其在iTree树上沿对应的条件分支往下走,直到达到叶子节点,并记录过程中经过的路径长度h(x)。可以得出x在每棵树的高度平均值(Average path length over iTrees)。
获得每个测试数据的高度平均值后,设定一个阈值,高度平均值低于此阈值的测试数据即为异常,也就是“孤立森林”(异常在这些树中只有很短的平均高度)。
2 基于孤立森林的指令异常分析方法
目前针对指令间的异常识别主要采取协议格式解析的方法,但是传统协议解析方法很难普适,首先构造规约的上下文无关文法表示相对困难,其次解析过程多是基于堆栈、脚本或编译器式的推理过程,解析速度受到限制。对于系统中的指令来说,异常指令只占很少量,异常数据特征值与正常数据差别很大,因此识别异常指令具有一定的干扰。而本文提出一种网荷互动的工控网络指令异常的分析方法,针对通信协议的规范格式和业务指令特征对协议进行解析,抽取指令级特征,本文设计的指令特征处理方法具有工控协议的普适性,同时孤立森林算法是一种快速异常检测方法,对于识别异常点有天然的优势。方法主要包括数据包捕获、数据包深度解析、协议特征跟踪识别和孤立森林算法的自学习等内容,如图2所示。数据包捕获模块为后续模块提供基础输入;数据包深度解析模块完成对数据包的传输层、网络层及链路层的高效解析;协议特征跟踪识别模块根据协议特征模型进行应用层数据流的异常分析,输出为畸形报文信息和协议交互异常信息;针对指令级异常分析,采用孤立森林算法进行识别监测,为了避免单个异常报文样本无法覆盖完整的异常特征簇的现象,采用正常报文样本数据集作为孤立森林算法输入进行自学习,实现对被测指令的特征处理。
2.1 数据包深度解析
数据包深度解析的步骤设计如下:
Step1实现协议切分。在会话的基础上进一步细分出“检测流”,例如:104协议的一次交互等,都可以抽象成一条“检测流”;
Step2实现协议域切分。在最小的粒度上细分报文,将检测流分成Header和Body部分,Header要细分成各个Field。协议域切分有助于判别该头域是否需要检测,判定该头域命中的特征与其定义是否吻合;
Step3对源网荷104协议进行解析,提取遥信、遥测、遥控等交互指令,将协议解析后的指令级字段送入算法引擎;
(a)通过解析接收到的104报文,搜索68H得到帧头,继而获得帧长度;
(b)根据类型标志判断该报文的信息帧类型;
例如,接收到一帧数据68 14 2E 00 04 00 1E 01 03 00 01 00 0B 00 01 31 25 16 15 12 04 0B,此帧为遥信突发帧,数据长度为20,数据标识为0x1E,表示带时标CP56Time2a的单点遥信帧,0B 00 01代表信息对象地址为65547,31为码值描述。
(c)根据帧结构分析数据以获得相关信息。获得的遥测、遥调、遥信和遥控的命令值被分配相应的序号并放置在存储器中。
2.2 协议特征跟踪识别
典型的源网荷系统交互异常主要包括协议结构异常(畸形报文)、协议交互异常、指令功能码异常(包括频次、值域范围等特征异常)等3类异常。协议特征跟踪识别流程如图3所示。由图3可见,协议特征跟踪识别主要识别畸形报文和协议交互异常。首先对数据包结构的正常性进行分析,如果数据包的结构不符合规范要求,则直接判定该数据包不合规;其次,在源网荷系统监测过程中预置计算监测窗口周期达到时,计算指令非正常的显著特征指标,包括TCP连接报文数、遥调上下行报文比、遥控超时区间W及业务流量等,进行协议交互快速异常状态分类。
(1)协议结构异常识别
发现协议结构异常可以直接进行异常判定,104协议的协议帧结构为应用协议数据单元(Application protocol data unit,APDU),它由两部分组成:应用控制协议信息(Application control protocol information,APCI)和应用服务数据单元(Application service data unit,ASDU)。在Least Significant Bits中使用的3种控制类型是带编号信息传输(I格式,Numbered information transfer),带编号监控功能(S格式,Numbered supervisory functions)和无编号控制功能(U格式,Unnumbered control functions),分别取值00、10和11。对不符合规约规定的格式的协议判定为异常;
(2)协议交互异常识别
协议交互异常状态判别的主要监测指标如下:
(a)业务流量状态。
(1)
式中:s表示采样周期,Len(PASDU)表示采样周期内检测到的典型业务报文中ASDU字节数,采用变化遥测上行报文为典型业务报文;
(b)典型报文的业务流量频域直流模比值状态r流量
其次,计算典型报文流量频域直流模比值
(2)
当直流模比值r流量大于正常传输的阈值t流量时,判别为正常状态;反之,判别为异常状态。
(c)典型报文数的频域直流模比值状态r报文数
首先,计算业务报文数Cs,其中s是采用周期,Cs是采样周期内检测到的完整典型业务报文个数;
最后,计算典型报文数频域直流模比值
(3)
当传输的报文数频域直流模比值r报文数大于正常传输的阈值t报文数时,判别为正常状态;反之为异常状态。
(d)TCP连接请求报文数状态
104规约的工作方式为TCP链接在运行过程中处于长链状态,当发生诸如通讯设备问题或传输协议的序列号错误等软件故障时,需要重新进行TCP链接。定义CTCP为主站在计算窗口期间发送的TCP连接报文数。当CTCP超过设定的阈值时,判别为传输异常;
(e)遥调上下行报文数比r遥调状态
(4)
式中:C指令、C响应分别是主站在计算窗口期间发送的遥调指令报文数及相应厂站上行的遥调应答报文数。
对于遥调指令,典型状态转换为“指令↓-响应↑”或者“指令↓-响应↑-结束↑”。当r遥调小于对应设定的阈值时,判定遥调指令传输出错;
(f)遥控报文应答平均延迟时间状态
(5)
式中:t指令表示计算窗口期间遥控指令时间,t响应表示相应上行应答报文时间,N为窗口期间发出的指令个数。
对于遥控指令,典型状态转换为“选择指令↓-选择响应↑-执行指令↓-执行响应↑”,对于主站发出的每个指令,必须在一定的时间范围内有相应的应答。对于每个厂站遥控指令,当遥控报文应答平均延迟时间r遥控延迟大于设定阈值时,判定遥控指令传输出错。
2.3 指令功能码异常识别
孤立森林算法本质上是一个无监督学习,不需要数据的类型标注。在工控系统中异常样本比较少,不能进行训练,本文采用文献[2,3]方法,仅用正常样本构建孤立森林。构建正常指令itree,在源网荷中,可以通过建立遥测、遥信的频次数、阈值数来判定正常指令。
孤立森林正常指令特征的算法如下:
由上述算法可以看出,正常指令特征iTree具体构造算法的主函数Gratree-Build,以正常报文类型DM和SMA为输入,从正常报文类型的起始字段开始推导解析SMA。首先为起始字段(DM.Z)创建根节点(第1行);然后在正常报文类型的生成式集合(DM.P)中找到起始字段对应的生成式(第2行),调用生成式处理函数Production disposal对其进行处理;最后输出SMA对应的正常指令状态iTree。
生成式处理函数(Production disposal)实现SMA解析的核心功能,即将SMA依次比对生成式右边的构成元素,得到该SMA的语法结构。在处理每一个构成元素之前,首先计算其继承属性的值(第7行),因为它的值可能会影响到后序字段的解析。在处理文法元素识别SMA时,算法又根据字段类型的不同分为3种情况:
(1)若为原子字段(第8-10行),则根据字段的属性值提取(get-Data函数)该字段在SMA中的取值,创建节点(Node函数)加入正常指令状态iTree;
(2)若为包含结构属性的复合字段(第12-13行),则先根据属性规则计算出SMA对应的结构属性值,再按照一般复合字段的处理方法构造分析树;
(3)若为一般的复合字段(第14-18行),先为该复合字段创建节点加入树中,然后寻找复合字段的生成式,递归调用生成式处理函数(Production disposal),直到SMA解析完成或模型推导终止。同时当复合字段的生成式解析完全之后,还需对其综合属性进行计算(第18行)。
正常指令特征iTree算法构建以后,给定一个包含n条记录的指令数据集D,构造孤立森林:随机采样一部分指令数据集来构造每一棵树,以确保不同树之间的差异。文献[2]中建议采样大小不要超过256。除了限制采样大小Ψ外,还要给每棵iTree设置最大高度L=ceiling(log2Ψ),这样算法效率更高,不过这样调整了后,后面计算h(x)需要进一步改进,算法1表示孤立森林构建过程:
孤立森林构造后,对测试进行预测时,需要进行综合每棵树的结果,即通过阈值比较,阈值计算公式为
(6)
式中:E(h(x))表示记录x在每棵树的高度均值,h(x)的计算方法如下:
应用孤立森林检测后,如果检测出异常报文,需要对报文进行后续处理,例如拒绝、丢弃、重定向或者断开连接,生成攻击日志告警等。
3 方法分析
源网荷系统典型的指令执行过程如图5所示。源网荷系统104规约采用TCP/IP协议进行数据传输,主要通信事件包括遥信、遥测、遥控。在遥控过程中,当主站需要控制子站的相关设备时,发送相应的遥控帧,主站首先向子站发送遥控指令,子站回送相应的返校指令,接着主站发送执行指令,子站执行相应的遥控指令并返回执行确认指令,子站完成相应操作后,向主站发送操作结束指令。
本文选用终端侧源网荷智能网荷互动终端侧交换机、通信侧变电站交换机和主站侧交换机的报文状态数据集进行实验。采集的部分报文如图6-8所示。
当接收到一个或多个数据帧时,通过搜索头部为68H的数据帧确定一个数据帧。定位到68H后,提取的报头的下一位即指示APDU数据单元长度的数据。利用数据长度L能够确定出一个完整的数据帧,具体判断方法如表1所示。
在判断帧的格式后,根据对应的帧格式解析子程序,得到相应的遥测、遥调、遥信和遥控信息。
孤立森林学习稳定后,将收到的帧以数组的方式存储到内存中。解析接收到的帧,通过第7字节的数据标识确定数据帧类型。帧类型对应信息如表2所示。
表1 基于数据长度L的帧类型判断
表2 数据标识符对应的信息帧类型
根据实验数据集采集的周期和时长的特点,本文参考Cortez对时间窗口的选取方法,划分训练集和测试集时,将数据集的前2/3用于训练,后1/3用于测试模型的精确度。为了评估异常状态分析模型的准确性,本文采用平均绝对百分比误差(Mean absolute percentage error,MAPE)作为模型的评价指标[11,12]
(7)
ESN(回声状态网络)是一种由输入层、隐藏层(储备池)、输出层组成的新型递归神经网络。它的储备池内有许多稀疏神经元,这些神经元蕴含系统的运行状态,并具有短期训记忆功能。通过调整网络内部权值能够达到记忆数据的功能。ESN训练的过程就是训练隐藏层到输出层的连接权值(Wout)的过程。LSTM(长短时记忆网络)是一种特定形式的RNN,通过增加输入门限、遗忘门限和输出门限,使得自循环的权重是变化的,这样,在模型参数固定的情况下,不同时刻的积分尺度可以动态改变,从而避免了梯度消失或者梯度膨胀的问题。
通过将实验采集数据经过ESN、LSTM、孤立森林3种算法进行测试,3种算法的平均绝对百分比误差如表3所示。
由表3可以看到,在3个数据集上,孤立森林算法的指令异常检测的平均绝对百分比误差比ESN,LSTM算法小,异常状态分析结果最好。
实验中分别记录了3个数据集上3个算法的模型训练时间,如表4所示。
表3 指令异常检测的平均绝对百分比误差分析
表4 不同算法训练时间
由表4可以看出,孤立森林算法训练用时最少,效率最高。而ESN和LSTM算法由于都属于神经网络算法,在计算隐藏层节点权重时需要不断迭代,因此训练耗时较高,在数据集1中甚至达到3 h 25 min。从以上实验可以看出,基于孤立森林的指令异常检测方法在具有较低误差的同时也具有较高的效率。
4 结论
本文提出一种电力工控网络指令异常的分析方法,在网-荷互动背景下,针对104规约的规范格式和业务指令特征,通过数据包的捕获和深度解析,对协议特征进行跟踪识别,采用孤立森林的自学习方法实现对电力工控网络指令级异常特征挖掘。实验证明了本文方法的有效性,该方法对电力工控网络中减少各类运行信息和控制指令在采集、传输、触发过程中存在的被窃听、篡改、中断等风险具有意义。