写点什么

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

  • 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:423242

评论

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

12~18k的前端面试会问个啥?

前端依依

学习 程序员 面试 大前端 经验分享

当一只「无头苍蝇」又何妨?

非著名程序员

读书笔记 提升认知 个人提升 8月日更

Error SHA256 mismatch

一个大红包

8月日更

为了进阿里,我通宵达旦三个月,学了这些技术点(附Java思维导图)

Java 编程 架构 面试 架构师

面试官:JVM的运行时数据区了解不?

程序员阿杜

Java JVM JVM、 8月日更

IBM大面积辞退40岁+的员工,瞧一瞧

Java 程序员 后端

解决方案|在线自习室

anyRTC开发者

音视频 在线教育 RTC RTM

【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码

编程三昧

面试 大前端 HTTP 8月日更

金九银十想面BAT?那这些JDK动态代理的面试点你一定要知道

编程菌

Java 编程 程序员 计算机 技术宅

读书日送书丨关于音视频技术你需要知道的二三事

声网

人工智能

Nacos注册中心之概要设计

捉虫大师

微服务 nacos 服务发现

80后程序员感慨中年危机,如何设计一个优雅的RESTFUL的接口

Java 程序员 后端

网络攻防学习笔记 Day95

穿过生命散发芬芳

态势感知 网络攻防 8月日更

Kong-To-APISIX:减轻你的迁移压力

API7.ai 技术团队

开源 网关 kong APISIX

Java入门视频教程!Kotlin(2)-泛型与集合

Java 程序员 后端

iOS底层学习【KVC】

程序员 iOS底层

SpringBoot 整合 Drools

LeifChen

drools springboot 规则引擎 8月日更 业务规则

试错,然后成长

escray

学习 极客时间 朱赟的技术管理课 8月日更

Java入门你值得拥有!天天都是面对对象编程,你真的了解你的对象吗

Java 程序员 后端

230页,看完之后你就会知道,原来Redis还能这么玩!

Java架构师迁哥

如何洞察出消费者购买的关键时刻

石云升

用户体验 关键时刻 体验设计 8月日更

Cloud Studio 2.0:云的开端

CODING DevOps

ide DevOps 开发环境 Cloud Studio

万字长文 | 16张图解开AbstractQueuedSynchronizer

程序猿阿星

并发编程 AQS 线程安全 多线程并发

【Vue2.x 源码学习】第二十五篇 - 数组依赖收集的原理

Brave

源码 vue2 8月日更

【网络安全】渗透工程师面试题总结大全

网络安全学海

面试 网络安全 信息安全 渗透测试 漏洞

Java入门你值得拥有!浅谈Facade外观模式

Java 程序员 后端

带你使用FFMPEG将MP4视频文件转换为GIF

hanaper

这些奥运“黑科技”运用了哪些AI技术?

澳鹏Appen

自动驾驶 机器学习 人脸识别 nlp 数据标注

阿里人,五年心血汇聚而成这份Spring Cloud Alibaba开发手册

Java架构师迁哥

刷完这套200+大厂Java真题手册,成功拿到阿里,京东,美团的offer

Java 编程 架构 面试 架构师

Vue进阶(五):与 Vuex 的第一次接触

No Silver Bullet

Vue vuex 8月日更

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