Rust 被纳入 Android 平台开发的主要语言之一

谷歌宣布将 Rust 编程语言纳入允许开发 Android 平台的语言之中。 Rust 语言编译器早在 2019 年就已包含在 Android 源代码树中,但对该语言的支持仍处于实验阶段。 计划用于 Android 的首批 Rust 组件包括 Binder 进程间通信机制和蓝牙堆栈的新实现。

Rust 的引入是作为一个项目的一部分进行的,该项目旨在加强安全性、推广安全编程技术并提高在 Android 中使用内存时识别问题的效率。 值得注意的是,Android 中发现的所有危险漏洞中约有 70% 是由内存操作错误引起的。 使用注重内存安全和自动内存管理的 Rust,将降低释放后访问和缓冲区溢出等内存错误导致的漏洞风险。

Rust 通过引用检查、对象所有权和对象生命周期跟踪(范围)以及在运行时评估内存访问的正确性来强制编译时的内存安全。 Rust 还提供针对整数溢出的保护,要求变量值在使用前初始化,在标准库中有更好的错误处理,默认使用不可变引用和变量的概念,并提供强大的静态类型以最大限度地减少逻辑错误。

在Android中,已经支持的语言Kotlin和Java都提供了内存安全,但由于开销较高,它们不适合开发系统组件。 Rust 可以实现接近 C 和 C++ 语言的性能,这使得它可以用于开发平台的低级部分以及与硬件交互的组件。

为了确保C和C++代码的安全,Android使用沙箱隔离、静态分析和模糊测试。 沙箱隔离的能力是有限的,已经达到了其能力的极限(从资源消耗的角度来看,进一步碎片化进程是不切实际的)。 使用沙箱的限制包括大量的开销成本和由于需要生成新进程而导致的内存消耗增加,以及与使用 IPC 相关的额外延迟。

同时,沙箱并不能消除代码中的漏洞,而只能降低风险并使攻击复杂化,因为利用该漏洞需要识别的不是一个漏洞,而是多个漏洞。 基于代码测试的方法的局限性在于,为了识别错误,必须为问题的显现创造条件。 不可能涵盖所有可能的选项,因此许多错误会被忽视。

对于 Android 中的系统进程,Google 遵循“二规则”,根据该规则,任何添加的代码必须满足以下三个条件中的两个以上:使用未经验证的输入数据、使用不安全的编程语言 (C/C++) 以及在没有严格沙箱隔离的情况下运行(具有提升的权限)。 此规则意味着处理外部数据的代码必须减少到最低权限(隔离)或以安全编程语言编写。

Google 并不打算用 Rust 重写现有的 C/C++ 代码,而是计划使用这种语言开发新代码。 将 Rust 用于新代码是有意义的,因为从统计数据来看,大多数错误出现在新的或最近更改的代码中。 特别是,Android 中检测到的内存错误中大约 50% 是在不到一年前编写的代码中检测到的。

Rust 被纳入 Android 平台开发的主要语言之一


来源: opennet.ru

添加评论