真的来了!Windows 11 初尝 Rust,36000 行内核代码已重写!

polarisxu

共 5714字,需浏览 12分钟

 ·

2023-05-18 16:28

整理 | 屠敏
出品 | CSDN(ID:CSDNnews)

Rust 这两年在大厂的追捧下,凭借着出色的内存效率、速度与安全性,开始爆火。现如今,这把“火”直接烧到了 诞生了 40 余载的 Windows 身上!

不久之前,微软企业和操作系统安全副总裁 David Weston 在以色列 Blue Hat IL 2023 安全大会上透露,微软将效仿 Linux,用 Rust 重写部分 Windows 内核。

“我们正处于在 Windows 中用 Rust 爬行、行走、运行的阶段”, David Weston 说道。“我们谈论的是地球上最复杂的工程产品之一。但我们的目标是为了提高安全性……因此,你将在未来几周或几个月内看到 Windows 内核中使用 Rust 编写,这真的很酷。这里的基本目标是将这些内部 C++ 数据类型中转换为 Rust 等价物。”

这不,微软的确兑现了承诺,短短两周之后,有消息传出最新的 Windows 11 Insider Preview 版本是第一个包含 Rust 代码的版本。

“如果你在 Windows 11 Insider ring 上,那么将首次感受到 Rust 在 Windows 内核中带来的魔力。”

c133878848d2b93a5ccd0c97aaef8210.webp

Rust 已重写了 Windows 内核中的 36,000 行代码


当然,透露出最新消息的人,不是别人,而是颇有话语权的 Azure CTO Mark Russinovich。

这也不禁让我们想起去年 9 月,Mark Russinovich 在其个人推特账号发表动态称是时候停止使用 C/C++启动任何新项目,并建议在需要使用 noc-GC 语言的场景下使用 Rust 编程语言。

如今在微软 Windows 内核宣布采取 Rust 重写之际,Mark Russinovich 便迫不及待地在第一时间与外界分享最新进度,难掩其对 Rust 语言的支持以及对 C/C++ 的嫌弃之情。

虽说 Mark Russinovich 的个人立场并不能代表企业对外的观点,但是微软对 Rust 的态度早已对外袒露。

早在 2019 年,便有外媒报道,微软正在尝试用 Rust 重写 Windows 底层组件,旨在移除不安全的代码。

当前,据 微软企业和操作系统安全副总裁 David Weston 在安全大会上分享, 微软已经用 Rust 重写了 Windows 内核中的 36,000 行代码。

更早些时候,微软用 Rust 重写了 DirectWrite Core 库的概念验证,它是 Windows 的 DWrite 引擎的 Windows App SDK 实现,用于文本分析、布局和渲染。当下,DWriteCore 包含了大约  152,000 行 Rust 代码和 96,000 行 C++ 代码。

Weston 还指出,“Windows 内核中现在有一个用 Rust 编写的系统调用。” 

0fce94d7cfb453e6e0b0aa815f0e0dbe.webp

为什么要选择 R ust?


微软之所以想要逐渐摒弃 C/C++ 而拥抱 Rust,根据 Weston 的说法, Rust 代码比当前的 C++ 代码更容易编写和理解,也更安全。

对于那些不熟悉的人来说,Rust 是一种现代的类 C 编程语言,受到开发人员的喜爱,因为它强制创建安全的本地代码,而没有托管语言的开销。

实际上, Rust 与 C 和 C++ 等语言的性能相当,同时更易于调试和维护,而且最重要的是在内存安全方面几乎打遍天下无敌手。

一直以来,内存安全的漏洞是多个企业与开发者颇为头疼的难题。

此前,CSDN 也报道过, 根据长期关注内存漏洞的开发者  @LazyFishBarrel 的统计,苹果公司的 iOS 和 macOS 系统中 60%-70% 的漏洞是内存安全漏洞。

2d51a5292b3ff97d793122488dbc3c6b.webp

微软在 2019 年的一次会议上透露,从 2006 年到 2018 年,其发现的 70% 的漏洞都是因内存安全问题造成的。

48624de0002baac4976aa378bc921546.webp

据 Google 估计,Chrome 中存在了类似比例的内存安全漏洞,另外 90% 的 Android 系统漏洞也都是内存安全问题

针对这一问题, 美国国家安全局(NSA)在去年 也曾发布指南,鼓励多个组织将编程语言从 C/C++ 转为使用内存安全的语言,如 C#、Rust、Go、Java、Ruby 和 Swift。

NSA 认为,黑客极有可能会利用代码中管理不善的内存漏洞,而这种漏洞在程序员使用灵活性更高的编程语言时更容易出现。 NSA 网络安全技术总监 Neal Ziring 表示,在开发消除此类漏洞的软件时,必须始终使用内存安全语言和其他保护措施。

微软现如今用 Rust 重写部分 Windows 内核代码,也是在为内核安全而考虑。

因为内核是计算机操作系统的核心部分,对整个系统的运作至关重要。

同时,它也是电脑开机后最先启动的东西之一,然后它就永久地存在于内存中,充当计算机应用程序和硬件之间的媒介。

如果一个攻击者成功地破坏了内核,他们就可以完全控制运行内核的设备,这无疑是最糟糕的结果。

此外,这些问题不 仅仅在 Windows 系统上会出现,MacOS、Linux 等系统也同样存在这样的问题。

内核漏洞的很大一部分集中在内存管理上。传统来看,最流行的内核编码语言是  C 和 C++,这两种语言虽然提供了出色的性能和不错的灵活性,但是一旦涉及到安全问题时,就没那么有用了。

因此,一旦有心怀不轨的人想要发起网络攻击, 内存将会成为重灾区。往往内存的缺陷或者 Bug 又会极易被利用,也会存在诸多的恶意代码。

对此,FaceTime 安全实验室前研究总监 Christopher Boyd 在一篇博客中进一步分析表示,内存的一个重要部分是可怕的缓冲区溢出攻击,该攻击自 1970 年代以来一直存在。这是指写入缓冲区的数 据溢出并覆盖了附近的内存。当系统的 内存以这种方式被篡改时,就会导致各种形式的利用。

尽管很多企业一直强调让程序员编写更安全的代码,改进底层语言,并采取 Windows 地址空间布局随机化(ASLR)等缓解措施,然而,缓冲区溢出仍然是一个巨大的问题。

Christopher Boyd 表示,要想彻底根除这些问题的唯一方法就是,从 C 和 C++ 转到像 Rust 这样可以自动管理内存的内存安全语言。

而且这一方法已经被很多企业采用了,譬如 2021 年,Android 系统开始支持 Rust 开发操作系统 导致该平台的内存安全漏洞大幅下降。

如今微软 在用 Rust 语言改进 Windows 11 内核,并添加了 36000 行内核代码时,据 The Register 报道,初步性能测试没有看到 Rust 化的内核对性能造成降低。

Rust 取代不了 C/C++ 已在 Windows 内核中 40 年 的工作


当然,微软不仅仅是用 Rust 改写 Windows 内核 ,也将引入其 Pluton 安全处理器。

当 Weston 在安全大会上说到 Pluton 时,他表示,"我们正朝着使用 Rust 的内存安全语言的方向发展。我们还没有达到这个目标,但我们正在努力......可信计算基地的内存安全问题是真实存在的,而且可以说是最令人痛苦的问题,不仅是因为如果 TPM 被破坏,[黑客]有可能接触到各种东西,而且当 TPM 必须更新时,它们有一个重置状态,对用户来说是非常痛苦的。有 Rust 的存在是超级关键的"。

不过,需要注意的是,微软不会做的是用 Rust 替换内核中 C/C++ 的整个“40 年工作”。为此,Weston 解释道,“虽然我们(微软)喜欢 Rust,但我们需要一种策略,其中还包括保护更多的本地代码。”

Rust 是否真的能够如愿保证安全性?


最后,毫无疑问的是,Rust 的引入必将会让 Windows 在内存安全方面取得不错的进展。

就像在  2022 年底,Linux-6.1 首次引入 Rust 语言作为内核模块的开发语言,形成了 Rust for Linux 项目那样,让 Rust 成为 C 语言之后的第二语言。对此,开发者也期望在引入 Rust 语言后,在内核代码抽象和跨平台方面能做得比 C 更有效,且会提升内核代码质量,有效减少内存和多线程并发缺陷 。

针对如今 Windows 内核采用 Rust 改写,不少网友纷纷押注:

Rust 是超越 C/C++ 的前进之路。

数十年的漏洞已经证明在使用 C/C++ 时防止内存破坏的 Bug 是多么困难。虽然像 C# 或 Java 等垃圾回收语言已证明对这些问题更具弹性,但在某些情况下它们无法使用。对于这种情况,我们押注 Rust 将作为 C/C++ 的替代品。Rust 是一种现代语言,旨在与高性能 C/C++ 竞争,但语言中内置了内存安全和线程安全保证。虽然我们无法在一夜之间用 Rust 重写所有内容,但我们已经在 Azure 基础设施的一些最关键组件中采用了 Rust。我们预计,随着时间的推移,Rust 的采用率将大幅提高。

不过,也有网友表示:“在 Javascript/Web 生态系统工作多年后,我在过去的几年中也一直在全职使用 Rust。我不能说它与 C++ 相比如何,但我在 Rust 中的生产力仍然远远低于我在 Typecript 中的生产力。我在生产系统中使用 Rust,但在 Typescript 中做原型。”

生产力和安全性究竟该如何平衡, 对此,你是否用过 Rust? 在生产环境中使用 Rust 是种怎样的体验,是否会减少内存漏洞的发生呢? 欢迎留言分享你的看法。

参考:

https://www.thurrott.com/windows/windows-11/282995/first-rust-code-shows-up-in-the-windows-11-kernel

https://www.malwarebytes.com/blog/news/2023/05/microsoft-introduces-rust-into-kernel-in-windows-11

https://news.ycombinator.com/item?id=35924008

https://www.theregister.com/2023/04/27/microsoft_windows_rust/




往期推荐


我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《 Go语言编程之旅 》、开源图书《 Go语言标准库 》等。


坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流: gopherstudio

浏览 60
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报