图片 3

微软计划使用,微软正在开发基于

此前,微软表示正探索将 Rust 作为 C 和 C++
的安全替代方案,并且也对外展示了使用 Rust 重写 Windows
组件的体验,根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用
Rust 重写各种产品,因为在过去的十年里,微软 70%
以上的安全补丁都提供了与内存相关的错误,而
Rust 正是解决这个问题的“良药”。

图片 1

而根据 ZDNet
的报导,近日在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew
Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona

新智元推荐

图片 2

来源:InfoQ

演讲中,Matthew 先是分享了微软在
MemGC(Memory Garbage Collector)上所做的工作,MemGC 是指 IE 和  Edge
浏览器上的内存垃圾回收器,它解决了标准浏览器一个特性——文档对象模型(DOM)中的漏洞,DOM
以树结构表述了 HTML 文档内容。 

作者:王文婧

之后他由此牵出另一个问题:如何构建最安全的产品?不仅仅丢弃已有的东西,而要考虑可以在更加安全的系统中构建一些什么。他介绍了微软正在使用 Rust
重写某些组件,并提出:“如果我们想要隔离,并精简遗留代码,以使攻击者的利用代码无法逃逸出来,那么如何设计语言呢?” 
  

微软近日提出,未来将使用 Rust 作为 C、C++
以及其他编程语言的替代方案,以改善应用程序的安全性的计划。

Matthew 提出了微软正在开发的基于
Rust 的新编程语言 Verona,他表示这是首次讨论该项目,Verona
是用于微软“安全基础设施编程(safe infrastructure
programming)”的一种新语言。

近日,微软安全响应中心团队在官网更新文章,就近日提出的最新计划,即未来将使用
Rust 作为 C、C++
以及其他编程语言的替代方案以改善应用程序的安全性的计划,从空间内存安全、时间内存安全、数据竞争等方面进行了进一步的深入补充。

Matthew 介绍,Verona 由 C# 项目经理
Mads Torgensen 与 Microsoft Research Cambridge 研究软件工程师 Juliana
Franco 维护。 

首席安全技术经理 Gavin Thomas
表示,开发人员的核心工作不是担心安全性,而是做好功能开发,首先需要启用一种
“不会引入内存漏洞隐患” 的开发语言。显然,这一次的主角是 Rust。

微软面临的挑战是应对宽广的应用领域,范围从
C# 桌面应用到 C 或 C# Exchange、ASP.NET、Azure
与设备驱动程序,再到内存管理和启动加载器等底层 Windows 组件,以及
Windows 内核硬件抽象层(HAL,hardware abstraction
layer)。 

过去 12 年,约 70% 的微软补丁针对内存漏洞

“执行内存管理确实很困难,如果有任意并发突变,则临时内存安全性将非常困难”,Matthew
介绍了 Verona 的设计思路:“Verona 的所有权模型是基于对象组的,而不是像
Rust 那样基于单个对象的所有权模型。在 C++
中,可以获得指针,并且它是基于对象的。但这与我关于数据和语法的思考不同,我认为数据结构是对象的集合,而对象的集合则是生命周期。 因此,通过在对象的所有权级别获得所有权,我们就可以更接近人们正在使用的抽象级别,它使我们能够构建数据结构而不会超出安全范围。”

如今,内存漏洞已成为黑客攻击的主要对象。据微软最新调查数据显示,在过去
12 年里,约 70% 的微软补丁都是针对内存漏洞的。

So by taking ownership at the level of ownership of objects, then we
get much closer to the level of abstraction that people are using and
it gives us the ability to build data structures without going outside
of safety.

自 2004 年以来,微软安全响应中心
已经对每一个报告的微软安全漏洞进行了分类。从所有的分类中,人们得出了一个令人惊讶的事实:正如
Matt Miller 今年在 BlueHat IL
的演讲中所讨论的那样,大多数修复的漏洞和分配的 CVE
都是由开发人员无意中将内存损坏错误插入到其 C 和 C++
的代码中造成的。这两种存在内存漏洞风险的编程语言允许开发人员在代码被执行的地方对内存地址进行细粒度控制。开发人员内存管理代码中的一个错误可能导致大量内存漏洞,攻击者便可利用这些错误造成具有危险性和侵入性的后果,比如远程代码执行
和权限升级漏洞。

另外,Matthew 还表示 Verona 很快将会开源。

图片 3

(文/开源中国)    

数据来源:微软安全响应中心网站

近年来,随着微软增加其代码库并在代码中使用更多的开源软件,这一问题并没有得以解决,反而变得更糟,而微软也并不是唯一一个暴露出内存漏洞的企业。

在官网发布的最新文章中,微软安全响应中心团队就如何解决内存安全问题进行了如下分析,

为了解决内存安全问题,需要采取几种不同的方式。C++ 中的 “现代”
构造能够在一定程度上预防某些内存安全问题。此外,我们应尽可能使用其它现代
C++ 功能。

然而,现代 C++
仍然不具备全面的内存安全与数据争用机制。更重要的是,如果程序员不加以运用,这些功能本身将毫无意义;而且这些功能在规模较大,且较为模糊的代码库可能也无法奏效。再者,C++
缺乏能够在安全抽象当中打包不安全代码的良好工具,这意味着虽然能够在本地级别强制执行正确的编码实践,但开发人员仍很难在
C 或者 C++
当中构建出能够安全组合的软件组件。除此之外,我们应尽可能将软件最终迁移至具备全面内存安全特性的语言当中,例如,通过运行时检查以及垃圾回收机制,实现内存保护的
C# 或者
F#。毕竟,内存管理是一项极为复杂的功能,最好是确保必要时才与其打交道。

Rust 的优势

多年来,微软始终在寻找更安全的 C 和 C++ 的替代品。2016 年 6
月,微软曾开源 “Checked C”,这是 C
语言的一个扩展,它带来了一些解决安全问题的新特性,但依然没有彻底解决问题。由于自动内存管理,Microsoft
还有其他更安全的编程语言,C#和.NET 系列是一个,编译为 JavaScript 的
TypeScript 是另一个。这些语言被 Microsoft
及其客户广泛使用,但它们无法满足所有需求。对此,微软安全响应中心首席安全技术经理
Gavin Thomas 表示:“如果开发人员能够将确保内存安全的
.NET,C#等语言与高效的 C ++ 结合起来,那就太好了。也许我们可以。”
因此,Rust 成为了这项计划的主角。

据了解,Rust 创建于 2006 年,被创建者 Mozilla 称为 “C / C ++
的替代品”。最初,它只是 Mozilla
的一个研究项目,旨在开发更安全、快速的编程语言以重写 Firefox
浏览器,大多数开发人员认为它是一个理论项目,而如今 Rust
正在逐步证明自己的实力。2016 年 8 月发布的 Firefox 48 采用了以 Rust
构建的 mp4 轨道元数据解析器,该解析器首次在 Windows 和 32 位 Linux
桌面提供。最近,Brave 浏览器用 Rust 替换了最初用 C ++
编写的广告拦截组件。Cloudflare 和 Dropbox 目前也在生产系统中运行 Rust。

Rust 的显着特征包括:

零成本抽象

移动语义

保证内存安全