工业控制系统私有协议深度解析方法
2020-01-16阮伟黄光平陈亮杨柳
文/阮伟 黄光平 陈亮 杨柳
随着工业控制系统信息技术与功能需求的发展,工控系统与互联网的联系越来越紧密,形成了一个开放式的网络环境,由于传统工业控制系统是基于物理隔离的,主要关注系统的功能安全,缺乏对网络信息安全的考虑,没有专门的安全防御措施。近年来,针对工业控制系统的各种攻击事件层出不穷,比如震网病毒,毒区病毒,以及乌克兰电网等事件,攻击者通过各种手段发起攻击,使工业控制系统崩溃,给工业生产造成了难以估量的损失。因此对工控协议进行安全性分析成为了系统安全防御的重要手段。
1 协议逆向解析技术
根据分析对象的不同,现有的对协议逆向分析的方法主要分为两类,报文序列分析和指令执行序列分析。报文序列分析的方法具有简单,平台无关,能够推测出协议语法结构的划分等优点,但是很难实现协议数据字段语义属性的识别,典型的有PI 项目;指令执行序列分析的方法能够获得协议数据的语义信息,但是其分析过程依赖于协议实体的运行环境,难以实现跨平台的移植,典型的有Polyglot。
工业控制系统通信协议不同于传统网络协议,工控系统的通信协议是一种有状态的协议,对有状态的通信协议进行解析必须基于协议自身相关的报文序列,解析时需要对协议的每一个状态和字段进行解析。尽管现有许多针对未知协议为分析对象的协议逆向方案,然而由于不同协议之间,报文的结构、取值都存在较大差异,无法保证逆向结果的正确性,并且现有的协议解析方法准确率较低。因此,对工控协议进行解析必须基于人工辅助方式的协议逆向分析方法。
2 未知工控协议逆向方案
本文提出的协议逆向方案主要有以下步骤:
(1)收集工业控制系统中的网络流量;
(2)对网络流量进行筛选,找到需要的数据包;
(3)利用一定的先验知识,对具有相似结构的数据包进行对比,重点比对位置相同,但数值不同的地方,推断出该位置上字段的含义。
本文研究对象为工业控制系统专用协议,该协议采用TCP/IP 体系结构,存于应用层中。协议通过应用层,传输层、网络层、数据链路层层层封装进行传输。对协议进行解析时,需要对其层层解封装。
对该工控协议进行解析时,数据链路层,网络层、传输层使用的协议都是已知的,因此主要是对封装在应用层的工控协议进行解析,该工控协议位于报文的尾部,如图1蓝色部分所示。
2.1 指令数据包提取
采集的流量中主要包含点对点和组播两种类型的数据包。本文主要通过研究点对点的数据包,对工控协议进行分析。操作员在工作站执行命令前启动wireshark 抓包软件,命令执行完毕后关闭wireshark 软件,抓取工业网络流量。抓取的流量当中含有众多乱序,重传、以及不需要的数据包,对工控协议进行分析前需要剔除此类数据包,找到执行命令对应的数据包。方法如图2所示,首先对数据包进行分类,根据执行命令的发送方和接收方的源目的地址进行第一次筛选,区分出拥有正确源目的地址的数据包;再根据发出指令的唯一性进行第二次筛选,找到指令对应的数据包。
表1:协议格式
图2:指令数据包提取
图3:继电器闭合
图4:继电器断开
2.2 语义解析及格式推断
由于同一种协议往往具有相同的格式,而相同格式的报文往往具有相似性,因此可将具有相似性的数据包汇集在一起进行分析对比,以推断它们所遵照的报文格式和所代表的语义字段。
在操作员执行某一操作前后,同时启动wireshark 抓包软件抓取数据包。通过分析比对操作员执行操作前后所抓到的数据包,排除数值与位置相同的部分,重点比对同一位置发生变化的部分,利用先验知识,和加上一定的手段对协议进行解析,比如浮点数据转换,整型数据转换、十六进制转换成ASCII 码等,解析出发生变化字段的含义。
3 验证与分析
使用组态软件组态出一个控制继电器的工程,操作员在点击控制继电器闭合时抓取一次数据包,在点击控制继电器断开时抓取一次数据包。已知,抓包使用的是控制网A,工作的控制器地址为168.20.1.2,操作站的地址为168.20.1.131,因此使用wireshark 对数据包进行筛选找到源地址为操作站地址,目的地址为工作的控制器地址的数据包。此时筛选出的数据包众多,再根据指令的唯一性找出对应的数据包。使用该方法找出两次下发指令所对应的数据包,分析比对两次发生变化的地方,两次抓到的数据包为图3,图4所示,红色框标出的是两张图中不同的地方。
对比发现有两处位置的数值发生了改变,在第一处由d4 变为了d5,第二处由00 变为01。此时难以分析出控制继电器闭合断开的位置是哪处。继续重复执行该指令进行抓包,由结果发现,处于第一处不同位置上的d5 还会继续递增,而处于第二处不同位置上的00 与01 继续交替出现。因此可以分析出第一处不同是一种递增关系,第二处不同代表继电器的状态。01 控制继电器闭合,00 控制继电器断开。
不断的按照上述方法进行实验后,解析出的协议格式如表1所示。
综上,基于人工辅助逆向解析协议的方法,对于工控协议有着非常好的解析效果。单字节或多字节的数据都可通过指令推断或数据转换解析出其具体含义。表明按照此方法可依次有效地解析出该工控系统中私有通信协议的格式和语义信息。
4 总结与展望
本文通过人工辅助逆向协议解析的方法对私有的工控协议进行深度解析,其准确率很高,能够有效的通过协议解析帮助发现各种操作行为的安全问题,提高工控系统安全性。本文当前只对点对点的数据包解析方法进行了尝试,组播的数据包解析方法还待研究。