近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来。工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存在缺乏认证、功能码滥用等安全威胁;况且不断被爆出的工控产品漏洞,也难以及时修补等问题。
当然这些安全威胁也是一把双刃剑,促使工控安全行业也得到了蓬勃发展。本文主要对西门子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)若工控系统部分组件不可避免的需要与公网通信,做好网络隔离,部署工业控制网络监测与审计设备。
5)对需要远程访问的工控系统增加白名单的控制策略,仅开放需要的端口地址,如关闭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
*本文原创作者:黄一113530,本文属于FreeBuf原创奖励计划,未经许可禁止转载