针对西门子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实质是专用于工业控制的计算机,主要组成:

  1. 中央处理单元(CPU)

    • 控制中枢,执行用户程序
    • 大型PLC可能采用双CPU冗余或三CPU表决系统
  2. 存储器

    • 系统程序存储区
    • 系统RAM存储区(I/O映象区和系统软设备)
    • 用户程序存储区
  3. 电源

    • 支持±10%-±15%的交流电压波动
  4. 输入/输出电路

    • I/O扩展接口用于连接扩展单元

3. 蠕虫病毒基本原理

3.1 工控蠕虫特点

  • 针对工业控制设备(非传统计算机)
  • 寄生在控制器逻辑代码中
  • 难以通过传统方式检测和防护

3.2 蠕虫攻击阶段

  1. 搜索目标
  2. 感染目标
  3. 在目标上执行
  4. 添加恶意功能

4. 实现环境与工具

  • 开发平台:西门子TIA Portal(博途)
  • 支持PLC:S7-1200系列(V3版本)
  • 编程语言:LAD(梯形图)、FBD(功能块图)、SCL(结构化控制语言)

4.1 TIA Portal中的程序块类型

块类型 名称 描述
OB 组织块 程序入口,被系统直接调用
FB 功能块 带背景数据块使用
FC 功能 不带背景数据块
DB 数据块 分为背景数据块和共享数据块
SFB 系统功能块 系统内部功能块
SFC 系统功能 系统内部功能

5. 蠕虫实现流程

5.1 整体流程

  1. 选择IP通过102端口尝试建立TCP连接
  2. 连接成功则检查目标PLC是否已被感染
    • 已感染:选择新IP重新尝试
    • 未感染:停止目标PLC → 下载病毒程序 → 重启目标PLC
  3. 连接失败则选择新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协议连接建立过程

  1. TCP三次握手
  2. 建立COTP连接
  3. 建立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. 演示场景

  1. 初始状态:PLC0、PLC1、PLC2正常运行
  2. PLC0被感染后连接C&C服务器
  3. PLC1和PLC2联网后被PLC0感染
    • 依次出现反向连接C&C服务器的行为
  4. 最终状态:所有PLC均被感染

8. 防护措施

  1. 设备管理

    • 部署控制设备管理系统
    • 定期备份PLC程序
  2. 访问控制

    • 设置CPU访问密码(避免弱口令)
    • 禁止非授权上下载程序
  3. 网络防护

    • 进行工控网络风险评估
    • 实施安全分区隔离
    • 部署工控防火墙
  4. 监测审计

    • 安装工控监测审计系统
    • 深度解析工控协议
    • 监控异常操作(如程序上下载、启停)
  5. 应急响应

    • 制定工控网络应急预案
    • 确保快速恢复能力

9. 技术要点总结

  1. 利用漏洞:西门子S7Comm协议认证缺陷
  2. 传播机制:通过102端口TCP通信实现PLC间传播
  3. 持久化:利用高序号OB块确保病毒激活
  4. 隐蔽性:混淆在正常控制逻辑中
  5. 危害性:可通过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;
西门子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: 启停控制 输出值修改 其他恶意操作 指令解析示例 (点灯程序): 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轮换 感染检查与程序下载 C&C指令解析