1. 工控安全为什么绕不开主机侧加固
1.1 从一次产线异常说起
前两年我参与过一个汽车零部件厂的产线网络梳理项目,事情的起因很简单:一台负责喷涂控制的工程师站,白天运行还算正常,到了夜班偶尔会出现操作界面卡顿、配方文件被改的情况。厂里的运维第一反应是网络问题,查了交换机、查了链路,折腾了快两周没找到根因。后来我们把注意力放回主机本身,才发现这台机器上装了一堆来路不明的软件,U盘插拔记录里还有几个非授权设备,系统补丁停留在三年前的状态,本地管理员账户密码是弱口令,远程桌面端口就那么敞着。
这件事给我最大的触动是:工控安全里,网络边界做得再漂亮,主机侧一旦失守,前面所有投入都等于零。很多人一提工控安全就想到防火墙、隔离网闸、工业审计,这些当然重要,但真正被攻击者当作落脚点的,往往就是那些"看起来不起眼"的操作站、工程师站、历史服务器。它们跑着 Windows 或者 Linux,装着组态软件、数据库、OPC 服务,长期不更新、不加固、不监控,是典型的"软柿子"。
这个连载我打算从主机侧切入,第一篇就聊两件事:主机卫士和安全加固。标题里我特意写了"开源免费无限制使用",不是噱头,而是因为工控现场的现实就是预算紧、设备老、厂商多,能落地的方案必须满足"不花钱、不挑环境、能自己掌控"这三个条件。适合谁看?做工业运维的、搞等保测评的、负责工控网络安全的,以及那些被"主机安全"这四个字搞得一头雾水、不知道从哪下手的朋友。
1.2 主机卫士到底是个什么东西
先把概念说清楚,避免后面混淆。主机卫士这个词在不同语境下含义不太一样,我这里的定义是:部署在工控主机(操作站、工程师站、服务器)上,用于监控主机运行状态、管控外设与进程、记录关键操作、发现异常行为的一类轻量级安全代理软件。它和传统杀毒软件的区别在于,杀毒软件的核心是"特征库匹配病毒",而主机卫士的核心是"行为管控与白名单"。
为什么工控场景更依赖主机卫士而不是杀毒软件?原因很实际。工控软件对系统环境极其敏感,很多组态软件、PLC 编程工具在杀毒软件实时扫描下会出现通信超时、授权失效、甚至直接崩溃。我见过某品牌的编程软件,只要杀毒软件开着实时防护,下载程序到 PLC 的成功率就掉一半。所以现场普遍的做法是"裸奔"或者装个杀毒软件但把实时防护关掉,这等于没有防护。
主机卫士走的是另一条路:默认不扫描、不拦截,只做白名单和审计。系统里允许运行哪些程序、允许哪些进程联网、允许哪些外设接入,全部由管理员预先定义,不在名单里的行为要么阻断要么告警。这种模式对工控软件的干扰极小,同时又能挡住绝大多数"计划外"的东西——比如一个突然冒出来的挖矿程序、一个偷偷拷贝配方文件的 U 盘、一个试图修改系统服务的脚本。
1.3 安全加固不是"装个软件"就完事
再说安全加固。很多人以为加固就是跑个脚本、改几个配置,其实加固的本质是缩小攻击面。一台工控主机从出厂到上线,默认配置里塞满了各种"方便但危险"的东西:默认共享、匿名访问、多余服务、弱口令策略、开放的调试端口。加固就是把这些一个个关掉、收紧、替换掉。
加固和主机卫士是互补关系,不是二选一。加固解决的是"系统本身有多少漏洞可被利用",主机卫士解决的是"系统运行过程中有没有异常行为"。一个管静态,一个管动态。标题里说"一个都不能少",就是这个意思——只加固不监控,你不知道加固有没有被绕过;只监控不加固,你等于在一个四面漏风的房子里装摄像头。
我个人的经验是,加固要分层次做:操作系统层、账户与权限层、服务与端口层、日志与审计层。每一层都有明确的检查项和操作步骤,后面我会逐层拆开讲。这里先给个整体印象,让你知道这件事不是玄学,而是一套可以标准化、可以复现的流程。
2. 开源免费方案怎么选,为什么这么选
2.1 选型的第一原则:能落地比功能全更重要
工控现场选安全工具,和互联网公司选安全工具的逻辑完全不同。互联网公司可以上云、可以买商业产品、可以接受频繁更新,工控现场不行。我总结下来,工控主机安全工具的选型要过四道关:
环境兼容关:能不能在 Windows Server 2008、Windows 7、Windows 10 LTSC、各种国产 Linux 发行版上跑起来。工控现场的操作系统版本跨度极大,很多老设备还在跑已经停止支持的 Windows 版本。
资源占用关:CPU 和内存占用必须低。操作站本身要跑组态软件,资源本来就紧张,安全代理如果吃掉 10% 以上的 CPU,操作员马上就会投诉。
干扰程度关:不能影响工控软件的正常通信和授权。这一条是硬指标,前面说过杀毒软件的问题。
自主可控关:源码可获取、规则可自定义、不依赖外部服务。工控网络很多是物理隔离的,工具如果需要联网更新规则库,基本没法用。
商业主机安全产品功能确实全,但往往卡在第四关和第一关。开源方案的优势就在这里:你可以拿到源码,自己编译适配老系统,自己写规则,不需要联网。代价是你得有一定的动手能力,遇到问题得自己排查。对于有运维团队的企业,这个代价是值得的。
2.2 主机卫士方向的开源选择
主机卫士这个方向,开源方案里比较有代表性的思路是基于白名单的进程与外设管控。我实际用过和评估过的几类方案,可以给大家一个参考框架:
第一类是基于内核模块的拦截型,典型做法是在 Linux 上通过内核模块拦截文件操作、进程创建、网络连接等系统调用,在 Windows 上通过驱动过滤文件系统和注册表操作。这类方案管控力度最强,但开发和维护成本高,对系统版本敏感,内核一升级可能就要重新适配。
第二类是基于系统自带机制的管控型,比如 Linux 上用 auditd、SELinux、AppArmor,Windows 上用 AppLocker、软件限制策略、组策略。这类方案不需要额外装驱动,稳定性好,缺点是配置相对复杂,审计能力偏弱,需要配合日志分析工具。
第三类是轻量级代理型,一个常驻进程,定期采集进程列表、外设状态、网络连接、关键文件哈希,和本地白名单比对,发现异常就记录并告警。这类方案资源占用低、兼容性好,适合作为"第一道防线"快速铺开。
我的建议是组合使用:用系统自带机制做基础管控(第二类),用轻量级代理做监控和审计(第三类),对特别重要的主机再考虑内核级拦截(第一类)。不要指望一个工具解决所有问题。
2.3 安全加固方向的开源选择
安全加固方向,开源生态其实更成熟,因为加固本质上是"配置管理",而配置管理是运维的老本行。几个我常用的方向:
基线检查脚本:CIS Benchmark 有公开的加固基线,覆盖