為提升Azure Sphere物聯網平臺安全水平,微軟決定引入Rust
微軟的目標非常明確——運用一切能夠調動的力量,為聯網設備安全提供保障。
現在,開發人員已經可以在Azure Sphere平臺上用Rust語言為聯網設備創建應用程序。
以此為基礎,程序員們可以使用Rust中的性能和安全功能增強物聯網設備及其他嵌入式系統,避免其成為僵尸網絡及其他惡意軟件的攻擊目標。
微軟嵌入式軟件工程師Akshatha Udayashankar在一篇博文中寫道,“Rust和Azure Sphere是個很好的組合——一邊是通過嚴格的編譯時安全檢查,提高代碼安全性的編程語言;另一邊則是提供安全身份、更新以及端到端加密通信服務的Azure Sphere,可為聯網設備提供更好的客戶應用安全性。”
微軟在2022年6月就曾開放過這套組合的預覽版。同一周,谷歌也表示將在其開源Chronium項目中支持第三方Rust庫。與微軟一樣,谷歌也高度贊賞了Rust編程語言的安全特性。
當時有報道指出,Rust的吸引力不僅限于安全層面。“還包括更高的正確性,以及更可靠的并發性。Rust的「富類型系統」也有助于編寫出更具表現力的代碼。”
Azure Sphere已經包含面向聯網設備的內置安全功能,且采用基于聯發科芯片及Linux操作系統構建的硬件。此外,它還提供基于云的Azure Sphere安全服務(AS3),可在設備與互聯網或云端之間建立安全連接。
AS3是用于保障安全啟動、設備身份驗證、軟件信任以及設備僅運行可信代碼的證明性機制,也讓微軟能夠為設備上的Azure Sphere操作系統及應用程序安全下載更新。
在引入Rust之后,Azure Sphere的安全功能又將得到進一步提升。
Azure Sphere首席技術項目經理Joseph Lloyd表示,“Rust承諾顯著減少甚至徹底消除各類軟件缺陷。”
“忘記初始化變量了?編譯器會明確報錯!想執行空指針引用取消操作?根本不可能!對于嵌入式系統,這樣的安全水平相當于生命保障線。如此一來,即使是繼承了大量舊代碼或集成了多個開源項目的高復雜度系統,上市工作量和調整需求也會少得多。”
Udayashankar還補充道,Rust為系統編程和低級代碼控制提供了現代開發者工具,避免這些工作受到各類“細微錯誤”的影響。相比之下,其他大多數語言的開發者只能開展大量測試和代碼審查來識別這些小紕漏。
Rust編譯器會拒絕編譯存在缺陷的代碼,例如報告代碼中的并發錯誤。她解釋稱,編譯器還提供功能添加和重構選項,由此實現的穩定性和遺留代碼風險都要遠優于其他沒有此類檢查的語言。
Udayashankar寫道,“Rust努力在提高代碼安全的同時加快運行速度。零成本抽象使將高級功能編譯為低級代碼的速度,已經基本看齊手動編碼。”
Rust誕生自Mozilla公司之手并一直維護至2021年,隨后擁有了自己的語言基金會。微軟和谷歌的大力支持讓Rust聲名大噪,這也是對其安全功能的認可。谷歌已經在Android中使用Rust,它的身影也出現在蘋果和Linux內核等項目當中。
美國國家安全局于2022年11月對Rust張開懷抱,鼓勵各部門從C/C++語言過渡至Rust、Go和C#等內存安全語言。
此類語言會使用編譯時和運行時檢查,以自動阻止各種可能被程序員錯誤納入代碼的缺陷。
在去年的一份報告中,Okta提到Rust編譯器“不接受非內存安全代碼,除非開發者在非安全塊或函數中明確將其標記為「非安全」。這種靜態編譯時分析消除了各類內存bug,并配合多種額外的運行時檢查嚴格保障內存安全。”
正是憑借這些優勢,Rust作為眾多新興編程語言中的典型代碼(Go也是其中之一)才被Hive和BlackCat等網絡威脅組織利用,借以逃避安全檢測。
Rust是通過crate系統在Azure Sphere中實現的,其依賴項則內置于微軟的“客戶應用”平臺當中。Udayashankar指出,考慮到Azure Sphere應用中包含眾多依賴項,程序員們需要改掉C語言編程中不管不顧的壞習慣,在Rust中明確指定內存使用方法。