+− THE DAILY DIFFdev & AI news
SHIP IT

一个多余的字段导致850万台电脑崩溃。78分钟。

2024年7月19日,世界协调时04:09:CrowdStrike向所有在线的Windows Falcon传感器推送了Channel File 291——一个快速响应内容更新。

2024年7月19日,世界协调时04:09:CrowdStrike向所有在线的Windows Falcon传感器推送了Channel File 291——一个快速响应内容更新。它所输入的模板在2月份声明了21个输入字段;而提供输入的代码构建了一个包含20个字段的数组。四个月以来,没有任何东西读取字段21,因为每个规则都将其留作通配符。这次更新在那里放了一个真实的模式。云端的Content Validator根据声明计数为21并将其通过;传感器的Content Interpreter在没有边界检查的情况下,在内核模式下读取了插槽21,导致Windows页面错误:PAGE_FAULT_IN_NONPAGED_AREA,csagent.sys。该驱动程序有意在启动早期加载,读取同一文件,然后再次崩溃——陷入启动循环。在世界协调时05:27,即78分钟后被回滚,但850万台机器(微软的统计,不到Windows的1%)已经有了这个文件,而修复方法是每个键盘前都有一个人操作:安全模式,删除C-00000291*.sys,BitLocker恢复密钥。航空公司、医院、银行和911中心停止运作;达美航空取消了约7,000个航班,并向CrowdStrike和微软索赔至少5亿美元;Parametrix估计财富500强企业的损失接近54亿美元。验尸报告来自CrowdStrike自己的根本原因分析、初步事件后审查、微软的博客、达美航空的8-K文件和众议院证词。Git归因:65% CrowdStrike / 25% 内核模式设计 / 10% 星期五。修复的结论:SHIP IT,勉强。

阅读书面版(英文) ↗

本视频涵盖的内容

  • 2024年2月28日 – 4月24日:传感器7.11发布IPC模板类型(声明21个字段,提供20个字段);3月5日通过压力测试;四个实例正常工作,因为字段21是通配符。
  • 7月19日,世界协调时04:09:两个新的模板实例;Content Validator的逻辑错误让非通配符实例通过;内核中发生越界读取;世界协调时05:27回滚。
  • 7月19日-29日:手动修复(安全模式,删除文件,BitLocker密钥);截至7月24日约97%的传感器恢复,截至7月29日约99%恢复。
  • 7月25日 – 8月19日:运行时边界检查、编译时字段计数验证、验证器检查、金丝雀发布+部署环、客户对快速响应内容的控制、两次独立审查;8月6日完成包含崩溃转储的完整RCA。

翻译的文字记录

译自英文原版旁白。可用音频和字幕由 YouTube 控制。

0:00 一个安全更新将二十一个字段带入一个为二十个字段构建的驱动程序中, 八百五十万台Windows机器在早餐前蓝屏。 2024年7月19日,世界协调时04:09。 CrowdStrike向每个Falcon传感器推送了Channel File 291。 七十八分钟后,他们将其撤回;那时,航空公司、 医院和银行都盯着同一个蓝色矩形。 首席执行官的第一份帖子说这不是网络攻击,是真的,但这不是重点。 它是如何发生的,为什么可能发生,以及谁该承担责任。

0:27 这是The Daily Diff,事后分析。 2月28日。传感器7.11发布了新的命名管道检测器。 它声明了二十一个输入字段;提供输入的代码构建了一个包含 二十个字段的数组。没有人注意到:四个月来,每个规则都将字段二十一留作 通配符,没有人读取通配符。 通过了压力测试,四个规则发布,一切正常。 7月19日,04:09。 两个新规则;其中一个在字段二十一中放入了真实的模式。

0:51 云验证器根据声明计数为二十一,并说没问题。 每个在线的Windows主机都立即下载了它,因为没有金丝雀发布环。 传感器读取插槽二十一,那不是它的内存, 然后内核就做了内核该做的事。 05:27,回滚。对于那些重启过的人来说已经太迟了:驱动程序在 启动早期加载,读取同一文件,然后再次崩溃。 启动循环。为什么会这样? 这些规则是从云端推送的配置,所以没有代码跳过代码

1:16 流水线。解释器没有边界检查;它信任验证器, 而验证器信任声明。 这一切都在内核模式下运行,坏指针不是异常,而是 Windows说无法通过try-except保护的页面错误。 那天下午Patrick Wardle从崩溃转储中读到:索引零x十四, 插槽二十一。修复是手动的。 安全模式,删除C-00000291,重启。 使用BitLocker,首先输入一个四十八位的

1:43 恢复密钥,它保存在一个 也蓝屏的服务器上。 git blame。CrowdStrike,百分之六十五:RCA列出了六项发现, 第六项发现是一个完整的句子:模板实例应该有分阶段 部署。内核模式设计, 百分之二十五:CrowdStrike说Windows还不能 在内核外部托管安全,微软说这不是微软事件, 页面错误并不在意。

2:05 星期五,百分之十。 提交信息说不是代码。 影响范围:八百五十万台设备,不到Windows的百分之一。 达美航空取消了七千个航班,并索赔五亿美元, 包括微软。保险公司估计财富500强的损失接近五十亿美元。 Hacker News:四千五百点。 讽刺的是:一个旨在检测新型攻击技术的更新,结果自己创造了一个。 结论,事后分析:SHIP IT,勉强。

2:27 六天内进行边界检查,分阶段环,客户对内容更新的控制, 两次外部审查。 勉强,因为所有这些都已经是标准做法了。 星期一:无论您的代理从云端拉取什么,都将进入金丝雀发布环。 只要有东西在无法抛出错误的地方解析它,配置就成了代码。 将您仍然不允许谈论的事件发送给我, 在评论中,或发送至thedailydiff.dev。 这就是今天的差异。

2:48 我是Axrisi的Niko。 负责任地合并。

来源

  1. CrowdStrike, Root Cause Analysis — Channel File 291 (Aug 6, 2024, 12 pp.)www.crowdstrike.com
  2. CrowdStrike, Executive Summary of the RCA (Aug 6, 2024)www.crowdstrike.com
  3. CrowdStrike, Preliminary Post Incident Review (Jul 24, 2024)www.crowdstrike.com
  4. CrowdStrike, Remediation and Guidance Hub — Channel File 291 (the workaround steps)www.crowdstrike.com
  5. CrowdStrike, tech alert of Jul 19, 2024 (archived: Safe Mode → delete C-00000291*.sys → BitLocker key)web.archive.org
  6. Microsoft, David Weston, "Helping our customers through the CrowdStrike outage" (Jul 20, 2024; the 8.5 million figure)blogs.microsoft.com
  7. Delta Air Lines, Form 8-K (Aug 8, 2024; ~7,000 cancellations, at least $500 million)www.sec.gov
  8. Adam Meyers (CrowdStrike SVP), written testimony, House Homeland Security Subcommittee (Sep 24, 2024)homeland.house.gov
  9. George Kurtz on X, Jul 19, 2024, 09:45 UTCx.com
  10. Patrick Wardle on X, Jul 19, 2024 (the crash-dump index 0x14)x.com
  11. Hacker News, Jul 19, 2024 — "CrowdStrike Update: Windows Bluescreen and Boot Loops" (4,489 points)news.ycombinator.com
  12. The Guardian, Jul 24, 2024 — "CrowdStrike global outage to cost US Fortune 500 companies $5.4bn" (Parametrix estimate)www.theguardian.com
  13. Hacker News, Jul 21, 2024 — "Initial details about why CrowdStrike's CSAgent.sys crashed" (519 points)news.ycombinator.com
  14. Wikipedia — 2024 CrowdStrike-related IT outagesen.wikipedia.org

相关视频

postmortem · zh-CN · 2026年9月12日

一个正则表达式搞垮了 Cloudflare,持续 27 分钟。

2019 年 7 月 2 日,UTC 时间 13:42:Cloudflare Web 应用程序防火墙的一条新规则在大约两秒钟内在全球 180 多个城市生效。这是一条模拟模式下的 XSS 规则,因此它不会阻止任何内容,但它仍然在每个请求上运行,并且以 .*(?:.*=.*) 结尾。PCRE 回溯,每个处理 HTTP 请求的 CPU 核心都达到 100%,每个由 Cloudflare 代理的网站都在

3:00 ↗
postmortem · zh-CN · 2026年9月22日

一次重启让Telstra回到了2006年。九百万部手机受到影响。

墨尔本的一名工程师在凌晨2:50重新启动了一个时序机箱,到早餐时间,澳大利亚最大的移动网络竟然认为现在是2006年11月。2026年7月8日:Telstra的NTP机箱中的一张GPS卡在电源维修期间重启,其固件从未进行过GPS周翻转更新,因此它选择了旧的纪元,回到了1024周之前。由于2025年10月的一个权宜之计,这张卡成为了网络中唯一的层级1(stratum-1)时间源——并且2020年切换到

3:15 ↗
postmortem · zh-CN · 2026年9月19日

Google Cloud 因空白字段而崩溃。历时三小时。

一个包含几个空白字段的策略行触发了一个空指针,导致 Google Cloud 所有区域同时崩溃,随后 Cloudflare 也随之瘫痪。2025 年 6 月 12 日,世界标准时间 17:49:Service Control(批准每个 Google Cloud API 请求的二进制文件)读取了一个配额策略变更,其中包含“意外的空白字段”,触发了两周前发布的代码路径(没有空检查和功能标志),并进入了

2:57 ↗