当前位置: 首页 > news >正文

Android 安卓内存安全漏洞数量大幅下降的原因

谷歌决定使用内存安全的编程语言 Rust 向 Android 代码库中写入新代码,尽管旧代码(用 C/C++ 编写)没有被重写,但内存安全漏洞却大幅减少。

Android 代码库中每年发现的内存安全漏洞数量(来源:谷歌)

Android 不断发展,内存安全漏洞越来越少

Android 团队在 2019 年左右开始优先将新开发过渡到内存安全语言。这一决定是由于管理内存安全漏洞的成本和复杂性不断增加。

不重写旧代码库的选择是基于之前的模拟,而该模拟又基于对漏洞寿命的研究,该研究显示漏洞的平均寿命约为 4 年,并且大多数漏洞存在于新的或最近修改的代码中。

简而言之,他们相信,通过使用内存安全的语言,新功能引入的错误会更少。

随着旧漏洞随着时间的推移而“衰减”,内存安全漏洞的数量预计会下降——事实也确实如此。

尽管大多数 [Android] 代码仍然不安全(但关键是,它们正在逐渐老化),但我们发现内存安全漏洞数量正在大幅下降。

结果与我们模拟的结果一致 (…),甚至更好,这可能是我们同时努力提高内存不安全代码的安全性的结果。

内存安全问题占 2019 年 Android 漏洞的 76%,目前到 2024 年这一比例为 24%,远低于 70% 的行业标准,并且还在继续下降。

从被动解决方案到主动解决方案

随着软件制造商和用户尝试各种解决方案来对抗内存安全漏洞(正如谷歌指出的那样,“与其他类型的漏洞相比,这些漏洞更容易被远程访问、用途更广泛、更容易被恶意利用”)。

措施已逐渐从被动措施(修补)转向主动措施:漏洞缓解策略、通过清理器和模糊器发现漏洞,以及现在通过使用内存安全语言来预防漏洞。

这一转变的基础是安全编码,它通过语言功能、静态分析和 API 设计将安全不变量直接强制到开发平台中。

其结果是设计安全的生态系统,提供大规模的持续保证,避免意外引入漏洞的风险。

安全编码通过将错误查找进一步向左移动,甚至在代码签入之前,提高了代码的正确性和开发人员的工作效率。

我们看到这种转变体现在回滚率(由于意外错误而导致的紧急代码恢复)等重要指标中。

Android 团队观察到 Rust 更改的回滚率不到 C++ 的一半。

本月初,Android 团队分享了有关如何在智能手机固件中逐步引入 Rust 的见解。

内存安全的语言才是出路

美国网络安全和基础设施局 (CISA) 一直在大力提倡使用内存安全语言。

最近发现172个关键且广泛使用的开源项目中有 52% 包含用内存不安全语言编写的代码。

CISA 大力倡导使用内存安全语言,这一举措得到了白宫的响应。

谷歌针对 Android 所采取的策略是放弃对现有代码库的重写,并专注于使互操作性变得安全且方便。

该公司认为,其他软件制造商和组织也可以采用这种策略,而不必担心增加投资和减缓推出新功能的速度。

那些对过渡到内存安全语言时的各种挑战和考虑感兴趣的人应该看看我们最近对开源安全基金会 (OpenSSF) 总经理的专题访谈。(点击下方链接即可阅读👇🏻)

过渡到内存安全语言:挑战和注意事项-CSDN博客

http://www.lryc.cn/news/450482.html

相关文章:

  • c++primier第十二章类和动态内存
  • Ansible学习之ansible-pull命令
  • Linux:磁盘管理
  • FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片
  • 【华为HCIP实战课程二】OSPF基础介绍和OSPF RID NBMA配置详解
  • 网络编程(13)——单例模式
  • 基于定制开发与2+1链动模式的商城小程序搭建策略
  • 银河麒麟,apt 安装软件报错640Unknown Status
  • python UNIT 3 选择与循环(2)
  • 828华为云征文|部署在线文档应用程序 CodeX Docs
  • Linux的多线程(线程的创建,退出,取消请求,取消处理例程,线程属性的设置)
  • git 本地代码关联远程仓库并推送
  • 推荐一个可以把PDF样本册转换为翻页电子书的网站
  • 【Linux 23】线程池
  • Rust SQLite 跨平台使用
  • docker运行arm64架构的镜像、不同平台镜像构建
  • vue基于Spring Boot框架的高校实验室预约管理系统
  • Linux中find命令详解
  • 无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享
  • SpringBoot+Activiti7工作流入门实例
  • Azure OpenAI检索增强微调:使用 GPT-4o 对 GPT-4o mini 进行微调,以适应特定领域的应用
  • ISP Pipeline
  • < IDE编程环境配置>
  • Golang | Leetcode Golang题解之第448题找到所有数组中消失的数字
  • 【Spring Boot 入门三】Spring Boot与数据库集成 - 构建数据驱动的应用
  • Web 服务器与动态脚本语言通信的接口协议有哪些
  • ESXI识别服务器磁盘,虚拟机显示无效
  • 【C++】 vector 迭代器失效问题
  • 【Spring基础3】- Spring的入门程序
  • golang学习笔记22-面向对象(四):接口【重要】