Rust 备受青睐? Chrome 考虑使用“新”方法解决内存安全问题

共 1828字,需浏览 4分钟

 ·

2021-09-28 12:23

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

公众号:SegmentFault




一直以来,网络浏览器都会受到来自黑客的攻击,谷歌曾试图用沙箱解决这个问题,但由于性能问题进展受阻。因此,近日 Chrome 安全团队发文宣布正在考虑使用内存安全语言 Rust 重写或开发 Chrome 的部分模块。



众所周知,内存安全是全球软件工程界都需要认真对待的问题。有数据显示,去年 Chrome 工程师们分析了自 2015 年以来 Chrome stable 分支中修复的 912 个安全漏洞,这些漏洞的严重性评级为“高”或“严重”,而这些严重安全漏洞里,有 70% 以上都是内存安全问题。也就是说,C 或 C++ 语言中的指针错误会导致内存被误解。
 
Chrome 安全团队表示,尽管与黑盒测试技术相结合仍是 Chrome 的主要“防线”,但这似乎已经达到了极限,它们再也无法靠这一个策略来抵抗住疯狂的攻击。
 
Chrome 安全团队认为,内存安全问题的存在,对于团队来说既是挑战也是机会,因为许多 bug 都有相同的根源,这意味着他们可以在一个步骤中消除大部分 bug。
 
对此,Chrome 安全团队一直在探索,并通过以下 3 大途径来解决:

  1. 通过编译时检查指针是否正确,使 C++ 更安全。

  2. 通过运行时检查指针是否正确,使 C++ 更安全。

  3. 调查部分代码库使用内存安全语言的情况。


“编译时检查”,意味着在 Chrome 构建过程中或在 Chrome 进入用户设备前,安全就得到了保证。而“运行时”是指 Chrome 安全团队在用户的设备上运行 Chrome 时进行检查,由于“运行时检查”会导致性能损失(尽管检查指针的正确性在内存和 CPU 时间上的消耗是微乎其微的,如果有数百万个指针加起来的话会加剧影响),且 Chrome 的性能对数十亿用户非常重要,许多用户使用的是没有太多内存的低功耗移动设备,因此这些检查的增加将导致网络速度变慢。
 
所以在理想情况下,Chrome 会选择以上 3 个途径的选项 1——在编译时使 C++ 更安全。但不幸的是,语言理念并非这样设计的。所以 Chrome 也有了选项 2 和 选项 3——使 C++ 更安全(但速度较慢),或开始使用不同的语言(Chrome Security 正在试验这两种方法)。
 
同时,Chrome 安全团队还介绍了其在 C++ 安全解决方案方面的重大投资——如 PTR 和 ABSL/STL 强化模式。在每种情况下,Chrome 都希望消除可利用的安全漏洞中相当大的一部分,但他们也预料到了一些性能损失。
 
同时,Chrome 安全团队还将探索未来是否可以为 Chrome 的某些部分使用内存安全语言,比如极具竞争力的Rust 语言,(很大程度上)是编译时安全的。也就是说,Rust 编译器在代码到达用户设备之前就发现了指针错误,因此没有性能损失。然而,关于 Chrome 是否能够使 C++ 和 Rust 充分协同工作,还有一些悬而未决的问题。即使 Chrome 明天就开始在 Rust 中编写新的大型组件,Chrome 也不可能在几年内就能把大部分大部分安全漏洞给全部消除。所以能否让语言边界足够干净,以便可以使用 Rust 编写部分现有组件?Chrome 安全团队暂时也无法回答这个问题。
 
对于开发者团队来说,安全与漏洞就像是“猫鼠游戏”,随着攻击者的不断“创新”,浏览器也必须要安装新的防御系统才能保持领先。尽管 Chrome 已在沙箱和站点隔离基础上,投资建立了更强大的多进程体系结构,但有时也是防不胜防。
 
目前,Chrome 安全团队已经开始在 Chrome 源代码树中进行有限的、非面向用户的 Rust 实验,由于目前还处于试验阶段,因此暂未在 Chrome 的生产版本中使用。
 
参考链接:
https://security.googleblog.com/2021/09/an-update-on-memory-safety-in-chrome.html

- END -

浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报