谷歌改善 Chrome 内存安全:通过 heap scanning 算法减少 C++ 代码库安全漏洞

业界 作者:SegmentFault 2022-06-02 14:17:02

技术编辑:MissD丨发自 思否编辑部

公众号:SegmentFault




据外媒报道,谷歌 Chrome 团队正在研究通过 heap scanning 技术来提高 C++ 代码库内存安全。据悉,该技术会对内存造成消耗,除非使用较新的 Arm 硬件。



众所周知,谷歌、微软是快速编程语言 C++ 的主要用户和贡献者,C++ 主要被用于 Chromium、Windows 内核和 Android 等项目。但由于其内存安全保证问题,人们开始对使用 Rust 语言越来越感兴趣。


尽管存在安全漏洞隐患,但谷歌不能简单地用内存更安全的 Rust 来替换掉 Chromium 现有的 C++ 代码,起码在短期内,将 Chrome 中的 C++ 大规模转换到 Rust 是不可能的。


好在,谷歌正在研究通过 heap scanning 算法来提高 C++ 的内存安全性。当然,这种方式也有个问题,由于这种技术非常消耗内存,因此目前只是实验性的。



谷歌 Chrome 安全团队的 Anton Bikineev、Michael Lippautz 和 Hannes Payer 表示,尽管大家认为 C++ 之外的其他语言或有着更强的内存安全保证,但在可预见的未来,Chrome 等大型代码库将依旧会使用 C++。


考虑到这种情况,Chrome 工程师已经找到了让 C++ 更安全的方法,如缓冲区溢出和 use-after free(UAF),以减少与内存相关的安全漏洞(这些漏洞占所有软件安全漏洞的 70%)。


当然,C++ 不能保证总是使用其结构的最新信息访问内存,因此谷歌 Chrome 团队一直在探索使用“内存隔离”(memory quarantine)和 heap scanning 来阻止对仍可访问内存的重复使用。


“内存隔离”(memory quarantine)和 heap scanning 的工作原理是,通过隔离和堆扫描确保内存时间安全,以证明不再有(悬空的)指针引用内存之前,避免重复使用内存。为了避免更改 C++ 用户代码或其语义,会截取提供 new 和 delete 的内存分配器。


谷歌表示,调用 delete 时,内存实际上处于隔离状态,无法被应用程序重新用于后续的新调用。在某个时候会触发堆扫描,它像垃圾收集器一样扫描整个堆,以查找对隔离内存块的引用。没有来自常规应用程序内存的传入引用的块会被传输回分配器,在那里它们可以重新用于后续的分配。


由于 UAF 构成了影响浏览器的大多数高严重性问题,近日 Chrome 102 就刚刚修复了一个关键的 UAF,在 8 个高危漏洞里面有 6 个是 UAF。


heap scanning 内存中的 UAF 访问是由“悬空指针”(dangling pointers)引起的,即当应用程序使用的内存返回到底层系统,但指针指向过期对象时,就会发生悬空指针。通过悬空指针进行访问会导致 UAF,这在大型代码库中很难发现。


为了检测 UAF,Google 已经使用了如 MiraclePtr 这类 C++ “智能指针”,这也会对性能造成影响,还使用了编译器、C++ 清理器、代码模糊器及一款名为 Oilpan 的垃圾收集器的静态分析。


如果 heap scanning 突破实验阶段,谷歌后期可能会增加该算法项目投入,但能否采用将取决于使用最新 Arm 硬件的设备。


报道称,谷歌已经尝试通过 ARM v8.5A 中的相对内存标记扩展(MTE)进行硬件辅助内存标记,以减少性能消耗。通过用 MTE 基准测试的实验结果显示,内存消耗显著降低。尽管如此,接下来 MTE 会否被更广泛地采用,以不会产生不可接受的性能影响的方式进行堆扫描,这仍然是未来的事情。


Chrome 安全团队表示“C++ 允许编写高性能应用程序,但这需要付出安全性的代价。硬件内存标记可能会修复 C++ 的一些安全漏洞,同时仍然允许高性能。”“我们期待着看到硬件内存标签在未来得到更广泛的采用,并建议在硬件内存标签上使用heap scanning(堆扫描)”。


参考链接:

https://www.zdnet.com/article/programming-languages-how-google-is-improving-c-memory-safety/


- END -

关注公众号:拾黑(shiheibook)了解更多

赞助链接:

关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接