自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌正尋求提高 C++ 內存安全

安全
谷歌 Chrome 安全團隊稱其一直在致力于改善 Chrome 瀏覽器的內存安全;近期,該團隊正在研究使用 heap scanning 技術來提高 C++ 的內存安全。

谷歌 Chrome 安全團隊稱其一直在致力于改善 Chrome 瀏覽器的內存安全;近期,該團隊正在研究使用 heap scanning 技術來提高 C++ 的內存安全。

雖然從內存安全方面出發(fā),Rust 當下可能更受大眾喜愛。但 Chrome 安全團隊認為,盡管人們對比 C++ 具有更強內存安全保證的其他語言有興趣,但在可預見的未來,像 Chromium 這樣的大型代碼庫將使用 C++。鑒于此,Chrome 工程師已經找到了使 C++ 更安全的方法,以減少緩沖區(qū)溢出和 use-after free (UAF) 等與內存相關的安全漏洞。數(shù)據(jù)表明,這些漏洞占所有軟件安全漏洞的 70%。

auto* foo = new Foo();
delete foo;
// The memory location pointed to by foo is not representing
// a Foo object anymore, as the object has been deleted (freed).
foo->Process();

如上示例,當應用程序使用的內存被返回到底層系統(tǒng),但指針指向一個過期的對象時,就會出現(xiàn)一個被稱為懸空指針(dangling pointers)的情況,通過它進行的任何訪問都會導致 UAF 訪問。在最好的情況下,此類錯誤會導致 well-defined 的崩潰;在最壞的情況下,它們會造成可以被惡意行為者利用的破壞。 

在較大的代碼庫中,UAF 通常很難被發(fā)現(xiàn),因為對象的所有權是在不同組件之間轉移的。這個問題非常普遍,以至于到目前為止,工業(yè)界和學術界都在頻繁地針對其提出緩解策略。而 Chrome 中 C++ 的使用也沒有什么不同,大多數(shù)高嚴重性安全漏洞都是 UAF 問題。近期發(fā)布的 Chrome 102 中,就修復了一個關鍵的 UAF 問題,且八個高危漏洞中有?六個是 UAF。

為了解決這一問題,Chrome 方面已經使用了各種技術手段;包括 C++ 智能指針(如 MiraclePtr?)、編譯器中的靜態(tài)分析、動態(tài)工具(如 C++ sanitizers )、代碼模糊器,以及一個名為  Oilpan 的 C++ 垃圾回收器。Oilpan、MiraclePtr 和基于智能指針的解決方案需要大量采用應用程序代碼。

此外,谷歌還探索了另一種方法:內存隔離(memory quarantine)?;舅悸肥菍?explicitly freed memory 放入隔離區(qū),并且僅在達到特定安全條件時才使其可用。Chrome 安全團隊在博文中總結了在 Chrome 中實驗隔離和 heap scanning 的歷程。

工作原理在于,用隔離和 heap scanning 保證 temporal safety 的主要思想是避免重用內存,直到證明沒有更多的(懸空的)指針指向它。為了避免改變 C++ 用戶代碼或其語義,提供 new 和 delete 的內存分配器被攔截。

在調用刪除時,內存實際上被放入隔離區(qū),無法再用于應用程序的后續(xù)新調用?!霸谀承r候觸發(fā)了 heap scan,它掃描整個堆,就像垃圾回收器一樣,以查找對隔離內存塊的引用。那些沒有從常規(guī)應用內存中獲得引用的塊被轉移回分配器,在那里它們可以被重新用于后續(xù)的分配?!?/p>

根據(jù)介紹,谷歌的 heap scanning 由一套被命名為 StarScan(簡稱為 *Scan)的算法組成。他們將 *Scan 應用于渲染器進程的非托管部分,使用 Speedometer2 評估性能影響,并嘗試了不同版本的 *Scan。

測試結果表明,*Scan 的一個基礎版本造成了 8% 的內存回歸?!八羞@些開銷從何而來?不出所料,heap scanning 極其受 memory bound 影響,因為掃描線程必須遍歷和檢查整個用戶內存的引用”。在進行了多方面優(yōu)化之后,Speedometer2 回歸從 8% 降低到了 2%。此外,有關內存消耗的測量結果則表明,渲染進程中的掃描使內存消耗減少約 12%。

MTE(內存標簽擴展,Memory Tagging Extension)是 ARM v8.5A 架構上的一個新擴展,有助于檢測軟件內存使用中的錯誤;這些錯誤可以是 spatial errors(如 out-of-bounds accesses),也可以是 temporal errors(use-after-free)。谷歌方面獲得了一些支持 MTE 的 actual hardware,并在渲染器過程中重新進行了實驗。結果表明,雖然 MTE 和 memory zeroing 會帶來一些成本,但 Speedometer2 中的內存回歸約為 2%。實驗還表明,在 MTE 之上添加 *Scan 沒有可衡量的成本。 

Chrome 安全團隊最后總結稱,C++ 可以編寫出高性能應用程序,但需要付出安全性方面的代價。Hardware memory tagging 可以修復 C++ 的一些安全缺陷,同時保持高性能?!拔覀兤诖谖磥砜吹礁鼜V泛地采用 Hardware memory tagging,并建議在 Hardware memory tagging 之上使用 *Scan 來修復 C++ 的 temporary memory safety。使用的 MTE 硬件和 *Scan 的實現(xiàn)都是 prototypes,我們預計仍有性能優(yōu)化的空間?!?/p>

本文轉自OSCHINA

本文標題:谷歌正尋求提高 C++ 內存安全

本文地址:https://www.oschina.net/news/198093/google-c-memory-safety

責任編輯:未麗燕 來源: OSCHINA
相關推薦

2024-02-06 13:43:16

C++內存安全

2010-01-13 18:52:20

Visual C++

2020-03-11 13:44:20

編程語言PythonJava

2010-01-27 15:46:15

學習C++效率

2021-02-04 09:21:37

內存安全漏洞網(wǎng)絡安全

2021-04-12 10:38:51

CC++谷歌

2011-04-11 09:47:50

C++內存管理

2011-07-15 01:10:13

C++內存分配

2024-03-01 12:03:00

AI模型

2020-05-26 13:25:00

語言編譯代碼

2011-06-21 11:16:24

cc++

2011-04-13 16:50:54

CC++內存

2021-02-20 07:20:10

谷歌Chrome 瀏覽器

2011-07-01 10:16:08

C++內存管理

2023-11-17 11:40:51

C++內存

2023-12-12 13:13:00

內存C++編程語言

2010-02-04 14:58:06

C++內存分配

2024-08-19 00:10:00

C++內存

2011-06-16 09:28:02

C++內存泄漏

2024-06-19 10:35:32

C++編程語言
點贊
收藏

51CTO技術棧公眾號