不管软件公司投入多少工具资源、培训资源。Ryan Levick认为:“ C ++本质上不是安全的语言,”微软云开发倡导者,在上个月的AllThingsOpen虚拟会议,解释了为什么Microsoft逐渐从 C/C++ 转移到 Rust 构建其基础结构软件。并鼓励其他软件行业巨头考虑相同的问题。

他说:“我们所使用的语言由于年代久远,来自不同时代,因此无法为我们提供保护自己免受此类漏洞攻击的能力。 C ++不是一种内存安全的语言。”(传送门)

事实上,微软认为C ++在编写关键任务软件方面不再被接受。业界非常需要在其低级系统工作中采用高性能,内存安全的语言。Levick说,当今市场上最好的选择是Rust

C/C++不可能被修复

今天,C和C ++是编写核心系统软件的常用语言。它是快速的,仅在代码和机器本身之间只有汇编语言。

但是,由这些语言引起的所有与内存相关的bugs(其中很多是安全隐患)使整个行业陷入瘫痪。 Levick说,现在,源自微软的CVE中有70%是内存安全问题。他说:“尽管我们为解决此问题付出了巨大的努力,但这似乎仍然是司空见惯的事情。”

从财务的角度来看,考虑到补救这种与内存相关的永无休止的错误的高昂成本,这是有道理的。 Levick说,早在2004年,每个与内存相关的错误就使业界损失了大约25万美元,而微软的估计是保守的。

当然,为了提高C ++安全性,已经进行了许多努力,尽管每种努力都有效,但并不能完全解决问题。

长期以来一直存在的一种方法是对程序员进行安全代码方面的培训。但是,“没有证据表明,对 C/C++ 开发人员进行整体培训可以解决此问题,” Levick引用了微软自己的大量开发人员内部培训说。

引入静态代码分析作为另一种可能的解决方案。但是静态分析会带来过多的开销:需要将其连接到构建系统中。列维克说:“因此,有很多理由不使用静态代码分析。如果默认不开启静态代码分析,则无济于事。”

运行时检查也是如此:“这是不可能或者至少很难知道何时使用了运行时检查规约,何时没有使用。”他补充说,它们还带有运行开销。

业界的最佳机会

为解决与内存有关的错误问题,Microsoft安全响应中心发起了安全系统编程语言计划。在那里,有一些工作专门用于支持 C/C++。在此还创建了Verona,这是一种用于安全的低级编程的新编程语言。但是,他们最信任的是该项目策略的第三个分支,就是支持“业界解决此问题的最佳机会”。

他说: “而且我们相信这将是Rust”。

在性能方面,Rust与 C/C++ 相当,甚至可能更快。 Rust通过软件包管理,现代测试框架等为开发人员带来了生产力。love Rust

但是Microsoft如此着迷于Rust的主要原因是它是一种内存安全的语言,并且运行时检查最少。 Rust擅长创建正确的程序。 正确性大致意味着,编译器会检查程序是否存在不安全的操作,从而减少运行时错误。不安全关键字是一个选项,但不是默认值。不安全的Rust代码始终是更大范围的安全代码的子集。对于内存分配作业(例如,编写设备驱动程序),必须使用不安全模式。但是即使在这里,内存的不安全部分也封装在API的后面。

Levick说不应轻视这种安全编程的能力。实际上,它可以提供10倍以上的提升,值得进行投资。这主要是因为几乎所有 C/C ++ 代码都需要进行安全性审核、检查不安全行为,而用Rust编写的不安全代码也需要检查,但这只是大多数代码库的一小部分。

尽管微软看好Rust,但Levick承认微软核心开发人员不会很快停止使用C/C++。

他说:“微软拥有许多C++代码,并且这些代码无处不在。实际上,Microsoft c++ 仍将继续编写,并将继续编写一段时间。”

许多工具都是基于 C/C++ 构建的。特别是,Microsoft二进制文件现在几乎完全建立在可生成 MSVC 二进制文件的Microsoft Visual C ++编译器上,而Rust则依赖于LLVM

不过,也许最大的挑战是文化。Levick承认:“有些人只是想用他们已经知道的语言来完成工作。”

不过,行业似乎正在向Rust迈进。 Amazon Web Services使用它,部分用于部署Lambda serverless runtime,以及EC2的某些部分。 Facebook开始使用Rust。Apple,Google,Dropbox和Cloudflare也是如此。

2020年【All Things Open】的日期已经宣布:Oct. 20-22.


誉儿
173 声望1.2k 粉丝