軟件產(chǎn)品對內(nèi)存安全的迫切需求
半個多世紀(jì)以來,軟件工程師已經(jīng)知道惡意行為者可以利用一類稱為“內(nèi)存安全漏洞”的軟件缺陷來危害應(yīng)用程序和系統(tǒng)。在此期間,專家們多次警告與內(nèi)存安全漏洞相關(guān)的問題。內(nèi)存不安全代碼甚至導(dǎo)致了 1988 年的一次重大互聯(lián)網(wǎng)中斷。內(nèi)存不安全問題到底有多大?微在一篇博客文章中報告稱,“微軟每年指定 CVE(常見漏洞和暴露)的漏洞中,約有 70% 仍然是內(nèi)存安全問題。” 谷歌同樣報稱,“Chromium 項目發(fā)現(xiàn),我們大約 70% 的嚴(yán)重安全漏洞都是內(nèi)存安全問題。” Mozilla 報在對安全漏洞的分析中,“在 34 個嚴(yán)重/嚴(yán)重錯誤中,有 32 個與內(nèi)存相關(guān)。”
這些漏洞并不是理論上的。攻擊者利用它們對真人進(jìn)行攻擊。例如,谷歌的零日計劃團(tuán)隊在將攻擊者報告給軟件提供商之前分析了攻擊者在野外使用的漏洞(也稱為“零日漏洞”)。他們報稱,“在今年的 58 個 [此類漏洞] 中,有 39 個(即 67%)是內(nèi)存損壞漏洞。” 公民實驗室發(fā)現(xiàn)針對利用內(nèi)存安全漏洞的民間社會組織的間諜軟件。
在其他哪個行業(yè),市場會容忍產(chǎn)品用戶幾十年來所面臨的這種眾所周知的嚴(yán)重危險?
多年來,軟件工程師發(fā)明了許多巧妙但最終不足以緩解此類漏洞的方法,包括內(nèi)存隨機(jī)化和沙箱技術(shù)等可減少影響的工具,以及可減少發(fā)生的靜態(tài)和動態(tài)代碼分析工具。除了這些工具之外,組織還花費了大量時間和金錢來培訓(xùn)開發(fā)人員以避免不安全的內(nèi)存操作。還有一些并行的工作來提高現(xiàn)有 C/C++ 代碼的內(nèi)存安全性。盡管做出了這些努力(以及相關(guān)的復(fù)雜性、時間和金錢成本),但幾十年來,內(nèi)存不安全一直是最常見的軟件安全缺陷類型。
然而,每個軟件公司都應(yīng)該調(diào)查一些領(lǐng)域。首先,硬件方面有一些有前途的內(nèi)存安全緩解措施。能力硬件增強(qiáng)型 RISC 指令 ( CHER ) 研究項目使用修改后的處理器為 C 和 C++ 等內(nèi)存不安全語言提供保護(hù),以防止許多廣泛利用的漏洞。另一種硬件輔助技術(shù)以內(nèi)存標(biāo)記擴(kuò)展 (MTE) 的形式出現(xiàn),在某些系統(tǒng)中可用。雖然其中一些基于硬件的緩解措施仍在從研究到交付產(chǎn)品的過程中,但許多觀察家認(rèn)為它們將成為消除內(nèi)存安全漏洞總體戰(zhàn)略的重要組成部分。
其次,公司應(yīng)該研究內(nèi)存安全的編程語言。除 C/C++ 之外的大多數(shù)現(xiàn)代編程語言都已經(jīng)是內(nèi)存安全的。內(nèi)存安全編程語言管理計算機(jī)的內(nèi)存,因此程序員不能引入內(nèi)存安全漏洞。與其他需要持續(xù)維護(hù)的可用緩解措施(無論是開發(fā)新的防御措施、篩選漏洞掃描還是人工)相比,一旦使用內(nèi)存安全編程語言編寫代碼即可保持內(nèi)存安全,則無需執(zhí)行任何工作。
直到幾年前,我們還缺乏一種具有 C/C++ 速度且具有內(nèi)置內(nèi)存安全保證的語言。2006 年,Mozilla的一名軟件工程師開始研究一種名為 Rust 的新編程語言。Rust 1.0 版本于 2015 年正式發(fā)布。從那時起,幾個著名的軟件組織開始在他們的系統(tǒng)中使用它,包括亞馬遜、Facebook、谷歌、微軟、Mozilla 等。Linux 內(nèi)核的開發(fā)也支持它。
不同的產(chǎn)品需要不同的投資策略來減少內(nèi)存不安全代碼。C/C++ 緩解措施、硬件緩解措施和內(nèi)存安全編程語言之間的平衡甚至可能在同一公司的產(chǎn)品之間有所不同。沒有一種方法可以解決所有產(chǎn)品的所有問題。然而,軟件制造商不能做的一件事就是忽視這個問題。軟件行業(yè)決不能因為無所作為而將時間再拖到十年。
CISA 的安全設(shè)計白皮書為軟件制造商概述了三個核心原則:掌握客戶安全成果、擁抱徹底的透明度以及從組織高層領(lǐng)導(dǎo)安全轉(zhuǎn)型。內(nèi)存不安全問題的解決方案將包含所有三個原則。
CISA 敦促軟件制造商將減少并最終消除其產(chǎn)品線中的內(nèi)存安全漏洞作為公司的最高目標(biāo)。為了證明這樣的承諾,公司可以發(fā)布“內(nèi)存安全路線圖”,其中包括有關(guān)他們?nèi)绾涡薷能浖_發(fā)生命周期(SDLC)以實現(xiàn)這一目標(biāo)的信息。路線圖可能包括詳細(xì)信息,例如它將使用內(nèi)存安全編程語言構(gòu)建新產(chǎn)品或組件的日期,以及計劃支持屬于其供應(yīng)鏈一部分的開源庫的內(nèi)存安全計劃。
內(nèi)存不安全問題幾十年來一直困擾著軟件行業(yè),并且將繼續(xù)成為漏洞和現(xiàn)實世界危害的主要來源,直到軟件制造商的頂級業(yè)務(wù)領(lǐng)導(dǎo)者做出適當(dāng)?shù)耐顿Y并掌控客戶的安全結(jié)果。在我們慶祝國家編碼周之際,我們期待整個軟件行業(yè)的參與者共同努力,使軟件在設(shè)計上更加安全,而內(nèi)存安全是實現(xiàn)這一目標(biāo)的關(guān)鍵。