整理 | 屠敏
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 核心中帶來的魔力。」


Rust 已重寫了 Windows 核心中的 36,000 行程式碼
當然,透露出最新訊息的人,不是別人,而是頗有話語權的 Azure CTO Mark Russinovich。
這也不禁讓我們想起去年 9 月,Mark Russinovich在其個人Twitter賬號發表動態稱是時候停止使用 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 編寫的系統調用。」


為什麼要選擇 Rust?
微軟之所以想要逐漸摒棄 C/C++ 而擁抱 Rust,根據 Weston 的說法,Rust 程式碼比當前的 C++ 程式碼更容易編寫和理解,也更安全。
對於那些不熟悉的人來說,Rust 是一種現代的類 C 程式語言,受到開發人員的喜愛,因為它強制創建安全的本地程式碼,而沒有託管語言的開銷。
實際上,Rust 與 C 和 C++ 等語言的性能相當,同時更易於調試和維護,而且最重要的是在記憶體安全方面幾乎打遍天下無敵手。
一直以來,記憶體安全的漏洞是多個企業與開發者頗為頭疼的難題。
此前,CSDN 也報道過,根據長期關注記憶體漏洞的開發者 @LazyFishBarrel 的統計,蘋果公司的 iOS 和 macOS 系統中 60%-70% 的漏洞是記憶體安全漏洞。

微軟在 2019 年的一次會議上透露,從 2006 年到 2018 年,其發現的 70% 的漏洞都是因記憶體安全問題造成的。

據 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/