2021年,工控某汽车零部件厂的软件焊装车间停了四个小时。不是漏洞设备坏了,不是工控断电,是软件PLC里的一段逻辑被人改了——准确地说,是漏洞被一段恶意代码覆盖了。攻击者没碰物理设备一根线,工控从办公网跳进工控网,软件利用的漏洞是一款组态软件的历史漏洞。产线停摆,工控直接损失按分钟算。软件这种事听起来像电影,漏洞但它在国内至少发生过十几起了,工控只是软件大部分没上新闻。
工控软件的漏洞安全问题跟普通IT软件完全不是一个概念。IT系统崩了,大不了重启,数据丢了还有备份。工控软件崩了,背后连着的是阀门、电机、机械臂。你没法跟一个正在运行的高炉说“稍等,我打个补丁”。
很多工控软件是上世纪九十年代写的。那时候网络隔离是物理层面的——工控网跟外网根本不连。开发者压根没考虑过安全认证、加密传输这些东西。代码能跑就行,稳定性排第一。西门子的WinCC、施耐德的Wonderware、GE的iFIX,早期版本里硬编码密码、明文通信、缓冲区溢出,一抓一大把。
问题在于这些软件的生命周期特别长。一套DCS系统用十五年很正常,有些化工厂还在跑Windows XP。你让厂商怎么办?重新写一套?成本谁出?于是就是打补丁、打补丁、再打补丁。补丁本身还可能引入新问题。我见过一个案例,某品牌SCADA打完补丁后,历史数据查询功能直接挂了,运维人员查了两天才定位到是补丁改了数据库连接池的配置。
很多人以为工控网是隔离的,其实“隔离”这个词在工程现场经常是个笑话。我见过用双网卡主机同时连办公网和工控网的,见过工程师为了远程调试方便在防火墙上开全通规则的,还见过USB口随便插的。2023年某水务集团的勒索软件事件,溯源发现攻击入口是一个运维人员用个人笔记本连了工控交换机。
更麻烦的是供应链。工控软件本身可能嵌入了第三方组件,比如某个老版本的OpenSSL,比如一个没人维护的通信库。你用的组态软件没问题,但它调用的DLL里有洞。这种漏洞你扫都扫不出来,因为资产清单里根本没登记。
IT安全那套东西搬到工控环境经常水土不服。你装个杀毒软件试试?工控机CPU资源本来就紧张,杀毒软件一跑,扫描周期直接超标,产线节拍全乱。你做个漏洞扫描?很多工控协议对异常报文零容忍,扫一下PLC就宕机了。某电厂做过一次渗透测试,扫描器刚发几个包,一台S7-300就切到STOP模式了。后来他们规定所有测试必须在停机检修窗口做,一年就那么几次机会。
流量分析相对安全一些,但工控协议五花八门。Modbus、Profinet、EtherNet/IP、OPC UA,每种协议的正常行为基线都不一样。你得先学明白工艺,知道哪些读写操作是合理的,哪些是异常的。一个工程师半夜远程改个参数,在流量上看跟攻击者改参数没区别。
指望工控软件厂商把漏洞修干净,不现实。西门子、罗克韦尔这些大厂已经在改进了,但存量系统太多。务实的方向是分层:网络层做微隔离,把工控网切成更小的域,限制横向移动;主机层用白名单代替黑名单,只允许已知进程运行;管理上把远程访问收口,别让工程师随便插网线。
还有个容易被忽略的点:日志。很多工控软件默认不开审计日志,或者开了也没人看。出了事想溯源,发现啥记录都没有。我在一个项目里建议客户把PLC的编程软件操作日志单独存一份,他们觉得没必要。后来有人改了一段逻辑导致批量废品,查了三天才找到是谁干的——如果当时有日志,十分钟就定位了。
工控安全这事,说到底是个成本博弈。不出事的时候,安全投入永远是最后考虑的。出了事,又开始疯狂补。这个循环什么时候能打破,取决于有多少人真正把OT安全和IT安全当成两回事来看。