"重启就好了"是运维圈最古老的一句话。瑞典皇家理工学院(KTH)的研究人员把它当真了,而且是用在关键基础设施(ICS/OT)的入侵响应上:他们训练了一个自主防御 Agent,检测到入侵进展后,直接复位主机、轮换凭证、换掉 IP,靠"重启"来打断攻击者的立足点。论文标题就叫 Turn it off and on again, but for critical infrastructure。读完全文你会发现,这套方案真正值得复用的不是强化学习,而是它那套观测模型和"信念追踪"。我先把结论摆出来:一个只靠数数据包、只会做四类复位动作的 Agent,防御效果能逼近"上帝视角"的基线;但它逼近基线的代价,是悄悄把攻击者的行为模式内置进了模型。

一、ICS 入侵响应,为什么不能照搬 IT 的玩法

关键基础设施的网络是"可用性压倒一切"的世界。一台跑着水处理、配电、炼化流程的 PLC,你不能像给容器打补丁那样随手重镜像:一次误停可能直接打断工业生产。所以 OT 圈对"响应"这件事极其保守,宁可隔离、观察,也不敢贸然动生产侧。

这就带来一个尴尬的现实:安全团队发现了入侵,却常常不知道该不该动手、动哪个。已有的自动化入侵响应研究,绝大多数是强化学习(RL)那套,但它们默认一个根本不成立的假设——Agent 能直接观测到系统状态,甚至能看到攻击者的动作。真实环境里你只能看到流量、日志这类间接信号。少数考虑了"部分可观测"的论文,也几乎没人说清楚自己的观测模型是怎么来的、依据是什么。

KTH 这篇工作的价值,就在于把"观测"这件事从假设里拎出来,做成了实测。

二、仿真环境与观测模型:14 天攻击、4 万个采样周期

他们搭了一个分区(segment)的工业网络容器仿真环境,跑了 14 天,期间反复对这个环境发起攻击,用捕获的流量训练防御 Agent。

观测模型的设计很朴素。他们把仿真切分成 30 秒一个时间周期,一共采了 4 万个周期的流量。每个周期里,Agent 只采集 6 项数据:跨网段的传输量,以及与每台设备双向交互的数据包数量。没有深度包检测,没有 IDS 告警,没有主机日志,就是数包。

这个"只数包"的取舍是被数据量逼出来的。论文里算过一笔账:如果要把流量随全系统状态的变化规律完整建模,大概需要 1 亿次测量,而他们只有 4 万个周期。所以退而求其次,只建模"流量如何随攻击者动作变化"这一条。数据是真的,但模型能撑起的防御效果,到不了理论计算的理想上限。

仿真拓扑也不复杂:3 台监控主机、2 台 PLC、2 个水箱。两台 HMI 跑 HTTP 且用弱口令,工程师工作站开着 SSH、Telnet、SMB,除了弱口令,还吃一个 CVE-2017-7494。这个洞值得单独说一句:Samba 的 is_known_pipename() 在处理命名管道请求时,会从本机文件系统加载一个和管道名对应的共享库,攻击者只要先往可写共享里传一个恶意的 .so,再用构造的管道名触发加载,就能以 Samba 进程(通常是 root)的权限执行任意代码。CVE-2017-7494 影响 Samba 3.5.0 到 4.6.3,2017 年 5 月披露,因为和 WannaCry 同期爆发,圈里叫它 SambaCry,披露当天就进了 Metasploit 模块。说白了,这是一个故意留满破绽的靶场,用来稳定复现"扫描—利用—横向"的入侵过程。

三、四类响应动作,核心就一个字:复位

Agent 的响应动作只有四类:

  1. 什么都不做;
  2. 复位 3 台监控主机中的任意 1 台;
  3. 复位 2 个水箱控制进程中的任意 1 个;
  4. 一次性复位监控子网和控制子网里的所有主机。

这里"复位"不是简单的重启。论文定义的复位有三个效果:重启目标对象、更新它的访问凭证、更换它对应的 IP 地址。这三件事合起来,本质是同时掐断攻击者手里的三条线索:活跃会话(重启杀了)、已窃取的凭据(轮换作废了)、以及内网里的寻址目标(换 IP 让横向移动的下一步扑空)。

代价是明摆着的:复位一个运行中的控制进程,生产侧会短暂中断。所以 Agent 的决策问题其实是一道风险加权题——值不值得为打断入侵,付一次生产中断的代价。这套方案假设生产侧能承受这种短中断,这本身就是 OT 里最需要谨慎对待的前提。

四、信念追踪:500 个状态假设,压缩进一个策略

他们一共训练了三款 Agent。表现最好的那款,内部持续维护 500 组网络状态假设,每个时间间隔更新一次,再把压缩后的信息喂给决策策略模块。另外两款直接把原始观测历史塞给策略,反而打不过它。最优 Agent 的防御效果,接近那个拥有全系统状态可见权限的基线 Agent。

这里有个反直觉的细节:如果给策略模块喂 4 个时间间隔的历史而不是 1 个,表现反而下降。作者没给出太漂亮的解释,但这类现象在部分可观测的 RL 里并不罕见——更长的历史窗口引入了更多噪声和过拟合风险,1 个周期的即时信号反而最干净。换句话说,"看得更久"不一定"判断更准"。

而这套"500 个假设"的状态推断,就是论文最核心的机制:信念追踪(belief tracking)。Agent 不追求猜中唯一真相,而是维护一整个"系统现在处于什么状态"的概率分布,每个周期用新的流量观测去更新它,再把分布压缩成策略能用的输入。

五、诚实的局限:攻击者行为被"内置"了

论文最让人信服的地方,是它把自己的坑也写了出来。

那个接近基线的 Agent,更新状态信念时要依赖一个系统演化模型,而这个模型里内置了攻击者的行为模式。翻译过来就是:表现最好的 Agent,实际上是用"预先掌握的攻击者行为特征"在做防御。它知道攻击者下一步大概会干嘛,因为它训练时见过的攻击就是这套路数。换一种攻击手法、换一套网络拓扑,它还能不能接近基线,论文明确说没验证。

这也是我对这类"自主防御"研究最警惕的一点:在仿真里刷出来的分数,很大程度取决于你预设的攻击者有多"配合"。CVE-2017-7494 加一堆弱口令的靶场,训练出来的策略对"这个靶场里的攻击"很强,对真实世界里的未知攻击,泛化能力是个问号。

六、可复用的不是 RL,是信念追踪

抛开强化学习,这篇论文真正能直接搬走的是一个更朴素的思路:持续维护每台资产上的"入侵进展"概率分布。

入侵阶段从"未被发现"开始,到"被扫描""被利用""被探查"逐级递进,每一级对应不同的潜在损失,再做风险加权。这个模型不挑环境——学习型 Agent 用它,论文里一个更简单的阈值基线方案也用它。哪怕你一行 RL 都不碰,也可以搭一个控制台,直接展示每台主机"被漏洞利用的概率"现在是多少。

这和 SOC 里"告警一条条弹"的模型是两套东西。告警是离散的、被动的;信念追踪是连续的、关于"攻击者走到了哪一步"的估计。后者天然适合做自动响应的输入,因为你要在"还没被利用"和"已经被利用"之间,划一条触发复位的线。

最小实现可以这么写。给每台主机维护一个状态向量 P = [未发现, 被扫描, 被利用, 被探查],每个周期用观测 o 做一次贝叶斯更新 P ← P ∘ L(o),其中 L(o) 是似然:观测到对 445 端口的连接尝试,就把"被扫描"的似然调高;观测到 SMB 命名管道特征,就把"被利用"的似然调高。选动作就看加权风险,对每个候选动作 a 算 E[损失] = Σ P(stage) × cost(stage, a),选风险最低、且不越过运营红线的那一个。这样"复位"不是拍脑袋,而是从概率分布里算出来的。

我的做法

如果要在自己的环境里落一个最小版本,我会这么拆:

第一层是观测。用 NetFlow / sFlow 的字节数和流数就够了,别一上来就上全量 DPI。每台资产记"入向、出向、跨网段"三个计数,按 30 秒或 1 分钟聚合,这就是 KTH 那 6 项观测的减配版。抓流数用 nfdump 一行就够:

nfdump -R /var/cache/nfdump -s srcip/flows -c 50
# 或者用 tshark 按主机统计包数,看入向/出向
tshark -r capture.pcap -q -z io,phs

真正要盯的是跨网段跳变。正常生产里监控子网和控制子网之间的通信是有规律的,一旦某台监控主机突然开始向控制子网的 PLC 高频发包,这就是"被利用后横向移动"的强信号。

第二层是信念。给每台主机维护一个阶段概率,用简单的规则或一个小分类器去更新:出现对已知漏洞端口的扫描流量,就把"被扫描"概率上调;出现 SMB 命名管道之类的利用特征,就把"被利用"概率上调。关键不是算得多准,而是让概率分布持续、平滑地反映攻击进展。

第三层才是动作。复位、隔离、轮换凭证,每类动作标清楚代价,把"生产中断"当一等公民放进决策,而不是事后补救。

最后是那条红线:运营安全。OT 里自动响应的动作空间必须被白名单约束死,论文也明确把"运营安全要求会限制防御策略的操作边界"写进了后续研究。任何自动复位方案,上线前都得先回答一个问题——这个动作在生产最忙的时候执行,会不会出事。

研究团队已经公开了实现代码,计划在工业测试床上继续验证。我很期待他们把"换一种攻击手法之后效果掉多少"这个数字补上,那才是这套方案能不能出实验室的真正判据。

⚠️ 网络安全免责声明

本文内容仅供技术研究与安全学习之用。文中描述的入侵响应机制、攻击阶段划分和代码思路均基于公开披露的学术研究,旨在帮助开发者理解工业控制系统的防御原理、提升安全意识和防御能力。

请勿将本文所述技术用于任何未经授权的渗透测试或非法用途。任何因滥用本文信息而造成的法律后果,由使用者自行承担,与本文作者无关。

如发现系统安全漏洞,请通过合法渠道向相关厂商或平台报告,共同维护网络安全生态。