向內(nèi)存安全語言遷移的五大挑戰(zhàn)

內(nèi)存安全漏洞已經(jīng)存在了半個多世紀(jì)。它本質(zhì)上是將程序員從繁瑣的內(nèi)存管理工作中解脫出來。C/C++要求程序員手動分配和釋放內(nèi)存,這不僅復(fù)雜易錯,還需要時刻追蹤內(nèi)存的使用情況,以免出現(xiàn)內(nèi)存泄露等問題。

640 (1).png

本文來自微信公眾號“GoUpSec”。

近日,白宮國家網(wǎng)絡(luò)主任辦公室(ONCD)在題為《回歸基礎(chǔ)構(gòu)件:通往安全軟件之路》的報告中呼吁開發(fā)者放棄C、C++語言,轉(zhuǎn)而使用“內(nèi)存安全的編程語言”,例如Rust語言。

傳統(tǒng)編程語言C/C++雖然強大,但一直飽受內(nèi)存安全漏洞的困擾。這些漏洞不僅復(fù)雜難懂,而且極易造成系統(tǒng)崩潰等嚴(yán)重后果。為了解決這一難題,近年來內(nèi)存安全語言逐漸興起,并有望成為未來編程語言的主流。

近日,helpnetsecurity采訪了開源安全基金會(OpenSSF)的總經(jīng)理Omkhar Arasaratnam,探討了業(yè)界轉(zhuǎn)向內(nèi)存安全語言的挑戰(zhàn)與策略,內(nèi)容整理如下:

內(nèi)存安全語言的優(yōu)勢

內(nèi)存安全漏洞已經(jīng)存在了半個多世紀(jì)。它本質(zhì)上是將程序員從繁瑣的內(nèi)存管理工作中解脫出來。C/C++要求程序員手動分配和釋放內(nèi)存,這不僅復(fù)雜易錯,還需要時刻追蹤內(nèi)存的使用情況,以免出現(xiàn)內(nèi)存泄露等問題。而Java、Rust、Python和JavaScript等現(xiàn)代語言則通過自動內(nèi)存管理的方式,讓程序員將精力集中在核心邏輯的編寫上,避免陷入低級內(nèi)存管理的泥潭。

在操作系統(tǒng)內(nèi)核、系統(tǒng)編程等高危場景下,內(nèi)存安全語言的優(yōu)勢尤為突出。操作系統(tǒng)內(nèi)核擁有整個系統(tǒng)的最高權(quán)限,任何內(nèi)存安全漏洞都可能導(dǎo)致系統(tǒng)崩潰甚至信息泄露。

盡管熟練的程序員可以使用C/C++等非內(nèi)存安全語言避免內(nèi)存漏洞,但現(xiàn)實情況并不樂觀。微軟曾經(jīng)統(tǒng)計過自家產(chǎn)品的漏洞,其中70%都與內(nèi)存安全問題相關(guān)。谷歌針對安卓系統(tǒng)進行的類似研究也得到了相似的結(jié)論:90%的安卓系統(tǒng)漏洞都與內(nèi)存安全有關(guān)。

Go、Python、Rust和Java等語言都是優(yōu)秀的內(nèi)存安全語言范例。其中,Rust有望成為Linux內(nèi)核的第二個官方支持語言。這將允許開發(fā)者用完全內(nèi)存安全的語言重寫Linux內(nèi)核的部分關(guān)鍵代碼。

遷移的五大挑戰(zhàn)

向內(nèi)存安全語言遷移并非易事,開發(fā)者和企業(yè)需要面對五大挑戰(zhàn):

開發(fā)者培訓(xùn)和認(rèn)證滯后:現(xiàn)有開發(fā)人員需要學(xué)習(xí)新語言,或者招聘熟悉內(nèi)存安全語言的人才。同時,調(diào)試和構(gòu)建系統(tǒng)也需要進行相應(yīng)調(diào)整以支持新語言,相關(guān)的培訓(xùn)和認(rèn)證服務(wù)相對滯后。

硬件支持有限:C/C++等老牌語言可在幾乎所有平臺上運行,而Rust等新興語言的硬件支持則相對有限。

監(jiān)管要求:一些安全關(guān)鍵型系統(tǒng)有著嚴(yán)格的技術(shù)和安全需求,在新語言缺乏相關(guān)認(rèn)證的情況下,可能無法輕易遷移。

潛在Bug:將老代碼移植到新語言可能會引入新的Bug。即使是經(jīng)驗豐富的程序員,也可能因為重寫過程中的細(xì)微差別導(dǎo)致程序運行結(jié)果與預(yù)期不符,從而產(chǎn)生線上故障。

部署阻力:關(guān)鍵基礎(chǔ)設(shè)施系統(tǒng)內(nèi)存安全代碼的重新部署面臨挑戰(zhàn)。

遷移策略:安全優(yōu)先

用Rust重寫所有現(xiàn)有代碼顯然并不現(xiàn)實。OpenSSF建議開發(fā)者在開啟新項目時優(yōu)先考慮使用內(nèi)存安全語言,同時將Rust應(yīng)用于關(guān)鍵代碼路徑,例如身份驗證、授權(quán)、加密以及處理網(wǎng)絡(luò)或用戶輸入的部分。

雖然內(nèi)存安全語言并非靈丹妙藥,但卻是提升代碼安全性的重要一步。通過使用內(nèi)存安全語言,程序員可以將更多精力放在核心邏輯的開發(fā)上,避免在低級內(nèi)存管理上浪費時間和精力。

對于難以遷移的遺留代碼,OpenSSF提供了《C/C++加固指南》,幫助開發(fā)者在不大幅改動既有代碼庫的情況下提升安全性。

需要注意的是,關(guān)鍵基礎(chǔ)設(shè)施的工業(yè)控制系統(tǒng)通常難以通過企業(yè)網(wǎng)絡(luò)進行更新,因此重新部署安全代碼可能比重寫本身更加耗時。

OpenSSF鼓勵社區(qū)在開始新項目時考慮使用Rust進行編寫,并根據(jù)安全優(yōu)先級將Rust用于關(guān)鍵代碼路徑(經(jīng)常被濫用或攻擊的部分,或者“皇冠上的寶石”的關(guān)鍵區(qū)域),例如從身份驗證、授權(quán)、加密以及從網(wǎng)絡(luò)或用戶獲取輸入內(nèi)容的代碼。

內(nèi)存安全語言的未來

在某些關(guān)鍵領(lǐng)域,雖然新興語言的安全性優(yōu)勢非常誘人,但貿(mào)然遷移反而會帶來風(fēng)險。預(yù)計內(nèi)存安全語言并不會在所有行業(yè)成為標(biāo)準(zhǔn),一些對穩(wěn)定性要求極高的領(lǐng)域出于謹(jǐn)慎考慮,可能會推遲采用內(nèi)存安全語言。

不過,從長遠(yuǎn)來看,使用內(nèi)存安全語言來開發(fā)新項目具有普遍意義。例如,Alpha-Omega公司資助了用Rust開發(fā)的Rustls項目,旨在實現(xiàn)更安全的TLS和QUIC協(xié)議。通過使用內(nèi)存安全語言,業(yè)界可以避免類似于OpenSSL Heartbleed漏洞那樣的安全事件。

教育和認(rèn)證是關(guān)鍵

教育和培訓(xùn)是網(wǎng)絡(luò)安全最強大的基礎(chǔ)防線之一。如今許多小學(xué)已經(jīng)開始將Python作為編程語言入門課程。OpenSSF希望未來能夠盡早將Rust等其他內(nèi)存安全語言引入基礎(chǔ)教育。

此外,Rust基金會也提供了豐富的學(xué)習(xí)資源,例如備受好評的書籍《Rust編程語言》以及正在開發(fā)的培訓(xùn)和認(rèn)證項目。通過積極的學(xué)習(xí)和社區(qū)協(xié)作,內(nèi)存安全語言有望在未來發(fā)揮更大的作用。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論