主要观点总结
本文围绕CrowdStrike引发的大规模系统故障事件展开,探讨了事故原因、影响及可能的解决方案。文章指出,虽然Rust语言的内存安全性可以改善代码质量,但在本次事件中,改用Rust并不能解决问题,根本原因在测试和部署流程的不完善。同时,文章还介绍了CrowdStrike为补救此次事件所采取的措冒。
关键观点总结
关键观点1: 事故概述
CrowdStrike的错误更新引发了全球大规模系统故障,导致数千架航班停飞、医院瘫痪、支付系统崩溃,被专家称为史上最大的IT故障。
关键观点2: Rust的讨论
虽然Rust的内存安全性被广泛讨论,但在本次事故中,改用Rust并不能解决根本问题。事故的关键问题在于配置变更的发布流程。
关键观点3: 事故原因分析
事故的原因是配置更新触发了Falcon平台中的潜在bug,而这个bug是由一个内存错误引发的。但这个内存错误只是触发因素,真正的根源在于测试和部署流程的不完善。
关键观点4: 防范措施
CrowdStrike已经采取了一系列措施来防止类似事件的再次发生,包括改进测试和验证流程、实施交错部署策略、进行第三方安全代码审查等。
正文
如果 CrowdStrike 是用 Rust 编写的,那确实可以降低发生故障的可能性,但它并不能解决导致故障发生的根本原因。所以看到许多人说 Rust 是解决这次事故的唯一答案,我就感到非常恼火——
这种说法,不仅无法推动 Rust 的普及,反而会招来反感
:C++ 专家们都知道本次事故的根本原因,看到这种误导性说法必然不快,从而导致系统编程世界的进一步分裂。
那么,为什么说 Rust 不能解决
这个问题呢?接下来我会试着回答这个问题,同时也深入探讨一下造成这次故障的原因。
1、故障分析
以下是来自 CrowdStrike 官方的“事
后分析”:
在 2024 年 7 月 19 日 04:09 UTC,作为持续运营的一部分,CrowdStrike 向 Windows 系统发布了传感器配置更新。传感器配置更新是 Falcon 平台保护机制的持续组成部分。此配置更新触发了逻辑错误,导致受影响的系统崩溃和蓝屏(BSOD)
导致系统崩溃的传感器配置更新,已于 2024 年 7 月 19 日 05:27 UTC 得到修复。
把上面这段话翻译为“人话”,就是:
1、
CrowdStrike 公司推送了一项配置更新
。
2、
该更新触发了“Falcon 平台”中的一个潜在 bug
。
3、
Falcon 中的这个 bug 导致了 Windows 崩溃
。
前两点并不奇怪:对于任何在线系统来说,变更配置都是“家常便饭”,而这些更新引发代码中的 bug 也是常见现象。事实上,大多数宕机事件都是由人为配置变更造成的。
显然,我们应该
问问为什么这个 bug 会存在,以及如何修复它以提高产品的稳定性。但我们别忘了第三点:为什么这个 bug 能够导致整台机器瘫痪?更重要的是,为什么这个 bug 会让全球如此多的系统宕机?
2、内存错误
让我们从第一个问题开始:Falcon 中的 bug 是什么性质的?
很简单:在“Channel Files”(又称配置文件)解析器中存在一个逻辑错误,当遇到一些无效输入
时,这段代码会试图访问一个无效的内存位置。具体细节并不重要:可能是取消引用空指针,也可能是一般保护故障等等。关键在于:崩溃是由无效内存访问问题引发的。
这时,一些 Rust 狂热粉可能会跳出来说::“看啊,果然!如果代码是用 Rust 写的,这个 bug 就不会存在!”我无法否认这个说法:如果用 Rust,这个特定的 bug 确实不会出现。