【記憶體安全】程式語言大變革 業界唱好Rust取代C或C++
網絡安全事故頻頻發生,不少科技公司及開源社群,都開始倡議從程式語言層級確保記憶體安全(memory safety)問題,即以具備記憶體安全的程式語言例如 Rust、Java、Go 等,取代 C 或 C++。到底為何有這變動?業界又是否可以順利轉型?
記憶體安全可說是開發軟件的一大難題,早在 2019 年,Microsoft 已發表報告指出過去 12 年來發生的網絡安全事故中,近 70% 都與記憶體安全問題有關。
記憶體安全其實是指程式運行時因管理記憶體失當,導致數據外洩或被注入惡意編碼,當中包括記憶體緩衝區溢出(buffer overflow)、超出緩衝區邊界(out of bounds)存取及釋放記憶體(use after free)出錯等。單是這三個項目,已佔據了由安全機構 MITRE 公布的 2022 年 25 大常見 CWE 通用弱點名單的頭七位內,可見問題非常嚴重及普遍。
問題的根源,其實與業界常用於撰寫軟件的程式碼 C 及 C++ 有關,專家指出雖然 C 及 C++ 在管理記憶體運用方面,給予開發者極大自由度及彈性,但只要開發者未有嚴格地驗證執行程序是否有邏輯漏洞存在,就可讓黑客發動遙距攻擊。由於 C 及 C++ 是開發軟件的熱門程式語言,因此才會經常發生網絡安全事故。
有見及此,近年各地政府如美國的 CISA、NSA、科技公司如 Microsoft、Google、Meta,均開始主張要放棄使用 C 及 C++,轉而使用內建自動管理記憶體的程式語言如 Rust、Go、C# 等,因為開發者毋須考慮記憶體配置問題,一切交由系統決定,有專家指出雖然使用這些語言也不能 100% 阻止問題發生,但已有助大大減少因開發者疏忽而出現的記憶體安全漏洞。
而為了推動這種轉型,非牟利組織 ISRG 的 Prossimo 計劃已提出各種倡儀,包括以 Rust for Linux 取代以 C 語言撰寫 Linux Kernel、Rustls 取代 C 語言撰寫 OpenSSL 等,而科技龍頭企業如 Meta、Google 的 Android 開源項目亦以行動支持,以 Rust 作為主要開發程式語言。
雖然業界一片唱好,但實際上要完全取代 C 或 C++ 卻不是易事,因為大量軟件都是以它們編寫,而且在一些倡議貼文的回應中,仍可看到不少開發者相當抗拒要放棄 C 或 C++,因為是他們最熟悉的語言,而且部分開發者亦主觀地認為 Rust 會比較難學習。另外,學校的課程支援更是不可少,但綜觀現時課程內容,都仍然是以 C 或 C++ 佔多,所以要完全取代,真正可說是長路漫漫。
相關文章:【轉行做IT●前景篇】一文睇晒四大最搶手職位 熱門課程大拆解