0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_8lIj6kO1 来源:CSDN 2023-05-19 16:39 次阅读

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 内核中带来的魔力。”

c8bab0b6-f4cc-11ed-90ce-dac502259ad0.png

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 底层组件,旨在移除不安全的代码。

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

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

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

c8ea6e82-f4cc-11ed-90ce-dac502259ad0.png

为什么要选择Rust?

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

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

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

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

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

c936dc0e-f4cc-11ed-90ce-dac502259ad0.png

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

c94f180a-f4cc-11ed-90ce-dac502259ad0.png

据 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)等缓解措施,然而,缓冲区溢出仍然是一个巨大的问题。

ChristopherBoyd 表示,要想彻底根除这些问题的唯一方法就是,从 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 是种怎样的体验,是否会减少内存漏洞的发生呢?欢迎留言分享你的看法。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68333
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13608
  • 生态系统
    +关注

    关注

    0

    文章

    700

    浏览量

    20707

原文标题:Windows 11 初尝 Rust,36000 行内核代码已重写!

文章出处:【微信号:玩转VS Code,微信公众号:玩转VS Code】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何编写高性能的Rust代码

    为了最大限度地提高Rust应用程序的性能,你需要了解支持代码的底层硬件架构,如何优化算法和数据结构,以及如何对代码进行配置和基准测试。在本文中,我们将简要介绍这些主题,希望能更好地理解如何编写高性能的
    的头像 发表于 11-03 14:28 799次阅读
    如何编写高性能的<b class='flag-5'>Rust</b><b class='flag-5'>代码</b>

    使用S32K146时想添加SCST内核自检代码行内核检测,要怎么实现?

    使用S32K146时想添加SCST内核自检代码行内核检测,现在使用IDE S32DS,使用API​​调用测试函数时发现测试中m4_scst_exception_hard_fault1出现异常导致
    发表于 04-14 07:42

    Rust代码中加载静态库时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    “ [i]malloc ”、“ [i]exit ”。我验证了使用 ` [i]nm ` 命令。 问题是我打算使用 ffi 在 rust 中使用这个静态库。当我尝试在我的 Rust 代码中加载静态库
    发表于 06-09 08:44

    Linux下的AVR单片机开发

    Linux下的AVR单片机开发 Posted on 2009/04/02 by PT — 7 Comments ↓ 原帖地址: 此前接触过AVR单片机,发现无论是书店里面的教材,还是网上一大堆
    发表于 11-24 09:57 624次阅读

    微软开发基于Rust的新编程语言,将很快开源

    此前,微软表示正探索将Rust作为C和C++的安全替代方案,并且也对外展示了使用Rust重写Windows组件的体验,根据微软的说法,Rust
    的头像 发表于 12-03 10:36 3892次阅读

    Rust添加到Linux6.1内核的方法

    在欧洲开源峰会上,Linus Torvalds 宣布,他将在当天(在内核维护者峰会上)推动 Rust 进入即将推出的 6.1 Linux 内核
    的头像 发表于 09-19 10:24 1338次阅读

    Linux内核中整合对 Rust 的支持

    Linux Plumbers Conference 2022 大会上举行了一个 Rust 相关的小型会议,该会议讨论的大方向大致为:正在进行的使 Rust 成为一种合适的系统编程语言的工作,以及在主线 Linux 内核中整合对
    的头像 发表于 09-19 11:06 1157次阅读

    Linux内核Rust基础设施优化补丁应用

    这个补丁系列是对上游 Rust 支持的第一批更改,所有引入的设施都是 “Rust 核心” 的一部分,不会与 C 端交互(没有使用新的 C 类型;只有 strlen、memchr、额外的错误代码和一些更多的 printk 格式字符
    发表于 11-15 11:19 399次阅读

    Cloudflare用Rust重写Nginx C模块,构建没有Nginx的未来

    近日,Cloudflare 工程师介绍了如何使用 Rust 重写基于 C 语言的 Nginx 模块。Cloudflare 工程师在博客写道,他们用 Rust 为 Cloudflare 基础设施中最
    的头像 发表于 03-08 09:36 689次阅读

    Rust重写的LSP:KCL IDE 插件的功能介绍与设计解析

    在这次更新中,我们发布了全新的 KCL VS Code 插件,并且用 Rust 重写了 LSP 的 Server 端。我们提供了 IDE 中常用的代码辅助功能,如高亮、跳转、补全、Outline、悬停、错误提示等。
    的头像 发表于 05-11 09:39 939次阅读
    <b class='flag-5'>Rust</b><b class='flag-5'>重写</b>的LSP:KCL IDE 插件的功能介绍与设计解析

    取代C++!微软用Rust改写的Win11内核来了

    按照微软此前介绍,Rust 语言的优势在于极高的内存安全性,原来内核中大量的不安全的子例程在改写后消失不见。同时,Rust 代码简洁高效,移植后 Office 应用没有任何性能损失,甚
    的头像 发表于 05-19 16:58 1395次阅读
    取代C++!微软用<b class='flag-5'>Rust</b>改写的Win<b class='flag-5'>11</b><b class='flag-5'>内核</b>来了

    一次Rust重写基础软件的实践

    受到2022年“谷歌使用Rust重写Android系统且所有Rust代码的内存安全漏洞为零” [1] 的启发,最近笔者怀着浓厚的兴趣也顺应Rust
    的头像 发表于 01-25 11:21 594次阅读

    微软加速转向Rust,加紧招募资深软件架构师

    去年BlueHat大会上,微软公开表示以Rust重编译Windows内核的计划,因其享有现代、便捷且代码易读的卓越性质。值得一提的是,微软推出的Azure Quantum开发工具包(Q
    的头像 发表于 01-30 11:47 527次阅读

    任天堂Switch代游戏机模拟运行Windows 11 ARM效果展示

    5 月 14 日,某开发者PatRyk在X平台发布帖子,展示了将任天堂Switch代游戏机在Linux环境中通过QEMU模拟Windows 11 ARM系统的效果。
    的头像 发表于 05-14 10:16 766次阅读

    微软Windows 11新版记事本应用上线测试:AI重写功能亮相

    微软公司于11月7日正式宣布,针对Canary和Dev频道的Windows Insider项目成员,现已开放Windows 11新版记事本应用的测试。此次更新不仅带来了用户翘首以盼的A
    的头像 发表于 11-07 15:07 305次阅读