01
组件介绍
S7-300是德国西门子公司生产的可编程序控制器(PLC)系列产品之一。其模块化结构、易于实现分布式的配置以及性价比高、电磁兼容性强、抗震动冲击性能好,使其在广泛的工业控制领域中,产品使用了S7Comm协议,该协议是西门子专有的协议,通过模拟数据发包,可以控制PLC的启停,一旦该产品被非法攻击者恶意攻击,会对生产造成巨大的影响。
02
影响范围
设备信息:西门子 PLC S7-300
03
漏洞分析
正常情况下,PLC设备启动后使用客户端即可进行连接使用:
针对该设备的通信协议进行分析,尝试使用S7Comm协议脚本对该设备发送数据包,其中S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种,如下图是S7Comm协议OSI模型:
S7Comm协议主要用于S7-200,S7-300和S7-400 PLC之间的通信,由于该协议未对操作进行校验,且未针对反重放攻击设置有效的保护的机制,因此攻击者通过伪造协议即可执行命令,构造如下脚本即可达成利用(如图是ISF中s7_300_400_plc模块使用的脚本):
该脚本模拟S7Comm协议编写了payload,可对西门子PLCS7-300的CPU进行START和STOP的操作。
04
模拟攻击
一、环境准备阶段:
由于没有真实的设备进行操作,以下操作皆使用工控模拟器,进行演示:
(1)启动和配置s7模拟器
点击serverdemo.exe:
配置IP(在真实环境中指S7-300设备运行的IP,此时与本地IP一致),配置完成点击启动:
(2)加载攻击模块
在kali中加载ISF(Industrial Exploitation Framework),ISF是一款基于python编写的类似metasploit的工控漏洞利用框架,该框架中内置了s7_300/400 plc的启停脚本(下载地址 https://github.com/dark-lbp/isf):
二、攻击阶段
选择s7_300_400_plc_control模块:
设置攻击IP,进行攻击:
查看s7模拟器状态:
CPU:STOP—->OK,攻击成功。
三、真实环境现象
正常开启的PLC设备,指示灯显示run,呈现绿色:
对PLC设备攻击后,设备RUN运行的灯光会从绿色变成黄色STOP停止的灯光,即设备停止运行:
(设备图片源于网络)
05
修复建议
(1)西门子博途系列如S7-1200v4.0和S7-1500使用S7CommPlus协议更加安全;
(2)针对CPU模块中protection选项卡设置密码进行口令保护;
(3)采用背景数据块和多重背景的数据传递方式。
本文章仅供学习交流,不得用于非法用途!
关于我们
启明星辰知白学院旗下安全实验室,致力于网络安全攻防实战探索与积累、解读前沿安全技术,安全培训课题、提供企业级安全自动化解决方案。
原文始发于微信公众号(河图实验室):工控安全之西门子PLC S7-300漏洞分析与复现