
深夜值班电话一响多半没好事。去年夏天一个凌晨我接到现场来电一条锂电池涂布产线全线报警PLC站CPU负荷飙到90%以上触摸屏频繁弹通讯超时。赶到中控室一看操作员站的Windows系统多了一个陌生进程CPU占用奇高网络日志里全是外联请求。折腾到天亮才弄明白是某台运维笔记本回办公室修过之后再来现场调试时把挖矿木马带进了控制网。这事放在五年前很多人会当成个例。但你要是在工控圈子里泡得够久会发现这几年同类事件越来越多。PLC、DCS这类设备被业内戏称为“工业神经”——它们直接控制电机、阀门、变频器管着整条产线的启停和联锁。神经一旦被病毒或者恶意指令干扰轻则非计划停机重则设备损坏甚至人身事故。工控网络安全的警报已经不是“拉不拉”的问题而是“怎么拉”“拉完怎么办”的问题。这篇文章适合谁看常年在现场和PLC、DCS打交道的电气工程师、仪表工程师、自动化项目经理以及刚接手工厂IT/OT融合网络的新人。我会从威胁来源、系统脆弱性、防护思路到一套可以落地的加固流程把我在项目里踩过的坑和验证过的方法原原本本讲一遍。1. 警报为什么拉响工控网络遭遇的真实威胁1.1 “工业神经”到底指的是什么很多非工控背景的人理解不了为什么PLC、DCS中毒是一件很严重的事普通电脑中毒顶多重装系统PLC怎么会出人命这里要先把概念统一一下。PLC可编程逻辑控制器是现场级的控制设备相当于单兵的神经末梢。它读传感器信号做逻辑运算然后输出开关量、模拟量去驱动接触器、变频器、调节阀。DCS分布式控制系统则更像一套完整的“中枢神经网络”大量控制站分布在现场通过冗余网络连接多用在化工、电力、冶金这类连续流程行业。传统印象里PLC就是一个铁盒子抗干扰、耐高温、常年不关机好像天然免疫电脑病毒。这个印象在十几年前基本成立因为PLC的网络几乎与外界隔绝。但现在的情况完全变了产线要数据采集SCADA要上云MES要看实时产量厂长在办公室就想看到车间OEE。于是控制网和办公网开始打通PLC的通讯端口不再只面对编程器而是暴露在整个企业网络里。工业神经一旦暴露就是活靶子。1.2 这几年最常见的几种攻击路径我接触过的工控安全事件真正被国家级黑客盯上的极少绝大多数是这么来的勒索软件加密操作员站。最常见。操作员站多是Windows系统一旦被勒索病毒加密中控室直接变成瞎子看不到任何工艺画面。因为业务连续性要求高很多厂只能交赎金或者从备份重装系统产线梯队停摆。挖矿木马占用控制器资源。开头那个案例就是典型。挖矿木马不太破坏数据但把CPU和网络带宽吃得干干净净。PLC和DCS的扫描周期是有严格时序要求的CPU被拖垮逻辑执行就会抖动产线频繁报错产品报废率飙升。利用漏洞直接下发恶意指令。这类攻击技术含量比较高一旦得手可以直接篡改控制逻辑或者设定值。比如修改温度PID设定值让反应釜超温修改变频器频率让电机过载。这种不靠病毒靠协议的攻击杀毒软件根本看不见。内部误操作与U盘摆渡。往往是最容易中招的方式。调试笔记本接到过不可信网络再去现场直接插入控制网U盘在公司电脑拷过文件又插到工程师站上传程序。病毒不挑食它只需要一个入口。我把这些威胁整理成一张速查表方便做报告时直接用威胁类型主要攻击路径典型影响应对重点勒索软件邮件附件、U盘摆渡、远程端口操作员站加密中控失去监控主机白名单、备份恢复挖矿木马运维笔记本、非受控网络接入CPU占用高扫描周期抖动网络隔离、白名单协议层攻击直接构造Modbus/S7comm报文篡改逻辑参数、控制指令工业防火墙DPI、协议过滤内部误操作配置错误、误删程序、密码泄露逻辑丢失、联锁失效权限分级、操作审计1.3 传统IT安全方案为什么不灵很多企业碰到工控安全问题第一反应是把办公室那套杀毒软件、防火墙、漏洞扫描搬到车间。结果往往水土不服甚至搞出更大的麻烦。杀毒软件靠病毒库和特征匹配需要持续联网更新。控制网为了安全大多不连外网病毒库几个月不更新等于形同虚设。而工控组态软件和杀毒软件之间冲突不断误杀现场运行文件的事我见过不止一次。漏洞扫描工具更棘手。IT领域的漏洞扫描是主动发报文去探测端口和指纹但在OT环境里这种主动探测对老旧PLC、DCS控制器本身就有风险。有些十年前的老模块CPU性能极低来一轮扫描风暴直接死机反而把产线扫停了。IT安全的核心目标是“机密性优先”数据不能丢工控安全的底线是“可用性优先”设备不能停。安全手段一旦影响生产连续性和实时性工程师第一反应就是拆掉它。这也是为什么工控安全必须有自己的一套打法不能直接照搬。2. 先认清家底PLC/DCS天生有哪些弱点2.1 工控协议从设计之初就没考虑安全这是PLC/DCS最容易受伤的根源。以Modbus TCP为例这个协议在20世纪70年代末诞生初衷就是简单可靠地把寄存器数据读出来写进去。它不设认证、不加加密没有完整性校验甚至没有权限分级。只要你的电脑能ping通PLC的IP地址随便一个Modbus调试工具就能去读写寄存器。西门子的S7comm协议也类似。老版本的S7-300/400在没有植入门禁保护的情况下任何人用博途或者第三方库直接连接都可以上载程序、下载逻辑。我早年在现场就遇到过一个外包人员拿着软件半个小时就把一台S7-300的程序整个读了出来拷到U盘带走了整个过程没有任何审计记录。工控协议在以太网化之后本来应该补上安全机制但因为要和老设备兼容很多厂商只能做向后兼容。结果就是一个网络上同时跑着脆弱的老协议和带着补丁的新协议攻击者完全可以挑最软的那个柿子捏。2.2 控制器硬件资源太有限装不了防护代理有人说既然怕中毒那给每台PLC装一个杀毒软件不就行了这个想法在工控场景里基本行不通。PLC/DCS控制器的本质是嵌入式系统CPU频率低、内存小、存储空间更是金贵。很多老控制器的程序存储用电池供电的RAM容量以KB为单位。装一个安全代理至少要多跑一个进程吃掉一部分CPU和内存这在高速控制场景是致命的。一个原理上5ms该跑完的扫描周期被安全软件拖成15ms伺服跟随精度直接就崩了。我做过一个测试把一台工业安全软件的主机探针装到一台老款DCS控制站的旁边作为旁路仅仅做流量镜像分析都对控制站网卡产生了不小压力。更别说直接在控制器上做防护了。所以控制器本身是不可能安装传统安全组件的防护只能在外部做要么在网络边界要么在操作员站和工程师站这些上位机层面。2.3 “永远不能停机”带来的补丁难题IT系统打补丁是一件稀松平常的事Windows更新直接重启服务器也没人说什么。但工业现场最怕的就是重启——反应釜在运行机械手在抓取涂布机在走带你说重启一下那这条线今天就算废了生管能追着你骂三条街。所以很多工厂的操作员站和DCS服务器常年不升级系统有的甚至还在跑Windows XP。不是大家不想打补丁而是工控组态软件往往对操作系统版本有严格绑定打了补丁可能引发组态运行环境崩溃这比漏洞的威胁更直接。结果就是明知道有漏洞也不敢打补丁机器只能带病运行。这里的关键不是“要不要打补丁”而是“补丁怎么打才能不捅娄子”。我已经有了一套验证流程后面实操部分会细讲。2.4 运维习惯是最大安全缺口技术漏洞可以靠设备补流程漏洞只能靠人的习惯补而习惯恰恰最难改。我见过太多现场PLC程序备份用U盘互拷工程师站和操作员站共用一个账号密码控制器密码设成默认的“123456”远程维护端口常年开着就等着设备出了故障供厂家远程调试用。这些习惯在“信任一切”的年代没什么但在当下每个都是突破口。U盘是最典型的摆渡媒介。生产车间不可能完全禁止U盘程序上传下载都需要。我见过比较规范的做法是专门配一台“杀毒U盘”——一个只读的USB隔离器插上U盘先杀毒再通过中间文件夹拷贝到工控电脑。这个土办法成本极低但拦截效果出奇的好。后面我还会讲更多这类土办法现场实操价值比买一堆高大上设备高得多。3. 防护思路给工业神经建立一套“免疫系统”3.1 先把网络分层从现场设备到办公网做工控安全的第一步不是买设备而是搞清楚你厂里到底有多少台设备连在一起。工业自动化的经典架构是参考IEC 62443标准结合普渡模型的分层方式大致可以这么切L0现场设备层比如传感器、变送器、执行机构、变频器、伺服驱动器。L1基本控制层也就是PLC、DCS控制站这些真正的“神经中枢”。L2监控层包括操作员站、HMI、SCADA服务器、历史数据库。L3生产管理层包括MES、APS、OPC服务器、报表系统。L4企业经营网ERP、OA、邮件、办公电脑。核心原则很简单不同层级之间要有明确的边界只允许业务必须的流量穿越边界。L0和L1之间的控制实时流量尽量留在本层L1/L2和L3/L4之间的数据交互要经过受控通道。很多老工厂把PLC、MES、办公网全部塞在一个二层交换机里PLC和行政妹子的电脑同网段这样的网络无论如何加固都白搭。3.2 边界隔离怎么做工业防火墙与网闸层间隔离最常用的是工业防火墙和网闸两种设备。工业防火墙和办公室防火墙长得差不多但多了对工控协议的深度解析能力也就是DPI。普通防火墙只看IP和端口工业防火墙还能读懂Modbus、S7comm、OPC UA这些协议的内容可以做到更细粒度的控制。比如可以设置“只允许Modbus 03功能码读保持寄存器禁止05/06/0F/10这些写操作功能码”这样哪怕攻击者突破了网络边界也没法远程篡改设定值。网闸则更彻底采用物理隔离的数据交换方式只在受控的协议转换通道里摆渡数据。控制网的实时数据可以“单向”流动到管理网但反向回不来。它的优点是完全物理阻断代价是灵活性差一些部署和调试周期更长。在选型上我给一个实在的建议凡是只读数据上报能用网闸尽量用网闸凡是需要双向交互的比如OPC UA服务器与MES通信用带工控协议DPI的工业防火墙并配合白名单策略。3.3 主机防护白名单是工控场景的正解操作员站和工程师站是Windows系统这是病毒的大本营。传统的杀毒软件是黑名单思路靠不断更新病毒库去识别“坏东西”但工控场景网络隔离、病毒库更新困难更麻烦的是工控软件频繁动态加载DLL和脚本误报率高到没法用。我强烈推荐在工控上位机上采用应用程序白名单机制。白名单的思路反过来的只允许已知合法的程序运行不在名单里的一律拦截。好处非常明显——不需要病毒库不依赖网络更新对老Windows系统友好。配置得当的情况下连U盘的.exe文件都跑不起来病毒想执行都没机会。部署白名单最忌讳一上来就开强制模式。正确流程是先跑一段学习模式让控制系统把正常运行时涉及的所有程序、服务、DLL都记录下来形成基线然后再切换到强制模式。后面实操章节我会给详细步骤。3.4 控制器与账号的安全基线网络和主机都管好了也不能忘了控制器本身。很多PLC和DCS自身是有防护能力的只是现场没开。西门子S7-1200/1500支持访问级别设置可以设置完全访问、只读访问等不同权限并设定密码。S7-1500还有完整性保护和防拷贝功能开启后下载程序需要密码验证。三菱FX系列也支持PLC密码和关键字保护设置后需要输入才允许程序读取或修改。DCS方面横河CENTUM、霍尼韦尔Experion这些主流系统都有操作员级别和工程师级别的账号分级。我见过很多工厂操作员站的账号是工程师权限甚至所有人共用同一个管理员账号。这样一旦出问题连是谁操作的都查不出来这是安全审计里非常严肃的短板。账号管理的最低要求就三条不同人用不同账号、权限按岗位最小化、关键操作留操作日志。4. 现场实操一套产线安全加固的完整落地过程4.1 盘点资产先把家底摸清楚很多安全项目失败不是因为方案不好而是因为一开始连资产清单都没有。我印象最深的一个项目客户说一条产线只有2套PLC结果盘完发现还有12台HMI、4台伺服、3台变频器、2台工控机全部挂在同一个网段交换机还是那种非网管的傻瓜交换机。资产盘点建议用如下表格逐台填写资产编号设备类型品牌型号IP地址所属层级负责人固件/系统版本开放端口备注PLC-01控制器西门子S7-1500192.168.10.10L1张三V2.5102, 1024主轴控制盘点方式我推荐以被动监听为主配合现场查看设备铭牌和程序里的IP配置。不要一上来就上扫描器对老旧系统风险太大。可以用交换机的端口镜像找一台笔记本跑Wireshark抓半小时流量就能很清楚地看到网内设备之间的通信关系比主动扫描安全得多。4.2 划分安全域网络拓扑重新规划资产盘完之后画一张真实的网络拓扑图。重点标出PLC、DCS、HMI、操作员站、工程师站、SCADA服务器、OPC服务器、MES接口机以及它们之间的连接方式。90%的老工厂画完这张图都会吓一跳——原来PLC跟办公网之间连防火墙都没有中间还夹着一个无线路由器。安全域划分的基本原则是“相似设备同域不同风险隔离”。典型做法是把L1/L2控制网络划为一个主安全域内部根据车间或工艺段再分子域L3/L4管理网络划为另一个域两域之间加工业防火墙或者网闸。控制域内部的远程维护端口要单独划一个维护区域只允许经过堡垒机访问。如果控制网和管理网之间实在没法改物理布线至少要在交换机上切VLAN再配合三层ACL做访问控制。这是退而求其次的办法总比裸奔强。4.3 配置工业防火墙用最小权限原则在网络边界设备到位后配置策略是最关键的环节。我以一个典型项目为例一套汽车零部件产线3台西门子S7-1200/1500 PLC2台上位操作员站WinCC1套OPC UA服务器1台MES接口机现场还挂了几台HMI。我在控制网络和数据网络之间的工业防火墙上配置的规则大致如下优先级源目的协议/端口动作说明1工程师站PLC-01/02/03S7comm TCP 102允许仅工程师站可下载程序2操作员站1/2PLC-01/02/03S7comm TCP 102允许正常监控读写3PLC-01/02/03现场HMIProfinet IO允许画面实时刷新4OPC UA服务器MES接口机OPC UA TCP 4840允许只读数据上报禁止写5任意任意任意拒绝默认拒绝一切默认拒绝这条规则是灵魂。白名单策略的准则是规则列表里没写的一律不通过。很多人配置防火墙时只加了几条允许规则忘了把默认动作改成拒绝结果防火墙形同虚设该漏的还是漏。配置完成后不要马上把防火墙切到阻断模式。先在日志模式跑一两天看有没有业务流量被误拦。确认没有异常再切阻断模式这是防止产线被自己搞停的稳妥做法。4.4 部署白名单学习模式再强制锁定操作员站和工程师站的加固我推荐在确认控制系统稳定后部署应用程序白名单。这里说的步骤我在西门子和三菱PLC项目里都验证过。先在工程师站装好白名单客户端选择“学习模式”让系统运行一个完整的生产班次。这个阶段所有程序调用都会被记录下来包括WinCC运行环境、Step 7博途工程软件、OPC客户端、各种打印机驱动、数据库服务。建议学习模式保持48小时以上覆盖白班、夜班、换型、启停机等不同工况因为不同工况加载的程序模块可能不一样学习不完整切换强制模式就会误拦。学习期结束后查看生成的程序基线确认没有异常进程混入然后切换“强制/保护模式”并设置密码保护防止客户端被中途退出。还要配置一个例外策略——比如只允许U盘里的离线升级包拷到指定目录不允许直接在系统目录执行。有一次我在现场就是这样白名单切强制模式不到两小时操作员就报WinCC画面打不开。排查后是学习模式期间没有覆盖夜班报表打印报表生成程序被拦了。还好我留了一手切换到强制模式时保留了回滚窗口马上退回学习模式把漏掉的程序补齐再重新切回。这个过程一定要在现场有工程师配合的情况下做不要在无人值守时搞。4.5 给PLC/DCS做“自身防护”密码与访问控制上位机加固完之后回到控制器本身。西门子S7-1500在博途左侧项目树的设备视图里找到“防护与安全”可以设置访问级别和密码。我一般设成“完全访问无密码但不允许HMI写操作”或者直接设成“需要密码的完全访问”关键看现场调试需求。要注意密码一旦启用后面上载程序时需要同时输入密码否则只能读不能改。三菱FX系列通过GX Works2在“在线”菜单里可以设置PLC密码还可以设置关键字保护。设置后未经授权的人即使连上编程线也无法读取或修改程序。DCS系统相对复杂一些但思路一致。我给横河CENTUM、和利时、浙大中控这些DCS做过安全加固主要是把工程师账号与操作员账号分开禁用默认管理员开启操作日志审计并且确保修改组态的操作必须在审批后进行。DCS的逻辑联锁是安全底线联锁逻辑的修改必须有第二人复核这是流程上的硬性要求。还有一个经常被忽略的动作关闭控制器上不用的服务。很多工控设备默认开了FTP、Telnet、Web诊断页面这些东西在正常生产中根本用不到却是攻击者最喜欢的情报源。到设备的系统设置里把这些服务全部关掉。4.6 备份与恢复验证留好最后的底牌安全做得再好也不能保证永远不出事。备份和恢复能力是最后一道防线但恰恰是最多工厂最薄弱的环节。PLC备份有个常见误区很多工程师把源工程文件往网盘一存就认为备份完成了但现场恢复时才发现源工程和设备实际组态不完全一致没有做“上传”操作版本根本对不上。正确的做法是在博途中用“从设备上传”功能把PLC的硬件配置、程序块、工艺数据全部上载到电脑保存成完整的项目文件然后导出归档。三菱PLC在GX Works2里用“读取可编程控制器”功能选择所有模块生成完整备份。DCS备份更要注意。DCS组态包括数据库、I/O配置、控制逻辑图、操作画面、报警设置必须在控制系统离线或处于安全状态下用官方备份工具整包导出。备份文件至少要留存两份一份放现场中控室一份放异地。更重要的是每个季度要抽一台控制器或者一台操作员站做一次恢复演练。我见过最惨的案例就是客户备份了三年真到勒索病毒爆发需要重装时发现备份文件是坏的那一刻真是欲哭无泪。4.7 制定应急预案出事时知道先按哪个按钮应急预案不是写在纸上锁在抽屉里的文件而是要具体到“谁在什么时间做什么”。工控安全事件和火灾、停电一样需要预演。我建议每一条产线都有一份两页纸的SOP就够了。第一页是“第一响应人操作卡”确认事件类型——是操作员站中毒还是控制器被篡改如果是操作员站中毒第一时间切换备用操作站如果控制器异常立即将系统切换至手动模式或者就地控制确保人员安全和设备安全。第二页是“升级路线”现场处理不了打谁电话设备厂家、工控安全服务商、公司IT支持每个人的职责范围必须事先明确。应急演练每年至少做一次不用搞得多大拿一台测试机模拟中毒场景团队的响应速度和配合度就能看出来。不演练永远不知道自己的预案缺了多少细节。5. 常见问题与排查技巧实录5.1 部署防火墙后PLC通信延迟/超时怎么办这是我在项目中遇到最多的反馈。现象是部署工业防火墙后WinCC偶尔报“连接中断”PLC之间通信延迟明显增加。第一排查方向是DPI深度检测带来的延迟。工控协议深度解析是需要计算资源的尤其是S7comm这类复杂协议解析每一个报文的状态机很耗时。可以把日志记录级别从“详细/调试”改成“仅告警”或者只在策略中保留必要的DPI检查项减少处理压力。第二排查方向是默认策略里有无长轮询或广播被拦截。控制网内有大量的广播帧ARP、NetBIOS等一些防火墙默认会阻断或限速导致设备发现和状态心跳失败。适当放行已知安全域内的广播报文但要注意限制源范围。通信问题排查一定要有现场网络工程师配合把抓包工具放在防火墙两侧同时抓才能定位到底是被防火墙丢弃还是本来网络就不稳定。5.2 白名单软件误拦组态软件怎么处理白名单切强制模式后WinCC画面部分功能失效、博途启动报错这类问题十有八九是学习模式没学全。处理方法很简单临时退回学习模式重新启动一次全套的组态软件和HMI运行环境确保程序执行的路径、子进程、插件都进过一遍然后更新基线再切回强制模式。这里有个经验学习模式尽量Cross一个完整生产周期包括开机、正常运行、换型、关机、报表打印这些动作越是边缘功能越容易漏漏了就会误拦。另外建议把白名单客户端的操作权限收归到自动化主管或者指定工程师不要发给操作员。操作员遇到弹窗提醒第一反应是点“允许”等于自己把门敞开。5.3 杀毒软件与工控软件冲突如何规避有些工厂信不过白名单坚持要在操作员站装杀毒软件结果隔三差五出现工控软件运行异常、OPC通信卡顿的问题。我的建议是工控主机不要装个人版杀毒软件。个人版往往包含云查杀、实时监控、行为拦截这些功能和工控软件的资源调度、驱动访问冲突概率极高。非装不可的话要么选择有白名单模式的杀毒软件要么把工控软件安装目录、项目数据库目录、WinCC运行目录全部加入排除列表并关闭实时防护的压缩包监控和行为拦截。另一个更靠谱的方案是双主机冷备。操作员站旁边放一台完全一样的备用机平时不加任何防护只做与控制器的连接测试只运行组态软件。一旦主力机出问题切换备用机顶上。虽然成本翻倍但对连续生产型工厂来说这点钱比非计划停机损失小得多。5.4 系统补丁该不该打、怎么打工控主机长期不打补丁是现实但完全不打等于把系统状态定格在漏洞暴露窗口期。我常用的折中方案是离线补丁库加灰度发布。具体做法找一台和现场配置接近的测试机安装同样的操作系统和工控组态软件在隔离网络里先打一遍补丁运行48小时以上确认组态软件、OPC通信、数据库服务全部正常再把这批补丁文件拷贝到现场选择在计划保养停机窗口统一安装。安装顺序是先装补丁重启再开启组态软件测试通信全部没问题后恢复生产。对于已经在EOL停止支持的老系统比如Windows XP补丁打不了密钥只强调网络隔离和主机白名单双保险中的双保险。5.5 备份无法恢复我踩过的坑备份恢复的问题不真的出一次事永远发现不了。我分享三个典型坑。第一个坑是PLC备份只存了源工程没有上传实物。恢复时发现现场PLC的硬件配置和源工程不一致程序下载进去直接报错。解决方法是备份一定要通过“上传”功能把现场设备的实际组态抓下来而不是直接把电脑里的源工程存档复制一份。第二个坑是存储介质本身老化。U盘放抽屉里三年再拿出来插上去颗粒已经失效了。备份介质要选择工业级SD卡或者移动硬盘并且每年复制校验一次。第三个坑是备份文件没有版本说明。同一个PLC今天改了一版程序明天又改了一版到底最新版在哪台电脑哪个文件夹里没人说得清。我的经验是给每个备份文件命名加上日期、修改人和修改内容例如“涂布线2号PLC_20250115_张三_增加联锁”。恢复过期版本造成的问题比不备份还可怕。做这一圈下来我的体会是工控网络安全这件事真正难的不是技术而是改变现场多年养成的工作习惯。你买再贵的防火墙如果工程师还是随手把U盘插进操作员站一切都白搭。先把密码改掉、把备份做好、把网络分段理清——这三件事加起来成本不高却能挡住绝大多数野路子攻击。最后分享一个小技巧给每台PLC的程序备份命名时加上日期和最后修改人等真到需要恢复的那一天你会庆幸当时多写了这一笔。