谷歌工程師:七成Chrome安全漏洞是內存安全問題,Rust 又成備選語言
近日,有谷歌工程師分析了自2015 年以來在Chrome 穩定版分支中修復的912 個安全錯誤。並發現,在這些被標記為“高”或“嚴重”等級的所有安全漏洞中,大約70% 是內存管理和安全問題。這其中又有一半是use-after-free 漏洞。這種安全問題是由對內存指針(地址)的錯誤管理引起的,為攻擊者打開了攻擊Chrome 內部組件的大門。
這一數據恰巧與微軟此前的研究結果相同:微軟安全響應中心(MSRC)對自2004年以來所有報告過的微軟安全漏洞進行了分類,所有微軟年度補丁中約有70%是針對內存安全漏洞的修復程序。
微軟安全響應中心曾給出解釋,這是因為他們大多數產品使用C 和C++ 編寫,而這兩種編程語言屬於“內存不安全”(memory-unsafe)的範疇。管理內存執行的開發人員代碼中的一個漏洞可能導致一系列內存安全錯誤。
谷歌也面臨著相似的境地。僅僅從2019 年3 月到現在,等級為“嚴重”的130 個Chrome 漏洞中,有125 個與內存損壞相關,可見內存管理仍然是一個很大的問題。
為此,谷歌工程師必須遵循“2的規則”(The Rule of 2)。即每當工程師編寫新的Chrome特性時,其代碼不得破壞以下兩個以上的條件:
- 該代碼處理不可信的輸入
- 代碼在沒有沙箱的情況下運行
- 代碼使用不安全的編程語言(C/C ++)編寫
迄今為止,谷歌一直在Chrome 中嘗試使用沙箱方法。他們將數十個進程隔離到自己的沙箱中,最近還推出了“站點隔離”功能,該功能將每個站點的資源也放入自己的沙箱進程中。但谷歌工程師表示,考慮到性能問題,他們使用沙盒化Chrome 組件的方法已達到最大收益,現在必須尋求新的方法。
因此,谷歌計劃研究開發自定義C++ 庫,以與Chrome 的代碼庫一起使用,這些庫可以更好地保護與內存相關的錯誤。
與此同時,谷歌還在探索MiraclePtr 項目,該項目旨在將“use-after-free bug 轉變為具有可接受的性能、內存、二進制大小和最小的穩定性影響的非安全崩潰”。
最後,值得注意的一點是,谷歌表示計劃在可能的情況下使用“安全”語言進行探索。候選對象包括Rust、Swift、JavaScript、Kotlin 和Java。
消息來源:ZDNet