近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来。工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存在缺乏认证、功能码滥用等安全威胁;况且不断被爆出的工控产品漏洞,也难以及时修补等问题。
当然这些安全威胁也是一把双刃剑,促使工控安全行业也得到了蓬勃发展。本文主要对西门子S7系列的PLC设备进行安全防护研究。

ICS/OT网络环境介绍:
全球近三分之一的组织机构将工业网络连接到公共网络中。为了工作便利,工作人员通常可远程操作,包括远程管理,软件更新,甚至浏览网页和接收来自OT网络的电子邮件。
IT/OT日益融合,虽然带来的好处也越来越多,促进了对当前控制系统更为有效的运营和管理二者之间的融合可延长系统的正常运行时间,增强性能,而且还能提高质量和生产力。但是ICS/OT网络在安全监控方面存在明显的不足之处,并没有积极的收集和监控流量,对预警和告警数据也没有足够的分析。

S7协议介绍:
西门子PLC使用私有协议进行通信,它是利用TPKT和ISO8073的二进制协议。 西门子的PLC通信端口均为102端口,。 西门子PLC协议有3个版本,S7Comm协议,早期S7CommPlus协议和最新的S7CommPlus协议。
S7-200、S7-300、S7-400系列的PLC采用早期的西门子私有协议S7comm进行通信。该协议不像S7Comm-Plus那样具有加密功能,不涉及任何反重放攻击机制,可以被攻击者轻易利用。具体协议结构如下图所示:

S7-1200v3.0之间通信采用早期S7Comm-Plus协议,S7-1200v4.0、S7-1500系列采用了最新的S7Comm-Plus协议,最新的S7Comm-Plus协议引入了会话ID来防止重放攻击。具体协议结构和上图一样,只有第七层为S7comm-plus。

S7编程软件:
S7200和S7200-smart step7比较独特,采用的编程软件为step7 MicroWIN和 step 7 Micro win smart。
S7300/400/1200/1500普遍使用的是博途(Tia Portal)。Tia Portal是西门子重新定义自动化的概念、平台以及标准的自动化工具平台。最新版本为V15,增强了S7系列PLC和WinAC控制器的支持,提升了软件的启动速度和容性。

S7攻击利用:
重放攻击:

重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
工控系统中的重放攻击,就是把上位机软件编译好的程序重新下装到PLC机器当中。而我们需要抓包截取的就是从开始连接到结束连接这一段的数据包,进行重新发送。
重放攻击网上大家讲的比较详细和全面,这里我就不再累述了,例如这位工控大佬的https://www.freebuf.com/articles/ics-articles/220239.html,我主要讲一下工控系列的中间人攻击。
中间人攻击:
中间人攻击(Man-in-the-Middle Attack,简称“MITM攻击”)是一种间接的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”
中间人攻击中有两个受害者,中间人对他俩实施攻击,攻击结果是A和B的传输内容,它们都需要经过中间人,但是两人(A和B)却不知道。聊天内容被中间人截获,如果截获信息有用户名和密码,危害就会更大,而且中间人攻击不会损害A和B的通讯。

工控中间人攻击前提是攻击者与PLC设备在同一网段内,第一步也是最重要的一步,进行ARP地址欺骗来进行流量劫持,正常情况下,PLC设备之间是互相不通信的,劫持的流量大概率是PLC和上位机之间的或者是触摸屏与PLC之间的。然后通过截取的流量进行一系列的分析,例如寻找PLC,因为西门子的PLC通信端口均为102端口;再比如寻找到之后通过获取cpu信息的数据包对PLC的类型进行判断;判断完版本之后,可以继续模拟加载payload,比如停止PLC工作,读取内存等。近期CNVD上也披露了关于S7系列的中间人攻击,如下图所示:

关于S7的中间人攻击的预防,大家主要关注下方的企业管理层面。在接下来的几篇文章,我将会详细介绍中间攻击人的流量劫持,劫持后的流量分析与PLC设备的探测,以及如何检测和防御中间人攻击,敬请期待哈。

S7安全防护:
用户使用层面:

1)利用EEPROM的反写入功能,及一些需要设置的内存保持功能,作用是可以在断电期间保持数据存储等安全功能。

2)无论是在博途软件,还是在step7软件上,硬件组态界面的CPU模块均有protection选项卡可以选择保护级别来设置密码进行口令保护(取消弱口令),这也是用户最常用的方法。设置如下图所示:

3)利用系统的时钟功能,很多人会问,这个功能有什么用和安全有啥关系。比如希望用到系统存储字中的第一个扫描周期来复位参数;希望有一个频率固定的时钟脉冲来进行通信或控制警报灯;希望某段程序仅在PLC启动后执行一次。这些操作都能够通过设置系统时钟来实现,并且还能杜绝PLC被他人利用的安全威胁。设置如下图所示:

4)利用系统提供的累时器功能,和系统的时钟功能类似,不加累述。

企业管理层面:

  1. 在内网中,只有可信任的设备,才能接入工控系统网络,并且需要进行身份认证,确保登陆者也是可信任者,规定使用加密U盘等。这是防御中间人攻击的重要手段之一。
  2. 工业控制系统产品漏洞,因软、硬件更新、升级、换代困难,漏洞不能得到及时修补,所以企业要定期对工控系统进行漏洞扫描,即时复现与修补漏洞。
    3)内部使用专业的工控网络数据采集与监控系统(SCADA),能即时检测出异常流量,如两个ip之间无通信,突然之间有S7通信可进行报警,甚至可以对异常突兀的function code功能码进行识别检测。
    4)若工控系统部分组件不可避免的需要与公网通信,做好网络隔离,部署工业控制网络监测与审计设备。
  3. 对需要远程访问的工控系统增加白名单的控制策略,仅开放需要的端口地址,如关闭Telnet等不必要端口。
    6)建立灾备中心,提供重要数据的本地数据备份与恢复功能,定期备份重要业务信息、系统数据及软件系统等。

开发层面:
1)建议采用多重背景的数据传递方式,多重背景即创建一个更高级别的功能块,有利于节省DB块的定义、分配和管理,简化了项目结构,提高项目安全性

2) 使用间接寻址,只有当程序执行时,用于读或写数值的地址才得以确定,能提高其安全性。

3)使用面板类型的人机界面来代替单一的按钮指示灯。从S7-1200开始大规模使用HMI触摸屏也是能够更好的提高安全性。Step7 Basic 针对于西门子最新的S7-1200系列的编程软件,其中可以包含S7-1200专用的触摸屏进行组态。

4)模块和驱动最好都能由PLC通过软件下载,可以降低最终用户维护系统的技术要求和提高安全性

总结
随着工控系统的组态和编程,数据管理和通讯,自动化与驱动产品(包括PLC控制器、HMI人机界面、网络、驱动器等产品)的高度集成,和大家对工控安全的重视程度越来越高,攻击利用的难度也越来越大,甚至趋向多元化。当然就更难以被发现,所以
本文主要是针对目前工控系统的西门子S7系列PLC设备使用情况,结合平时自己的工作经历和前辈们的经验,进行一个安全防护汇总,欢迎大家继续补充安全防护措施。当然其中一部分攻击利用和安全防护建议也对其他类型的工业PLC有用,大家可以酌情使用哈。

参考及感谢:
https://www.freebuf.com/column/224830.html
https://www.freebuf.com/column/199646.html
http://www.22plc.com/xuexi/ximenzi/839.html

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

西门子S7系列PLC安全防护研究相关推荐

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

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

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

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

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

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

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

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

  5. 西门子S7系列PLC以太网通讯处理器MPI-131

    基本说明:MPI-131用于西门子 SIMATIC S7 系列 PLC(包括 S7-200. S7-300. S7-400).西门子数控机床(840D,840DSL等)的以太网通讯,支持以太网编程下载 ...

  6. tinyint对应什么数据类型_学习西门子S7-200系列PLC不得不掌握的数据类型

    在学习PLC的过程中经常会有说到数据类型这个概念,那到底什么是数据类型?数据类型有什么作用?在西门子200系列PLC中的数据类型有哪些?这些都是学习西门子PLC不等不掌握的内容? 那到底什么是数据类型 ...

  7. MatrikonOPC与西门子S7300系列PLC以太网通讯

    摘要 MatrikonOPC通过以太网连接西门子S7300系列PLC,NET30-MPI通讯桥接器为PLC提供以太网通讯接口.通过MatrikonOPC采集现场设备的实时生产和设备数据.主要设备的控制 ...

  8. YAMAHA机器人(EtherNet/IP)与西门子S71500系列PLC(PROFINET)通讯

    YAMAHA机器人(EtherNet/IP)与西门子S71500系列PLC(PROFINET)通讯 雅马哈机器人(YAMAHA RCX3等系列)控制系统需要和西门子的PLC控制系统交互数据,德国赫优讯 ...

  9. 艾默生DCS(ModbusTCP)与西门子S71500系列PLC(PROFINET)通讯

    艾默生DCS(ModbusTCP)与西门子S71500系列PLC(PROFINET)通讯 艾默生DCS控制系统需要和西门子的PLC控制系统交互数据,德国赫优讯NT100-RE-EN通讯网关提供了快捷可 ...

最新文章

  1. Load Balance Tomcat with Nginx and Store Sessions in Redis--reference
  2. 对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e Pl
  3. 网易java默认路径_java对象存储位置
  4. 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
  5. DXOMark公布最新相机综合评分:华为P30 Pro不再是唯一王者
  6. SAP FI配置步骤
  7. 关闭rlogin服务linux,Linux rlogin命令
  8. Linux下载Mysql
  9. WebService入门(二)wsimport的使用
  10. 基于MATLAB车牌识别算法实现 GUI界面
  11. react + better-scroll 横向滚动案例
  12. 拉卡拉支付率先布局B端市场
  13. 「我们只投这两种AI公司」, 三位局内人首次公开AI投资的技术与产业标准
  14. win10安装steam有损计算机,win10系统steam磁盘写入错误怎么办 steam磁盘写入错误的解决教程...
  15. shell练习Day2
  16. 【设计模式】我终于读懂了装饰者模式。。。
  17. 小程序 timestamp_通过构建Timestamp微服务应用程序来学习Node.js
  18. 无人驾驶汽车技术之道路线识别
  19. 系统设计原则及技术指标
  20. 机器学习——Kmeans聚类算法

热门文章

  1. 017 Vowels match
  2. 兔年伊始谈闲书:三体-乌合之众-百年孤独 和《猫城记》(随笔)
  3. Delphi Assigned 简单使用
  4. Tomcat两个项目,一个可以正常访问,另一个报错404
  5. opencv 边缘检测,角点检测
  6. Python数据可视化——散点图
  7. 伪静态URLRewrite学习笔记
  8. vue+echarts的组件封装
  9. UTM的XY坐标转换为WGS84经纬度坐标
  10. matlab学习笔记:如何在matlab中如何自定义函数和匿名函数