多出来的 1 个参数,让 850 万台 Windows 蓝屏:CrowdStrike 事故复盘
配图:AI 生成的概念示意图,非真实现场、产品界面或实验数据。
TL;DR:2024 年 7 月 19 日,CrowdStrike 推送的一次 Falcon 内容更新(Channel File 291)让大量 Windows 主机蓝屏。官方根因分析称:模板定义了 21 个输入字段,而传感器侧只提供 20 个,导致越界读取内存。微软估计受影响设备约 850 万台。这是 CrowdStrike 自己公布的结论,并经第三方审查,不是外界猜测。
这是 2024 年的旧事,不是今天的新闻。
事情发生在 2024 年 7 月 19 日。CrowdStrike 的 Falcon 端点安全软件运行在 Windows 内核层,除了随版本发布的传感器代码,还会通过「快速响应内容」(Rapid Response Content)不定期下发检测规则,用来应对新出现的攻击手法。Channel File 291 就是其中一类规则文件,负责检测命名管道(IPC)被滥用的行为。
问题出在两处不一致。官方报告称,模板类型定义了 21 个输入字段,但传感器里调用内容解释器的代码只提供 20 个值。此前的规则实例对第 21 个字段都用通配符匹配,所以这个差异一直没暴露。7 月 19 日部署的新实例里,有一个第一次对第 21 个字段使用了非通配符的匹配条件。解释器于是去读一个不存在的第 21 个值,发生越界内存读取。由于代码运行在内核态,结果就是整机蓝屏。
内容验证器(Content Validator)本该拦住这类问题,但报告承认它存在逻辑错误,没有发现这份内容有问题;测试里也缺少针对非通配符匹配的用例。另一个让事情更糟的因素是,这类内容更新当时不是分批灰度发布,而是一次性推送给在线的 Windows 主机。CrowdStrike 称,有问题的模板在 UTC 时间 7 月 19 日 05:27 被撤回,但已经收到更新并崩溃的机器,需要人工进入安全模式删除文件才能恢复,很多还启用了磁盘加密,处理起来更慢。
规模方面,微软估计约 850 万台 Windows 设备受影响,不到全球 Windows 设备的 1%。数字不算大,但这类终端遍布航空公司值机系统、医院和银行,所以停摆的体感远大于比例。Linux 与 macOS 主机不使用这个文件,没有受影响。CrowdStrike 后来表示,到 7 月 29 日,约 99% 的 Windows 传感器已恢复在线。
事后 CrowdStrike 承诺的整改包括:给内容解释器增加运行时数组边界检查;在编译期校验字段数量;扩大模板测试覆盖面;修复验证器;以及让内容更新也采用分阶段部署。官方还称这个漏洞无法被攻击者利用。
荒诞之处在于:一个旨在保护系统的安全产品,因为一个字段数量不匹配,成了一次影响面巨大的「自我攻击」。它也提醒大家,配置文件和代码一样危险,尤其当它跑在内核里。
来源: