Rust 针对签名内存错误重写Shim逻辑中的库是关键

admin 2024年9月13日02:45:04评论25 views字数 1626阅读5分25秒阅读模式

Rust 针对签名内存错误重写Shim逻辑中的库是关键

谷歌支持在低级固件中实现 Rust,促进遗留代码的翻译,作为对抗威胁内存访问安全的错误的一种手段。

在一篇新的博客文章中,Android 团队声称,在现有固件中从 C 或 C++ 切换到 Rust将提供比没有安全标准的操作系统更低级别的内存安全保证。

博客文章网址:

https://security.googleblog.com/2024/09/deploying-rust-in-existing-firmware.html

Rust 针对签名内存错误重写Shim逻辑中的库是关键

据专家介绍,这种情况下生产力的损失可以忽略不计,Rust 代码的大小也相当,主要是逐步替换基本代码,从新的、更关键的代码开始。

这个过程不需要太多的努力,随着时间的推移,内存访问漏洞的数量将显着减少。

使用Shim逻辑逐步重写库代码

为了简化过渡,您可以创建一个薄 Rust 层(Shim 预加载器),它将复制 C API 并导出到您现有的代码库。

Shim 充当 Rust 库 API 的包装器,连接现有的 C API 和 Rust API

这是通常所做的,重写库或用 Rust 替代品替换它们。

据谷歌称,直到最近,内存安全漏洞仍然是Chrome 和 Android漏洞的主要来源。

由于采用了能够使产品摆脱这一瘟疫的编程语言,2019 年至 2022 年间,移动操作系统中此类错误的年度数量从 223 个减少到 85 个。

Rust 针对签名内存错误重写Shim逻辑中的库是关键

去年,微软开始将 Windows 内核迁移到 Rust。

2023 年 5 月发布的操作系统版本 11 包含该语言的驱动程序。

与此同时,这家科技巨头计划同样提高 Pluton 处理器的安全性,但该处理器尚未得到广泛使用。

Rust 是内存错误的关键

Rust编程语言旨在解决与内存安全并发数据管理相关的问题,解决 C 和 C++ 等语言中最常见的一些漏洞。

以下是 Rust 修复的主要错误类型:

1.内存管理Bug(内存安全问题)

  • 空指针取消引用:在C和C++等语言中,空指针导致程序崩溃或意外行为是很常见的。

    Rust 通过使用Option类型来防止这个问题,它提供了一种安全的方法来处理可能为 null 的值。

  • Use-After-Free:当程序尝试访问已经释放的内存区域时,就会出现此错误。在 Rust 中,由于所有权系统借用检查器的概念,内存在释放后无法访问。

  • 双重释放:在 C 或 C++ 中,两次释放同一内存区域可能会导致不稳定或漏洞。

    Rust 通过其所有权管理自动、安全地管理内存释放,防止多次释放同一资源的风险。

2.竞争条件和竞争问题(Concurrency Bugs)

  • 数据竞争:当两个线程同时访问同一内存,其中至少一个线程执行写入操作,而没有必要的同步时,就会发生数据竞争。

    Rust 使用MutexRwLock等类型,借用检查器确保共享资源可以安全访问,从而防止编译时数据竞争。

  • 线程安全:Rust 在整个类型系统中强制执行严格的并发和同步规则,确保线程之间共享的资源可以安全使用。

3.缓冲区溢出

  • 这是C 和 C++ 等语言中最常见的安全错误之一,访问超出定义限制的内存缓冲区可能会导致意外行为或安全漏洞。

    Rust 通过严格执行数组和切片边界来防止此错误,除非明确允许,否则无法进行越界访问。

4.悬空指针

  • 悬空指针是指向不再有效的内存位置的指针。

    在 Rust 中,所有权系统可以防止创建无效指针或对空闲内存的引用,从而消除悬空指针。

5.内存泄漏

  • 虽然 Rust 不能保证防止每次内存泄漏(因为可能存在未释放的循环引用内存),但与 C/C++ 等语言相比,遇到内存泄漏要困难得多。

    基于所有权的内存管理和借用可确保资源在不再使用时自动释放。

6.类型安全问题

  • Rust 是一种强类型语言,许多在其他语言中可能在运行时失败的操作在编译时被阻止。

    这可以防止数据类型错误,例如为不兼容类型的变量赋值或在不同类型之间执行无效操作。

7.不受控制的递归的堆栈溢出

  • Rust 包括使用尾部调用优化来降低递归函数中堆栈溢出的风险。

    虽然它不能完全防止问题,但它的类型系统和资源管理可以更轻松地避免此类错误。

原文始发于微信公众号(网络研究观):Rust 针对签名内存错误重写Shim逻辑中的库是关键

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月13日02:45:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Rust 针对签名内存错误重写Shim逻辑中的库是关键https://cn-sec.com/archives/3159270.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息