RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

简介: RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

给各位分享一篇关于GitHub上的rust风格的开发人员如何可以使开发更加安全的博客,我已经帮大家翻译了


设您正在使用 C++ 构建电子邮件客户端。您的新应用程序将在每天由多个不同人员使用的工作站上运行。但是在某个地方,你犯了一个错误。通过向自己发送特制的电子邮件,他们可以溢出应用程序的内存缓冲区,并发送应用程序命令以从其他用户的收件箱中检索电子邮件。


此缓冲区溢出错误是内存安全问题的典型示例,也是软件中最常见的安全问题类型之一。根据微软安全响应中心的Matt Miller的演讲,在2004年至2018年期间,Microsoft产品中修复的所有安全问题中约有70%是内存安全问题,该中心对公司报告的所有安全问题进行了分类。


内存安全是一个大问题。操作系统需要确保各个应用程序不会相互泄漏数据。Web 浏览器需要确保在一个选项卡中打开的 Web 应用无法从另一个选项卡抓取数据。云计算平台需要确保一个用户无法从另一个用户那里读取数据。


“内存安全不仅仅是一个技术问题,也是一个社会问题,”互联网安全研究小组执行董事Joshua Aas说。“内存安全问题不仅会产生有缺陷的软件。它们可能会破坏人们赖以谋生或找工作的服务。安全漏洞会剥夺我们的隐私。软件可以而且应该以更好的方式构建。

“内存安全不仅仅是一个技术问题,也是一个社会问题。

2020 年 10 月,互联网安全研究小组启动了一项名为 Prossimo 的计划,致力于促进互联网上的内存安全。到目前为止,他们的主要举措是使用 Rust 编程语言,该语言于 2010 年由 Mozilla 开源,可以更轻松地编写内存安全代码。

C、C++ 和其他需要开发人员编写代码来管理其软件内存的编程语言被认为是“内存不安全”,因为即使是很小的错误也会造成内存安全问题。“无论你的开发人员多么有才华,他们都会犯错误,”Aas说。“世界上最伟大、最有能力的系统编程团队经常会制造内存安全问题。只要看看几乎任何重大项目的安全补丁说明,你就会看到一个又一个的例子。


正如云边缘计算公司 Fastly 的工程副总裁 Laura Thomson 所说:“编写 C 就像在没有帮助的情况下进行脑部手术。


长期以来,用“内存安全”语言编写自动管理内存的软件已被证明可以减少整个安全漏洞。尽管如此,C和C++代码仍然无处不在。操作系统、网络软件、Web 浏览器和硬件驱动程序传统上都是用 C 或其面向对象的后继者 C++ 编写的。无论您使用的是 Android、iOS、Windows、Linux 还是 Mac,尽管在许多应用程序中使用了 C#、Java 和 Swift 等内存安全语言,但后台还是有很多 C/C++。


这是有充分理由的。C 和 C++ 速度很快。他们很可靠。程序员已经知道如何使用它们,其中编写了数千个开源库,并且他们几乎为每个可以想象的芯片组提供了编译器。

Prossimo 专注于整体内存安全,而不仅仅是 Rust。但 Rust 可能比任何其他语言都更有可能破坏系统编程的现状。


“Rust 是过去 20 年左右引入的一组新语言中的第一个,它们可以真正用于我们以前一直停留在 C 或汇编代码中构建的东西,”Fastly 首席技术官 Tyler McMullen 说。“它具有记忆性能,并且具有引人注目的类型系统,可让您用低级语言表达更高层次的概念。此外,它与其他语言的互操作性很好,可以在从嵌入式系统到服务器的许多平台上运行。


Rust 具有牵引力。在 Stack Overflow 的 2021 年开发者调查中,Rust 被评为“最受欢迎”的编程语言——这是该语言连续第六年位居榜首。与此同时,从科学计算到开源项目,例如由Node.js创建者Ryan Dahl构建的新服务器端JavaScript平台Deno,它变得越来越受欢迎。


今年,Mozilla 将 Rust 的管理权移交给了 Rust 基金会,该基金会是由亚马逊网络服务、Facebook、谷歌、华为、Microsoft 和 Mozilla 共同创立的联盟。这表明业界最大的参与者对 Rust 的未来是认真的。


例如,Facebook 现在有数百名开发人员使用 Rust,其中包括一些核心 Rust 编程语言的贡献者。Facebook 并没有放弃其他语言,但 Rust 被用于整个公司的项目,包括 Diem 区块链、Move 编程语言以及他们的 Buck 工具的下一个版本。“我们参与基金会的主要目标之一是与其他优秀的基金会成员和 Rust 社区密切合作,帮助 Rust 维护者更有效地完成他们的伟大工作,使 Rust 成为系统编程及其他领域的主流语言选择,”Facebook 开源开发者倡导者兼 Rust 基金会成员总监 Joel Marcey 说。


许多公司现在都在使用 Rust 来帮助保护他们的云计算平台,包括 Amazon Web Services、Cloudflare、Fastly 和 Microsoft Azure。


“几年前我还没有被卖掉,”麦克马伦说。但是 Fastly 的 WebAssembly 团队要求使用 Rust 构建一些项目,McMullen 对该语言的性能和安全性印象深刻。现在 Rust 是公司堆栈的核心部分。“基本上,我们在后端所做的所有新工作都是用 Rust 编写的,”Thomson 说。“我们的客户用来运行代码的计算服务都是基于 Rust 构建的。”

“基本上,我们在后端所做的所有新工作都是用 Rust 编写的。”

McMullen 说,他们的目标是确保整个数据平面管道内存的安全。“在这种环境中,我们不能信任任何人,”他说。“我们不能信任传入的流量,我们不能信任服务器上运行的代码。用 Rust 这样的语言编写可以更容易地不必信任。


AWS 在多种服务的网络堆栈中使用 Rust,包括 EC2、S3 和 CloudFront,Amazon Web Services 的 Rust 平台团队负责人 Shane Miller 说。该云平台在 Rust 中构建了大部分开源、面向容器的虚拟化系统 Firecracker,以及基于 Linux 的容器操作系统 Bottlerocket。“Rust 很快成为 AWS 大规模交付基础设施的关键,”Miller 说,他也是 Rust 基金会的主席。


使用内存安全语言进行绿地开发是一个好的开始。但是,要使 Web 更加内存安全,还需要重构旧软件。最雄心勃勃的 Rust 编程语言工作之一是推动在 Linux 中增加对 Rust 的支持,这项工作尚未得到 Linus Torvalds 的认可,他告诉 ZDnet,当谈到 Rust 时,他处于“观望阵营”。


与此同时,Linux 版 Rust 团队正在努力使 Rust 和内核很好地结合在一起。例如,Rust 标准库假设内存分配永远不会返回错误,这一概念称为“无误分配”。当内存分配失败时,进程将终止。问题在于,这可能会导致内核崩溃——换句话说,操作系统会完全停止,以响应它认为的致命错误。如果并行运行多个工作负载,这是个坏消息。由 Google 赞助的 Linux 版 Rust 团队最近使用自定义 Rust 库解决了这个问题,但项目负责人 Miguel Ojeda 写道,他希望看到这个问题在 Rust 本身的上游得到解决。“我们已经开始了这个过程,一些变化已经被上游接受了,”他在内核邮件列表上写道。


如果 Rust for Linux 被合并,这将是 Linux 内核第一次正式支持 C 或汇编语言以外的语言,内核开发人员 Greg Kroah-Hartman 说。


Linux 并不是唯一使用 Rust 的操作系统。2019 年,Microsoft Hyper-V 工程团队的 Adam Burch 在一篇博客文章中宣布,他正在用 Rust 重写 Windows 代码库的一个低级系统组件,尽管他不能说出是什么组件。“虽然这个项目还没有完成,但我可以说我对 Rust 的体验总体上是积极的。对于那些希望避免经常导致 C++ 代码库中安全漏洞的常见错误的人来说,这是一个不错的选择。

所以的东西都会生锈

如果您准备好自己使用 Rust,Rust 社区提供了各种各样的资源来学习该语言。但要注意。尽管 Rust 的粉丝们喜欢这门语言,但它确实有一个问题:许多程序员抱怨说,与其他现代语言相比,Rust 的学习曲线很陡峭。“工程师们将学习 Rust 比作学习吃蔬菜,”Miller 说。“一旦他们理解了它,他们就会喜欢它,但它可能会令人生畏。所以我关注的一件事是把西兰花变成布朗尼。让学习体验变得很棒。


为了解决这个问题,亚马逊云科技正在聘请计算机科学教育专家来咨询语言的设计。一些改进很简单,例如在文档中提供其他代码示例。该公司希望为 Rust 贡献的其他想法则更为复杂。例如,重新思考 Rust 的编译器。


但即使对于 Rust 的忠实粉丝来说,仍然很难想象世界上所有的内存不安全代码都在 Rust 中被重写。旧代码需要很长时间才能停用,尤其是在它已经运行良好的情况下。Thompson Reuters 估计,目前仍有大约 2200 亿行 COBOL 正在生产中,COBOL 是一种可以追溯到 1950 年代的更古老的语言,为大约 43% 的银行系统和 95% 的 ATM 刷卡提供支持。Fortran 同样在世界各地的商业应用程序中仍然很常见。


也就是说,并非所有旧的 C/C++ 代码都需要重写。“我们并不是要解决成千上万的项目,”Aas说。“我们专注于几乎每个人都使用的关键组件。像 Web 服务器、内核、TLS、DNS、NTP 这样的东西——互联网的核心结构。

我们专注于几乎每个人都使用的关键组件。

“在某些情况下,您可以逐个组件替换软件组件,”Aas 解释道。“你可以用内存安全的库替换内存不安全的库,随着时间的推移,使整个应用程序更加内存安全。

Prossimo 与 Curl 的合作就是一个很好的例子。Curl 主要用 C 语言编写,但 Prossimo 赞助了在 Curl 中添加对基于 Rust 的 TLS 和 HTTP 网络库的支持。这使得将 Rust 用于应用程序中触及网络边缘的部分成为可能,而无需完全重写 Curl。Curl 并不默认使用基于 Rust 的库,但任何喜欢它们的人都可以打开它们。“我们希望,随着内存安全模块的测试和改进,它们最终将成为所有主要Linux发行版的默认模块,”Aas说。


同时,有一些方法可以对不安全代码进行沙盒化,以最大限度地降低与之相关的风险。例如,Fastly通过基于Rust的WebAssembly运行时运行许多基于C / C++的软件。“这是将所有软件放入 Rust 的巧妙小方法,”McMullen 说。


当然,包括安全漏洞在内的错误是不可避免的。但是,通过选择一种可以防止内存安全问题的编程语言,完全有可能消除这些问题。Rust 提供了一种越来越流行的语言,它不仅性能高、功能强大且开源,而且还使互联网对每个人来说都更安全。


相关文章
|
1月前
|
存储 Rust 监控
Rust代码编写高性能屏幕监控软件的核心算法
本文介绍了使用Rust编写的高性能屏幕监控软件的实现方法。核心算法包括:1) 使用`image`和`winit`库捕获并转换屏幕图像;2) 对图像进行处理,检测特定对象或活动;3) 利用Rust的并发性并行处理多个帧以提高效率;4) 提取数据后,通过`reqwest`库自动提交到网站进行分析或存储。通过结合Rust的高性能和丰富的库,可构建满足各种需求的高效屏幕监控工具。
131 5
|
14天前
|
Rust 前端开发 JavaScript
Tauri框架:使用Rust构建轻量级桌面应用
Tauri是一个用Rust构建的开源框架,用于创建轻量、安全且高效的跨平台桌面应用,结合Rust与Web技术(HTML/CSS/JS)。它遵循最小权限原则,仅在必要时调用OS API。Tauri架构包括Rust后端、Web前端、Tauri API和包装器。通过`cargo tauri init`可创建新项目,Rust后端处理系统交互,前端负责UI,两者通过Tauri API通信。Tauri支持自定义API、集成前端框架、资源管理、自动更新、系统集成和安全配置。此外,Tauri拥有插件系统和丰富的扩展能力,提供调试和测试工具,并有性能优化建议。
49 4
|
18天前
|
Rust 安全 开发者
探索Rust语言的内存安全特性
【6月更文挑战第8天】Rust语言针对内存安全问题提供了创新解决方案,包括所有权系统、借用规则和生命周期参数。所有权系统确保值与其所有者绑定,防止内存泄漏;借用规则保证同一时间只有一个可变引用或多个不可变引用,消除数据竞争和野指针;生命周期参数则强化了引用的有效范围,提升安全性。通过这些特性,Rust帮助开发者编写出更健壮、安全的高性能软件,有望成为系统编程领域的领头羊。
|
23天前
|
监控 Rust 安全
Rust代码在公司电脑监控软件中的内存安全监控
使用 Rust 语言开发的内存安全监控软件在企业中日益重要,尤其对于高安全稳定性的系统。文中展示了如何用 Rust 监控内存使用:通过获取向量长度和内存大小来防止泄漏和溢出。此外,代码示例还演示了利用 reqwest 库自动将监控数据提交至公司网站进行实时分析,以保证系统的稳定和安全。
88 2
|
26天前
|
Rust 安全 测试技术
使用Rust进行内存安全系统编程
【5月更文挑战第31天】Rust是一种保证内存安全的系统编程语言,通过所有权和借用系统防止内存错误,如内存泄漏和数据竞争。它的高性能、并发安全和跨平台特性使其在系统编程中占有一席之地。学习Rust涉及理解基本语法、所有权系统及使用标准库。通过案例分析,展示了如何在内存安全的前提下编写文件服务器。随着Rust的成熟,它在系统编程领域的应用前景广阔。
|
30天前
|
JSON Rust 监控
公司电脑监控软件的Rust编程实现与安全性提升
这篇文章介绍了如何使用Rust编程语言开发一个基础的企业电脑监控软件,包括初始化项目、捕获键盘输入、监控网络活动。同时,文章强调了提升安全性的重要性,提出了数据加密(如AES)和完整性校验(如SHA-256)的方法,并展示了如何将监控数据自动提交到远程服务器。通过Rust,开发者能创建高效且安全的监控解决方案。
99 2
|
1月前
|
Rust 安全 Java
Rust 和 Go:如何选择最适合你的编程语言
Rust 和 Go 都是优秀的选择 首先,重要的是要说 Rust 和 Go 都是非常优秀的编程语言。它们都是现代的、强大的,被广泛采用,且提供了卓越的性能。
28 1
|
1月前
|
数据采集 缓存 Rust
通过Rust实现公司电脑监控软件的性能优化算法
使用Rust语言开发高效的公司电脑监控软件,通过实时监测CPU、内存、网络等性能数据,确保企业环境的稳定性。文中通过代码示例展示了数据采集模块,如读取CPU使用率,并利用缓存机制减少文件系统访问,提升性能。此外,还介绍了如何将监控数据通过HTTP客户端提交到网站进行分析和管理,以优化运维流程。
128 3
|
1月前
|
Rust 安全 开发者
探索新一代编程语言:Rust
【4月更文挑战第28天】
|
1月前
|
Rust 安全 物联网
Rust在嵌入式系统中的应用:开辟安全高效的新天地
随着物联网(IoT)和嵌入式系统的快速发展,Rust编程语言正逐渐在这些领域中崭露头角。本文旨在探讨Rust为何适合嵌入式系统开发,并深入分析其在安全性、性能和内存管理方面的优势。通过几个实际应用案例,展示Rust如何助力嵌入式系统迈向更安全、更高效的未来。