前言:
互联与共享成为工业控制系统新的发展方向,工控系统与企业办公网和互联网逐渐相连,工业控制网络环境变得越来越开放。工业控制系统需从设备安全和信息数据安全两方面保障系统稳定运行,从 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流量异常检测的常用思路,也要结合自己的工控环境和平时积攒的威胁情报来建立属于自己的流量检测模型。

如果想了解更多安全知识,或者有问题,都可以关注以下公众号,私信我:

西门子S7系列中间人攻击:防御和流量异常检测(三)相关推荐

  1. 西门子S7系列PLC安全防护研究

    近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...

  2. C# 读取西门子S7系列PLC教程及源码

    创建 PLC 实例,连接和断开连接 若要创建驱动程序的实例,需要使用此构造函数: public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot) ...

  3. Java读写操作西门子S7系列PLC

    简介 Java实现操作西门子S7系列PLC,基于开源项目s7connect实现,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性 ...

  4. 西门子S7系列PLC如何实现工业互联?(S7中间件)

        为了更加方便快捷地提供西门子S7系列PLC数据交换到工业云平台(WebAPP或移动端APP),作者开发了西门子S7系列支持TCP/IP连接方式的PLC数据交换平台-S7数据采集及交换平台(以下 ...

  5. 西门子逻辑运算指令_西门子S7系列plc逻辑运算指令

    西门子S7系列plc逻辑运算指令: 有关西门子S7系列plc逻辑运算指令,包括字节逻辑运算指令,IN1和IN2还可以是常数,字逻辑运算指令,双字逻辑运算指令. 1.字节逻辑运算指令 ANDBIN1,O ...

  6. 轩辕实验室丨基于信息熵的车载网络流量异常检测防御方法

    本文来自轩辕实验室相关研究成果. 本发明通过设定一个检测阈值和固定大小的滑动窗口,计算滑动窗口中流量的信息熵,利用所计算的熵值和阈值对比进行异常判断,实现一种基于信息熵的车载网络流量异常检测防御方法. ...

  7. Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索、模型初探

    Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索.模型初探 1 前言 分类和回归是强大易学的机器学习技术.需要注意的是:为了对新的样本预测未知的值, 必须从大量已知目标值的样 ...

  8. python小波分析法检测火焰_一种基于小波分析的网络流量异常检测方法

    一种基于小波分析的网络流量异常检测方法 杜臻 ; 马立鹏 ; 孙国梓 [期刊名称] <计算机科学> [年 ( 卷 ), 期] 2019(046)008 [摘要] 对大量网络流量数据进行高质 ...

  9. 【网络流量识别】【聚类】【二】FCM和GMM—使用聚类技术和性能比较进行网络流量异常检测

    本文介绍采用高斯混合模型(GMM)和模糊C均值聚类(FCM)来进行网络流量异常检测的方法. 原文来自IEEE,发表日期2013年. 原文链接:使用聚类技术和性能比较进行网络流量异常检测|IEEE 会议 ...

  10. 我们不一样!告诉你百度是如何做智能流量异常检测的

    作者简介 牧之    百度云高级研发工程师 负责百度云Noah智能异常检测算法相关工作,在自动异常检测.智能故障诊断等方向有广泛的实践经验. 干货概览 流量,是系统的黄金指标之一,它直观反映系统的运行 ...

最新文章

  1. HTML 5 input type 属性
  2. 初等数论--原根--a^k对模m的阶
  3. wxWidgets:wxMenu类用法
  4. SAP UI5和CRM WebUI的View和Controller是如何绑定的
  5. Android Studio之编译提示\app\src\main\res\values\colors.xml:1:1 Error:前言有不允许的内容
  6. AVL树的旋转与插入(C语言)
  7. shell 进入hadoop_Hadoop Shell命令
  8. android 界面长按,Android 主界面长按创建快捷方式
  9. 机器学习1/100天-数据预处理
  10. python接口自动化(十)--post请求四种传送正文方式(详解)
  11. 20165115 2017-2018-2 《Java程序设计》第六周学习总结
  12. Java开发笔记(一百二十九)Swing的输入框
  13. web逻辑思维题目_逻辑思维训练500题
  14. linux网络延迟命令,2. Linux使用ping命令查看网络延迟
  15. Canary学习(泄露Canary)
  16. Spring Boot + Drools+模板引擎,优惠券的动态添加以及购物车结算
  17. ai如何做倒角和圆角_AI怎么将直角矩形设置成圆角-AI将直角矩形设为圆角的方法 - 河东软件园...
  18. Crow search algorithm(乌鸦搜索算法)
  19. 哈达玛矩阵的相关基础知识
  20. ITSM开源工具OTRS安装

热门文章

  1. 基于SpringBoot/SSM的旅游论坛
  2. 设置导出目录oracle11g,Oracle11g不同目录的冷备份解决方案
  3. 前端-----小米商城模块练习
  4. 杭电oj-----叠筐
  5. pythonflask接口开发处理多线程请求_flask是如何处理多个访问请求的?
  6. centos7 文件名中文乱码_CentOS 下中文文件名显示乱码问题
  7. MySQL中授权(grant)和撤销授权(revoke)
  8. NYOJ 37 动态规划 回文字符串
  9. linux轻量级的图形库,基于Microwindows的嵌入式Linux轻量级图形应用库的设计
  10. hdoj1159:Common Subsequence(dp基础题-最长公共子序列LCS)