微軟計劃使用Rust 取代C和C++

昨日,微軟安全響應中心(MSRC)團隊在官網更新文章,就近日提出的最新計劃,即未來將使用Rust作爲C、C++以及其他編程語言的替代品以改善應用程序的安全性的計劃,從空間內存安全、時間內存安全、數據競爭等方面進行了進一步的深入補充。首席安全技術經理Gavin Thomas表示,開發人員的核心工作不是擔心安全性,而是做好功能開發,首先需要啓用一種“不會引入內存安全問題”的開發語言,顯然,這一次的主角是Rust。

過去12年,約70%的微軟補丁針對內存漏洞

如今,內存漏洞已成爲黑客攻擊的主要對象。據微軟最新調查數據顯示,在過去12年裏,約70%的微軟補丁都是針對內存漏洞的。

自2004年以來,微軟安全響應中心(MSRC)已經對每一個報告的微軟安全漏洞進行了分類。從所有分類中,得出了一個令人驚訝的事實:正如Matt Miller今年在BlueHat IL的演講中所討論的那樣,大多數修復的漏洞和分配的CVE都是由開發人員無意中將內存損壞錯誤插入到其C和C++代碼中造成的。這兩種“內存不安全”的編程語言允許開發人員在代碼被執行的地方對內存地址進行細粒度控制。開發人員內存管理代碼中的一個錯誤可能導致大量內存安全錯誤,攻擊者便可利用這些錯誤造成危險和具有侵入性的後果,比如遠程代碼執行(RCE)和權限升級漏洞(EoP)。

數據來源:微軟安全響應中心網站

近年來,隨着微軟增加其代碼庫並在代碼中使用更多的開源軟件,這一問題並沒有得以解決,反而變得更糟,而微軟也並不是唯一一個暴露出內存安全漏洞的企業。

在官網發佈的最新文章中,微軟安全響應中心(MSRC)團隊就如何解決內存安全問題進行了如下分析,

爲了解決內存安全問題,需要採取幾種不同的方式。C++中的“現代”構造(例如span)能夠在一定程度上預防某些內存安全問題,此外,我們應儘可能使用其它現代C++功能(例如智能指針)。然而,現代C++仍然不具備全面的內存安全與數據爭用機制。更重要的是,如果程序員不加以運用,這些功能本身將毫無意義;而且這些功能在規模較大且較爲模糊的代碼庫也可能無法起效。再者,C++缺乏能夠在安全抽象當中打包不安全代碼的良好工具,這意味着雖然能夠在本地級別強制執行正確的編碼實踐,但開發人員仍然很難在C或者C++當中構建出能夠安全組合的軟件組件。除此之外,我們應儘可能將軟件最終遷移至具備全面內存安全特性的語言當中,例如通過運行時檢查以及垃圾回收機制實現內存保護的C#或者F#。畢竟,內存管理是一項極爲複雜的功能,最好是確保只在必要時纔跟它打打交道。

Rust的優勢

多年來,微軟始終在尋找更安全的C和C++的替代品。2016年6月,微軟曾開源“Checked C”,這是C語言的一個擴展,它帶來了一些解決安全問題的新特性,但依然沒有徹底解決問題。由於自動內存管理,Microsoft還有其他更安全的編程語言,C#和.NET系列是一個,編譯爲JavaScript的TypeScript是另一個。這些語言被Microsoft及其客戶廣泛使用,但它們無法滿足所有需求。對此,微軟安全響應中心(MSRC)首席安全技術經理Gavin Thomas表示:“如果開發人員能夠將確保內存安全的 .NET,C#等語言與高效的C ++結合起來,那就太好了。也許我們可以。”因此,Rust成爲了這項計劃的主角。

據瞭解,Rust創建於2006年,被創建者Mozilla稱爲“C / C ++的替代品”。最初,它只是Mozilla的一個研究項目,旨在開發更安全、快速的編程語言以重寫Firefox瀏覽器,大多數開發人員認爲它是一個理論項目,而如今Rust正在逐步證明自己的實力。2016年8月發佈的Firefox 48採用了以Rust構建的mp4軌道元數據解析器,該解析器首次在Windows和32位Linux桌面提供。最近,Brave瀏覽器用Rust替換了最初用C ++編寫的廣告攔截組件。Cloudflare和Dropbox目前也在生產系統中運行Rust。

Rust的顯著特徵包括:

  • 零成本抽象
  • 移動語義
  • 保證內存安全
  • 沒有數據競爭的線程
  • 基於特質的泛型
  • 模式匹配
  • 類型推斷
  • 最小運行時間
  • 高效的C綁定

Rust團隊表示,它具有豐富的系統和所有權模型,可確保內存安全和線程安全。此外,它還提供文檔,包含集成的包管理器和其他有助於提高開發人員工作效率的工具。更爲重要的是,Rust從一開始就設計了防止內存損壞的漏洞。它的語法也更爲簡單,由它編寫的應用程序不會產生相同數量的錯誤,因此開發人員可以專注於擴展其應用程序,而非進行持續的維護工作。

根據StackoverFlow2019年開發者調查報告的數據顯示,Rust是如今最受歡迎的編程語言,因此更容易招募到相關開發人員。相比之下,在這項調查中,受訪者將C列爲第四個最討厭的編程語言,C++則排名第九。


StackoverFlow2019年開發者調查報告數據

據瞭解,目前,除 Mozilla 之外,全球有數百家公司正在使用 Rust,如 Amazon、Atlassian、Dropbox、Facebook、Google、Microsoft、Red Hat 和 Reddit 等。在國內,百度、字節跳動、 PingCAP、螞蟻金服、知乎、SenseTime等企業也都在使用Rust。

Rust存在的問題

然而,Rust仍存在一些不足。據先前的一項調查顯示,它需要改進的方面包括:

  • 更好的人體工程學
  • 更好的文檔
  • 更好的圖書館支持
  • 更簡單的學習曲線
  • 更多的IDE支持

一些用戶在談及爲何不使用Rust的原因時表示,“儘管學習曲線和語言的複雜性仍是人們學習Rust的阻礙,但令許多人產生共鳴的一個方面是,只是還沒有足夠活躍的採用Rust的商業項目讓人們參與其中……對於一些人來說,只要有強烈的動機,他們就可以克服Rust的學習曲線。”此外,受缺少IDE支持的影響,約10%的用戶正在尋找更好的IDE支持,而5%的老用戶因此停用Rust。

對於這項或將構建新的語言生態的計劃,微軟安全響應中心(MSRC)首席安全技術經理Gavin Thomas表示,“我們是一個響應組織,但我們也有積極的角色“,“我們應該從一開始就努力防止開發人員引入問題,而不是爲解決問題提供指導和工具“。目前,微軟將於何時在其產品或雲服務上使用Rust尚不明確。

相關文章:
A proactive approach to more secure code
We Need a Safer Systems Programming Language
明明很好很強大,Rust 卻還是那麼小衆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章