谷歌的Android 11將安全性(BYOD相關)和隱私增強功能作為主要賣點,但谷歌明白,要想從根本上扭轉Android安全態勢,就必須在生態上游和開發周期的“左側”下猛藥。
近日,谷歌的Android安全新策略引起了網絡安全和移動互聯行業的廣泛關注。谷歌鼓勵開發人員轉向使用內存安全的編程語言,例如Java、Kotlin和Rust,并宣稱C和C++的安全性亟待提高。
影響Android操作系統的嚴重和高危漏洞
頭號威脅:內存安全
根據谷歌最新公布的安卓安全報告統計(上圖),Android操作系統的嚴重和高危安全漏洞中,有59%是內存問題,例如內存損壞和溢出。內存安全是迄今為止最主要的Android安全問題(59%),其次是權限繞過漏洞,占Google安全工程師在2019年修復的漏洞的21%。
不僅僅是Android系統,內存安全通常也是Java、Windows 10和Chrome等主要平臺的頭號安全漏洞類別。谷歌工程師去年曾表示,Chrome安全漏洞中有70%是內存安全問題。之前,曾有微軟工程師透露說,其產品修復的所有錯誤中有70%是內存安全性問題,即允許訪問超出操作系統分配的內存和地址的軟件漏洞。
谷歌認為,使用更加安全的開發語言是保護Android免受惡意軟件和漏洞利用的根本措施。“C和C++不能像Java、Kotlin和Rust這樣的語言提供內存安全。鑒于Android安全報告中的大多數安全漏洞都是內存安全問題(上圖),因此谷歌采用了兩種安全策略:提高C/C++的安全性,同時也鼓勵使用內存安全語言。”Google在Android安全與隱私小組的博客中指出。
出于相同的安全原因,亞馬遜(AWS)和Microsoft也在推動采用Rust。Mozilla創建了Rust用于Firefox的Gecko引擎中處理與C++內存相關的安全性問題。Rust的1.0版于2015年推出,但采用率仍然較低。Microsoft希望將其用于系統編程而不是應用程序開發。AWS使用Rust構建了基于Linux的容器操作系統Bottlerocket。
數據驅動的安全強化
谷歌指出,由于安卓生態系統的多樣化、安全性策略和方法以及緩解措施的的優先級決策遵循“數據驅動”。
這種以數據為依據的方法已產生了可衡量的實際結果。根據數據統計,過去一年Google修復的絕大多數Android漏洞都來自媒體、藍牙和NFC組件。媒體庫也是Google在2015年披露的Android遠程利用高危漏洞Stagefright所影響的關鍵組件。
如今,谷歌為加強Android媒體服務器框架所做的努力已經有所回報,2020一整年都沒有收到Android媒體框架遠程利用漏洞報告。
除了遷移到內存安全語言之外,谷歌強調的其他Android安全緩解和強化措施還包括:
沙箱
高權限大型組件(例如媒體庫)的分解
提高C/C++的安全性
漏洞利用緩解
地址空間布局隨機化(ASLR)
控制流完整性(CFI)
Stack Canaries
內存標記
谷歌指出,LLVM項目的控制流完整性(CFI)已于2018年在Android Pie中的媒體框架、藍牙和NFC中啟用。
谷歌和微軟兩家公司都試圖為C和C++提供更安全的系統編程功能。微軟通過Windows安全功能Control Flow Guard改進了CFI。去年,微軟在Clang和LLVM C++編譯器以及Rust中啟用了CFG支持。
谷歌還需要權衡每次緩解的性能成本,以及在不負面影響設備穩定性或用戶體驗的情況下部署和支持緩解所需的工作量。緩解措施/組件的系統開銷可能會縮短電池續航時間并降低設備的響應速度,從而對用戶體驗產生負面影響。對于廉價Android手機這樣的入門級設備尤其如此,但入門級設備也應從安全加固中受益。
最后,谷歌指出,啟用緩解措施時,除了安全利益和性能成本(例如短期部署和長期支持的成本)外,還有更多要考慮的因素,例如部署的穩定性和長期支持問題。