上周老张厂里的流水线突然停了半小时,排查半天发现不是电机故障,也不是传感器失灵,而是上位机被远程改了控制逻辑——一台没打补丁的WinCC服务器,暴露在DMZ区,连SSH都开着密码是admin123。
工控系统不是“与世隔绝”的孤岛
很多人觉得DCS、SCADA、PLC这些设备跑在内网,物理隔离就万事大吉。现实是:产线要和ERP传订单数据,工程师用U盘拷参数,第三方维保远程连HMI调试……这些动作,早把“隔离墙”凿出了十来个洞。
某汽车零部件厂曾因一台西门子S7-1200 PLC未禁用PUT/GET功能,被内部员工误传的恶意脚本触发了循环写入,导致气缸反复急停,气动阀当场报废三套。
几招实操型加固,今天就能动手
① 关掉默认服务:大多数工控设备出厂自带FTP、Telnet、SNMPv1/2c,不关等于挂个“欢迎光临”牌子。比如罗克韦尔ControlLogix控制器,进RSLogix 5000 → Controller Properties → Communication → 取消勾选“Enable Telnet Server”。
② 改掉万能密码:HMI画面里写着“用户名:admin,密码:123456”?赶紧删。施耐德Unity Pro项目中,密码策略可在“Project → Security Settings”里启用强口令+登录失败锁定。
③ 网络层做最小化分段:别让操作员站和PLC在同一VLAN。建议划三个网段:
– 控制层(PLC/RTU):仅允许特定IP访问端口44818(CIP)、102(S7comm);
– 监控层(HMI/SCADA):只开放OPC UA 4840端口,且双向证书认证;
– 管理层(工程师站):通过跳板机SSH接入,禁用root直连。
一个真实可用的防火墙规则片段(以iptables为例)
-A INPUT -s 192.168.10.0/24 -d 192.168.20.5 -p tcp --dport 44818 -j ACCEPT
-A INPUT -s 192.168.20.0/24 -d 192.168.20.5 -p tcp --dport 4840 -m state --state NEW -j ACCEPT
-A INPUT -d 192.168.20.5 -j DROP④ 固件和软件定期“体检”:西门子官网每月发S7-1500固件更新包,别堆着不刷;WinCC OA升级前,先在虚拟机里跑2小时压力测试——上次有厂因为跳过测试,新版本把历史数据归档路径全改成Unicode,旧脚本批量读取直接报错。
最后提醒一句:别迷信“国产替代”就等于“天然免疫”。某国产HMI系统曾因Web界面JS里硬编码了调试接口URL,攻击者输入http://ip/debug_api?cmd=reboot,整台设备就重启了。