Chromium 70% 的安全性問題是由記憶體錯誤引起的

Chromium 專案的開發人員 分析了 自 912 年以來,在 Chrome 穩定版本中發現了 2015 個高風險和嚴重漏洞,並得出結論,其中 70% 是由記憶體不安全(在 C/C++ 程式碼中使用指標時出現的錯誤)引起的。 其中一半問題 (36.1%) 是由釋放與其關聯的記憶體(釋放後使用)後存取緩衝區引起的。

Chromium 70% 的安全性問題是由記憶體錯誤引起的

在設計 Chromium 時,最初是 放下程式碼中可能會出現錯誤,因此非常重視使用沙箱隔離來限制漏洞的後果。 目前,使用該技術的可能性已經達到了其能力的極限,從資源消耗的角度來看,進一步分割成流程是不切實際的。

為了維護程式碼庫的安全,Google 也強制執行“二人法則「,根據該規定,任何新增的程式碼必須滿足三個條件中的兩個以上:使用未經驗證的輸入資料、使用不安全的程式語言 (C/C++) 以及以提升的權限運行。 此規則意味著處理外部資料的程式碼必須減少到最低權限(隔離)或以安全程式語言編寫。

為了進一步增強程式碼庫的安全性,已經啟動了一個專案來防止程式碼庫中出現記憶體錯誤。 主要有三種方法:創建具有記憶體安全操作功能的C++庫、擴展垃圾收集器的範圍、使用硬體保護機制 MTE (記憶體標記擴充)並使用確保安全使用記憶體的語言(Java、Kotlin、JavaScript、Rust、Swift)編寫元件。

預計工作將集中在兩個領域:

  • C++ 開發過程發生重大變化,這並不排除對效能的負面影響(額外的邊界檢查和垃圾收集)。 建議使用型別代替原始指針 奇蹟指針,它允許您將可利用的釋放後使用錯誤減少到不構成安全威脅的崩潰,而不會對效能、記憶體消耗和穩定性產生明顯的負面影響。
  • 使用旨在在編譯時執行記憶體安全檢查的語言(將消除程式碼執行期間此類檢查固有的對效能的負面影響,但會導致組織新語言中的程式碼與新語言中的程式碼的互動的額外成本) C++)。

使用記憶體安全庫是最簡單但效率較低的方法。 用 Rust 重寫程式碼被認為是最有效的方法,但也是非常昂貴的方法。

Chromium 70% 的安全性問題是由記憶體錯誤引起的

來源: opennet.ru

添加評論