微软计划使用 Rust 取代 C和C+
?
新智元推薦
來源:InfoQ
作者:王文婧
【新智元導(dǎo)讀】微軟近日提出,未來將使用 Rust 作為 C、C++ 以及其他編程語言的替代方案,以改善應(yīng)用程序的安全性的計(jì)劃。
近日,微軟安全響應(yīng)中心(MSRC)團(tuán)隊(duì)在官網(wǎng)更新文章,就近日提出的最新計(jì)劃,即未來將使用 Rust 作為 C、C++ 以及其他編程語言的替代方案以改善應(yīng)用程序的安全性的計(jì)劃,從空間內(nèi)存安全、時(shí)間內(nèi)存安全、數(shù)據(jù)競爭等方面進(jìn)行了進(jìn)一步的深入補(bǔ)充。
首席安全技術(shù)經(jīng)理 Gavin Thomas 表示,開發(fā)人員的核心工作不是擔(dān)心安全性,而是做好功能開發(fā),首先需要啟用一種 “不會(huì)引入內(nèi)存漏洞隱患” 的開發(fā)語言。顯然,這一次的主角是 Rust。
過去 12 年,約 70% 的微軟補(bǔ)丁針對內(nèi)存漏洞
如今,內(nèi)存漏洞已成為黑客攻擊的主要對象。據(jù)微軟最新調(diào)查數(shù)據(jù)顯示,在過去 12 年里,約 70% 的微軟補(bǔ)丁都是針對內(nèi)存漏洞的。
自 2004 年以來,微軟安全響應(yīng)中心 (MSRC) 已經(jīng)對每一個(gè)報(bào)告的微軟安全漏洞進(jìn)行了分類。從所有的分類中,人們得出了一個(gè)令人驚訝的事實(shí):正如 Matt Miller 今年在 BlueHat IL 的演講中所討論的那樣,大多數(shù)修復(fù)的漏洞和分配的 CVE 都是由開發(fā)人員無意中將內(nèi)存損壞錯(cuò)誤插入到其 C 和 C++ 的代碼中造成的。這兩種存在內(nèi)存漏洞風(fēng)險(xiǎn)的編程語言允許開發(fā)人員在代碼被執(zhí)行的地方對內(nèi)存地址進(jìn)行細(xì)粒度控制。開發(fā)人員內(nèi)存管理代碼中的一個(gè)錯(cuò)誤可能導(dǎo)致大量內(nèi)存漏洞,攻擊者便可利用這些錯(cuò)誤造成具有危險(xiǎn)性和侵入性的后果,比如遠(yuǎn)程代碼執(zhí)行 (RCE) 和權(quán)限升級漏洞(EoP)。
數(shù)據(jù)來源:微軟安全響應(yīng)中心網(wǎng)站
近年來,隨著微軟增加其代碼庫并在代碼中使用更多的開源軟件,這一問題并沒有得以解決,反而變得更糟,而微軟也并不是唯一一個(gè)暴露出內(nèi)存漏洞的企業(yè)。
在官網(wǎng)發(fā)布的最新文章中,微軟安全響應(yīng)中心(MSRC)團(tuán)隊(duì)就如何解決內(nèi)存安全問題進(jìn)行了如下分析,
為了解決內(nèi)存安全問題,需要采取幾種不同的方式。C++ 中的 “現(xiàn)代” 構(gòu)造(例如 span)能夠在一定程度上預(yù)防某些內(nèi)存安全問題。此外,我們應(yīng)盡可能使用其它現(xiàn)代 C++ 功能(例如智能指針)。
然而,現(xiàn)代 C++ 仍然不具備全面的內(nèi)存安全與數(shù)據(jù)爭用機(jī)制。更重要的是,如果程序員不加以運(yùn)用,這些功能本身將毫無意義;而且這些功能在規(guī)模較大,且較為模糊的代碼庫可能也無法奏效。再者,C++ 缺乏能夠在安全抽象當(dāng)中打包不安全代碼的良好工具,這意味著雖然能夠在本地級別強(qiáng)制執(zhí)行正確的編碼實(shí)踐,但開發(fā)人員仍很難在 C 或者 C++ 當(dāng)中構(gòu)建出能夠安全組合的軟件組件。除此之外,我們應(yīng)盡可能將軟件最終遷移至具備全面內(nèi)存安全特性的語言當(dāng)中,例如,通過運(yùn)行時(shí)檢查以及垃圾回收機(jī)制,實(shí)現(xiàn)內(nèi)存保護(hù)的 C# 或者 F#。畢竟,內(nèi)存管理是一項(xiàng)極為復(fù)雜的功能,最好是確保必要時(shí)才與其打交道。
Rust 的優(yōu)勢
多年來,微軟始終在尋找更安全的 C 和 C++ 的替代品。2016 年 6 月,微軟曾開源 “Checked C”,這是 C 語言的一個(gè)擴(kuò)展,它帶來了一些解決安全問題的新特性,但依然沒有徹底解決問題。由于自動(dòng)內(nèi)存管理,Microsoft 還有其他更安全的編程語言,C#和.NET 系列是一個(gè),編譯為 JavaScript 的 TypeScript 是另一個(gè)。這些語言被 Microsoft 及其客戶廣泛使用,但它們無法滿足所有需求。對此,微軟安全響應(yīng)中心(MSRC)首席安全技術(shù)經(jīng)理 Gavin Thomas 表示:“如果開發(fā)人員能夠?qū)⒋_保內(nèi)存安全的 .NET,C#等語言與高效的 C ++ 結(jié)合起來,那就太好了。也許我們可以。” 因此,Rust 成為了這項(xiàng)計(jì)劃的主角。
據(jù)了解,Rust 創(chuàng)建于 2006 年,被創(chuàng)建者 Mozilla 稱為 “C / C ++ 的替代品”。最初,它只是 Mozilla 的一個(gè)研究項(xiàng)目,旨在開發(fā)更安全、快速的編程語言以重寫 Firefox 瀏覽器,大多數(shù)開發(fā)人員認(rèn)為它是一個(gè)理論項(xiàng)目,而如今 Rust 正在逐步證明自己的實(shí)力。2016 年 8 月發(fā)布的 Firefox 48 采用了以 Rust 構(gòu)建的 mp4 軌道元數(shù)據(jù)解析器,該解析器首次在 Windows 和 32 位 Linux 桌面提供。最近,Brave 瀏覽器用 Rust 替換了最初用 C ++ 編寫的廣告攔截組件。Cloudflare 和 Dropbox 目前也在生產(chǎn)系統(tǒng)中運(yùn)行 Rust。
Rust 的顯著特征包括:
零成本抽象
移動(dòng)語義
保證內(nèi)存安全
沒有數(shù)據(jù)競爭的線程
基于特質(zhì)的泛型
模式匹配
類型推斷
最小運(yùn)行時(shí)間
高效的 C 綁定
Rust 團(tuán)隊(duì)表示,它具有豐富的系統(tǒng)和所有權(quán)模型,可確保內(nèi)存安全和線程安全。此外,它還提供文檔,包含集成的包管理器和其他有助于提高開發(fā)人員工作效率的工具。更為重要的是,Rust 從一開始就設(shè)計(jì)了防止內(nèi)存損壞的漏洞。它的語法也更為簡單,由它編寫的應(yīng)用程序不會(huì)產(chǎn)生相同數(shù)量的錯(cuò)誤,因此開發(fā)人員可以專注于擴(kuò)展其應(yīng)用程序,而非進(jìn)行持續(xù)的維護(hù)工作。
根據(jù) StackoverFlow2019 年開發(fā)者調(diào)查報(bào)告的數(shù)據(jù)顯示,Rust 是如今最受歡迎的編程語言,因此更容易招募到相關(guān)開發(fā)人員。相比之下,在這項(xiàng)調(diào)查中,受訪者將 C 列為第四個(gè)最討厭的編程語言,C++ 則排名第九。
StackoverFlow2019 年開發(fā)者調(diào)查報(bào)告數(shù)據(jù)
據(jù)了解,目前,除 Mozilla 之外,全球有數(shù)百家公司正在使用 Rust,如 Amazon、Atlassian、Dropbox、Facebook、Google、Microsoft、Red Hat 和 Reddit 等。在國內(nèi),百度、字節(jié)跳動(dòng)、 PingCAP、螞蟻金服、知乎、SenseTime 等企業(yè)也都在使用 Rust。
Rust 存在的問題
然而,Rust 仍存在一些不足。據(jù)先前的一項(xiàng)調(diào)查顯示,它需要改進(jìn)的方面包括:
更好的人體工程學(xué)
更好的文檔
更好的庫支持
更簡單的學(xué)習(xí)曲線
更多的 IDE 支持
一些用戶在談及為何不使用 Rust 的原因時(shí)表示,“盡管學(xué)習(xí)曲線和語言的復(fù)雜性仍是人們學(xué)習(xí) Rust 的阻礙,但令許多人產(chǎn)生共鳴的一個(gè)方面是,只是還沒有足夠活躍的采用 Rust 的商業(yè)項(xiàng)目讓人們參與其中…… 對于一些人來說,只要有強(qiáng)烈的動(dòng)機(jī),他們就可以克服 Rust 的學(xué)習(xí)曲線。” 此外,受缺少 IDE 支持的影響,約 10% 的用戶正在尋找更好的 IDE 支持,而 5% 的老用戶因此停用 Rust。
對于這項(xiàng)或?qū)?gòu)建新的語言生態(tài)的計(jì)劃,微軟安全響應(yīng)中心(MSRC)首席安全技術(shù)經(jīng)理 Gavin Thomas 表示,“我們是一個(gè)響應(yīng)組織,但我們也發(fā)揮積極的作用 “,“我們應(yīng)該從一開始就努力防止開發(fā)人員引入問題,而不是為解決問題提供指導(dǎo)和工具 “。目前,關(guān)于何時(shí)在其產(chǎn)品或云服務(wù)上使用 Rust,微軟還沒有具體透露。
總結(jié)
以上是生活随笔為你收集整理的微软计划使用 Rust 取代 C和C+的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础教程(第3版)之一些内置
- 下一篇: 2019谷歌学术指标出炉,影响因子何去何