专栏名称: 运维
关注互联网运维技术,分享知识
目录
相关文章推荐
InfoQ 架构头条  ·  游戏教父John ... ·  昨天  
51好读  ›  专栏  ›  运维

Windows蓝屏致损150亿美元,受灾者仅获赔10美元引热议,程序员激辩用Rust能否改写史上最大...

运维  · 公众号  · 运维  · 2024-08-07 12:28

主要观点总结

本文围绕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 确实不会出现。







请到「今天看啥」查看全文