微软正探索将 Rust 作为 C 和 C++ 的安全替代方案

xplanet
 xplanet
发布于 2019年07月19日
收藏 44

微软正在探索使用 Rust 编程语言作为 C、C++ 和其他语言的替代方案,以此来改善应用程序的安全状况。

自 2004 年以来,微软安全响应中心(MSRC)已对所有报告过的微软安全漏洞进行了分类。根据他们提供的数据,所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复程序。

▲微软每年约有 70% 的漏洞仍然是内存安全问题

这样高的百分比是因为 Windows 和大多数其他微软产品主要使用 C 和 C++ 编写,这两种“内存不安全”(memory-unsafe)的编程语言允许开发人员对内存地址进行细粒度控制,并且可以执行代码。管理内存执行的开发人员代码中的一个漏洞可能导致一系列内存安全错误,攻击者可以利用这些错误带来危险和侵入性后果,例如远程代码执行或权限提升漏洞。

于是,探索使用诸如 Rust 之类的内存安全(memory-safe)语言被提上日程,这或将成为创建更安全的微软应用程序的替代方法。

Rust 最初是 Mozilla 的一个研究项目,用于更安全、更快速地重写 Firefox 浏览器。最近,Brave 浏览器还用 Rust 版本替换了原先用 C++ 编写的广告拦截组件。2019 年的 StackOverflow 开发者调查显示,Rust 已连续四年蝉联“最受开发者喜爱的编程语言”。开发人员喜欢它,因为它的语法更简单,并且使用 Rust 编写的应用程序 bug 更少,因此开发人员可以专注于扩展他们的应用程序,而不是进行持续的维护工作。

MSRC 首席安全工程经理 Gavin Thomas 建议第三方开发人员也应该研究内存安全语言,他列举了一些原因,例如开发人员花时间和精力学习如何调试 C++ 应用程序中出现的与内存相关的安全漏洞。但这显然是不合适的,“开发人员的核心工作不是担心安全性,而是要做功能开发”,Thomas 提出疑问,“为什么不在一开始就将内存安全问题引入开发语言呢?”

为此,他呼吁:“如果这个行业真正关心安全,应该专注于开发人员的工具,而不应当被所有安全设备和过时的方法弄傻眼。我们首先得努力防止开发人员陷入缺陷,而不是提供解决缺陷的指导和工具。”

MSRC 官方博客原文:https://msrc-blog.microsoft.com/2019/07/16/a-proactive-approach-to-more-secure-code/

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:微软正探索将 Rust 作为 C 和 C++ 的安全替代方案
加载中

精彩评论

薛小猫
薛小猫
拥抱完Linux,拥抱谷歌,然后拥抱Mozilla。啊,世界一家亲了。没有敌人。
__JM_Joy__
__JM_Joy__
恭喜微软喜提Rust!
开源中国首席装逼王
我们首先得努力防止开发人员陷入缺陷,而不是提供解决缺陷的指导和工具。

说的超好
s
shifeng1983
开发人员喜欢它,因为它的语法更简单,呵呵
cabbage89
cabbage89
rust是新一代系统编程语言,未来王者

最新评论(106

ruki
ruki
我还是继续用c吧。
eechen
eechen
Go作为编译型语言,已经要跟PHP抢市场了,这货已经承认它既取代不了C/C++,也不如Rust底层,刚不过Java,只能跟动态语言抢抢Web开发市场找存在感了么?
来自山卡拉的你
来自山卡拉的你
评论都说好,但是我自己目前实在找不到使用的理由,毕竟已经会C++和go了,简单看了一下语法,怎么觉得比C++还复杂😂
乳沟
乳沟
恭喜微软找到了个新儿子,这下可以放心的用go了
xiuno
xiuno
说下最近接触 Rust 的心得:
缺点:Rust 语法不符合最小组合哲学,不要说学 C++ 啥都提供自己挑着用,这可是从头设计语言,没有任何历史包袱。
一个简单的循环就有三个关键字, for loop while, 并且循环必须通过迭代器的方式,如下:
```
for x in 0..10 {
println!("{}", x); // x: i32
}
```
如果这里我需要 x += 2 的步长进行循环,那么还得去翻手册,语法真的好蛋疼。还有其他不一一列出。

而它的核心竞争力(编译期间解决内存安全和管理的机制)并没有达到优雅便捷的地步,显示的引入了 ownership borrow move lifetime 等关键词和语法,在复杂的资源竞争情况下,反而变的更加复杂。

在砍掉协程后,高并发网络编程模型回归到了多线程+异步回调,跟 golang 的从底层类库到上层应用高度统一的协程化并发模型比起来不敢说是倒退,只能说没有明显进步。在对比各自流行的 web 框架测试的时候 golang 的协程模型在高并发的时候更加稳定。

优点:
在融合 C/C++ 老代码方面比 golang 要好一些,性能高。
天生支持范型。
包管理比较灵活,但是也是略微复杂。

给人感觉还停留在实验室水平,要达到替代 C/C++ 还有很长的路要走,而 golang 在应用层活的越来越好。
xiuno
xiuno
异常和错误机制我觉得也不够优雅,在嘲笑 golang if err != nil 的时候,自己搞了一堆高科技的 .unwrap()。
wei2011
wei2011
说的缺点大都是个人习惯问题。为了内存安全引入的那些东西,的确牺牲了一些灵活性,但按它的逻辑玩也没问题
肠殇泉
肠殇泉
微软:我们要用Rust增加内存安全
吃瓜猿:重写win10?
微软:。。。。
微软:我们要用Rust增加内存安全
吃瓜猿:重写sql server?
微软:。。。。
微软:我们要用Rust增加内存安全
吃瓜猿:那一方面?
微软:只是提议
杨哥哥
杨哥哥
rust 写的操作系统 https://www.redox-os.org/
klyou
klyou
微软不招C#,也不招F#,不招rust,只招C,C++来开发其他语言和工具
李英辉
李英辉
微软最近20年在技术方向上,习惯性选择错误,rust前景堪忧!
shadow771
shadow771
rust已经在区块链行业起飞了
李英辉
李英辉
区块链是应用,不是技术方向
x
xytest01
为什么说rust前景堪忧?除了学习曲线陡峭,好像没什么缺点啊
16yebo
16yebo
哪些技术方向错了?例如...
李英辉
李英辉
.net =>.net core,linq,wpf,曾经的vbscript、f#,微软像熊瞎子掰苞米一样,从闭源到开源,从抄袭到投怀送抱;牺牲的,是整个.net生态体系。
ITAndy
ITAndy
Vala 可以脱离GObject,Vala 值得试一试
返回顶部
顶部