最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 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/

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2022-12-15 11:422967

评论

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

在线心语日历批量生成工具

入门小站

工具

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

AI 引航计划

独一无二的「MySQL调优金字塔」相信也许你拥有了它,你就很可能拥有了全世界。

洛神灬殇

性能优化 后端 MySQL 数据库 引航计划 10月月更

javaweb springboot汽车租赁系统源码

清风

源码 springboot 计算机毕业设计

软件架构之原则、风格和实践

俞凡

架构

Object.defineProperty的缺点及Vue3为什么用Proxy

wudaxue

【实战】基于TensorRT 加速YOLO系列以及其他加速算法实战与对比

cv君

AI 引航计划

第 9 章 -《Linux 一学就会》-文件的归档和压缩 tar---zip

学神来啦

Linux 运维 linux学习

SpringMVC源码分析-HandlerAdapter(4)-ModelAndViewContain组件分析

Brave

源码 springmvc 10月月更

数据结构与算法 - 复杂度

小马哥

数据结构与算法 日更

linux线上CPU100%排查

入门小站

Linux

【Flutter 专题】138 图解自定义国旗渐变头像

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

springboot vue失物招领网站源码

清风

源码 Vue springboot java 计算机毕业设计

《写给互联网工程师的5G书》全文pdf开放下载

俞凡

架构 5G 网络 通信 10月月更

在线GIF图片帧修改工具

入门小站

工具

Docker OOM Killer

BeyondLife

Docker JVM trouble shooting

以匠心正道,以决心致远:毫末智行的自动驾驶之路

脑极体

微博系统中”微博评论“的高性能高可用计算架构

michael

#架构实战营

翻译积累 - Java正则表达式Pattern类

小马哥

翻译 日更

容器 & 服务:Helm Charts(一)

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

细说包管理器yarn和npm

devpoint

npm YARN Node 10月月更

聊一聊差分放大器

不脱发的程序猿

嵌入式 电路设计 硬件开发 运算放大器

linux手误rm可能不需要跑路

入门小站

Linux

1. 滚雪球学Python第四季开启,一需三吃,Python 函数式编程初识,面向过程,面向对象,函数式

梦想橡皮擦

10月月更

2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

梦想橡皮擦

10月月更

谈 C++17 里的 State 模式之二

hedzr

c++ 算法 设计模式 Design Patterns 有限状态机

003云原生之架构原则

穿过生命散发芬芳

云原生 10月月更

【LeetCode】 旅行终点站Java题解

Albert

算法 LeetCode 10月月更

如何应对员工犯错?

石云升

项目管理 管理 引航计划 内容合集 10月月更

[27]智慧金融--AI目前最被看好的落地领域

数据与智能

人工智能

自动驾驶混战,剑气二宗谁能笑傲江湖?

白洞计划

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