Rust 這兩年在大廠(chǎng)的追捧下,憑借著出色的內(nèi)存效率、速度與安全性,開(kāi)始爆火。現(xiàn)如今,這把“火”直接燒到了誕生了 40 余載的 Windows 身上!
不久之前,微軟企業(yè)和操作系統(tǒng)安全副總裁 David Weston 在以色列 Blue Hat IL 2023 安全大會(huì)上透露,微軟將效仿 Linux,用 Rust 重寫(xiě)部分 Windows 內(nèi)核。
“我們正處于在 Windows 中用 Rust 爬行、行走、運(yùn)行的階段”, David Weston 說(shuō)道。“我們談?wù)摰氖堑厍蛏献顝?fù)雜的工程產(chǎn)品之一。但我們的目標(biāo)是為了提高安全性……因此,你將在未來(lái)幾周或幾個(gè)月內(nèi)看到 Windows 內(nèi)核中使用 Rust 編寫(xiě),這真的很酷。這里的基本目標(biāo)是將這些內(nèi)部 C++ 數(shù)據(jù)類(lèi)型中轉(zhuǎn)換為 Rust 等價(jià)物。”
這不,微軟的確兌現(xiàn)了承諾,短短兩周之后,有消息傳出最新的 Windows 11 Insider Preview 版本是第一個(gè)包含 Rust 代碼的版本。
“如果你在 Windows 11 Insider ring 上,那么將首次感受到 Rust 在 Windows 內(nèi)核中帶來(lái)的魔力。”
Rust 已重寫(xiě)了Windows 內(nèi)核中的36,000 行代碼
當(dāng)然,透露出最新消息的人,不是別人,而是頗有話(huà)語(yǔ)權(quán)的 Azure CTO Mark Russinovich。
這也不禁讓我們想起去年 9 月,Mark Russinovich 在其個(gè)人推特賬號(hào)發(fā)表動(dòng)態(tài)稱(chēng)是時(shí)候停止使用 C/C++啟動(dòng)任何新項(xiàng)目,并建議在需要使用 noc-GC 語(yǔ)言的場(chǎng)景下使用 Rust 編程語(yǔ)言。
如今在微軟 Windows 內(nèi)核宣布采取 Rust 重寫(xiě)之際,Mark Russinovich 便迫不及待地在第一時(shí)間與外界分享最新進(jìn)度,難掩其對(duì) Rust 語(yǔ)言的支持以及對(duì) C/C++ 的嫌棄之情。
雖說(shuō) Mark Russinovich 的個(gè)人立場(chǎng)并不能代表企業(yè)對(duì)外的觀點(diǎn),但是微軟對(duì) Rust 的態(tài)度早已對(duì)外袒露。
早在 2019 年,便有外媒報(bào)道,微軟正在嘗試用 Rust 重寫(xiě) Windows 底層組件,旨在移除不安全的代碼。
當(dāng)前,據(jù)微軟企業(yè)和操作系統(tǒng)安全副總裁DavidWeston 在安全大會(huì)上分享,微軟已經(jīng)用 Rust 重寫(xiě)了 Windows 內(nèi)核中的 36,000 行代碼。
更早些時(shí)候,微軟用 Rust 重寫(xiě)了 DirectWrite Core 庫(kù)的概念驗(yàn)證,它是 Windows 的 DWrite 引擎的 Windows App SDK 實(shí)現(xiàn),用于文本分析、布局和渲染。當(dāng)下,DWriteCore 包含了大約152,000 行 Rust 代碼和 96,000 行 C++ 代碼。
Weston 還指出,“Windows 內(nèi)核中現(xiàn)在有一個(gè)用 Rust 編寫(xiě)的系統(tǒng)調(diào)用。”
為什么要選擇Rust?
微軟之所以想要逐漸摒棄 C/C++ 而擁抱 Rust,根據(jù) Weston 的說(shuō)法,Rust 代碼比當(dāng)前的 C++ 代碼更容易編寫(xiě)和理解,也更安全。
對(duì)于那些不熟悉的人來(lái)說(shuō),Rust 是一種現(xiàn)代的類(lèi) C 編程語(yǔ)言,受到開(kāi)發(fā)人員的喜愛(ài),因?yàn)樗鼜?qiáng)制創(chuàng)建安全的本地代碼,而沒(méi)有托管語(yǔ)言的開(kāi)銷(xiāo)。
實(shí)際上,Rust 與 C 和 C++ 等語(yǔ)言的性能相當(dāng),同時(shí)更易于調(diào)試和維護(hù),而且最重要的是在內(nèi)存安全方面幾乎打遍天下無(wú)敵手。
一直以來(lái),內(nèi)存安全的漏洞是多個(gè)企業(yè)與開(kāi)發(fā)者頗為頭疼的難題。
此前,CSDN 也報(bào)道過(guò),根據(jù)長(zhǎng)期關(guān)注內(nèi)存漏洞的開(kāi)發(fā)者@LazyFishBarrel 的統(tǒng)計(jì),蘋(píng)果公司的 iOS 和 macOS 系統(tǒng)中 60%-70% 的漏洞是內(nèi)存安全漏洞。
微軟在2019 年的一次會(huì)議上透露,從 2006 年到 2018 年,其發(fā)現(xiàn)的 70%的漏洞都是因內(nèi)存安全問(wèn)題造成的。
據(jù) Google 估計(jì),Chrome 中存在了類(lèi)似比例的內(nèi)存安全漏洞,另外90% 的 Android 系統(tǒng)漏洞也都是內(nèi)存安全問(wèn)題。
針對(duì)這一問(wèn)題,美國(guó)國(guó)家安全局(NSA)在去年也曾發(fā)布指南,鼓勵(lì)多個(gè)組織將編程語(yǔ)言從 C/C++轉(zhuǎn)為使用內(nèi)存安全的語(yǔ)言,如 C#、Rust、Go、Java、Ruby 和 Swift。
NSA 認(rèn)為,黑客極有可能會(huì)利用代碼中管理不善的內(nèi)存漏洞,而這種漏洞在程序員使用靈活性更高的編程語(yǔ)言時(shí)更容易出現(xiàn)。NSA 網(wǎng)絡(luò)安全技術(shù)總監(jiān) Neal Ziring 表示,在開(kāi)發(fā)消除此類(lèi)漏洞的軟件時(shí),必須始終使用內(nèi)存安全語(yǔ)言和其他保護(hù)措施。
微軟現(xiàn)如今用 Rust 重寫(xiě)部分 Windows 內(nèi)核代碼,也是在為內(nèi)核安全而考慮。
因?yàn)閮?nèi)核是計(jì)算機(jī)操作系統(tǒng)的核心部分,對(duì)整個(gè)系統(tǒng)的運(yùn)作至關(guān)重要。
同時(shí),它也是電腦開(kāi)機(jī)后最先啟動(dòng)的東西之一,然后它就永久地存在于內(nèi)存中,充當(dāng)計(jì)算機(jī)應(yīng)用程序和硬件之間的媒介。
如果一個(gè)攻擊者成功地破壞了內(nèi)核,他們就可以完全控制運(yùn)行內(nèi)核的設(shè)備,這無(wú)疑是最糟糕的結(jié)果。
此外,這些問(wèn)題不僅僅在 Windows 系統(tǒng)上會(huì)出現(xiàn),MacOS、Linux 等系統(tǒng)也同樣存在這樣的問(wèn)題。
內(nèi)核漏洞的很大一部分集中在內(nèi)存管理上。傳統(tǒng)來(lái)看,最流行的內(nèi)核編碼語(yǔ)言是 C 和 C++,這兩種語(yǔ)言雖然提供了出色的性能和不錯(cuò)的靈活性,但是一旦涉及到安全問(wèn)題時(shí),就沒(méi)那么有用了。
因此,一旦有心懷不軌的人想要發(fā)起網(wǎng)絡(luò)攻擊,內(nèi)存將會(huì)成為重災(zāi)區(qū)。往往內(nèi)存的缺陷或者 Bug 又會(huì)極易被利用,也會(huì)存在諸多的惡意代碼。
對(duì)此,F(xiàn)aceTime 安全實(shí)驗(yàn)室前研究總監(jiān) Christopher Boyd 在一篇博客中進(jìn)一步分析表示,內(nèi)存的一個(gè)重要部分是可怕的緩沖區(qū)溢出攻擊,該攻擊自 1970 年代以來(lái)一直存在。這是指寫(xiě)入緩沖區(qū)的數(shù)據(jù)溢出并覆蓋了附近的內(nèi)存。當(dāng)系統(tǒng)的內(nèi)存以這種方式被篡改時(shí),就會(huì)導(dǎo)致各種形式的利用。
盡管很多企業(yè)一直強(qiáng)調(diào)讓程序員編寫(xiě)更安全的代碼,改進(jìn)底層語(yǔ)言,并采取 Windows 地址空間布局隨機(jī)化(ASLR)等緩解措施,然而,緩沖區(qū)溢出仍然是一個(gè)巨大的問(wèn)題。
ChristopherBoyd 表示,要想徹底根除這些問(wèn)題的唯一方法就是,從 C 和 C++ 轉(zhuǎn)到像 Rust 這樣可以自動(dòng)管理內(nèi)存的內(nèi)存安全語(yǔ)言。
而且這一方法已經(jīng)被很多企業(yè)采用了,譬如 2021 年,Android 系統(tǒng)開(kāi)始支持 Rust 開(kāi)發(fā)操作系統(tǒng),導(dǎo)致該平臺(tái)的內(nèi)存安全漏洞大幅下降。
如今微軟在用 Rust 語(yǔ)言改進(jìn) Windows 11 內(nèi)核,并添加了 36000 行內(nèi)核代碼時(shí),據(jù) The Register 報(bào)道,初步性能測(cè)試沒(méi)有看到 Rust 化的內(nèi)核對(duì)性能造成降低。
Rust 取代不了 C/C++已在 Windows 內(nèi)核中 40 年的工作
當(dāng)然,微軟不僅僅是用 Rust 改寫(xiě) Windows 內(nèi)核,也將引入其 Pluton 安全處理器。
當(dāng)Weston 在安全大會(huì)上說(shuō)到 Pluton 時(shí),他表示,"我們正朝著使用 Rust 的內(nèi)存安全語(yǔ)言的方向發(fā)展。我們還沒(méi)有達(dá)到這個(gè)目標(biāo),但我們正在努力......可信計(jì)算基地的內(nèi)存安全問(wèn)題是真實(shí)存在的,而且可以說(shuō)是最令人痛苦的問(wèn)題,不僅是因?yàn)槿绻?TPM 被破壞,[黑客]有可能接觸到各種東西,而且當(dāng) TPM 必須更新時(shí),它們有一個(gè)重置狀態(tài),對(duì)用戶(hù)來(lái)說(shuō)是非常痛苦的。有 Rust 的存在是超級(jí)關(guān)鍵的"。
不過(guò),需要注意的是,微軟不會(huì)做的是用 Rust 替換內(nèi)核中 C/C++ 的整個(gè)“40 年工作”。為此,Weston 解釋道,“雖然我們(微軟)喜歡 Rust,但我們需要一種策略,其中還包括保護(hù)更多的本地代碼。”
Rust 是否真的能夠如愿保證安全性?
最后,毫無(wú)疑問(wèn)的是,Rust 的引入必將會(huì)讓 Windows 在內(nèi)存安全方面取得不錯(cuò)的進(jìn)展。
就像在2022 年底,Linux-6.1 首次引入 Rust 語(yǔ)言作為內(nèi)核模塊的開(kāi)發(fā)語(yǔ)言,形成了 Rust for Linux 項(xiàng)目那樣,讓 Rust 成為 C 語(yǔ)言之后的第二語(yǔ)言。對(duì)此,開(kāi)發(fā)者也期望在引入 Rust 語(yǔ)言后,在內(nèi)核代碼抽象和跨平臺(tái)方面能做得比 C 更有效,且會(huì)提升內(nèi)核代碼質(zhì)量,有效減少內(nèi)存和多線(xiàn)程并發(fā)缺陷 。
針對(duì)如今 Windows 內(nèi)核采用 Rust 改寫(xiě),不少網(wǎng)友紛紛押注:
Rust 是超越 C/C++ 的前進(jìn)之路。
數(shù)十年的漏洞已經(jīng)證明在使用 C/C++ 時(shí)防止內(nèi)存破壞的 Bug 是多么困難。雖然像 C# 或 Java 等垃圾回收語(yǔ)言已證明對(duì)這些問(wèn)題更具彈性,但在某些情況下它們無(wú)法使用。對(duì)于這種情況,我們押注 Rust 將作為 C/C++ 的替代品。Rust 是一種現(xiàn)代語(yǔ)言,旨在與高性能 C/C++ 競(jìng)爭(zhēng),但語(yǔ)言中內(nèi)置了內(nèi)存安全和線(xiàn)程安全保證。雖然我們無(wú)法在一夜之間用 Rust 重寫(xiě)所有內(nèi)容,但我們已經(jīng)在 Azure 基礎(chǔ)設(shè)施的一些最關(guān)鍵組件中采用了 Rust。我們預(yù)計(jì),隨著時(shí)間的推移,Rust 的采用率將大幅提高。
不過(guò),也有網(wǎng)友表示:“在 Javascript/Web 生態(tài)系統(tǒng)工作多年后,我在過(guò)去的幾年中也一直在全職使用 Rust。我不能說(shuō)它與 C++ 相比如何,但我在 Rust 中的生產(chǎn)力仍然遠(yuǎn)遠(yuǎn)低于我在 Typecript 中的生產(chǎn)力。我在生產(chǎn)系統(tǒng)中使用 Rust,但在 Typescript 中做原型。”
生產(chǎn)力和安全性究竟該如何平衡,對(duì)此,你是否用過(guò) Rust?在生產(chǎn)環(huán)境中使用 Rust 是種怎樣的體驗(yàn),是否會(huì)減少內(nèi)存漏洞的發(fā)生呢?歡迎留言分享你的看法。
審核編輯 :李倩
-
代碼
+關(guān)注
關(guān)注
30文章
4828瀏覽量
69058 -
數(shù)據(jù)類(lèi)型
+關(guān)注
關(guān)注
0文章
236瀏覽量
13664 -
生態(tài)系統(tǒng)
+關(guān)注
關(guān)注
0文章
704瀏覽量
20784
原文標(biāo)題:Windows 11 初嘗 Rust,36000 行內(nèi)核代碼已重寫(xiě)!
文章出處:【微信號(hào):玩轉(zhuǎn)VS Code,微信公眾號(hào):玩轉(zhuǎn)VS Code】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論