逻辑漏洞¶
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 老系统)本地提权链(→ 渗透测试-后渗透 提权节)。