协议分析 工控安全 技术分享

对西门子PLC CPU运行状态的一次全球监测统计

本文由灯塔实验室原创,转载请注明出处。

关于西门子PLC的CPU运行状态

我们曾在上周的文章中提到过,根据部署的工控协议仿真蜜罐的数据显示,暴露在公网的PLC可能会受到来自互联网的恶意控制,并列举了在公网的西门子S7系列PLC,10%的PLC CPU在不同时间点被设置到停止模式的事件记录(我们通过读取PLC缓冲区事件所得出的结论)。当然我们目前无法准确确定这些曾经针对CPU状态操作是否为来自互联网攻击者的恶意操作行为所致,亦或是用户的正常的调试所致。但是我们还是想强调无安全防护存在问题的严重性。我们可以再看一下西门子PLC对CPU运行状态的定义:

RUN模式

在RUN状态下,处理用户程序并周期性地更新过程映像。此外,还将启用所有数字输出。

STOP模式

下列事件会将CPU置于STOP状态:
*将模式选择器移动到STOP位置
*CPU
*编程设备
将所有模块切换到安全状态。
在S7中:在STOP模式下不处理用户程序。但某些编程功能和操作员界面功能可用。
在M7中:在STOP模式下仍可处理用户程序。
我们都知道自动化控制流程是一个连续稳定且持续的过程,而我们之前得到的这个比率则显示出了较高的“故障率”(“停机率”)。

如何读取西门子PLC CPU状态

在西门子PLC中具有一个系统状态列表,英文的官方描述为System Status List,德文为SystemZustandsListe,简称使用的德文的缩写即SZL,在系统状态列表中PLC的不同状态属性被定义了一个SZL-ID,如我们识别PLC型号模块时使用的0x0011(Module identification),如读取PLC CPU的当前运行状态可以使用0x0424(Processed operating mode transition),而这些我们可以在西门子官网找到对应的资料。

我们的全球的监测结果

日前我们再次通过两个节点(icsresearch2.plcscan.org, icsresearch3.plcscan.org)对全球的TCP/102端口S7服务进行了深度探测,探测结果发现共计1879套西门子各系列PLC:S7-300(所有货号为:6ES7-3**-*****-****),S7-400(所有货号为:6ES7-4**-*****-****),S7-1200/S7-200(所有货号为:6ES7-2**-*****-****),S7-1500(所有货号为:6ES7-5**-*****-****),WinAC(所有货号为:6ES7-6**-*****-****),ET-200(所有货号为:6ES7-1**-*****-****)。而我们根据远程读取的SZL的0x0424属性结果显示,当时2套PLC的CPU即时运行状态是STOP模式。根据我们之前收集到的恶意操作日志,操作者并不会主动对CPU进行启动,同时根据对CPU缓冲区事件的分析,再次切换到RUN状态的时间在大多数情况下并不是较短时间之内完成的。

我们的一些测试结果

为了让大家直观了解到暴露在公网的西门子PLC都是为什么业务提供服务的,以及PLC被恶意控制和操作后的严重后果,我们特意分析了部分直接可以看到的真实部署环境,如下图:

s7plc_verify1 s7plc_verify2 s7plc_verify4 s7plc_verify3 s7plc_verify5 s7plc_verify6 s7plc_verify15 s7plc_verify14 s7plc_verify13 s7plc_verify12 s7plc_verify11 s7plc_verify10 s7plc_verify9 s7plc_verify8 s7plc_verify7

About Z-0ne

Leave a Reply

Your email address will not be published. Required fields are marked *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据