◆何 钢 周安民
西门子SCADA网络场景指纹自提取及异常检测
◆何 钢 周安民
(四川大学电子信息学院 四川 610065)
本文针对Supervisory Control And Data Acquisition(SCADA)系统中广泛使用的S7协议 ,在有限状态机(DFA)模型的基础上提出了SCADA网络场景指纹的方法,结合图论的中邻接矩阵的概念,实现了SCADA网络场景指纹的自提取,并利用该方法对工控系统SCADA网络实时数据进行监测,该方法减少了大量的人工分析并有效的提升了SCADA系统的安全性。
S7协议;场景指纹;自提取;安全
SCADA系统,即数据采集与监视控制系统。广泛应用于工业生产的各个领域,例如电力、冶金、石油、水利、化工、燃气、铁路等,对现代工业的生产起着至关重要的作用。SCADA系统主要包括HMI(人机界面)、PLC(可编程逻辑控制器组成)和RTU(远程控制终端)。其中,数据采集由RTU或PLC负责,包括读取感测器数据、根据SCADA系统需求发送设备的状态报告。控制室中的操作员采用HMI了解系统状态,并决定是否要对PLC或RTU进行控制。
很多SCADA系统存在安全性方面的不足,如没有针对恶意攻击的检测、网络没有认证机制、所有数据传输都是明文。目前,对SCADA系统网络进行异常检测是非常必要的。西门子的SCADA系统作为全球应用最广泛的SCADA系统之一,对其进行异常检测的研究也是众多研究热点之一。
SCADA系统网络是由多个HMI-PLC网络组成的。Goldenberg[1-3]和Wool[1-3]在2013年和2015年针对Modbus和S7 SCADA网络分别提出了基于DFA的入侵检测模型。但是其模型基于的是Modbus和S7协议的高度周期特性。本文通过对S7 SCADA网络进行分析,发现在HMI与PLC通信中,S7协议并没有保持高度周期特性,因此,针对S7协议应用层数据,在DFA模型的基础上提出场景指纹的概念,为每一个HMI-PLC的数据交互建立场景指纹,实现了场景指纹的自提取,并利用场景指纹成功检测出SCADA网络异常。
1.1 数据采集
本文的数据来自西门子工控实验平台。图1为西门子工控实验平台网络拓扑结构图。整个系统仿真了发电厂的发电过程。现场工控层包含一台工程师站、一台操作员站和一台实时服务器,其中,工程师站主要对PLC进行程序编写下载,操作员站和实时服务器安装了西门子HMI软件,用于监控现场设备层;现场设备层包含了两台S7-200和一台S7-300,S7-200控制蜂鸣器报警系统,S7-300控制电机转速,从而实现发电的功能。现场控制层和现场设备层通过核心交换机相互连接。利用Tcpdump的网络嗅探能力在核心交换机处采集工控系统HMI与PLC实时交互数据,并保存成PCAP文件。
图1 西门子工控实验平台网络托补图
1.2 S7协议数据内部结构
工业控制网络的托补结构相对静态,其通信模式具有规律的特性。其中,S7协议集是西门子SCADA系统网络的专有协议。在西门子SCADA系统网络中,S7协议根据作用可分为两大类,第一类是由HMI组态过程中与PLC协商的由PLC定时发送给HMI组态软件的工控现场实时数据;第二类是由HMI发送给PLC,对工控现场进行控制的实时数据。两类数据的可通过S7协议的ROSCTR字段不同的值进行划分。第一类数据ROSCTR固定值为0x07,第二类数据ROSCTR的值为0x01和0x03。通常针对SCADA网络的攻击都是通过获取上位机权限控制PLC[6],因此,本文只针对第二类数据进行分析研究。通过Wireshark软件分析,可得到S7协议数据包内部数据结构,如图2所示。
图2 S7 协议数据包结构
S7 PDU由Header、Parameter和Data三部分组成。其中Data字段是可选的。S7 PDU的Header部分主要由以下几个字段组成:
(1)Protocol Id,值固定为0x32;
(2) ROSCTR(Remote Operating Service Control),通常取值为0x01(job)、0x02(acknowledge)、0x03(ack_data)、0x07(userdata)或者0x08(request server control);
(3)Protocol Data Unit Reference,主要用来同步job和ack_data;Data Length,Data部分字节长度Parameter Length,Parameter部分字节长度。
因为在S7协议应用层中,Protocol Data Unit Reference字段随着时间递增。因此,定义S7协议数据包特征为S7协议应用层除了Protocol Data Unit Reference字段以外的所有数据集合。
1.3 S7协议特性分析
图3以时间为横轴,10s为刻度,显示了HMI与PLC之间数据交互每10秒通信字节数的变化图。图中可以观察到HMI与PLC之间数据通信并没有遵循高度周期性,通信流量在两个值之间变化。其原因是HMI与PLC之间的数据交互是由HMI中的脚本控制,一个HMI上可以运行多个脚本。根据工艺场景的需要,多个脚本之间运行周期可能不一致,导致了HMI与PLC之间数据交互并不遵循高度周期特性。
图3 S7协议数据IO图
为进一步确认S7协议在HMI与PLC之间交互时的非周期性,针对S7协议应用层数据观察分析。图4以包序号为横轴,每一个数据包S7协议特征集合为纵轴,说明了一段时间内HMI与PLC之间通信时每个数据包中S7协议特征集合的变化。图5以包序号为横轴,HMI与PLC之间通信数据包类别个数为纵轴,说明了一段时间内HMI与PLC之间通信数据包类别个数的变化情况。图4和图5说明了在HMI与PLC数据交互过程中,S7协议特征集合没有遵循高度周期性,并且通信数据只在这有限个数据包之间来回变动。
图4 S7应用层数据络变化趋势图
图5 数据包类别变化图
2.1 场景指纹定义
为了将DFA应用于S7协议,对DFA进行优化,提出了场景指纹的概念。场景指纹中规定了以下两点:
(1)场景指纹中一个状态表示一个S7数据包,其中,一个状态定义为S7协议应用层中除Protocol Data Unit Reference字段以外所有数据的集合;
(2)为了应用场景指纹达到检测异常的目的,不限定场景指纹能够接收的状态集合。
为了场景指纹能够更好的表示SCADA网络中数据交互情况。将场景指纹定义为一个六元组。其中,为每一个的有限个状态集合;为有限个符号集合,即对于每一个状态的定义,在场景指纹中为S7协议应用层除了Protocol Data Unit Reference字段以外的所有数据集合;为状态转移函数;为初始状态;为当前状态;为每个状态的经过状态转移作用后的输出状态集合。
2.2 状态转移函数
当场景指纹中当前状态接收到一个输入信号后,状态转移函数根据输入信号的特征将当前状态转变到目的状态。以下定义了Normal,Retrans,MissTrans,Unknown四种状态转移函数,在场景指纹运行的过程中,通过不同的状态转移函数被触发,能够判断当前S7协议数据包是否是正常数据。假设场景指纹的当前状态为,输入信号为,目的状态为:
Python的Scapy是一款功能强大的交互式数据包处理程序,不仅可以用来发送、嗅探、解析和构造网络数据包,还能解析网络数据包文件,提取有用信息。通过Scapy库强大的功能将PCAP文件处理,并为HMI-PLC建立场景指纹。场景指纹的自提取过程如下:
(1)采集数据
首先利用Tcpdump或者Wireshark等工具获取西门子SCADA网络中HMI与PLC之间的交互数据,以PCAP文件形式进行保存,并且保证该PCAP文件中没有异常数据,数据交互情况能够完整描述整个HMI与PLC之间的工业控制过程。
(2)生成顺序列表
提取PCAP文件中的所有S7协议应用层数据,并剔除掉其中的Protocol Data Unit Reference字段,然后按照PCAP文件中的数据包序号顺序,生成顺序列表。
(3)构建邻接矩阵
遍历顺序列表,对其中的数据种类进行计数,假设计数为N类,即表明该信道的场景指纹总共包含了N个状态。此时构建N为方阵A(即邻接矩阵),并且Aij=1表示第i个状态的下一个状态是第j个状态,Aij=0表示第i个状态与第j个状态没有逻辑关系。得到了邻接矩阵,就可以通过邻接矩阵为HMI-PLC生成场景指纹。
4.1 异常检测流程
在工控系统运行正常的情况下通过Tcpdump的网络嗅探能力在核心交换机处采集工控系统采集HMI与PLC之间的实时交互数据;提取S7协议特征,按照数据包到达序号生成顺序列表;利用顺序列表构建邻接矩阵并生成场景指纹,最后通过scapy在核心交换机处抓取HMI与PLC通信数据流量,并利用场景指纹对HMI与PLC之间的交互数据进行实时监测。场景指纹接收到实时数据包之后,提取S7协议特征,并将其作为输入信号发送至场景指纹当前状态,当前状态根据输入信号以及自身输出状态集合触发状态转移函数,四个状态转移函数中被触发的状态转移函数即可表明数据包是否属于正常流量。数据正常会触发Normal状态转移函数,数据异常会触发Unknown状态转移函数,逻辑异常会触发MissTrans和Miss状态转移函数。过程如图6所示:
4.2 异常检测实验结果分析
在实验平台的工控系统SCADA网络正常运行的情况下,通过实验平台核心交换机处采集实时数据。利用场景指纹对正常的SCADA网络进行监测,实验两次,实验结果如表1所示,在5855个数据包中5844个为正常数据,7387个数据包中有7366个正常数据,其中的重传数据是由于Scapy嗅探数据包时发生了丢包。场景指纹能够很好的识别SCADA网络中的正常流量。
表1 实验结果
为了验证场景指纹对SCADA网络中异常流量的检测能力。通过中间人攻击的方式篡改工控系统中的数据,例如修改HMI发送给PLC数据中指示电机转速的值,以及修改电机转速变化的控制逻辑。其数据变化趋势如图7所示,工控实验平台控制电机转动实验过程为HMI通过PLC控制电机以600、800、1000(r/min)的速度转动。中间人攻击攻击目的过程分为两种:第一种为修改HMI发送至PLC转速的顺序,如将600、800、1000(r/min)的转速修改为800、600、1000(r/min)以达到修改控制逻辑的目的;第二种是修改HMI发送至PLC转速的值,即将协议中表示转速的字段修改成除600、800、1000以外的值,以达到造成数据异常的目的。为比较正常流量与异常流量的区别,同时在HMI处和核心交换机处抓取数据包,其中,核心交换机处抓取到的数据流量为通过中间人攻击篡改的异常数据流量。相比于正常流量,异常流量的数据发生了位移,证明数据包达到顺序发生了变化;并且相比与正常流量,还出现峰值异常突出的点,表明此处出现异常数据。
图7 异常情况下S7协议层数据变化趋势图
表2 实验结果
如表2所示,为方便观察,分别进行了两次实验。第一次实验:HMI控制电机的转速,分别发送600,800,1000(r/min)的指令通过PLC控制电机转速,利用中间人攻击,篡改HMI与PLC之间的通讯数据中表示电机转速的字段,将转速的控制逻辑修改为800,600,1000,其中不会出现触发状态转移函数Unknown,因此,通过计算得出准确率为97.04%,误报率为2.95%;第二次实验:将HMI控制电机转速的指令中表示电机转速的字段部分修改为除了600,800,1000三个值之外的其它任意值,其中不会触发状态转移函数Normal,因此,通过计算得出准确率为97.40%,误报率为2.60%。
综上所述,基于场景指纹的工控系统SCADA网络异常检测能够有效的检测出SCADA网络中的流量异常,并对异常中的类别进行划分,能够成功的检测出逻辑异常和数据异常。并通过实验观察到,造成误报的原因是中间人攻击并没有成功的修改HMI与PLC之间的交互数据,以及Scapy嗅探数据时发生了丢包的现象。
工业控制系统SCADA网络的安全有着重要的现实意义。本文在优化了DFA模型的基础上,重新定义了场景指纹;并基于工业控制系统网络拓扑结构简单特性,结合图论中邻接矩阵的概念,实现了场景指纹的自提取。该方法最大的优点在于在有效减少了大量人工分析的同时,保证了较高的准确率。如何将该方法应用于更加复杂的工业场景并提高场景指纹自提取效率是下一步的研究重点。
[1]Goldenberg N,Wool A. Accurate modeling of Mo-dbus/TCP for intrusion detection in SCADA systems[J]. International Journal of Critical Infrastructure Pro-tection,2013.
[2]Kleinman A,Wool A. Accurate modeling of the Siemens S7 SCADA protocol for intrusion detection and digital forensics[J]. The Journal of Digital Forensi-cs,Security and Law:JDFSL,2014.
[3]Kleinmann A,Wool A. A Statechart-Based Anoma-ly Detection Model for Multi-Threaded SCADA Systems[C] //International Conference on Critical Information Infrastructures Security. Springer International Publishing,2015.
[4]Kleinmann A,Wool A. Automatic Construction o-f Statechart-Based Anomaly Detection Models for Mult-i-Threaded SCADA via Spectral Analysis[C] //Proceedings of the 2nd ACM Workshop on Cyber-Physical Systems Security and Privacy. ACM,2016.
[5]Barbosa R R R,Sadre R,Pras A. Flow whitelisting in SCADA networks[J]. International journal of critical infrastructure protection,2013.
[6]Beresford D. Exploiting Siemens Simatic S7 PL-Cs[J]. Black Hat USA,2011.
[7]张腾飞,范启富,刘伟.基于支持向量机的SCADA系统入侵检测[J].化工自动化及仪表,2015.
[8]张云贵,张伟,薛向荣,杨小军.基于自学习半监督单类支持向量机的SCADA入侵检测系统[J].冶金自动化,2013.
[9]王婧.工业控制系统的入侵检测系统研究[D].华北电力大学(北京),2014.
[10]彭勇,江常青,谢丰,戴忠华,熊琦,高洋.工业控制系统信息安全研究进展[J].清华大学学报(自然科学版),2012.
[11]赵华.工业控制系统异常检测算法研究[D].冶金自动化研究设计院,2013.
[12]张晓玉.SCADA系统安全通信面临的挑战及未来发展趋势[J].通信技术,2014.
[13]袁文波,洪波,尤万方,殷召生,蒋彦,温柳.S7-PLC基于Modbus/TCP协议通信研究[J].计算机工程与设计,2014.
[14]贾涛.西门子S7-200以太网通讯协议研究[J].电子技术与软件工程,2014.
[15]廖常初.“S7-200SMARTPLC”讲座第7讲:S7-200SMART基于以太网的S7协议通信[J].电世界,2015.