写点什么

谷歌发布最新报告: Rust 可显著减少安全漏洞

  • 2024-10-16
    北京
  • 本文字数:1529 字

    阅读完需:约 5 分钟

大小:735.69K时长:04:11
谷歌发布最新报告: Rust 可显著减少安全漏洞

谷歌表示,过去六年来,其优先考虑内存安全软件开发的努力已大幅减少安卓操作系统中的内存安全漏洞数量。

 

在最近发布的报告中,谷歌透露,因内存安全问题导致的安卓漏洞比例已从 2019 年的 76%下降至预计 2024 年底的 24%,这显著低于行业标准的 70%。

 

这是安卓代码风险状况的显著改善,安卓安全团队成员 Jeff Vander Stoep 和谷歌高级软件工程师 Alex Rebert 将此归功于采用了安全编码(Safe Coding)。这是一套软件开发实践,旨在通过内存安全编程语言(包括 Rust)、静态分析和 API 设计来避免引入漏洞。

 

据安卓团队观察,Rust 变更的回滚率不到 C++ 的一半。

 

Vander Stoep 和 Rebert 说:“前几代人向安全编码所做的转变可以通过开发代码时所做断言的可量化性来体现。”

 

“安全编码使我们能够对代码的属性以及基于这些属性可能发生或不可能发生的情况做出强有力的断言,而不是关注所应用的干预措施(如缓解和模糊测试),或试图利用过去的表现来预测未来的安全性。”

 

使用 C#、Go、Java、Python、Swift 和 Rust 等内存安全编程语言开发软件是安全编码的重要组成部分。在大型代码库中,大多数的严重安全漏洞都源于缓冲区溢出等内存安全缺陷。这一认识促使公共和私营部门广泛推动减少内存安全漏洞的发生。

 

为了实现这一目标,我们主要建议避免使用 C 和 C++,因为这两种语言需要手动进行内存管理,除非开发人员特别敬业,否则容易导致内存漏洞。(这一点在 C/C++ 社区中也得到了关注,内存安全已成为该社区的首要任务。)

 

对谷歌而言,国际内存安全运动意味着在安卓和其他项目中更多地采用 Rust 进行开发,这在大多数情况下能够提供内存安全保障而不影响性能。同时,这种做法还提高了工作效率。

 

Vander Stoep 和 Rebert 说到,“安全编码将缺陷查找工作进一步向左转移,甚至在代码提交之前,从而提高了代码的正确性和开发人员的工作效率”。

 

“我们看到这种转变体现在一些重要的指标上,比如回滚率(因意外错误导致的代码紧急回退)。安卓团队观察到,Rust 变更的回滚率不到 C++ 的一半。”

 

对于拥有大量不安全遗留代码的企业来说,好消息是可能不需要用新语言重写旧代码。正如 Vander Stoep 和 Rebert 所指出的,漏洞是有半衰期的——它们会随着时间的推移而衰减。他们说,“举例来说,根据平均漏洞寿命,5 年前的代码比新代码的漏洞密度低 3.4 倍(基于研究结果中的寿命)到 7.4 倍(基于在安卓和 Chromium 中观察到的寿命),”。

 

这并不是说旧漏洞会奇迹般地变得不可利用。相反,漏洞总体密度的降低,这是统计上的胜利,但并不意味着安全有了保障。

 

即便如此,通过使旧代码与内存安全代码实现互操作,以及使用内存安全语言编写新代码,现有漏洞的自然衰减率往往会使大型代码库随着时间的推移变得更加安全,而无需进行繁琐的代码修订。如果你停止制造新的内存安全漏洞,旧的漏洞至少在总体上就不会成为问题。

 

Vander Stoep 和 Rebert 说,“在新代码中采用安全编码是一种范式转变,使我们能够利用漏洞的固有衰减特性来发挥我们的优势,即使在大型现有系统中也是如此。”

 

“这个概念很简单:一旦我们切断了新漏洞的源头,这些漏洞就会呈指数级减少,从而使我们所有的代码更加安全,提高安全设计的有效性,并缓解与现有内存安全策略相关的可扩展性挑战,使这些策略能够更加有效和更加有针对性地得到应用。”

 

作者简介:

Thomas Claburn,The Register 网络杂志的资深记者。他的专长在于政府信息技术、软件开发以及人工智能的伦理使用。Thomas 在技术出版领域拥有近 30 年的经验,曾担任过从杂志版块编辑到特约编辑的多种职务。

 

原文链接:

 

https://www.theregister.com/2024/09/25/google_rust_safe_code_android

 

声明:本文为 InfoQ 翻译整理,未经许可禁止转载。

2024-10-16 16:5011233

评论

发布
暂无评论
发现更多内容

搞测试是件费脑子的事

IT蜗壳-Tango

7月日更

从现在开始用 NanoID 会取代UUID

devpoint

JavaScript uuid 7月日更

模块一作业

秀聪

架构实战营

🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(1)全流程介绍Jenkins环境搭建+基础部署配置(Windows->Linux)

码界西柚

jenkins CI/CD 部署 7月日更

每天学习10个实用Javascript代码片段(二)

devpoint

JavaScript set 7月日更

6款工具,让协同开发变得轻而易举!

Jackpop

vscode 开发工具

VS Code有哪些奇技淫巧?

Jackpop

vscode

三分钟搞懂依赖注入

喵叔

7月日更

架构实战营第一模块作业

tt

#架构实战营

在线RGB和HEX十六进制颜色互转工具

入门小站

工具

模块一作业

king

架构实战营 模块一作业

孫影

架构实战营 #架构实战营

Linux之find常用命令汇总

入门小站

Linux

模块七作业

梦寐凯旋

#架构实战营

模块一作业:微信业务架构图&学生管理平台

babos

#架构实战营

一行Python代码到底有多强大?

Jackpop

Python 大数据

学习笔记如何写?

Nydia

想学网络安全,从哪里开始?网络安全的学习路线

小桃

黑客 网络安全 Web 网络安全it路线图

保姆级:Markdown入门教程

Peter

互联网 写作 markdown 工具软件

一文掌握OLAP和DataCube数据魔方应用

白贺BaiHe

OLAP BI 数仓 7月日更 DataCube数据魔方

使用 docker 构建时取出构建文件的三种方法

耳东@Erdong

Docker 7月日更 docker build

模块一作业

俊杰

#架构实战营

日志监控ELK搭建

陈靓-哲露

ELK ES

微信及学生管理系统架构分析

summer

架构实战营

我猜你也在找内网渗透,这篇难道还不够你嚼烂?

网络安全学海

运维 网络安全 信息安全 渗透测试 内网渗透

抖音内测同城圈子:旧瓶装新酒能否获得用户认可

石头IT视角

架构实战营 模块一 作业

酷飞不会飞

架构实战营

网络攻防学习笔记 Day66

穿过生命散发芬芳

网络攻防 7月日更

ArrayList源码分析及扩容机制

Ayue、

数据结构 ArrayList

模块一作业

Geek_35a345

数仓开发人员经常说的ETL,到底是什么

奔向架构师

数据仓库 数据架构 7月日更

谷歌发布最新报告: Rust 可显著减少安全漏洞_编程语言_Thomas Claburn_InfoQ精选文章