写点什么

“病毒式”安全编程语言正在接管科技界

  • 2022-12-15
    北京
  • 本文字数:2978 字

    阅读完需:约 10 分钟

“病毒式”安全编程语言正在接管科技界

Rust 使得引入一些最常见的安全漏洞变得不可能, 而且它的采用也越快越好了。


无论你是为一家大型组织运营 IT 部门,还是仅仅拥有一部智能手机,你都会对由于缺陷和安全漏洞而造成的源源不断的软件更新感到非常熟悉。人们总会犯错,所以代码不可避免地会包含你所犯的错误。但是,越来越多的人开始使用一种叫做 Rust 的语言来编写软件,因为这种代码在一个重要方面是绝对安全的(goof-proof)。根据设计,开发人员在使用 Rust 编写代码时,不会意外地创建一些最常见的可利用安全漏洞类型,这一区别可能会对日常补丁队列产生巨大影响,并最终会影响全球的基线网络安全。

 

编程语言中有流行趋势,新的语言来来去去,往往没有持久的影响。现年已经 12 岁的 Rust 花了很长一段时间从 Mozilla 研究院的辅助项目成长为一个强大的生态系统。与此同时,至今仍被广泛使用的其前身语言 C,今年已经 50 岁了。但因为 Rust 能生成更安全的代码,而且至关重要的是,它不会因此而降低性能,所以该语言一直在稳步地获得拥护者,现在其正处于一个转折点。自 2019 年以来,微软、谷歌和亚马逊网络服务公司都在使用 Rust,这三家公司于 2020 年与 Mozilla 和华为共同成立了非营利组织Rust基金会,以维持和发展该语言。经过几年的紧张工作,Linux 内核在上个月迈出了实现Rust支持的第一步

 

“作为一种语言,它正在迅速地传播,”安卓安全与隐私工程副总裁 Dave Kleidermacher 表示。“我们一直在安卓和整个谷歌上投资 Rust,很多工程师都在想,‘我该怎么开始做这个呢?这太棒了。’Rust 刚刚作为一种被官方认可和接受的语言首次登陆 Linux。所以这不仅仅是安卓;任何基于 Linux 的系统现在都可以开始整合 Rust 组件了。”

 

Rust 被称为是一种“内存安全”的语言,因为它的设计目的是使程序不能意外地从计算机内存中提取非预期数据。当程序员使用不具备这一特性的可靠语言(包括 C 和 C++)时,他们必须仔细检查程序将要请求的数据的参数以及如何执行请求任务,即使是最熟练、最有经验的开发人员也会偶尔出错。通过使用 Rust 编写的新软件,即使是业余的程序员也可以确信他们没有在代码中引入任何的内存安全漏洞。

 

程序的内存是其所有特性和库所使用的共享资源。想象一个用非内存安全语言编写的日历程序。你打开日历,然后输入一个请求 2022 年 11 月 2 日的日期,程序就会从你计算机分配用于存储该日期数据的内存区域中获取所有信息。一切都顺利。但是,如果该程序设计的约束条件不对,并且你请求 2022 年 11 月 42 日的日期,该软件可能不会产生错误或其他故障,而是会尽职尽责地从存储不同数据的内存中返回信息,可能是你用来保护日历的密码,或者是你为高级日历功能而保存的信用卡号。如果你在 11 月 42 日把生日派对添加到了日历中,它可能会覆盖内存中不相关的数据,而不是告诉你它无法完成任务。这些被称为“越界”读写缺陷,你可以看到它们是如何潜在被利用,从而使攻击者能够不适当地访问数据,甚至扩展了系统控制。

 

另一种常见的内存安全漏洞,被称为“释放后使用”(Use-After-Free,UAF 漏洞),它涉及到的情况是,程序放弃了对部分内存的使用权(可能你删除了 2022 年 10 月的所有日历条目),但错误地保留了访问权限。如果你稍后请求从 10 月 17 日开始的数据,该程序可能能获取到那里的任何数据。此外,代码中内存安全漏洞的存在也带来了这样一种可能性:黑客可能精心设计一个恶意的日历邀请,其中包含精心选择的日期或一组事件的详细信息,目的是操纵内存以允许攻击者远程访问。

 

这些类型的漏洞不仅仅是深奥的软件缺陷。研究和审计一再发现,它们构成了所有软件漏洞的大部分。因此,尽管在使用 Rust 编程时仍然会出错并产生安全漏洞,但它能消除内存安全漏洞这一点是至关重要的。

 

软件供应链安全公司 Chainguard 的首席执行官 Dan Lorenc 表示:“在所有报告的发生在操作系统、手机和基础设施等关键应用程序中的漏洞中,内存安全问题占了很大很大的比例”。“在过去的几十年里,人们一直在用非内存安全的语言编写代码,我们一直试图改进和构建更好的工具,并教人们如何避免犯这些错误,但告诉人们更努力的做法实际上是有限度的。因此,你需要一种新技术来消除所有这类漏洞,这就是 Rust 最终的优势所在。”

 

Rust 并非没有怀疑者和批评者。过去两年,在 Linux 中实现 Rust 的努力一直备受争议,部分原因在于添加对任何其他语言的支持天生就增加了复杂性,另外部分原因在于如何具体地使其工作的争论。但支持者强调,Rust 具备必要的因素,它不会造成性能损失,而且它可以与其他语言编写的软件进行良好的互操作,这很关键,因为它满足了最迫切的需求。

 

“与其说这是正确的选择,不如说它已经准备好了,”长期开源贡献者和研究员 Lorenc 说道。“现在除了什么都不做之外,没有其他真正的选择了,而且这已经不再是一种选择。继续使用非内存安全的代码,再过十年,对科技行业、国家安全乃至一切都将是一个巨大的问题。”

  

然而,向 Rust 过渡的最大挑战之一,恰恰是开发人员已经花了几十年的时间用非内存安全的语言编写了重要的代码。用 Rust 编写新软件并不能解决大量的积压问题。例如,Linux 内核实现是从外围开始的,它支持基于 Rust 的驱动程序,即在操作系统和诸如打印机等硬件之间进行协调的程序。

 

“当你在做操作系统时,速度和性能始终是首要考虑因素,而你在 C++或 C 中运行的部分通常是由于性能原因而无法在 Java 或其他内存安全语言中运行的部分。”谷歌的 Kleidermacher 说。“因此,能够运行 Rust,并具有相同的性能,但又能获得内存安全真的很酷。但这是一段旅程。你不可能在一夜之间重写 5000 万行代码,所以我们会仔细挑选安全关键组件,随着时间的推移,我们将会再改进其他组件。”

 

Kleidermacher 表示,在安卓中,许多加密密钥管理功能现在都是用 Rust 编写的,私有互联网通信功能 DNS over HTTPS、新版本的超宽带芯片堆栈、以及谷歌定制的 Tensor G2 芯片中所使用的新版安卓虚拟化框架也是用 Rust 编写的。他补充说,安卓团队正在越来越多地将蓝牙和 Wi-Fi 等连接堆栈转换为 Rust,因为它们是基于复杂的行业标准的,往往会包含很多漏洞。简而言之,策略是首先将最暴露的或最重要的软件组件转换为 Rust,然后再从那里向内推进工作,从而开始获得增量的安全效益。

 

“是的,这是一项艰巨的工作,工作量很大,但科技行业有多少万亿美元,还有有多少才华横溢的程序员?我们有资源,”负责内存安全倡议 Prossimo 以及免费证书授权Let‘s Encrypt的互联网安全研究小组执行主任 Josh Aas 说。“仅仅需要大量工作的问题都是很伟大的。”

 

随着 Rust 向主流应用的过渡,针对内存安全问题的某种解决方案的案例似乎每天都在不断反复出现。就在本周,如果其机制是用内存安全的语言编写的话,那么无处不在的安全通信库 OpenSSL 中的一个高危漏洞就可以被阻止。与 2014 年那个臭名昭著的OpenSSL漏洞Heartbleed不同,该漏洞潜伏了两年,并使互联网上的网站遭受了数据拦截攻击,尽管已经在努力减少内存安全漏洞了,但这一新漏洞还是在过去几个月被引入到了 OpenSSL 中。

 

“现在有多少人因为内存安全漏洞而生活在身份被盗的噩梦中?或者在国家安全层面上,如果我们担心美国遭受网络攻击,那么有多少威胁是内存安全漏洞造成的?”Aas 说。“从我的角度来看,现在整个游戏只是在说服人们投入努力。我们是否足够了解这种威胁,我们是否有意愿。”

 

原文链接:

https://www.wired.com/story/rust-secure-programming-language-memory-safe/

2022-12-15 11:423274

评论

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

openGauss内核分析:查询重写

华为云开发者联盟

数据库 后端 查询 SQL语言 openGauss内核

ES6 类聊 JavaScript 设计模式之创建型模式

devpoint

JavaScript 设计模式 工厂模式 7月月更 创造性模式

龙蜥社区发布首个 Anolis OS 安全指南 为用户业务系统保驾护航

OpenAnolis小助手

阿里云 操作系统 龙蜥社区 sig 统信软件

TMECH发表优必选运控技术最新进展:实现人形机器人高鲁棒性行走

优必选科技

自助洗车或许要比自动洗车更干净

共享电单车厂家

自助洗车 自助洗车加盟 车白兔自助洗车 自动洗车

从云原生到智能化,深度解读行业首个「视频直播技术最佳实践图谱」

阿里云CloudImagine

音视频 直播 视频云

【盲盒APP商城系统】在线拆盒后的功能介绍

WDL22119

盲盒小程序开发 盲盒APP开发 盲盒源码 盲盒H5开发 盲盒系统开发

专业创作本华硕ProArt 创16 2022预售,高效创作新旗舰

科技热闻

带你认识一下数仓的分区自动管理

华为云开发者联盟

数据库 后端 分区

ICASSP 2022 | 用于多模态情感识别的KS-Transformer

优必选科技

人工智能 多模态机器学习

到底什么是自助洗车?来科普下

共享电单车厂家

自助洗车加盟 车白兔自助洗车 什么是自助洗车

【Docker 那些事儿】初始 Kubernetes 容器管理平台(上)

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

自助洗车费用居然比雪糕还便宜?

共享电单车厂家

自助洗车加盟 车白兔自助洗车 自助洗车费用 自助洗车价格

适合新手的12个Mybatis-Plus常用注解

华为云开发者联盟

后端 开发

让软件开发民主化的低代码

力软低代码开发平台

那一年,春晚拓荒牛背后的故事

优必选科技

机器人

阿里云联合平行云推出云XR平台,支持沉浸式体验应用快速落地

阿里云弹性计算

视觉计算 云XR平台

业务出海,灵感乍现前要先「把手弄脏」

融云 RongCloud

结合pyqt5开发办公文档一键转换软件,以后再也不用开会员转文件了

迷彩

打包 7月月更 自动化办公

Python函数默认参数避坑指南

和牛

测试

自助洗车加盟要满足什么条件

共享电单车厂家

自助洗车加盟 车白兔自助洗车

执行ls /dev/pts为什么这么慢?

BUG侦探

内核 ebpf devpts

云渲染,设计行业的“新贵”

Finovy Cloud

渲染 云渲染 GPU算力 渲染技术

视频聊天源码——一对一直播系统源码

开源直播系统源码

软件开发 直播系统源码 开源源码

商城异地多活架构设计

泋清

#架构训练营

SpringBoot到底是什么

华为云开发者联盟

开发 springboot parent

海外APP推送(上篇):厂商通道与谷歌FCM通道的差异

极光JIGUANG

单元测试,写起来到底有多痛?你会了吗

C++后台开发

网络编程 单元测试 后端开发 Linux服务器开发 C++开发

如何有效规避代码被“投毒”?

安势信息

许可证 代码安全 开源软件 安全合规检测 开源软件供应链

自助洗车为洗车行业注入新活力

共享电单车厂家

自助洗车 自助洗车加盟 车白兔自助洗车 洗车行业市场

从一线开发到技术总监,你就差一个赶鸭子上架

融云 RongCloud

程序员

“病毒式”安全编程语言正在接管科技界_语言 & 开发_Lily Hay Newman_InfoQ精选文章