当前位置: 首页 > 科技观察

最安全的编程语言:Rust

时间:2023-03-17 00:27:53 科技观察

在“安全第一”、“安全左”、“供应链安全”的大趋势下,Rust作为一种更安全的编程语言越来越受欢迎。在IT巨头中,Rust尤其受到重视。例如,微软曾派一名实习生用Rust重写一个关键的网络处理程序,该程序的内存安全漏洞曾让微软安全响应中心(MSRC)头疼不已。Rust连续五年被开发者评为“最喜欢”的编程语言,因为它可以通过避免某些类型的内存安全漏洞,从根本上改善软件漏洞的现状。令Rust成名的其他优点:提供C和C++的速度和控制,同时还提供Go和Python等其他语言的安全保障。MSRC将近70%的漏洞归类为内存安全问题,因此消除此类漏洞至关重要。MSRC软件工程师AlexanderClarke最近表达了他对Rust的偏爱。他在博客中指出,虽然用C++编译可能更容易,但生成的程序更容易出现错误和漏洞。Alexander说:“Rust编译器的错误消息功能特别有用。”“通过错误信息,Rust可以准确地告诉你代码不正确的原因,并给出解决建议,从而贯彻安全编程的理念。”在为Firefox浏览器重写代码十多年之后,Rust可能已经准备就绪。虽然目前Rust的采用率仍然很低,根据《StackOverflow2020开发者调查》,只有5.1%的开发者使用Rust语言,但是很多大公司已经承诺在具体的开发项目中使用Rust。自2016年以来,Mozilla基金会一直在Firefox浏览器中推出使用Rust语言开发的代码。2019年,微软表示打算更广泛地采用Rust在Windows中编写系统软件。2021年2月,Mozilla将该项目剥离出来,由新的Rust基金会管理,该项目的创始赞助商包括微软、谷歌、亚马逊和华为。为什么Rust越来越受欢迎?根据Rust基金会临时执行董事AshleyWilliams的说法,这不仅仅关乎速度和安全,至少对于开发者而言:“事实上,人们对Rust的赞誉不仅包括语言和编译器,还包括流行的开发社区和第一个-类包管理器。”对于企业来说,是否采用Rust取决于Rust的缺点——Rust的缺点是什么?很多开发者发现Rust的编译器喜欢报警,无缘无故拒绝工作;某些编码模式可能导致缓冲区溢出、释放后使用漏洞、内存双重释放问题和取消引用空指针。虽然还存在一些问题,但瑕不掩瑜,Rust安全的回报已经足够诱人了。以微软为例,Rust可以帮助微软消除大部分的CVE漏洞。微软首席云开发倡导者RyanLevick在博文中表示,使用编程语言构建核心系统组件有助于减少漏洞的主要来源。“我们相信Rust将成为编写安全系统软件的游戏规则改变者,”他说。“Rust提供了编写低级系统所需的性能和控制,同时使软件开发人员能够编写健壮、安全的程序。”当然,我们也要提防过度炒作的编程语言安全性。SunMicrosystems(太阳微系统公司)于1996年1月发布了Java1.0,吹捧可移植代码(例如“编写一次,随处运行”),并且Sun吹捧了许多安全特性,例如自动内存管理(即“垃圾收集”)以及类型安全和隔离以防止小程序(Applet)修改系统资源。如今,根据StackOverflow的调查,Java的使用率约为40%,仅次于JavaScript、HTML/CSS、SQL和Python,排名第五。然而,据《2020年开源安全状况》称,在2019年开源组件中发现的6,000多个漏洞中,Java程序占了15%,仅次于C(30%)和PHP(27%)。Java的案例表明,优先考虑效率的开发人员通常不会使用安全功能并继续开发不安全的代码。Rust的安全方法比Java的更固执己见,并且它可能无法避免开发人员破坏安全性。尽管Rust提供了内存安全,但它也提供了一种绕过它的方法——“UNSAFE”关键字。使用关键字是开发人员覆盖编译器并防止编译器检查代码块的一种方式——因为开发人员已经用他们的胸膛保证该代码是安全的。许多Rust粉丝认为滥用关键字会破坏Rust模型。威廉姆斯明白这一点,她说:“有些人确实以不安全的方式使用UNSAFE保护块。”“如果你把内容放在不安全的块中,编译器不会检查它,如果内容放错了,就会导致内存错误。”但她指出,即使具有正确的编译器功能,该漏洞也很可能渗透到开发人员的程序中,但安全研究人员和黑客经常发现开发人员落在后面。问题和漏洞。例如:RustSec,一个专注于Rust安全的网站,列出了Rust包(或“板条箱”)和语言中的250多个漏洞。【本文为专栏作者“安安牛”原创文章,转载请通过安安牛(微信公众号id:gooann-sectv)获得授权】点此阅读更多作者好文