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