报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

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

评论

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

首次!统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务

阿里巴巴中间件

阿里云 云原生 中间件 双十一 统一调度

不要再重复造轮子了,Hutool这款开源工具类库贼好使

沉默王二

Java

Web 用户体验设计提升实践

Shopee技术团队

大前端 web开发 用户体验 交互设计 可访问性

【云小课】如何初步定位GaussDB(for openGauss)慢SQL

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库

月薪3万的大厂测试工程师裸辞3个月,送外卖谋生背后的真实感悟

六十七点五

程序员 程序人生 软件测试 软件自动化测试 测试工程师

就是简单,全球100多万读者,一起跑通前端HTML5与CSS3知识!

图灵教育

大前端 HTML5, CSS3

第一本 Compose 图书上市,联想大咖教你学会 Android 全新 UI 编程

图灵教育

Compose AndroidUI

浅谈 RDMA 与无损网络

青云技术社区

云计算 云原生 存储

如何穿透ToB客户生命周期的全链增长?

ToB行业头条

一招教你通过焱融 SaaS 数据服务平台+ELK 让日志帮你做决策

焱融科技

云计算 分布式 SaaS 公有云 文件存储

我所理解的社群—社群本质

sec01张云龙

社群 11月日更 社群运营

手把手教你学Dapr - 1. .Net开发者的大时代

MASA技术团队

C# .net 微软 后端 dapr

拥抱智能,AI 视频编码技术的新探索

阿里云CloudImagine

阿里云 视频编码 机器视觉 视频编解码 视频云

前端的状态管理与时间旅行:San实践篇

百度开发者中心

大前端 san san-store 技术实践

Python代码阅读(第58篇):压缩列表

Felix

Python 编程 列表 阅读代码 Python初学者

盲盒app开发

极光笔记丨关于数据大屏一比一还原设计稿这件事

极光JIGUANG

大前端 数据可视化

速来!开源中国首届飞算SoFlu组件开发悬赏赛来袭

飞算JavaAI开发助手

Java

openGauss支持国密SM3和SM4算法

#数据库

从 Linux源码 看 Socket(TCP)的accept

赖猫

c++ Linux 后端 服务器 epoll

企业如何选择合适的低代码平台?这6点不得不考虑!

J2PaaS低代码平台

低代码 低代码开发 低代码平台 企业数字化

我是一个程序员,总想引导亲朋好友走上编程的伟大航路......

图灵教育

程序员 App Inventor

LevelDB Java&Go实践

FunTester

Java 自学 Go 语言 leveldb FunTester

开源数据库风起云涌,openGauss 恰逢其时

#数据库

经验分享|参与内部开源的心路历程

云智慧AIOps社区

大前端 数据可视化 知识分享 开源治理 flyfish

CSS布局之display:flex(二)

Augus

CSS 11月日更

Nebula Graph 源码解读系列 | Vol.04 基于 RBO 的 Optimizer 实现

NebulaGraph

图数据库 源码解读

模块三作业——外包学生管理系统架构设计

覃飞

项目管理常见问题系列(1)—资源不足

一叶而不知秋

项目管理

手把手教你学Dapr - 2. 必须知道的概念

MASA技术团队

C# .net 微软 后端 dapr

Nginx中间件渗透总结

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

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