SegmentFault思否 · 2021年09月24日

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

一直以来,网络浏览器都会受到来自黑客的攻击,谷歌曾试图用沙箱解决这个问题,但由于性能问题进展受阻。因此,近日 Chrome 安全团队发文宣布正在考虑使用内存安全语言 Rust 重写或开发 Chrome 的部分模块。
image.png
众所周知,内存安全是全球软件工程界都需要认真对待的问题。有数据显示,去年 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://link.segmentfault.com/?url=https://security.googleblog.com/2021/09/an-update-on-memory-safety-in-chrome.html

推荐阅读
关注数
4143
内容数
724
SegmentFault 思否旗下人工智能领域产业媒体,专注技术与产业,一起探索人工智能。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息