尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PLC与DCS安全加固实战:从网络分区到设备防护

PLC与DCS安全加固实战:从网络分区到设备防护 搞工控这些年我一直觉得“网络安全”这四个字离我们很远又好像很近。说远是因为PLC、DCS在设计之初压根没考虑过今天会面对网络攻击级别的威胁说近是这几年无论是新闻里的大规模停产事件还是圈里私下流传的“某工厂被勒索病毒搞停线”的故事都在反复提醒我们工控系统已经不是“能不能被攻破”的问题而是“什么时候会出问题”。“普能电控”这个标题把PLC、DCS比作“工业神经”我觉得非常贴切。PLC管逻辑、DCS管过程这条神经一旦被切断、被篡改轻则设备误动作重则整个产线瘫痪甚至引发安全事故。我接触过不少现场项目很多用户对工控安全的认知还停留在“装个杀毒软件”或者“隔离网段”的阶段实际上一套真正能落地的防护方案远比想象中复杂也远比想象中紧迫。这篇文章我打算从工控系统为什么脆弱、攻击者是怎么打进来的、以及我们手头到底能做哪些防护三个层面展开重点聊PLC和DCS这两类设备的自我防护实操希望给正在做自动化、做运维、做安全的同行一点实际参考。1. 为什么PLC、DCS会成为攻击目标工控安全的特殊性1.1 工控系统与传统IT网络到底差在哪要理解PLC、DCS为什么容易被打得先明白工控网络和办公网络这两个世界的差异。IT系统强调“保密性、完整性、可用性”而且往往把保密性放在第一位数据不能泄密是底线OT系统恰恰相反最核心的目标是“可用性”生产线不能停工艺参数不能乱安全联锁必须可靠至于数据被谁看了一眼很多时候反而是次要矛盾。这个优先级差异直接决定了安全策略的不同。办公网的服务器坏了可以重启大不了宕机几分钟控制网里的PLC如果因为安全软件误杀、补丁冲突或者误扫描导致CPU停跳那就是产线事故每分钟损失可能都是以万计。所以很多IT领域成熟的安全手段放到工控现场反而成了风险源。另一个关键区别是设备生命周期。办公电脑三五年一换工控设备动不动就是十年、十五年的服役期。我见过不少现场还在用Windows XP系统的工程师站甚至还有跑着早期版本组态软件的操作员站系统停止更新、补丁打不上、漏洞一堆却因为“换个系统会影响稳定”硬撑了十几年。这种设备放在网络边界上等于大门敞开。1.2 PLC、DCS自身的脆弱点到底在哪PLC和DCS本身的安全脆弱性可以从硬件、协议、固件、应用四个层面来看。硬件层面最典型的是调试接口暴露。很多PLC自带串口、以太网口有的还留着JTAG调试接口如果物理安全没做好任何人靠近机柜插根线就能连上。更常见的是现场交换机端口没有做管控巡检人员随便拿台笔记本电脑往网口上一插就可能碰到生产网络。协议层面可以说是重灾区。S7comm、Modbus TCP、OMRON FINS、三菱MC协议这些工控协议在设计时基本没考虑加密和认证。Modbus TCP至今还是一个明文的请求-响应协议攻击者只要在网络里抓到报文就能解析出寄存器地址和数据甚至直接伪造请求去写线圈、改设定值。S7comm虽然有一层会话机制但早期版本同样没有强认证很多利用工具就是冲着协议漏洞去的。固件层面PLC的固件更新机制本身也缺乏安全防护部分设备的固件没有签名校验攻击者拿到固件文件后可以逆向分析、植入后门再通过在线升级或本地刷写的方式把恶意固件灌进设备。这个过程在真实攻击里并不罕见只是普通运维人员很难察觉。应用层面则是逻辑炸弹和组态篡改。攻击者不一定需要拿下PLC的完整控制权只要能在组态软件里偷偷改一个比较器的阈值、改一条定时器的预设值就可能让一个罐子过充、让一个反应釜超温。这类攻击最难发现因为程序逻辑看起来“没变”但实际参数已经被改了。2. 从警报拉响到事件复盘攻击是怎么一步步打进工控网的2.1 典型攻击链条拆解边界突破、横向渗透、指令下发很多甲方客户问我最多的问题就是攻击者到底是怎么进来的我拆过不少安全事件总结下来绝大多数工控攻击都走了一条“边界突破 → 横向扩散 → 指令下发”的三步链路每一环都比想象中更容易实现。边界突破最常见的入口是IT网络。很多工厂的生产网和管理网虽然做了隔离但出于管理需要又开了很多口子。比如运维人员为了远程查数在防火墙上映射了某个工程师站的RDP端口比如生产管理系统需要读取DCS数据中间通过OPC服务器转发而OPC服务器又同时连着管理网。这些连接点一旦被突破攻击者就等于踩上了工控网的门槛。横向渗透阶段攻击者会在生产网里四处移动。这里不得不提一个残酷的现实工控网络内部几乎没有任何检测手段。办公网好歹还有行为管理、安全审计生产网里的交换机常常是傻瓜式的别说流量镜像就连VLAN都懒得划分。攻击者在里面抓包、扫描、试弱口令很多时候完全是“无人看管”的状态。到了指令下发阶段攻击者已经摸清了PLC、DCS的IP地址和协议规则。接下来他不需要利用什么高深漏洞直接用合法指令去写寄存器即可。我做过一个工厂的安全评估测试组通过一个暴露的维护终端成功给一条包装线的PLC写入了一段循环计时程序导致机械臂每30秒暂停一次。全程没有触发任何报警因为从PLC的角度看这些操作和正规工程师用组态软件下装程序没有本质区别。2.2 几个值得细看的真实场景化事故复盘第一个场景是“勒索病毒搭便车”。某制造企业的IT网中了勒索病毒病毒通过文件共享和未打补丁的服务器漏洞横向传播。本来生产网和办公网之间有防火墙结果IT为了上MES系统把一个具备内网共享权限的服务器同时接在了两张网上病毒顺着这台服务器直接进了生产网。结果就是操作员站文件被加密部分PLC的组态工程文件被破坏整条产线停了三天。复盘时发现防火墙策略里明确只允许特定端口和IP但实际配置早就被改成了允许所有而这一改没有任何记录。第二个场景是“供应链后门”。一家做食品加工的企业从设备厂家那边接收了一个升级包准备对产线上的十几台PLC做固件升级。结果升级之后部分PLC出现间歇性通信中断而且总是在凌晨三点左右出现白天生产正常。后来安全团队抓包发现这些PLC在特定时间会主动向一个外网IP发起连接。究其原因是厂家的升级包本身被污染固件里被塞入了后门程序。这个事件给整个行业敲了一记警钟供应链的可信管理可能比边界防护还重要。第三个场景是“内部误操作放大器”。还有一类事件虽然不是恶意攻击但破坏力不亚于攻击。某化工厂的DCS系统里一位操作员在交接班时点错了画面把一个联锁条件误改成了旁路结果下一批物料进入时温度失控安全阀起跳整个装置紧急停车。事后排查发现DCS操作站根本没有做操作审计谁改了什么、什么时候改的查无记录。这也说明一个问题防护并不仅仅是防外部黑客也要防内部的“无意识伤害”权限管理和操作审计一样都不能少。3. 一套能落地的工控安全防护架构聊完了风险重点进入实操层面。我在多个现场推过安全整改最深的体会是工控安全不能照搬IT的安全模型必须从网络边界、设备基线、运维管理三个维度同时下手形成一套组合拳。缺了任何一块都可能留下致命的短板。3.1 网络分区与纵深防御先把边界画清楚网络分区是所有工控安全工作的地基。核心思想就一句话“不同信任级别的设备和流量必须放在不同的网络区域里。”对大多数中小规模的产线我建议至少划分出三个区域管理网IT、生产管理层MES/服务器区和现场控制层PLC/DCS/IO站。管理网与生产管理层之间放工业防火墙生产管理层与现场控制层之间再放一层防火墙或者工业网闸并且每层之间只放行明确授权的协议和端口。在具体操作上有几点容易被忽视。第一VLAN划分要跟着物理端口走不能只靠逻辑配置否则一旦交换机配置错误整个隔离就失效了。第二工业防火墙的规则要基于白名单思路默认拒绝所有流量然后逐条放行经过审核的通信关系。很多厂商默认策略是允许全部现场图省事就不改等于白装。第三现场设备的网关、DNS等参数要统一管理避免设备通过不安全的链路主动发起外连。如果你有条件还可以在关键链路加一台具备镜像端口的工业交换机把流量引给旁路部署的IDS入侵检测系统。注意探针的部署要尽量用物理镜像而非串联避免检测设备本身成为单点故障。我见过有项目把安全设备直接串在PLC与HMI之间结果安全设备一重启操作员站全部黑屏这就是没有做好高可用设计。3.2 主机加固与安全配置基线给工程师站和操作员站上锁设备自身的安全配置是整个防护里见效最快、成本最低的环节。我整理过一套适用于大部分现场的“主机安全基线”不需要额外采购软件只要动手配置就能明显提升安全性。工程师站和操作员站的基线配置核心包括移除或禁用不必要的USB口和光驱设置强密码策略并在BIOS里禁止未授权启动关闭不必要的Windows服务和共享安装白名单软件如果预算允许或者至少使用系统自带的AppLocker限制可执行程序禁止操作员站访问互联网DNS指向内部服务器部署统一补丁管理至少保证操作系统安全更新不落伍。对于PLC和DCS控制器本身基线配置同样重要。以西门子S7-1200/1500为例CPU属性里可以启用“访问保护”和“专有技术保护”设置不同等级的读/写/调试权限防止未经授权的人员上传/下载程序和在线修改。S7-1500还支持证书认证和TLS加密通信新项目建议直接启用。三菱FX5U和Q系列也都有类似的功能可以在PLC参数里设置远程密码和IP过滤。这里要特别提醒一件事开启PLC访问保护之后一定要把密码妥善归档并且安排至少两个人知道。因为一旦工程师离职、密码丢失很多PLC只能通过恢复出厂设置的方式重新破解访问权限这个操作可能导致程序丢失、组态信息被清空比安全事件本身还麻烦。我在项目上吃过亏后来给所有涉及设备密码的环节都加了“密码信封”制度妥善封存到项目档案柜里。3.3 安全运维与生命周期管理别让设备裸奔十年很多企业买防火墙舍得花钱却在补丁管理、账号管理、配置管理这些日常运维上做得一塌糊涂。安全不是买几台设备装上去就完事而是一个持续运营的过程。补丁管理在工控现场一直是个两难问题不打补丁有漏洞风险打了补丁可能引发生产系统异常。我的建议是所有补丁必须先在测试环境验证验证通过后再在生产窗口期分批部署。就算不能做到全量补丁至少也要对漏洞暴露面较大的设备比如工程师站、OPC服务器、对外接口机做重点修补。针对PLC/DCS的固件升级更要谨慎尽量选大修、停产窗口执行并且准备好回退方案。账号管理方面工控系统的账号共享问题极为普遍。操作员站的超级管理员密码全班共享DCS组态账号也是人手一个一旦人员离职或者发生纠纷根本无法追溯责任。建议建立账号申请、审批、回收流程并周期性复核账号权限重点清理长期不用的“僵尸账号”和员工离职后的残留账号。配置管理这块很多现场连最基础的“定期备份组态工程文件”都做不到。PLC程序和DCS组态是现场最宝贵的“知识产权”更是恢复生产的关键。我强烈建议至少每周备份一次组态文件异机存储并留存至少一个月的版本。一旦发生恶意篡改、误操作或者硬件故障这些备份就是你最后的救命稻草。4. PLC、DCS安全加固的实操细节4.1 以西门子、三菱为例PLC访问控制这样配由于PLC品牌和型号众多我不可能面面俱到这里挑两个国内使用率最高的品牌——西门子和三菱把关键加固步骤拆出来作为示例其他品牌的思路是相通的。先看西门子S7-1200/1500。在TIA Portal中选中CPU进入“防护与安全”属性页可以设置访问等级。默认情况下访问等级通常是“完全访问权无保护”必须改成“拒绝完全访问权”或更高级别的保护。启用保护后在线下载、在线修改、上传程序等操作会要求输入密码密码要设置强口令并定期更换。同时建议开启“仅通过安全连接通信”选项这会强制CPU与软件之间使用TLS加密通信虽然会对通信效率有一定影响但对于不追求微秒级响应的应用场景这个代价是值得的。在以太网通信层面可以在“允许的通讯伙伴”里配置只允许工程师站的IP访问CPU编程端口从网络层面阻断其他设备对PLC的编程访问。再看三菱FX5U。在GX Works3中通过“CPU参数 → 远程访问密码设置”可以启用远程密码保护密码长度支持4位到8位建议选8位。同时可以设置“仅允许通过CPU模块上的开关允许远程访问”物理上增加一道保险。三菱Q系列和R系列还支持IP过滤功能在以太网端口参数里白名单化允许访问的IP地址。实际项目中我还会把RM远程维护功能关闭避免通过调制解调器或远程模块直连CPU。补充一点PLC做完了密码保护要顺手检查一下HMI和上位机软件的连接配置。有些现场给PLC设置了强密码但HMI组态里存的是明文密码或者上位机连接PLC的账户依然用弱口令那前面做的一切都白费。4.2 DCS侧安全策略工艺联锁与逻辑保护的“最后防线”DCS和PLC在防护思路上略有差异。DCS是一个完整的分布式系统包含工程师站、操作员站、历史站、控制站、通信网络等众多组件安全防护更需要体系化。同时DCS承载了大量工艺联锁和安全保护逻辑这些逻辑往往是工厂安全运行的“最后一道防线”因此针对DCS的防护必须考虑“逻辑完整性保护”。第一DCS组态修改必须走变更管理流程。任何逻辑变更都要经过工艺、设备、安全工程师的联合评审修改后的组态要保留详细版本记录并且在下装前做好仿真测试。现在的DCS系统比如横河CENTUM、霍尼韦尔Experion、中控ECS、和利时DCS等普遍支持组态版本对比功能可以快速查看修改了哪个功能块、哪个参数。第二充分利用DCS自带的安全功能。很多DCS都有操作权限分级、操作记录审计、电子签名等功能不要嫌麻烦就不开。权限分级要做到“操作员只能操作工程师才能组态管理员才能改配置”审计记录要定期导出归档保存期限建议不低于一年。我曾经处理过一个事故就是靠操作审计记录定位到了误操作的具体人员和时间段否则整个班组都说不清楚情况。第三针对关键联锁逻辑考虑增加独立的“软保护”或冗余逻辑。比如把一个液位高高联锁除了在DCS里做逻辑判断还可以在独立的SIS安全仪表系统里做硬联锁。这样即使DCS逻辑被篡改或功能块被恶意旁路SIS仍然能独立完成保护动作实现真正的纵深防御。4.3 仿真与调试环境的安全细节没产线练手也别忘了隔离搞工控的人都知道真机调试的风险高、窗口期短很多团队会搭仿真环境做程序验证和人员培训。仿真环境本身是好事但它同样存在安全隐患而且容易被忽视。仿真软件跑在普通电脑上最容易踩的坑就是网络模式。比如很多人用VMware跑博途、GX Works、CX-One这些软件想跟实体PLC通信经常遇到“连不上”的问题。这里我直接给结论VMware虚拟机和宿主机之间的网络模式通常要选“桥接模式Bridge”并且把虚拟机的IP地址设置成与PLC同一个网段。很多初学者默认用NAT模式导致虚拟机可以上外网但和PLC之间隔着一层地址转换组态软件自然发现不了PLC。另一个被忽视的地方是仿真软件本身也可能成为攻击载体。仿真主机如果接入办公网又不做防护一旦被入侵攻击者可以利用合法组态软件作为跳板向真实PLC发起组态操作。我的建议是仿真环境尽量做成独立网段不要和生产网直接互通仿真结束后及时断网、关闭软件仿真机上不要存储生产环境的账号密码。如果你做的是DCS仿真更要注意“仿真授权”和“真实授权”不能混用。有些仿真授权会把控制站模拟成“软控制站”一旦连到真实网络可能出现地址冲突或者误下装的风险。稳妥的做法是在仿真服务器和真实控制网络之间加一道物理断开或网闸隔离从源头上杜绝误操作。5. 常见问题排查与避坑实录5.1 工控安全整改中的典型问题速查表这几年走访过不少现场也帮客户处理过各种“上了安全设备之后的新问题”。我把大家最常遇到的几个情况和排查思路整理成了速查表供参考。现象可能原因排查思路启用PLC访问保护后HMI无法读写数据HMI的连接账户没有配置正确或组态软件里仍用默认密码检查HMI连接参数里的用户权限重新输入密码必要时联系PLC厂家开放测试通道工业防火墙上线后Modbus TCP通信时断时续策略放行了TCP端口但深度包检测误判了异常报文查看防火墙日志确认是策略丢弃还是误报调整协议白名单或升级规则库开启TLS加密通信后PLC在线监控明显变慢CPU与组态软件之间额外产生加密握手和传输开销对实时性要求高的监控链路可考虑仅对下载/上传操作启用加密对运行数据保持明文权衡后取舍杀毒软件扫描导致工程师站CPU占用100%组态软件崩溃杀毒软件与组态软件不兼容或误报核心进程在杀毒软件中临时白名单组态软件安装目录并在测试环境验证后再部署到生产机加固后无法从远程工程师站访问车间PLC远程访问链路的IP地址不在PLC/IP白名单内确认远程链路实际的出口IP将固定IP加入白名单临时访问结束后及时清理组态文件被加密疑似中了勒索病毒末端主机暴露于外网或移动存储介质带入病毒断开生产网络用备份恢复组态检查所有USB口和网络外联记录5.2 这些坑我替你们踩过了几条独家经验经验一安全策略上线前一定要做“影响性测试”。我见过一个现场安全团队把IT域的“全局杀毒全盘扫描”策略直接搬到DCS操作站上结果扫描过程中杀软把历史库当普通文件隔离了操作员画面上的趋势曲线全部消失。后来我们改成了“只监控不扫描排除关键目录”的策略才恢复正常。记住工控环境里的每一个策略变更都必须在窗口期内做充分验证宁慢勿快。经验二工控协议的白名单比漏洞扫描更有用。一开始我也迷信漏洞扫描后来发现扫描器在PLC上跑轻则占CPU重则引发通信看门狗重启风险不小。更实用的做法是梳理“谁允许访问谁、允许用什么协议、允许访问哪些寄存器区域”把这些规则维护好比扫出一堆CVE更贴近真实防护需求。PLC不需要被“扫描”但需要被“管控”。经验三物理安全是安全体系的“第一块木板”。很多网络防护做得挺专业的现场控制机柜门却常年不锁机柜里挂着串口调试线甚至能看到PLC编程电缆直接插在上面。再强的防火墙也拦不住一个带着笔记本电脑走进车间的外部人员。我建议至少做到控制机柜全部上锁钥匙集中管理进入控制室的访客有陪同、有登记调试口、备用网口贴封条并定期检查。经验四不要把“安全的噱头”当成“安全的效果”。市面上安全产品很多但真正有效的是匹配现场情况、可运营的方案。买一台工业防火墙容易难的是持续维护策略、更新规则、响应事件、优化白名单。公司必须为工控安全配备固定的负责人或团队这件事不是买完设备就结束的而是从设备上线第一天就开始的马拉松。经验五备份可恢复能力比备份本身更重要。很多人以为做了备份就万事大吉但真到恢复的时候才发现备份文件损坏、备份版本不是最新的、恢复流程没人会操作。我强烈建议每半年做一次“恢复演练”在仿真环境或备用设备上实际跑一遍组态恢复的完整流程确保备份不是“心理安慰”。我见过太多企业出事之后发现三年前的备份还在但最近的组态改动全丢了损失只能用惨重来形容。写在最后的几句心里话做了这么多年工控项目我最大的感受是工控安全不是一道“要不要做”的选择题而是一道“怎么做才能不踩坑”的必答题。PLC、DCS这些工业神经每天都在替我们扛着生产线的压力和风险而它们自身的防护能力却常常因为历史原因、成本压力和技术偏见被放在最后一位。我也理解很多同行的顾虑怕安全措施影响生产、怕预算批不下来、怕自己背锅。但换个角度想等到真的发生一起因为网络攻击导致停产的事件损失就不是一台安全设备的成本能够衡量的了。我个人的建议是从最小可行方案做起——今天给关键的PLC加上远程密码明天把网络分区画清楚下周把组态备份规则立起来。用最小的成本先把最基础的那几块短板补上。这一步一步积累起来就是你自己那套“工业神经”最结实的防护壳。希望这篇实操向的内容能给大家在工控安全的路上少走一点弯路。
返回列表