西门子S7系列中间人攻击:防御和流量异常检测(三) – 作者:黄一113530

前言:

互联与共享成为工业控制系统新的发展方向,工控系统与企业办公网和互联网逐渐相连,工业控制网络环境变得越来越开放。工业控制系统需从设备安全和信息数据安全两方面保障系统稳定运行,从 ICS 自身结构看,由于通信协议相对简单、操作系统和软件没有相应的防护措施,这些漏洞都可被利用进行破坏性的操作 ;从外部网络环境看,ICS 广泛使用 TCP/IP 等通信协议,导致传统的 IT 系统攻击行为蔓延到工控网络,致使工业控制系统面临更大的安全威胁。

前两篇我主要讲述了中间人攻击的方式和对PLC的控制操作,今天来谈一下如何防御中间人攻击,最重要的部分是流量异常检测,文中涉及一些检测思路可能存在不严谨之处,欢迎大家指正哈。

检测思路:

在实际工业控制网络中,网络流量一般分为两大类,第一类是上位机发送给PLC 对工控现场进行实时控制的下行数据,第二类是上位机HMI 软件与PLC 协商由PLC 定时发送给HMI 软件工控现场实时数据,能实时反映工控现场的工作情况。两类数据的可通过S7 议的ROSCTR 字段不同的值进行划分。第一类数据ROSCTR的值为0x01和0x03,第二类数据ROSCTR固定值为0x07。且针对工控网络的攻击通常都是通过获取上位机权限进而控制PLC 的。

其实我们流量检测也离不开源IP地址、目的IP地址、通信协议、通信端口、通信方向这几个信息,需要在不同情境下灵活取用。

一、PLC专用网络内突然冒出新IP

正常情况下在企业PLC网络区会做禁止外联的操作,突然出现一个新的IP,也就代表有新的设备接入,这也是憨憨入侵者做的事。一般只需通过简单的ARP协议进行探测,物理地址广播,如果对照平时积攒的MAC地址表不一样,将会及时告警处理。理想的网络安全信任关系应建立在IP+MAC基础上。

我们也可以用到ICMP协议,来确认IP包是否成功到达目标地址以及通知我们在发送过程中IP包被丢弃的原因。检测设备A为了知道新的设备B的MAC地址而通过路由器发送ARP包,经过多次发送ARP请求包后,由于始终无法到达设备B,路由器返回一个ICMP Destination Unreachable给A。也可以尝试通过简单网络管理协议(SNMP)的GET命令从设备读取数据,例如操作系统和网络协议状态等。

当然也可以使用我之前介绍的ICS/SCADA态势感知开源工具GRASSMARLIN来进行实时的数据捕获,绘制网络拓扑图,查看是否有新增设备。

其输出的Details信息也很好展示了GRASSMARLIN所获取的信息,例如下图,是否是PLC,使用的通讯协议以及可能的操作系统版本等,可以大大方便我们的检测。

也可以打印所有在通信的IP,不管是Src或者Dst,这样更方便明了可以看出是否存在陌生的IP设备。

另外的话也可以使用CSET或者Splonebox专注于工业控制系统的网络评估工具,对其网络及其设备进行持续的分析,因这些工具功能较多,后续单独开一期讲。链接奉上:https://github.com/cisagov/cset

二、两个IP之间无通信,突然之间互通信

第二点我们需要关注下从无通信的设备突然之间有了通信,是不是有人在做坏事。这个简单,我们将抓取的流量包用wireshark分析一下就好,例如下图设置ip.src==231,ip.dst=163看那一下他们之间是否有通信就好。

三、两个IP之间有通信,突然之间有S7通信           

其实可以理解为两台设备之间突然有COTP、S7comm、S7comm-plus协议的通信,而我们需要做的就是检测这些通信协议。除了用wireshark、Xplico和Tcptrace等软件直接进行分析外,我们也可以用Pcap-Analyzer可视化工具,也可以自己开发工具进行检测,总之方法很多。链接奉上:https://github.com/HatBoy/Pcap-Analyzer

四、协议包长度检测

这个我为什么要单独拎出来讲呢,因为很多特殊的包长度是固定的,例如第二篇讲的S7-300提交密码的数据包长度为91,接下来就是要进行读写操作了,S7-1200进行停启操作携带Session id的数据包也是固定155,我们用python里的scapy模块从pcap包里面提取五元组信息进行检测分析就行。

五、功能码检测 Function Code

所谓的行为异常,就是正常情况下哪有那么多频繁的停启操作对不对!还有比较生僻的功能码,例如修改安全功能、时间功能和数控编程等都需注意,可能有些特殊的情况用的比较多,但是根据自己ICS实际情况该检测的还得检测。说句中肯的,即使PLC在生产过程中关闭,很多工程师首先想到的也会是机械故障,而不是外部攻击!

六、攻击类型检测

这里拓展一下,其实流量异常类型也有好多种:

1、中间人攻击:通过拦截HMI 与PLC 之间正常工作时的网络通信数据,并对数据进行篡改和嗅探,可以同时达到欺骗HMI 与PLC 的目的。

2、Snap7 攻击:工业控制场景中往往缺乏PLC 对于HMI 设备的检测认证机制,因此可以通过在局域网内的另一台主机上安装S7 协议的编程软件,对PLC 进行编程操作。

3、响应注入攻击:HMI 组态软件除了对系统进行数据收集的功能外,也会同时对PLC 返回的各项参数如发电机转速值进行监测,如果转速超过一定阈值,HMI软件就会对操作人员进行告警,通过捕获PLC 发往HMI 的响应数据包,并修改数据包中的关键内容,可以掩盖PLC 的异常运行信息。

4、序列攻击:通过修改数据包的传送次序,来达到篡改工业控制系统运行逻辑的目的,因为数据包是网络中出现的正常数据包,对单一数据包的检验方式无法发现这种异常。

这就需要平时对PLC操作的习惯进行数据积累,来判断出是否在进行异常操作,往深了说就是要利用机器学习等建模来进一步分析。例如2015年针对S7 SCADA 网络提出了基于DFA 的入侵检测模型,能有效地识别部分工控网络中的攻击行为。还有基于状态的协议分析检测(SPAD)也是一种有效的检测方法。

总结:

如果不进行异常流量的检测,攻击者要记录流量,他们可以很容易地提取数据,如用户名、密码、命令、协商会话、逻辑等。这些变量中的任何一个都可能导致PLC的整个系统崩溃。

本文主要是给大家一个流量异常检测的思路,至于检测方法多种多样,大家择优选择。像网络设备故障,网络拓扑结构的改变、恶意网络攻击等,都会扰乱网络流量的正常行为模式。所以,对网络流量进行异常检测,首先需要建立的是正常流量行为模式,通过正常行为模式的一些特征参数来进行异常检测。然而减少误报率成了检测的重中之重,我们不仅用ICS流量异常检测的常用思路,也要结合自己的工控环境和平时积攒的威胁情报来建立属于自己的流量检测模型。

*本文作者:黄一113530,转载请注明来自FreeBuf.COM

来源:freebuf.com 2020-05-08 10:00:43 by: 黄一113530

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论