逻辑漏洞

ICS · 知识域。控制逻辑层的攻防,工控 CTF 的核心区分度所在。标签:控制逻辑篡改、逻辑漏洞利用、PLC程序仿真、组态工程利用、逻辑缺陷、命令注入。

触发特征

  • 题目给 PLC 仿真环境/组态工程,要求"让水位超标/停掉电机/改PID参数"类工艺效果。

控制逻辑篡改

  • 直接改值:写寄存器(设定值 SP、输出值)vs 改逻辑(梯形图/ST 代码)两个层级;改逻辑更持久隐蔽。
  • 梯形图级:修改联锁条件(把急停常闭改常开)、增删定时器、改 PID 参数(Kp 调大 → 振荡)。
  • 工程级:组态工程文件修改后重新下发(→ 组态工程利用)。

逻辑漏洞利用

  • 逻辑设计缺陷:互锁缺失(两泵同时启动)、条件竞态(开关信号同拍)、边界处理错误(液位刚好在阈值时行为未定义)。
  • Fuzz 思想:传感器值边界扫描(对输入寄存器全值域枚举)观察输出异常(仿真环境安全验证)。
  • 状态机偏离:让流程卡在"半完成"态(阀门半开)造成工艺损害。

PLC程序仿真

  • 环境搭建:OpenPLC(Runtime + PLCopen 编辑器)、CODESYS 仿真网关、Snap7(S7 仿真)、pymodbus 搭假 PLC。
  • 仿真验证攻击:先在仿真环境复现篡改效果,再推演真实影响;CTF 题常见"OpenPLC 平台改 web 服务逻辑即控物理输出"(内置 LED/水塔 demo)。
  • 半实物(HIL)环境:真实 PLC + 虚拟过程对象(给工艺侧数据回注)。

组态工程利用

  • 工程文件格式:各厂商组态工程(组态王/WinCC/iFIX)解析 → 点表、脚本(VBScript 脚本引擎)。
  • 组态脚本注入:HMI 脚本接口执行系统命令(组态王历史漏洞模式);报表/数据源配置注入(连接字符串注入 → WEB)。
  • 工程下载劫持:工程师站下发通道中间人替换工程(→ 网络通信 通信劫持)。

逻辑缺陷

  • 人机接口缺陷:确认缺失(单点击即启停)、权限分级缺失(操作员可切工程师功能)。
  • 时间相关:看门狗/心跳超时处理缺陷(喂狗伪造,→ 网络通信);定时器溢出。
  • 数据质量位处理缺失:坏质量值(传感器失效标记)被当作有效值参与控制。

命令注入

  • 工控软件组件的注入面:历史库查询(SQL)、报表服务、设备驱动配置(路径/参数拼接)。
  • SCADA 服务器(Windows 老)上服务漏洞组合(→ 渗透测试)。

安全配置错误与权限提升(逻辑层)

  • 安全配置错误:PLC/HMI 出厂默认安全功能关闭(写保护、诊断使能)、组态工程与在线逻辑不一致(改了不下发/下发了不保存)、固件安全启动未开启——"逻辑漏洞"的一半是"配置不当"。
  • 权限提升:工程师权限→系统权限的越界(组态软件脚本引擎执行系统命令)、受限 HMI 账户经未鉴权功能点切到工程模式、工控主机(Windows 老系统)本地提权链(→ 渗透测试-后渗透 提权节)。

转向

评论