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 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
75 1
|
1月前
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
98 2
|
2月前
|
Rust 安全 开发工具
探索 Rust:系统编程语言的新纪元
【10月更文挑战第17天】介绍了 Rust 语言的核心特性,如内存安全、强大的并发编程模型和接近 C/C++ 的性能。文章还涵盖了 Rust 的开发工具,如 Cargo 和 Rustup,以及其在业界的应用,包括微软 Azure 和 Firefox 浏览器。Rust 正在成为系统编程领域的新星,为开发者带来高性能和安全性。
|
2月前
|
Rust 安全 Java
软件工程师,是时候了解下Rust编程语言了
2024年年初,美国政府发布了一份网络安全报告,呼吁软件开发人员停止使用容易出现内存安全漏洞的编程语言,比如:C和C++,转而使用内存安全的编程语言。这份报告由美国网络空间总监办公室 (ONCD) 发布,旨在落实美国总统拜登的网络安全战略,目标是“保护网络空间的基石”。 内存安全指的是程序在访问内存时,能够避免出现错误和漏洞,比如:缓冲区溢出、野指针等。Java由于其运行时错误检测机制,被认为是一种内存安全的语言。然而,C和C++允许直接操作内存地址,并且缺乏边界检查,容易出现内存安全问题。
81 10
|
2月前
|
Rust 安全 网络安全
在 Rust 语言中,寻找企业上网行为管理软件的突破
在数字化企业环境中,上网行为管理软件对于保障网络安全和提升工作效率至关重要。Rust 语言凭借其安全性、高性能和并发性,为开发此类软件提供了新机遇。本文通过几个 Rust 代码示例,展示了如何实现网址检查、访问频率统计及访问控制等功能,旨在探索 Rust 在企业上网行为管理中的应用潜力。
43 0
|
3月前
|
Rust 安全 Java
探索 Rust:系统编程语言的新纪元
Rust 是一种由 Mozilla 研究院开发的开源系统编程语言,以其内存安全、高性能和现代并发工具著称,已连续多年被评为 Stack Overflow 最受喜爱的编程语言。Rust 通过所有权系统和借用检查等机制确保内存安全,并具备无垃圾回收、强大类型系统及高效并发编程特性。它广泛应用于系统级应用、WebAssembly、区块链技术和游戏开发等领域。Rust 提供丰富的学习资源和开发工具,包括官方文档、书籍、Cargo 包管理器和活跃社区支持,正逐渐成为系统编程领域的新力量。
|
4月前
|
数据采集 Rust 安全
Rust在网络爬虫中的应用与实践:探索内存安全与并发处理的奥秘
【8月更文挑战第31天】网络爬虫是自动化程序,用于从互联网抓取数据。随着互联网的发展,构建高效、安全的爬虫成为热点。Rust语言凭借内存安全和高性能特点,在此领域展现出巨大潜力。本文探讨Rust如何通过所有权、借用及生命周期机制保障内存安全;利用`async/await`模型和`tokio`运行时处理并发请求;借助WebAssembly技术处理动态内容;并使用`reqwest`和`js-sys`库解析CSS和JavaScript,确保代码的安全性和可维护性。未来,Rust将在网络爬虫领域扮演更重要角色。
91 1
|
4月前
|
Rust 安全 程序员
Rust 语言的防错机制太惊人了!安全编码从此不再是难题,快来一探究竟!
【8月更文挑战第31天】《安全编码原则:Rust 语言中的防错机制》探讨了代码安全的重要性,并详细介绍了Rust语言如何通过内存安全模型、所有权与借用规则等特性,在编译阶段检测并阻止潜在错误,如缓冲区溢出和悬空指针。文章还讨论了类型安全、边界检查等其他安全特性,并提出了遵循不可变引用、避免裸指针及充分测试等实用编码原则,以进一步提升代码质量和安全性。随着Rust在软件开发中的应用日益广泛,掌握其安全编码原则变得尤为重要。
76 0
|
4月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
47 0
|
4月前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
73 0