针对西门子PLC蠕虫的实现
字数 2068 2025-08-22 18:37:22
西门子PLC蠕虫病毒实现技术详解
1. 研究背景与意义
工业控制系统(ICS)安全随着"互联网+"、"中国智能制造2025"和"工业4.0"的发展日益重要。传统隔离的工控系统逐渐联网,暴露了新的安全风险:
-
关键事件:
- 2010年伊朗核设施"震网"病毒攻击
- Black Hat 2011:利用S7Comm协议漏洞远程操作PLC
- Black Hat 2015:通过PLC实现内网渗透
- Black Hat 2016:提出PLC蠕虫概念(西门子1200 V3认证缺陷)
-
工业病毒特点:
- 可直接导致物理设备故障
- 可能造成生产瘫痪或爆炸等灾难性后果
- 传播方式与传统IT病毒不同
2. PLC基本结构
PLC实质是专用于工业控制的计算机,主要组成:
-
中央处理单元(CPU):
- 控制中枢,执行用户程序
- 大型PLC可能采用双CPU冗余或三CPU表决系统
-
存储器:
- 系统程序存储区
- 系统RAM存储区(I/O映象区和系统软设备)
- 用户程序存储区
-
电源:
- 支持±10%-±15%的交流电压波动
-
输入/输出电路:
- I/O扩展接口用于连接扩展单元
3. 蠕虫病毒基本原理
3.1 工控蠕虫特点
- 针对工业控制设备(非传统计算机)
- 寄生在控制器逻辑代码中
- 难以通过传统方式检测和防护
3.2 蠕虫攻击阶段
- 搜索目标
- 感染目标
- 在目标上执行
- 添加恶意功能
4. 实现环境与工具
- 开发平台:西门子TIA Portal(博途)
- 支持PLC:S7-1200系列(V3版本)
- 编程语言:LAD(梯形图)、FBD(功能块图)、SCL(结构化控制语言)
4.1 TIA Portal中的程序块类型
| 块类型 | 名称 | 描述 |
|---|---|---|
| OB | 组织块 | 程序入口,被系统直接调用 |
| FB | 功能块 | 带背景数据块使用 |
| FC | 功能 | 不带背景数据块 |
| DB | 数据块 | 分为背景数据块和共享数据块 |
| SFB | 系统功能块 | 系统内部功能块 |
| SFC | 系统功能 | 系统内部功能 |
5. 蠕虫实现流程
5.1 整体流程
- 选择IP通过102端口尝试建立TCP连接
- 连接成功则检查目标PLC是否已被感染
- 已感染:选择新IP重新尝试
- 未感染:停止目标PLC → 下载病毒程序 → 重启目标PLC
- 连接失败则选择新IP重新尝试
5.2 关键功能实现
5.2.1 目标发现
- 使用西门子通信端口102进行TCP通信
- 使用博途提供的功能块:
- TCON:通讯连接块
- TDISCON:断开通讯连接块
TCON和TDISCON参数说明:
- REQ:触发连接/断开命令(上升沿触发)
- ID:连接ID
- CONNECT:连接参数(包含目标IP和端口)
- DONE/BUSY/ERROR:状态指示
IP轮换机制:
- 如果1秒内未建立连接则更换IP
- 连接成功后完成操作则更换IP
5.2.2 传播感染
- 使用TSEND和TRCV块进行数据传输
- 感染前检查目标是否已被感染(避免重复感染)
TSEND和TRCV参数说明:
- REQ:触发发送/接收
- ID:连接ID
- LEN:数据长度
- DATA:发送/接收缓冲区
- DONE/BUSY/ERROR:状态指示
5.2.3 S7协议连接建立过程
- TCP三次握手
- 建立COTP连接
- 建立S7协议连接
5.2.4 病毒激活
- PLC执行顺序从OB1到OB9999
- 创建高序号OB块(如OB9999)作为病毒入口
- 病毒程序下载完成后通过OB9999激活
5.2.5 恶意功能实现(C&C控制)
- 被感染PLC主动连接C&C服务器
- 服务器可发送指令控制PLC:
- 启停控制
- 输出值修改
- 其他恶意操作
指令解析示例(点灯程序):
IF "Cmd" = 16#01 THEN
"Q0.0" := TRUE;
ELSIF "Cmd" = 16#02 THEN
"Q0.0" := FALSE;
END_IF;
6. 感染检测方法
使用博途软件的在线/离线比较功能:
- 绿色圆圈:在线与离线程序一致
- 蓝橘色圆形:在线与离线程序不一致
- 虚样式块:博途中没有但PLC中存在的块
7. 演示场景
- 初始状态:PLC0、PLC1、PLC2正常运行
- PLC0被感染后连接C&C服务器
- PLC1和PLC2联网后被PLC0感染
- 依次出现反向连接C&C服务器的行为
- 最终状态:所有PLC均被感染
8. 防护措施
-
设备管理:
- 部署控制设备管理系统
- 定期备份PLC程序
-
访问控制:
- 设置CPU访问密码(避免弱口令)
- 禁止非授权上下载程序
-
网络防护:
- 进行工控网络风险评估
- 实施安全分区隔离
- 部署工控防火墙
-
监测审计:
- 安装工控监测审计系统
- 深度解析工控协议
- 监控异常操作(如程序上下载、启停)
-
应急响应:
- 制定工控网络应急预案
- 确保快速恢复能力
9. 技术要点总结
- 利用漏洞:西门子S7Comm协议认证缺陷
- 传播机制:通过102端口TCP通信实现PLC间传播
- 持久化:利用高序号OB块确保病毒激活
- 隐蔽性:混淆在正常控制逻辑中
- 危害性:可通过C&C服务器远程控制PLC
附录:关键代码片段
建立连接与IP轮换
// 尝试建立连接
"TCON_DB"(REQ:=NOT "Last_Connect_State" AND "Connect_State",
CONNECT:=#Connect_Info,
ID:=#Conn_ID);
// 1秒超时后更换IP
IF "Connect_Timer".Q THEN
"Current_IP" := NEXT_IP("Current_IP");
RESET_TIMER("Connect_Timer");
END_IF;
感染检查与程序下载
IF "TSEND_DB".DONE THEN
// 检查是否已感染
IF NOT CHECK_INFECTED(#Conn_ID) THEN
// 停止目标PLC
STOP_PLC(#Conn_ID);
// 下载病毒程序
DOWNLOAD_VIRUS(#Conn_ID);
// 重启目标PLC
START_PLC(#Conn_ID);
END_IF;
END_IF;
C&C指令解析
CASE "Cmd_Buffer".CMD OF
16#01: // 启动设备
"Start_Cmd" := TRUE;
16#02: // 停止设备
"Stop_Cmd" := TRUE;
16#03: // 修改输出
"Output_Value" := "Cmd_Buffer".DATA;
ELSE
// 无效命令处理
END_CASE;