速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

谷歌发布最新报告: 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:5010685

评论

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

云数据中心中的SDN/NFV应用

穿过生命散发芬芳

SDN网络 6月月更

细数十大信息安全原则

阿泽🧸

信息安全 6月月更

InfoQ 极客传媒 15 周年庆征文|容器运行时技术深度剖析

liuzhen007

容器 运维 热门活动 InfoQ极客传媒15周年庆

远程办公经验 | 社区征文

弑着去忘记う

初夏征文

学习笔记:插件化Activity之Hook点位

北洋

插件化 Andriod 6月月更

数的奥秘之幂数与完全平方数

未见花闻

6月月更

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

汪子熙

云原生 SAP abap Netweaver 6月月更

C#入门系列(十一) -- 多维数组

陈言必行

C# 6月月更

Sealem Finance-基于Web3的全新去中心化金融平台

小哈区块

curl导入postman报错小记

红毛丹

Postman 6月月更

Sealem Finance打造Web3去中心化金融平台基础设施

股市老人

【高并发】关于线程池,蚂蚁金服面试官问了我这些内容!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

Android原生TabLayout使用全解析,看这篇就够了

yechaoa

android TabLayout 6月月更 material design

自动化测试系列

IT蜗壳-Tango

6月日更 6月月更

了解 Vue 生命周期钩子

devpoint

Vue Vue3 钩子函数 vue2 InfoQ极客传媒15周年庆

Fabric.js 动态设置字号大小 🎄

德育处主任

canvas 前端可视化 FabricJS Fabric.js 6月月更

盲盒商城APP系统开发的软件特点和盲盒功能介绍

WDL22119

盲盒商城 盲盒开发 盲盒源码 盲盒H5开发 盲盒APP系统开发

【Spring 学习笔记(九)】Spring IoC/DI注解开发之纯注解开发

倔强的牛角

Java spring Java EE 6月月更

ConcurrentHashMap 源码分析-ConcurrentHashMap与HashMap的异同

zarmnosaj

6月月更

快手处置超过5.4万个违规账号:如何打击平台上的违规账号

石头IT视角

【LeetCode】 极大极小游戏Java题解

Albert

LeetCode 6月月更

循环结构语句

Jason199

js 循环语句 6月月更

Es6新特性——箭头函数

大熊G

JavaScript 前端 6月月更

数据库每日一题---第8天:超过5名学生的课

知心宝贝

数据库 程序员 前端 后端 6月月更

线程池的创建

急需上岸的小谢

6月月更

vue指令-6

小恺

6月月更

为什么使用 Golang 进行 Web 开发

宇宙之一粟

golang 6月月更

【sql语句基础】——增(insert)

写代码两年半

数据库 sql MySQL 数据库 6月月更

react管理渲染问题详解【王道react】

恒山其若陋兮

React 6月月更

远程办公经验分享 | 社区征文

Geek_ac6fb9

初夏征文

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