谷歌通过heapscanning算法减少

北京雀斑医院电话 http://m.39.net/news/a_9413588.html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考链接:


转载请注明:http://www.aierlanlan.com/tzrz/3407.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了