首页 › 案例
CrowdStrike · 2024

一次推给所有机器

CrowdStrike 给客户的 Windows 电脑推了一个例行文件,没有分批上线。微软估计,约 850 万台机器中招。

◷ 约 2 分钟

2024 年 7 月 19 日,星期五,协调世界时 04:09,CrowdStrike 给 Windows 版 Falcon 安全软件推送了一次例行更新。这不是新版程序,只是一个小小的配置文件,用来帮软件留意新的攻击手法。按公司自己的说法,它「不是代码,也不是内核驱动」。

收到它的电脑,直接蓝屏。05:27,也就是 78 分钟后,CrowdStrike 撤回了这个文件。在那之后才上线的机器安然无恙。可已经收到文件的机器里,有一些反复崩溃,连下载修复版的机会都没有。

微软后来估计,受影响的 Windows 设备有 850 万台,不到全部 Windows 机器的百分之一。问题在于是哪百分之一。微软指出,用 CrowdStrike 的是运行着大量关键服务的企业。欧洲和美国都有航班停飞。在英国,一位部长在议会说,当地医疗系统很大一部分调不出化验结果和预约信息,受影响的主要是全科诊所。用《卫报》的话说,本该保护关键系统的软件,「最后把它们弄垮了」。

CrowdStrike 几小时内给出的补救办法,是个手工活:把电脑启动进安全模式,钻进 Windows 深处的一个 CrowdStrike 文件夹,找到名字以 C-00000291 开头的文件,删掉,重启。硬盘加了密的,可能还得先输入恢复密钥。一开始,每台受影响的机器都得这样单独弄一遍。

CrowdStrike 的初步复盘解释了当时为什么敢放心发:这类新检测 3 月做过压力测试,同类更新此前在客户机器上跑过四次,都没出事,再加上对「内容校验器所做的检查」的信任。

毛病恰恰就藏在这份顺利的记录里。

早在当年 2 月,CrowdStrike 给传感器加了一种新的检测能力。按定义,它会收到 21 项信息,可传感器代码实际只递给它 20 项。这个缺口好几个月没人发现,因为测试,还有 3 月、4 月那四次线上更新,在第 21 格里填的都是通配符,也就是什么都匹配。传感器从来不用真的去看那一格。

7 月 19 日又推出两条新内容,其中一条第一次真要查第 21 格。内容校验器(内容发布前要过的那道检查)拿它去对照定义,定义写着 21,于是放行。到了客户的机器上,传感器伸手去拿第 21 个值,那里什么都没有。它读到了列表末尾之外的内存,Windows 跟着一起倒下。

而且这次没有分批上线。所谓分批,就是先推给一小批机器,看看情况,再往外扩。78 分钟,足够它铺到几百万台机器上。

18 天后,公司发布根因分析,列了六条发现。最后一条只有一句话:「每个模板实例都应分阶段部署。」

这件事里藏着几个道理

小批量原则文件没有分批推送。78 分钟里,凡是装着 7.11 及以上版本传感器、在线并收到这个文件的 Windows 机器,都中了招。现在 CrowdStrike 每次更新先推给一小批金丝雀机器,再一圈圈往外扩,每一步都停下来观察。瑞士奶酪模型定义要 21 个输入、代码只给 20 个,这个错位躲过了传感器测试、压力测试和此前几次线上更新。直到第一次真正用上第 21 个字段的更新出现,再加上校验器的逻辑错误和缺失的越界检查,几个洞才对齐。防错(Poka-Yoke)事后 CrowdStrike 改的是工具,让同样的错误过不去:编译时检查输入个数,传感器读取前检查数组边界,校验器规定第 21 个字段只能填通配符。正常事故理论一个数据文件,被一个在 Windows 启动早期就加载的驱动读取。文件一坏,机器就崩;有的机器还没来得及下载修好的文件,就又崩了。

出处

  1. CrowdStrike, Preliminary Post Incident Review (PIR), Content Configuration Update Impacting the Falcon Sensor and the Windows Operating System (BSOD), updated July 25, 2024
  2. CrowdStrike, External Technical Root Cause Analysis, Channel File 291, August 6, 2024
  3. CrowdStrike, Tech Alert, Windows crashes related to Falcon Sensor, July 19, 2024
  4. Microsoft, Helping our customers through the CrowdStrike outage, July 20, 2024
  5. The Guardian, What is CrowdStrike, and how did it cause a global Windows outage?, July 19, 2024
  6. UK Parliament, Hansard, House of Commons, CrowdStrike IT Outage, July 22, 2024