17611538698
webmaster@21cto.com

Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好

编程语言 1 641 2024-07-25 08:30:25
21CTO导读:如果使用基于 Rust 的系统是否可以避免上周的 CrowdStrike 灾难?我们一起来看本文。

图片

上周,全球各地的 Windows 系统大量出现了蓝屏死机 (BSOD),这主要是由安全供应商CrowdStrike提供的错误配置文件更新引起的。

这次故障,有人说这是全球最严重的一次故障——导致关键基础设施瘫痪。不过,微软的一位官员周末也提醒开发者要改进编码实践,以提高系统可靠性,减少系统崩溃和 BSOD 的可能性。

Microsoft Azure 首席技术官Mark Russinovich这样表示:

开发人员应逐步弃用 C/C++,转而使用内存安全的 Rust 语言,以减少系统崩溃和 BSOD。可以肯定的是,这条推文与 CrowdStrike 更新缺陷并没有直接关系。

周六,Russinovich还转发了一条 2022 年的推文,称“是时候停止用 C/C++ 启动任何新项目,并在需要非 GC 语言的场景中使用 Rust。为了安全和可靠性,业界应该宣布这些语言已经被弃用。”

空指针

BSOD 的发生有着诸多原因,包括内存错误、驱动程序问题以及 Windows 中的进程问题,而 Windows 就是依赖于 C/C++ 编写的内核。

在Google工作的程序员Zack Vorhies在X上“断定地”表示,此次中断是由于 C/C++ 代码错误造成的,但这一说法被 Google 研究员Tavis Ormandy给驳斥掉了。

Vorhies将大规模中断归咎于C++的空指针,或者代码中指向无效内存位置的一行,他将其描述为“来自内存不安全的 C++ 语言的空指针”。

Ormandy 驳斥了 Vorhies 的说法。当事者 CrowdStrike 则表示,“这与频道文件 291 或任何其他频道文件中包含的空字节无关。”

转向Rust

微软多年以来一直支持 Rust。在它的内部,代码迁移工作仍在进行中。该公司的人们也意识到从 C/C++ 的迁移并非一朝一夕就能完成。

“我们正在努力。Azure 中已经有很多 Rust,Windows 中也有一些 Rust,”Russinovich 在最近的一条推文中如此说道。

使用 Rust 的方法是经过衡量的;第一步是创建原型应用程序,展示 Rust 代码与 Windows 的兼容性。

微软目前还将保护系统硬件的外围应用程序转移到了 Rust。

UEFI 固件

微软正在围绕 Rust 为其 Surface 硬件创建安全启动模块。

这便是UEFI(统一可扩展固件接口),它包含固件代码,可让系统从启动到 Windows 操作系统。

UEFI 代码通常位于电脑的主板上,并在它开启时访问。

UEFI 固件加载到内存中,Rust 提供内存安全机制,可防止系统崩溃或被利用。

目前,许多硬件漏洞和安全问题都源于计算机内存。

美利坚合众国政府白宫的主要技术安全机构网络安全基础设施和安全局(CISA)去年 12 月呼吁企业要转用内存安全技术。

CISA 在咨询报告中指出:“除 C/C++ 之外,大多数现代编程语言都已经实现了内存安全。内存安全编程语言可以管理计算机内存,因此程序员无法引入内存安全漏洞。”

使用Rust保护 PC

微软企业与操作系统安全副总裁戴夫·韦斯顿(Dave Weston) 在接受某个科技媒体采访时表示道,微软正在使用围绕 Rust 构建的安全性和固件来保护自主研发的硬件。

该公司有一个 Secured-core 计划包括为 Surface 和 Windows PC 提供稳定、安全的启动环境。这家公司业已将许多固件组件从 C 语言转换为 Rust 语言,从而提高了系统稳定性并降低了系统暴露给黑客的漏洞几率。

微软公司还为自己的安全处理器 Pluton 创建了一个完全用 Rust 编写的实时操作系统。这个 Pluton 包含一个可信平台模块 (TPM),用于存储生物特征数据等关键安全信息。

“微软致力于通过设计让更多事物更安全。这是我们拥有自己的安全处理器而不是等待行业发展的优势之一。我们将转向 Rust……它在该领域比传统原生语言具有巨大优势,”韦斯顿如实说道。

内存泄漏一直是 TPM 面临的一个主要问题。

QuarksLab 在 2013年详细指出, TPM 2.0 代码中存在两个漏洞,这些漏洞会导致内存被越界读写,从而可能使关键信息在虚拟化环境中遭受黑客攻击。

而 Rust 等内存安全语言可以帮助开发者防止此类问题的发生。

微软与 Rust 的“情史”

大约十年前,Mozilla 推出了一款带有 Rust 组件的 Firefox 浏览器,现在大批开发者正在采用它。

不仅是Rust,其他内存安全语言还应该包括Golang、Java、C#、Swift 和Python。

微软的人还进行了两项实验,用来检查 Rust 在可行性和性能方面的可行性。Win32K 通常是被频繁攻击的常见选项,它可以被黑客方便地升级特权攻击。

韦斯顿在 6 月 20 日的播客中说到:“我们在 Rust 能够提供最大安全价值的地方推出了它。”

第一个是字体解析器,它在浏览器或 Office 客户端中创建了远程攻击面。他们花了两到三个月的时间将他们的现代 Web App SDK 字体解析器 DirectWrite 转换为 Rust 编写。

“这花了几个开发人员大约两三个月的时间。有趣的是,性能确实提高了不少,”韦斯顿在播客中说道。

第二个实验涉及 Win32k 中的一些图形设备接口 (GDI) 表面,Win32k 是最初于 1980 年代后期设计的内部图形组件。微软并不想重写整个代码,因此尝试将 Win32k 中的各个组件拆分出来,在 Rust 中实现。实验成功完成,Rust 组件现已随新的 Windows 一起提供。

“这一点尤其重要,因为微软 Windows 是使用 Visual C++ 编译器或 C 编译器进行编译的,而 Rust 的后端实际上是 LLVM [低级虚拟机]”。

Azure 中的 Rust

微软也在它的“摇钱树” Azure 云平台中广泛实施了 Rust。

比如,该公司正实施一个用 Rust 编写的虚拟机管理器,以管理 Azure 中的 Hyper-V。

Rust 也重写了 Azure Boost 的实现,拿Weston 的话称之为“Azure 的未来架构”。

“我们将 Azure 主机的更多性能方面转移到专用卡(如智能 NIC 和/或 FPGA)上进行存储”。

据微软称,它在 Rust 工具上花费了大约 1000 万美元,Azure 化是首要目标。此外,这家巨头司还希望或正立一个类似于Linux 操作系统的 Rust 长期支持版本。

Happy Rust!图片

作者:校长

评论