C、C++、Rust不得宠,微软正开发新的编程语言Verona

felix 2019-12-10 rust verona 500

自 2004 年以来,微软安全响应中心(MSRC)对所有微软安全漏洞报告进行了分类,从中发现,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复。根据深入地调查,我们发现这些漏洞是由开发者无意中在其 C、C++ 代码中插入内容损坏错误引起的。
微软每年修复的 CVE 漏洞中约有 70% 是内存安全问题
在清晰地认知这一点后,微软也开始了寻找更安全的编程语言之路。
在探索伊始,微软熟知有几种语言在一定程度上可以被用来防止内存损坏漏洞,如 C#。但令人无奈的是,像 C++ 这类的编程语言在某些情况下又是必不可少的,毕竟其在运行的速度、内存和磁盘占用的空间上均有优势,除了以上,C++ 还可以预测执行。对此,两者是否可以合二为一,即是否可以运用 .NET、C# 之类的语言来保证所有内存安全,再加上 C++ 所具备的效率。
综合之下,想要满足这些条件,素来以“安全、并发、实用”为设计准则的 Rust 或是一个最佳的选择。对此,微软安全部门也认可道,Rust 是一种从根本上考虑安全性的编程语言,它像 C、C++ 一样也有一个最小的可选“运行时”,此外,它的标准库依赖于 libc,但标准库也是可选的,因此在没有操作系统的平台上运行也是可能的。

微软对安全的深入研究——Verona 语言
不过,世界上没有足够安全的操作系统,当然也不会有完美无瑕疵的编程语言。在基于 Rust 完善 Windows 系统安全之际,MSRC 也发现该语言缺乏与 C++ 的一流互操作性,以及与现有 Microsoft 工具的互操作性。
对此,据外媒 ZDNet 报道,微软研究人员 Matthew Parkinson 在近日的一次演讲中对外透露,微软正在开发类似于 Rust 的新编程语言——Verona。
和以前的目的一样,微软旨在通过 Verona 来开发低级的 Windows 组件以完善 Windows 10 的安全性问题。
“内存安全”是编码框架的术语之一,可帮助保护内存空间免受恶意软件的滥用。微软希望借助 Verona 项目推动在安全方面的工作以关闭这种攻击媒介。此前,有不少业界人士表示,微软的 Vernoa 项目计划可能只是一个无济于事的实验。
不过,在近期的演讲中,微软研究人员 Matthew Parkinson 分享了微软在 MemGC(Memory Garbage Collector)上所做的工作,以及 Verona 的最新进展。
MemGC 是指 IE 和 Edge 浏览器上的内存垃圾回收器,它解决了标准浏览器功能(称为文档对象模型(DOM))中的漏洞。Matthew Parkinson 表示:“我们为 DOM 构建了一个垃圾收集器(GC)。开发者可以通过免费使用,能在 IE 中找到利用 DOM 引擎中的内存管理方法。然后,微软引入了 MemGC,它是 DOM 的保守 GC。它针对这种非常特殊的漏洞样式,从根本上消除了它作为攻击媒介。”
除了以上,Matthew Parkinson 也一直在钻研一个可能引起其产品客户共鸣的问题:“我们将如何构建最安全的产品?如何应对遗留问题?我们不能想着仅仅丢弃已有的东西,而是思考可以在更安全的系统中构建什么。”
基于这样的信念,Parkinson 表示,“如果想要隔离,并精简遗留的部分代码,以使攻击者的利用代码无法逃逸出来,那么在语言设计该有何创新?”
这就是微软最新的“安全基础结构编程” ——Verona 语言 ,据了解,这一项目将很快“开源”。
目前,该项目得到 C# 项目经理 Mads Torgensen 和 Microsoft Research Cambridge 研究软件工程师 Juliana Franco 的支持。
对于微软而言,其当前面临的挑战是应对广泛的“应用程序范围”,如从用于桌面应用程序的 C# 到用于 Exchange 的 C 或 C#、ASP.NET、Azure 和设备驱动程序,再到内存管理和启动加载器等底层 Windows 组件,以及 Windows 内核硬件抽象层(HAL)。
Matthew Parkinson 表示:“执行内存管理确实很困难。如果有任意并发突变,那么,临时内存安全性将非常困难。”此外,Matthew Parkinson 还介绍了 Verona 的设计思路,“Verona 的所有权模型是基于对象组的,而不是像 Rust 那样基于单个对象的所有权模型。在 C ++ 中,开发者可以获得指针,并且它是基于对象的,并且几乎是每个对象。不过,这和我关于数据和语法的思考不同,我认为数据结构是对象的集合,而对象的集合则是生命周期。
“因此,通过对象的所有权级别来获得所有权,我们就可以更接近人们正在使用的抽象级别,它使我们能够构建数据结构而不会超出安全范围。”
Rust 语法很繁琐复杂,C# 是出了名的很甜的语言,MS 肯定不能忍 Rust 这啰嗦繁琐的语法,估计要推出升级版,看好。