Rust 也登陆了 Chromium
谷歌揭幕 最近通过出版物 l在 Chromium 项目代码中允许的语言中包含 Rust 编程语言.
提到要包含有一系列要求 例如,对于要求集成到 Chromium 代码库中的第三方 Rust 库,该库必须在速度、内存消耗和稳定性方面优于同类库,或者是特定技术的唯一实现。
当功能可以在特权进程中执行,或者与其他库或 C++ 代码相比,使用库降低了错误风险时,Rust 库也是可以接受的。 尚未决定哪些库可以包含在 Chromium 中。
决定 被视为防止出现内存错误的举措的一部分 在 Chrome 代码库中。 根据两年前提供的统计数据,Chromium 中 70% 的关键和危险安全问题是由于内存错误造成的。
Rust语言的使用,侧重于安全的内存管理 并提供自动内存管理,将降低因内存区域释放后访问和缓冲区溢出等问题导致的漏洞风险。
Rust 在编译时通过引用检查、跟踪对象所有权和对象生命周期(范围)以及在代码执行期间评估内存访问的正确性来提供安全内存处理。 Rust 还提供整数溢出保护,要求在使用前强制初始化变量值,更好地处理标准库中的错误,默认强制执行不可变引用和变量的概念,提供强静态类型以最小化逻辑错误。
使用 Rust 可以更轻松、更安全地应用 Google 用来确保其代码库安全的“做事规则”。
根据此规则,您添加的任何代码不得满足以下三个条件中的两个以上:使用未经验证的输入、使用不安全的编程语言 (C/C++) 以及以提升的权限运行。 根据这条规则,处理外部数据的代码必须减少到最低权限(隔离)或用安全的编程语言编写。
对于 Rust,最初是为浏览器开发的,可以在不使用 IPC 的情况下与现有代码集成,并且协调内存错误保护的复杂性较低,这将加快开发过程(需要编写更少的代码和更容易审查)并减少与安全相关的错误的数量。
简化集成 Rust 代码与现有 C++ 代码并避免与集成相关的风险和限制,目前 决定限制单向交互: 通过 API 函数从 C++ 调用 Rust(即 Rust 代码只能从 C++ 代码调用),但不能与 C++ 代码混合),这也将控制依赖树。
第二个限制是仅支持以独立组件形式出现的第三方库,这些组件不依赖于 Chromium,并且具有面向任务的 API。
除了使用 Rust 来阻止 use-after-free 内存漏洞的利用之外,从 Chrome 102 的发布开始,C++ 代码开始使用 MiraclePtr (raw_ptr) 类型来代替。Ordinary 提供了一个指针钩子来执行额外的检查以访问释放如果发现此类访问,则存储区域和块。
新的保护方法对性能和内存消耗的影响估计可以忽略不计。
最后,应该提到的是 还没有计划用 Rust 重写现有代码, 但从现在开始,用 Rust 编写的第三方库将被允许集成到代码库中。
构建系统已经添加了用于编译 Rust 代码、运行测试以及将 Rust 组件与 C++ 代码集成的工具。 Rust 代码有望作为明年 Chrome 版本的一部分出现。
数据来源: https://security.googleblog.com
成为第一个发表评论