前阵子圈子里传得最凶的一个词是“AI打PLC”。一开始我以为是标题党,直到自己参与的几个制造业客户在流量里截到了自动化扫描和异常协议报文,才意识到这不是科幻片——黑客利用AI把工业设施当靶子,西门子PLC成了被点名最多的目标。这篇文章聊聊我看到的东西,以及防守方应该怎么接招。
如果你在工厂管PLC、做自动化项目,或者正好负责生产网的安全,这篇文章都值得看完。它不讲空泛的大道理,只讲三件事:为什么工业设施会成靶子、AI在攻击链里具体干了什么、我们现在能做什么防护。
1. 为什么工业设施成了AI攻击的新靶子
1.1 设备联网把“信息孤岛”变成了“暴露面”
以前PLC是真正的孤岛:它与上位机之间用串口或现场总线,物理上谁也别想远程碰。但近几年数字化改造,很多工厂把PLC、HMI、变频器、传感器都接进了一个以太网,再通过网关把数据推到MES、SCADA甚至云平台。联网带来效率,也带来一个老生常谈但总被忽略的事实:设备之间的信任关系被直接映射成了网络可达性。任何能从办公网摸到网关的人,都有机会继续往里走。
我见过不少现场,PLC网段和办公网只用一台普通的交换机隔开,甚至干脆共用一个VLAN。安全工程师去看项目文档,发现网络拓扑图上面画着一道“防火墙”,实际到现场一看,那道防火墙是千兆家用路由器,规则里有一条“允许所有”。这不是段子,是我在真实调研里经常遇到的情况。
举一个具体例子:一套冷库监控系统跑在西门子S7-200 SMART上,通过一个边缘网关把温度、压力、压缩机状态上传到云端管理平台。运维觉得这个网关很重要,于是放在办公网内;而网关又同时连着PLC网和云。结果就是,只要有人攻破办公网里任意一台电脑,就有机会顺着网关摸到PLC。类似的结构在食品、冷藏、市政等领域非常常见。
1.2 西门子PLC为什么被反复点名
几年前做工控安全宣讲,我还会被问“黑客为什么不去偷银行数据,要来打工厂”。现在没人问了,因为答案太明显:生产网的入口比很多人想象的更容易摸到,而西门子PLC正好站在那个入口的正中央。
西门子被点名有四个现实原因。
市场份额太大。汽车、化工、食品饮料、制药、市政这些行业里,西门子控制系统的占比非常高。攻击者只要研究一套手法,就能覆盖大量工控现场,这种“单点投入、多点复用”的性价比在AI加持后更加明显。
协议历史包袱太重。S7家族最早的设计目标是可靠、实时,并没有把安全考虑进去。S7comm基于102端口,大量报文以明文传输;Modbus TCP就更直接,502端口、功能码一目了然,几乎没有加密和认证机制。攻击者不需要破解什么东西,只要网络能通,所有控制指令都是“明文裸奔”。
设备代差太大。S7-1500好歹有密码和访问级别,但现场大量还在用的S7-200 SMART、S7-300几乎没有内置安全机制,固件更新早就停了。这些老设备在5G、边缘计算改造中又被拉上以太网,相当于把二十年前的门锁装在了今天的大街上。
研究样板太多。公开安全大会上这些年展示过很多针对西门子协议的破解研究,十几年前那次著名的工业控制系统攻击事件让S7系列第一次成为全球安全研究的焦点。攻击者不需要从零开始,检索就能拿到思路和现成工具。
提醒:不要因为PLC有密码就觉得万事大吉。很多现场的项目交付文档里写着PLC密码“12345678”,TIA Portal访问级别也保持默认。安全评估里最有效率的一项工作,就是去试默认口令。
1.3 AI让“破坏生产”而不是“偷数据”变成了主流目的
工控攻击的目的和IT攻击不一样,重点不在数据的机密性,而在工艺过程的安全性。攻击者通过改变设定值、强制输出、触发停机,可能让一套装置反复启停,甚至让一台大型设备飞出指标范围。传统观点认为这种攻击需要深度工控知识,但AI把门槛打下来了:它能帮你读懂协议文档、生成报文、分析抓包结果、规划攻击步骤。换句话说,过去这种攻击是少数专家才能干的事,现在一个懂基本网络渗透的人加上AI工具,也能拼出一条可行链路。
一个例子:十字路口红绿灯PLC程序平时看起来毫无价值,但一旦被远程改写,红绿相位错乱,直接影响公共安全。攻击者不一定懂交通控制逻辑,但AI能帮他分析程序块和寄存器映射,把“绿灯一直亮”这种效果拼出来。这种物理后果,比数据加密勒索更麻烦。
2. AI在攻击链里到底扮演什么角色
2.1 指纹识别和目标画像:AI让测绘快到离谱
攻击者进入网络后,第一件事是搞清楚“网里有什么”。人工扫描需要逐段逐IP去试,再靠抓包经验识别设备型号。AI辅助可以自动抓取多个IP的响应特征,和公开指纹库比对,自动给出设备类型、厂商、固件版本、开放端口、使用的协议。
对S7系列来说,ISO-on-TCP握手包里的TSAP信息能帮助区分S7-1200/1500/300/400,AI还能根据响应时间、端口分布进一步归类。这不是说AI有某种超能力,而是说它把重复劳动压缩了。原来一个人坐在电脑前敲命令、翻输出、整理清单几小时的活,AI在几分钟内就能完成,还能自动生成一份带优先级的备选目标列表。
对防守方来说,这意味着OT网络里的任何扫描行为都要当回事,哪怕只是几个探测包。很多攻击者第二步就会去确认S7设备的102端口是否开放,或者Modbus TCP的502端口是否有响应。下列端口经常出现在OT网段的设备指纹里:
| 协议 | 常见端口 | 典型用途 |
|---|---|---|
| S7comm | 102 | 西门子PLC通信、程序上下载 |
| Modbus TCP | 502 | 通用工业协议,大量从站设备 |
| OPC UA | 4840 | 数据采集、跨平台通信 |
| PROFINET | 34964/34962/34963 | 实时IO通信、设备发现 |
2.2 漏洞挖掘和协议分析:从研究员专属到自动化流水线
过去,针对HMI、OPC UA服务器、S7协议栈的漏洞挖掘,需要研究者写大量fuzz脚本,分析崩溃样本,手工逆向固件。AI把其中一部分流水线化了:用模型自动生成畸形报文输入,用覆盖率反馈选取下一次变异方向,再用工具自动清洗崩溃日志。固件逆向方面,AI辅助识别函数边界、字符串、危险调用链的能力越来越强。
这一段的防御含义是:你不应该假设自己买的设备“够老所以没人研究”。恰恰相反,越老越成熟的协议栈,越容易被自动化工具批量测试;一旦某个公开的固件漏洞被找到并在网上放出分析,攻击者用AI很快就能把概念验证变成可用的检测模块。
另外请注意,攻击面不只在PLC本体,还包括与PLC联动的设备:西门子200 SMART和变频器之间的通信、S7-1500与库卡机器人的交互、数控系统的调试存档、OPC UA服务器节点本身。AI把这些都当作“可编程接口”,任何一层出问题,都可能影响生产链路。
2.3 载荷生成与代码编写:攻击脚本进入“生成式”时代
现在的大语言模型可以直接根据一段协议文档生成调用代码。例如,让AI写一个连接Modbus TCP服务器、批量读取保持寄存器、然后写入指定数值的脚本,几分钟就能得到可运行的结果。它甚至能帮攻击者生成看起来像正常操作的流量模式,比如模仿上位机的轮询节奏,降低被检测系统怀疑的概率。
防守难点在于:传统基于签名的检测面对AI生成的变体很吃力。同一个功能,AI能生成几十种不同的报文组合和代码写法,每种看上去都是合法协议操作。所以检测不能只看“这个包有没有攻击特征”,而要学会看“这个通信行为是否偏离了这台设备的日常模式”。
以OPC UA为例,老一代安全设备看到的是“有没有人用匿名账号连入”,AI思路则会进一步看“这个账号在什么时间点、访问了哪些节点、写了哪些值”。后者明显更接近真实威胁。
2.4 社工情报和定向投递:AI写钓鱼比人更勤快
OT网络再封闭,总有人要收邮件、看供应商通知。AI让钓鱼邮件的质量和成本都变了:它可以模仿西门子技术支持的口吻生成补丁升级通知,可以生成带宏的Excel清单,可以针对具体项目名称做定制化内容。一次设计得好的社工,可能比花几个月研究0day更有效。
对防守方来说,邮件网关要有,但更重要的是:告知运维人员“供应商不会通过邮件附件让你直接导入PLC程序”。我看到太多工厂把厂商官方论坛、QQ群分享的程序模板直接下载到工程师站,这是一个非常现实的供应链入口。AI生成文件的能力越强,这种“工程师主动引入风险”的场景就越值得重视。
3. 一条典型攻击路径的防守视角还原
我写这部分的目的很明确:不是说怎么攻击,而是告诉你该在哪个环节设卡。攻击者每一步都有特征,关键是防守方有没有监控到。
3.1 边界突破:办公网到OT网的那道门
典型第一击并不在PLC上,而在办公网或远程接入侧。攻击者可能通过钓鱼获得一个办公账号,然后横向移动,寻找能通向生产网的通道。这个通道可能是运维工程师的双网卡电脑,可能是远程维护平台,也可能是某个边缘网关。
防守重点:办公网和生产网的边界策略要清楚,尤其是远程维护通道。通道本身要开,但必须是白名单式的:只允许维护供应商的固定IP、固定时间段、固定账号接入;每次接入都有会话审计记录。如果你看到某条维护通道在凌晨两点建立连接、并开始大量访问PLC网段,这本身就是一个强信号。
3.2 内网侦察:AI如何快速定位PLC
一旦进入OT网段,攻击者会先做轻量扫描。除了ARP扫描找在线主机,最重要的是探测102端口确认S7设备,探测502端口确认Modbus从站。攻击者还可能通过Modbus功能码读取设备标识,或者用S7协议的通话建立请求来拿到PLC类型。
AI在这里能做的是把侦察结果自动整理成“攻击地图”:哪个IP是PLC、哪个IP是HMI、哪个IP看起来不上不下像网关。防守侧建议在核心交换机上做镜像,对OT网络里的扫描行为建立独立告警,不要和生产业务的普通噪音混在一起。很多老工程师会说“业务正常运行,怎么会有扫描”,其实只要你把镜像流量抓下来跑一遍,往往能发现意料之外的IP在到处探测。
3.3 指令注入:Modbus、S7comm与OPC UA三种常见手法
这是攻击链里最关键的一环,也是防守方必须看懂的环节。下面列出的功能码和操作本身并不可疑,因为它们是自动化系统的日常工作。真正可疑的是“谁在做、从哪里做、做什么范围、是否符合基线”。
| 协议 | 常见端口 | 常见危险操作 | 防守要点 |
|---|---|---|---|
| Modbus TCP | 502 | 写单个线圈、写单个寄存器、写多个线圈、写多个寄存器 | 白名单功能码、限制寄存器地址范围 |
| S7comm | 102 | 启动/停止PLC、上传/下载块、强制变量 | 限制源IP、监控停止指令和强制指令 |
| OPC UA | 4840 | 读取/写入标签,尤其是匿名访问时 | 禁止匿名账号、设置节点读写权限 |
以Modbus TCP为例,攻击者不需要知道任何密码,只要网络可达、功能码正确,就能向保持寄存器写入数值。如果我要监控,重点就不是“写寄存器”这个动作,而是某个从未见过的IP开始往原本只跟上位机通信的PLC持续写入。把“正常的轮询写值”和“异常的批量写值”分开,是工业DPI最核心的能力。
S7comm的停止指令更关键:很多S7-1500厂房不允许外部随便STOP,但攻击者通过合法会话就有机会做到。现场工程师最熟悉的“CPU在STOP和RUN之间反复切换”现象,有可能不是硬件故障,而是有人在利用协议控制指令。
3.4 潜伏与后门:比攻击更麻烦的残留风险
攻击者一旦拿到PLC的控制权,可能不只是做一次破坏,而是会留下长期后门。比如在S7程序里插入一个条件触发的功能块,或者通过OPC UA服务器创建新的隐藏节点,甚至在HMI脚本里埋坑。这些后门平时不发作,选在关键时刻动作。
防守建议:对高频变化点保持敏感。有条件的企业,每次停产检修时做PLC程序比对,计算程序块的哈希或比对源文件;至少记录下组态软件的上传时间和操作者。很多攻击都怕“现场有人较真”,哪怕只是每月做一次程序备份和比对,都能大幅提高攻击成本。
4. 防守方该做的四件实事
4.1 资产盘点:先知道自己家里有什么
老话重提,但真正做扎实的工厂不多。一个网段里哪些IP在线、哪些是PLC、哪些是HMI、哪些是历史数据库服务器,必须先搞清楚。可以借助扫描工具,也可以用更保守的方式:翻开项目图纸对照交换机端口,再结合上位机的组态信息逐台确认。最重要的是记录每台PLC的型号、固件版本、开放端口、程序修改时间。这是后续一切检测和响应的数据底座。
建议输出一张资产台账,至少包含:设备名、厂家型号、IP、固件、使用协议、所属工段、上次程序备份时间、负责工程师。如果没有这份表,后续白名单和异常检测都无从谈起。
4.2 网络白名单:把可通信范围锁到最小
在OT网络里做严格的TCP/IP白名单非常有效,但一定要设计成“最小必要”。具体做法:确定上位机、HMI和PLC之间必须通信的IP、端口、协议方向;在工业防火墙上按“源IP、目的IP、端口、协议功能码”组合放行,其他全部拒绝。例如生产控制只允许工程师站通过102端口访问S7-1500,不允许普通办公IP直连PLC。
这里必须提个醒:白名单规则一定要先在旁路镜像环境验证,否则可能把合法的组态下载、HMI画面刷新、OPC UA连接全部挡掉。我见过不少项目因为上线第一周把自己锁死,被迫“紧急开放全通”,安全策略等于废纸。宁可花两周时间慢慢收敛规则,也不要一天之内把所有端口全部封死。
4.3 设备硬化:密码、固件与访问级别
针对S7-1500,可以在TIA Portal的设备视图里设置“保护与安全”访问级别,至少做到:启用密码保护,访问级别设为“仅允许使用密码访问”,禁止未知设备访问。但必须清醒:这不加密网络报文。攻击者通过网络层的指令注入,依然可能绕开组态工具层面的认证。
S7-200 SMART这类老设备没有内置加密机制,唯一的有效手段就是网络隔离和流量白名单。如果业务必须让它上以太网,一定要在它的前面加一道独立的隔离设备,不要把它和办公网放在同一个网段。
固件升级要单独说:升级前一定要备份程序和组态,并在试验台上验证与新固件的兼容性。生产环境不建议“有新固件就升”,很多工厂就是在升级后出现了通讯延迟、模拟量漂移等问题,反而把系统推到更危险的状态。
4.4 检测响应:从“看流量”到“看懂工艺”
检测的核心不是抓恶意软件的指纹,而是建立正常行为基线。具体可落地的几类:
- 通信基线:哪些IP之间允许通信、频次多少、包大小多少。
- 功能码基线:某个PLC多久执行一次写操作,写的寄存器范围是什么。
- 工艺参数基线:关键模拟量在正常运行区间的分布,例如温度、压力、速度的合理范围。
当一个人突然高频写PID设定值,或者一个从未见过的IP开始枚举OPC UA节点,检测系统应该给出高优先级告警。AI在这件事上的价值是降噪和关联,前提是你先把业务基线喂给它。否则AI只会把运维人员淹没在上百条“疑似异常”的告警里,最后变成“狼来了”的游戏。
5. 我踩过的坑和几个实战经验
5.1 白名单把自己锁在门外
第一次给某化工客户做工业防火墙,我按“最小权限”配置了允许访问S7-1500的源IP列表,结果把组态下载的临时连接忘了放行,导致TIA Portal连接失败,工艺组态工程师差点提着笔记本到现场手动激活。后来加了独立调试通道和变更窗口规则,才把这个坑填上。经验是:白名单不是一次性配置,要跟着组态变更、设备更换走,每次变更都要重新审视规则。
5.2 设了密码不等于安全
继续说S7-1500。PLC密码可以防止组态软件随意上载程序、防止下载覆盖,但它不保护通信链路本身。攻击者只要通过OPC UA匿名访问,或者利用网络上的合法上位机会话,仍有可能在PLC不知情的情况下读写数据。更现实的风险是,很多业主为了方便售后,把密码写在运维手册里,或者干脆用“123456”。安全评估时,密码问题总是最先被翻出来。
5.3 被忽视的工艺异常:PID波动案例
有一次客户反馈“PLC温度PID波动温差大”,现场的自动化工程师换了传感器、调了PID参数,问题依旧。后来安全团队查OPC UA审计日志才发现,有个外部维护账号以匿名方式连接OPC UA服务器,每隔几十秒就把温度设定值来回改几个数,造成温度曲线周期性震荡。这不是控制问题,是通信层面的恶意注入。从这件事我学到一个习惯:凡出现查不到原因的工艺波动,先把网络侧的日志和报文拉出来看一遍,特别是IO写操作的记录。
5.4 AI使用的伦理边界
作为安全从业者,AI是很好的辅助,但我给自己划了几条线:不做未经授权的渗透测试,不生成针对生产系统的攻击脚本,不在没有测试床的情况下对真实PLC做安全验证。如果企业要引入AI安全产品,建议把“OT系统未经授权禁止使用AI辅助渗透测试”写进制度。AI可以帮我们写检测规则、分析抓包、总结日志,但它不应该成为攻击生产环境的理由。
折腾了一圈,我的体会就一句话:AI确实把攻击成本打下来了,但防守方最好的反制不是买更贵的AI产品,而是把IP白名单、PLC密码、程序哈希、流量基线这四样基础动作练成肌肉记忆。安全没有银弹,只有谁先把基本功做扎实,谁就能在攻击者面前多撑几层。希望这篇东西能帮到正在做工控安全或准备启动这件事的朋友。