
前阵子整理漏洞报告时我发现了一个很扎心的现象某个在 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、4840OPC UA、102S7comm找到 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_outputTrue, textTrue ) # 解析输出为 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 当杠杆而不是当救世主工控安全这场变局里才有你我的位置。