最安全的程式語言:Rust

最安全的程式語言:Rust

在“安全優先”、“安全左移”、“供應鏈安全”的大趨勢下,Rust作為一種更安全的程式語言越來越流行。

在IT巨頭那裡,Rust尤其受到重視。例如,微軟曾專門委派一名實習生,用Rust重寫一個至關重要的網路處理程式,該程式的記憶體安全漏洞過去讓微軟安全響應中心(MSRC)頭疼不已。

Rust已經連續五年被開發人員評為“最受喜愛”的程式語言,因為它可以避免某些型別的記憶體安全錯誤,能從根本上改善軟體漏洞的現狀。

讓Rust聲名遠播的優點還包括:提供C和C++的速度和控制能力,同時還提供了其他語言(例如Go和Python)的安全性和安全性保證。MSRC將近70%的漏洞歸類為記憶體安全問題,因此消除此類漏洞至關重要。

MSRC軟體工程師Alexander Clarke近日發文表達了對Rust的偏愛,他在部落格中指出,儘管用C++編譯可能會更容易,但是生成的程式更有可能出現錯誤和漏洞。

Alexander說:“Rust編譯器的錯誤訊息功能特別有用。”“透過錯誤訊息,Rust能確切告訴你程式碼為什麼不正確,並給出解決建議,從而落實了安全程式設計的概念。”

在Mozilla採用Rust為Firefox瀏覽器重寫程式碼十多年之後,Rust可能已準備就緒。

雖然當前Rust的採用率仍然很低,根據“StackOverflow 2020開發人員調查”,僅5。1%的開發人員使用Rust語言,但許多大型公司已承諾在特定的開發專案中使用Rust。

從2016年開始,Mozilla基金會就開始在推出使用Firefox瀏覽器中的Rust語言開發的程式碼。2019年,微軟表示其打算更廣泛地採用Rust在Windows中編寫系統軟體。在2021年2月,Mozilla拆分了該專案,由新的Rust Foundation管理,專案的創始贊助商包括微軟、谷歌、亞馬遜和華為。

為什麼Rust越來越受歡迎?

Rust Foundation的臨時執行董事Ashley Williams表示,這不僅與速度和安全性有關,至少對開發人員而言也是如此:“實際上,人們對Rust的讚譽,不僅包括語言和編譯器,還包括高人氣的開發社群和一流的軟體包管理器。”

對於企業而言,是否採用Rust取決於Rust的短板——Rust的缺點是什麼?很多開發人員發現Rust的編譯器喜歡無緣無故地報警並拒絕工作;某些編碼模式會導致緩衝區溢位,釋放後使用(use-after-free)漏洞,記憶體兩次釋放問題以及引用空指標。

雖然尚存在一些問題,瑕不掩瑜,Rust的安全性的回報足夠誘人。以微軟為例,Rust可以幫助微軟消除大部分CVE漏洞。微軟首席雲開發倡導者Ryan Levick在一篇部落格文章中說,使用程式語言構建核心系統元件可以幫助減少主要的漏洞來源。

他說:

“我們相信Rust在編寫安全系統軟體方面會改變遊戲規則。”

“Rust提供編寫底層系統所需的效能和控制,同時使軟體開發人員能夠編寫健壯、安全的程式。”

當然,我們也需要留神程式語言安全性的過分誇大。

1996年1月,Sun Microsystems(昇陽公司)宣佈推出Java 1。0,鼓吹可移植程式碼(例如“一次編寫,隨處執行”),Sun還吹捧了許多安全屬性,例如自動記憶體管理(即“垃圾回收”)以及型別安全性和防止小程式(Applets)修改系統資源的隔離功能等。

時至今日,根據StackOverflow調查,Java的使用率約為40%,僅次於JavaScript、HTML/CSS、SQL和Python,位居第五。但是,根據《2020年開源安全狀況》,在2019年開源元件中發現的6,000多個漏洞中,Java程式佔15%,僅次於C(佔30%)和PHP(佔27%)。

Java的案例表明,效率優先的開發人員通常不會使用安全功能,而是繼續開發不安全的程式碼。

Rust的安全方法比Java更自以為是,很可能無法避免開發人員對安全性的破壞。儘管Rust提供了記憶體安全性,但它也提供了一種繞過方法——“UNSAFE”關鍵字。使用關鍵字是開發人員覆蓋編譯器並阻止編譯器檢查程式碼塊的一種方法——因為開發人員拍胸脯擔保該程式碼是安全的。

許多Rust愛好者認為濫用關鍵字會破壞Rust模型。Williams對此表示理解,她說:“有些人確實會用不安全的方式使用UNSAFE防護塊。”“如果將內容放入不安全的塊中,編譯器將不會對其進行檢查,如果這些內容有誤,則可能會導致記憶體錯誤。”

但是她指出,即使使用了正確的編譯器功能,漏洞也很可能會滲透到開發人員的程式中,但是安全研究人員和駭客往往會發現開發人員遺留下來的問題和漏洞。例如:重點關注Rust安全的站點RustSec列出了Rust軟體包(或“crates”)和語言中的250多個漏洞。