前阵子整理漏洞报告时,我发现了一个很扎心的现象:某个在 Web 系统上被人翻来覆去利用的老漏洞,几天之后居然在一条生产线的 PLC 上被复现了。攻击手法几乎没变,只是换了目标端口和协议封装。这不是孤例,PLC 漏洞正在以一种“可迁移”的方式扩散,而工控防御那边,AI 已经不再只是 PPT 上的概念,开始有人拿它来做检测、做研判、做自动化响应。这篇东西我想把“漏洞怎么迁过来、传统防御为什么挡不住、AI 到底改变了什么”讲透,也会给还在观望的工控安全从业者一些能直接落地的建议。适合正在做 ICS/OT 安全、或者刚开始接触 PLC 安全的朋友参考。
1. 为什么说“PLC 漏洞可迁移”
1.1 漏洞迁移的前提:工业控制系统正在“IT 化”
先别急着把 PLC 当成一个神秘的黑盒子。拆开现在的 PLC、HMI、SCADA 系统看一眼,你会发现它们跟普通 IT 系统的差距越来越小。
- 主流 PLC 的通信模块基本都是跑标准 TCP/IP 协议栈,Modbus TCP、Profinet、EtherNet/IP、OPC UA,底层全是 TCP/IP。意味着针对 IP 栈的经典攻击手法,比如端口扫描、协议指纹识别、畸形报文,可以直接平移过来。
- 很多新款 PLC 的固件里跑的是嵌入式 Linux,或者经过裁剪的实时系统,上面照样有 Web 服务、FTP、SSH 这些组件。曾经在 Linux 上挖出来的溢出、命令注入、路径穿越漏洞,换个编译环境照样能打。
- 组态软件、HMI 运行时、OPC 服务器基本都跑在 Windows 上,而 Windows 生态的漏洞在工控环境里几乎是原样存在。Log4j 这种通用组件漏洞一出,工控圈一样得跟着打补丁。
- 工程文件本身开始用 SQLite、XML、JSON 这些通用格式存储,文件上传、反序列化、XML 实体注入这些 Web 漏洞类型,在组态工程文件解析器里一样能复现。
这就是“可迁移”的技术底座:攻击面从专用的串口、现场总线,慢慢变成了工程师熟悉的 IP 网络。攻击者不用懂梯形图,只需要懂 TCP 和常见的漏洞利用框架,就能找到入口。过去我们常说工控系统“封闭所以安全”,现在这个前提已经不成立了。
1.2 常见漏洞类型如何从 IT 世界滑入 PLC 生态
我拿一套真实存在的攻击链来说明“迁移”是什么意思,而不是抽象地讲概念。
第一步,扫描。攻击者在内网用常规扫描器扫 502 端口(Modbus)、4840(OPC UA)、102(S7comm),找到 PLC 和 HMI。
第二步,挑软柿子。很多 PLC 的 Web 管理页面存在未授权访问,或者用的还是出厂默认口令。这种问题在 IT 世界里就是“默认口令未修改”,在工控世界里同样常见。
第三步,利用工程协议漏洞。CODESYS 运行时曾被爆出过远程代码执行漏洞,攻击者只需要发一个精心构造的网络包,就能让控制器执行任意代码。博途(TIA Portal)处理工程文件时也有过反序列化相关的安全通告。这种漏洞的利用思路,跟 Web 后端解析 JSON 的时候触发反序列化是一模一样的。
第四步,横向移动。拿到一台 HMI 或者上位机之后,攻击者会寻找双网卡机器,从办公网跨到控制网。这里用的横向移动手法,什么哈希传递、远程服务利用,跟内网渗透没有区别。
这里我整理了一个对照表,方便理解“可迁移”具体迁移的是什么:
| 漏洞类型 | IT 世界的典型场景 | 迁移到工控后的落点 |
|---|---|---|
| 默认口令 / 硬编码凭据 | 路由器、摄像头、数据库 | PLC Web 管理页、OPC 服务器、HMI 用户账户 |
| 未授权访问 | 管理后台未做鉴权 | SCADA 组态工程文件泄露、PLC 存储区可读 |
| 命令注入 | Web 命令执行 | 组态软件脚本引擎、PLC 文件服务 |
| 反序列化漏洞 | 后端解析恶意数据 | 工程文件加载、OPC UA 结构化数据解析 |
| 路径遍历 / 任意文件读写 | 文件下载功能 | HMI 工程文件下载、PLC 固件备份接口 |
| 缓冲区溢出 | 网络服务处理畸形报文 | 协议栈解析、设备 Web 服务 |
| 通用组件漏洞 | Log4j、Struts、OpenSSL | 集成到工控软件的第三方组件 |
这张表最直观的结论是:攻击者不需要成为工控专家,只需要把 IT 漏洞的手法换个目标而已。现在很多漏洞研究团队甚至直接用 AI 辅助生成针对特定 PLC 协议的 Fuzzing 用例和 PoC 脚本,效率比手工逆向高一个数量级。防守端如果还在按老思路只防外部攻击、只盯传统特征,很快就会跟不上节奏。
2. 传统工控防御的破绽在哪里
2.1 边界与白名单思路的魔咒
工控安全过去十年的主流方案就是边界防护:在企业网和控制网之间部署防火墙、单向网闸、白名单规则,默认只放行特定 IP 和端口。这套思路在逻辑上是成立的,但执行起来有巨大的隐含假设——内部完全可信。
我参与过的几次评估里,真实情况往往是这样的:
- 现场为了调试方便,工程师在 PLC 上开了 Telnet,走的时候没关。
- 某台 HMI 因为要远程运维,在防火墙里加了一条“any to any”的临时规则,一直没删。
- 一个 U 盘在办公网和控制网之间来回插,完全绕过了所有网络边界。
边界防御防得住外部敲门的人,防不住内部已经存在的“合法通道”。一旦攻击者拿到一台内部机器,边界形同虚设,横向移动几乎畅通无阻。这也是为什么很多工控事件都是从钓鱼邮件开始的,不是从互联网直接打进来的。
2.2 特征规则在工控场景集体失灵
传统 IDS/IPS 依赖特征库,而特征库对付已知攻击很好用,遇到工控场景就捉襟见肘。
- 工控协议数量多、版本杂,Modbus、S7comm、EtherNet/IP、Profinet、OPC UA 各有各的格式,为一个私有字段写检测规则,需要大量逆向工作时间。
- 现场流量规模小、变化少,正常行为的“基线”本来就很难定义,很多规则要么误报高、要么漏报高。
- 攻击者只要稍微改变一下报文构造方式、利用时序绕过,规则就失效了。
所以你会发现,很多厂里买了工控防火墙、装了 IDS,实际效果就是“响个不停,然后被关了告警”。这不是设备不行,而是传统的“规则匹配”思路在数字化程度低的工控环境里确实水土不服。
还有一个容易被忽略的问题:PLC 本身没有像样的日志体系。大多数 PLC 不记录登录行为,不记录工程文件下载操作,更不记录内存区读写操作。攻击者改完逻辑走人,防守方可能几个月后生产异常才察觉。没有优质日志,传统检测手段就是“盲人摸象”。
2.3 补丁与资产管理的老大难
每次和现场运维聊补丁,我都能听到一堆难处,概括下来就三条:
- 停机窗口太宝贵。产线要 7×24 小时跑,PLC 打补丁基本要停线,停一小时就是几十万产值,领导批不批得下来先不说,光协调时间就要排两个月。
- 固件更新风险大。很多厂至今还在用一两年前甚至更老的固件版本,新的固件厂家不保证兼容旧的工程文件。像博途版本和 PLC 固件版本不匹配导致连接不上工程的问题,我见过不止一次。信捷 XD5 固件升级过程中断连、升级失败变砖的案例,论坛上也一搜一大把。
- 资产台账混乱。这个设备归哪个部门管、上面跑了什么服务、版本号是多少,全在老师傅脑子里,他一退休,新来的根本不知道厂里到底有多少 PLC 和 HMI。
所以补丁这条路在工控行业短期走不通,这是客观现实。防守方必须正视这个现实,找一个不靠“打补丁”也能把风险压下来的路径。AI 进场,恰好是在这一个点上打开了窗口。
3. AI 正在改写工控攻防的底层逻辑
3.1 攻防两端都在用 AI 提效
AI 进入工控安全,不是某个厂商想出来的新卖点,而是攻防两端的共同选择。
攻击端的动作很务实:
- 用 AI 辅助做固件逆向,快速定位协议解析函数、提取关键指令。
- 用 AI 做漏洞挖掘辅助,生成 Fuzzing 输入、分析崩溃日志、自动聚同类漏洞。
- 用 AI 写 PoC 和利用脚本,把传统上需要大量手工调试的工作自动化。
- 用 AI Agent 编排攻击流程,从端口扫描到漏洞利用再到横向移动,一键化执行。
防守端如果不跟进,最直接的后果是:攻击者的漏洞利用成本被大幅拉低,而防守方还在手工翻日志、手工写规则,效率差距越拉越大。
防守端用 AI 的方式也在快速落地:
- 用机器学习建立工控流量行为基线,识别偏离正常的操作模式。
- 用自然语言处理分析工控协议里的文本字段,发现可疑指令内容。
- 用 AI 辅助研判告警,把安全分析师从海量日志里解放出来。
这里有个重点:AI 不是用来替代安全专家,而是用来替代那些“重复且机械”的分析步骤,让专家把时间花在真正需要判断力的地方。
3.2 异常行为检测:从“特征”走向“行为”
传统防护是“我知道你长什么样,所以拦你”,AI 检测是“我不用知道你长什么样,但我看得出你不是平时那个”。这个转变在工控场景特别有意义。
举一个我实测过的例子:某车间里一台 PLC 每天只会执行固定的灌装程序,历史流量里几乎没有异常指令。我基于流量日志训练了一个简单的行为模型,用特征工程提取了“写线圈频率”、“读寄存器数量分布”、“会话持续时间”等十几个维度的统计量。模型跑起来之后,第一周就发现了一个真实事件——某个操作员在非值班时段从办公室远程连到 PLC,执行了一段平时不常见的调试指令。这在传统白名单规则下是合法的(IP 和端口都放行了),但 AI 能根据行为上下文把它揪出来。
这类思路可以平移成一套实用的检测矩阵:
| 检测维度 | 传统规则能覆盖? | AI 行为模型能覆盖? |
|---|---|---|
| 已知恶意 IP 连接 | 能 | 能 |
| 从未见过的设备接入 | 难(需要资产库) | 能(用指纹聚类) |
| 非工作时间异常操作 | 难(时间段写死) | 能(自适应学习) |
| 指令序列偏离正常模式 | 难(规则无法穷举) | 能(序列建模) |
| 缓慢的数据窃取 | 难(单包看不出异常) | 能(统计累积偏差) |
| 逻辑篡改(写线上) | 难(协议合规但行为危险) | 能(行为语义分析) |
说到底,AI 给工控防御带来的核心价值不是“更聪明的规则”,而是“从规则走向基线、从特征走向行为”的范式迁移。
3.3 AI Agent 在应急响应里的真实位置
现在聊 AI Agent 很热,我看到很多宣传里写着“AI 自动处置威胁”,实际落地要冷静。Agent 在工控应急响应里能做的事,我更愿意分成“能干的”和“别让它碰的”:
可以交给 AI Agent 的事:
- 告警的初步筛选和归类,把十万条日志浓缩成三五个真正需要看的场景。
- 自动生成检测规则初稿,规则工程师在此基础上修改确认。
- 汇总多源日志生成事件时间线,让分析员能看到全貌。
- 生成修复建议和参考链接,辅助决策。
现阶段不要交给 AI Agent 的事:
- 自动阻断 PLC 通信。这是生产系统,误断一条指令就可能酿成停产事故,必须有人闸。
- 自动下发配置变更。改变防火墙规则和设备策略,需要走变更审批流程,AI 不能绕过。
- 自动升级固件。理由前面说了,升级变砖风险太大。
换句话说:AI 可以把“发现问题”和“准备方案”做到极致,但“动生产系统”的最后一步必须留给人。这是我在实际项目里反复强调的一条红线,也是 AI 在 OT 环境落地的生存法则。
4. 普通工控安全人员现在能做点什么
4.1 把 PLC 编程底子补起来
AI 时代的工控安全有个悖论:工具越智能,人的领域知识越值钱。你要是连梯形图都看不懂,AI 给你报一个“异常写操作”,你都没法判断这到底是攻击还是工程师的正常调试。
建议按这条路径补基本功:
- 先学一个主流厂牌的编程环境,西门子博途、三菱 GX Works、汇川 InoShop、CODESYS 都可以。重点不是背指令,而是理解 PLC 的扫描周期、输入输出映射、通信配置。
- 学会看梯形图和结构化文本(ST)程序,能定位一段逻辑里哪里写了线圈、哪里调用了通信指令。
- 搞明白常见协议的报文结构。Modbus TCP 的 MBAP 头和功能码、S7comm 的 ROSCTR 头、OPC UA 的二进制编码,至少能读懂抓包结果。
- 动手搭建一套虚拟仿真环境,很多厂牌都提供软 PLC 和仿真器,不用买实物硬件就能练。
我自己就是从安全背景转过来踩过不少坑,最痛的教训是:只懂协议不懂业务逻辑,根本看不出“数据没问题但价值观有问题”的隐蔽逻辑篡改。攻击者把某个阈值从 10 改成 100,协议层完全合法,只有懂业务才知道这是致命的。
4.2 从日志降噪开始,小步引入 AI
很多团队一上来就想要“AI 全自动化安全运营平台”,我劝你先别急着上大平台,从三个小切口开始:
- 日志集中与结构化:先把分散在 HMI、防火墙、OPC 服务器、PLC 诊断缓冲区的日志统一收上来,哪怕先用 Syslog 转发,也比日志分散在各自机器上强。
- 告警降噪:用简单的统计方法或者现成 AI 告警聚类工具,把安全设备的原始告警按相似度聚成簇,大幅减少分析员每天要看的告警数量。这一步不需要大模型,传统 ML 就够用。
- 资产自动识别:用 AI 对工控网络流量做设备指纹聚类,自动生成“控制器、HMI、网关、IO”的分类和资产列表,让资产台账从“老师傅脑中”变成“数据库里”。
这三个切口全部避开了“AI 直接动生产系统”的高风险场景,只做辅助分析,安全可控。跑顺之后再考虑扩展规则自动生成、行为基线建模这些进阶能力。
4.3 一套可复现的“PLC 环境 + AI 检测”实验步骤
我在本地搭过一套迷你实验环境,全部用免费组件,分享出来,你可以照着跑一遍。
环境角色如下:
- 使用 CODESYS Control Win 作为软 PLC,跑在 Windows 上,模拟真实控制器。
- 使用 Modbus Poll 工具做正常读写模拟,加上 Wireshark 抓包。
- 用 Python 脚本模拟异常行为,比如非预期时间段的大量写线圈操作。
- 用
scikit-learn训练一个孤立森林模型,对流量特征做异常检测。
步骤简述:
- 安装 CODESYS,创建一个简单工程,启用 Modbus TCP 服务器,监听 502 端口。
- 用 Modbus Poll 周期性读取寄存器,模拟正常生产操作,刷一批正常流量,导出 PCAP。
- 写一个 Python 脚本,随机时间去写多个线圈,模拟异常操作,再刷一批流量,导出 PCAP。
- 用 Wireshark 的
tshark提取每条 Modbus 请求的关键特征:时间戳、源 IP、目的 IP、功能码、寄存器数量、写操作类型等。 - 把特征整理成 CSV,正常流量打标签 0,异常流量打标签 1。
- 用孤立森林模型训练,再用预留的流量做测试,观察 F1 分数和误报情况。
一个非常简化的提取脚本开头长这样:
import subprocess import pandas as pd result = subprocess.run( ["tshark", "-r", "normal.pcap", "-T", "fields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", "-e", "modbus.func_code", "-e", "modbus.reference_count"], capture_output=True, text=True ) # 解析输出为 DataFrame 后做特征处理这套实验的重点不在于模型多高级,而在于让你亲手体会“攻击者行为在流量上的投影”和“AI 如何捕捉统计偏差”。跑通一次以后,再去看商业工控安全产品里的“行为基线”“异常检测”,你就能看懂它背后的思路,而不是被销售话术带着走。
4.4 管理视角:AI 落地的三条红线
如果你是一线的负责人,推进 AI 安全建设的时候,建议先和团队约法三章:
- 数据质量不过关,不碰 AI。连资产清单、流量日志都不完整,训练出来的模型只会给你一堆噪音。先治理数据,再谈智能。
- AI 决策必须有人复核。自动化可以,但要分级。低危告警可以自动推送,高危处置必须人工确认,任何情况下保留人工接管链路。
- 投资 AI 工具之前,先投资人员能力。工具再贵,落地效果还是看用的人能不能问出正确的问题。培训预算建议不低于工具预算的三分之一。
很多人会问:AI 到底能不能替代安全分析师?我的经验是:它替代的是“不会 AI 的分析师”和“只会看规则的分析师”,但替代不了“懂现场、懂业务、懂 PLC 逻辑”的分析师。越是在工控这种领域知识密集的场景,人的价值反而越凸显。
5. 常见问题与排查思路
5.1 高频率问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| PLC 扫描不出来 | IP 冲突、VLAN 隔离、设备不在线 | 用厂商工具确认设备在线状态,检查接入层交换机配置 |
| 博途连接不上 PLC | 固件版本与博途版本不兼容、PG/PC 接口选错 | 确认固件和软件版本对应表,重选接口类型 |
| CODESYS 读取不到网口 MAC | 缺少驱动、权限不足、网卡多路 | 检查运行时授权和驱动安装,尝试用同样环境的官方示例 |
| AI 告警误报率高 | 正常操作模式变化(如临时调试) | 引入“维护窗口”机制,结合时间上下文降误报 |
| AI 生成检测规则质量差 | 提示词缺少协议格式说明 | 把协议文档片段喂给 AI,明确字段边界,再让 AI 输出候选规则 |
| 固件升级失败后设备失联 | 升级过程中断、版本不兼容 | 检查恢复流程(多数厂家支持引导区恢复),避免断电升级 |
| 台达等老款 PLC 通信参数丢失 | 解密/上位操作导致参数异常 | 提前备份程序与参数,规范在线维护流程 |
这张表看起来零散,其实是两类问题:一类是基础设施/版本层面的老问题,一类是引入 AI 之后的新问题。两类都要重视,老问题不解决,新系统也没法稳定跑。
5.2 我在实操里踩过的坑
最后分享几个真实踩过的坑。
第一个坑:报警推送发到了工作群里,结果成了“狼来了”。AI 模型上线第一周,每天推几百条告警,值班同事从紧张到麻木,最后直接把应用静音了。后来我们把推送阈值调高、加入“资产重要级别”权重,只推关键控制器的高置信度事件,群里的告警量降了八成,真正的高危告警才有人看了。所以做安全和做产品一样,克制比激进更重要。
第二个坑:拿 IT 模型直接套工控数据,效果惨不忍睹。一开始我拿一套现成的网络异常检测模型,直接喂 PLC 流量,结果模型把周期性的轮询都当成异常,天天误报。后来才反应过来,工控流量和互联网流量的统计分布完全不一样,必须根据现场特征重新设计和训练。教训是:AI 不是万能模板,它需要适配场景。
第三个坑:忽略了 PLC 自身诊断功能的价值。很多高端 PLC 自带诊断缓冲区、事件日志、在线监视功能,这些原生数据比外部流量检测更精准。我以前只盯着网络流量,后来本地调试会直接读 PLC 的诊断缓冲区,很多问题立刻水落石出。建议做检测方案的时候,先看看设备原生能力能提供什么数据,再决定要不要上外部传感器。
第四个坑,也是我最想强调的:不要等到出事了才第一次联系现场工程师。AI 检测出可疑行为之后,最终确认它到底是攻击还是正常操作,靠的是熟悉生产工艺的老师傅。提前和现场培养好沟通渠道,让老师傅知道你找他是为了确认安全问题,不是来追责的,合作顺畅程度会完全不一样。
我个人在实际操作中的体会是:AI 把工控防御的起点拉低了,但它没有把终点抬上去。它能帮你更快发现问题,却没法替你做业务判断。真正的分水岭,仍然在于你懂不懂现场、懂不懂 PLC、懂不懂那台设备身上跑着的生产逻辑。把 AI 当杠杆,而不是当救世主,工控安全这场变局里才有你我的位置。