首页 > 互联网 > 正文

谷歌如何将Android的安全漏洞减少52%

来源:互联网2024-09-26 10:47:32
导读 多年来,谷歌一直在努力让Android成为一款越来越安全的操作系统。攻击者会寻找任何可以利用的漏洞,使用网络钓鱼等普通方法或内存安全漏洞...

多年来,谷歌一直在努力让Android成为一款越来越安全的操作系统。攻击者会寻找任何可以利用的漏洞,使用网络钓鱼等普通方法或内存安全漏洞等更复杂的方法。现在,谷歌解释了安全编码方法近年来如何成功显著减少Android中的内存安全漏洞。

谷歌使用安全编码方法对抗内存安全漏洞

内存安全漏洞是利用与内存相关的错误(例如缓冲区溢出、格式字符串问题或悬空指针)来与内存交互甚至改写内存的漏洞。这些类型的漏洞在软件开发中仍然广泛存在。开发人员尝试通过各种方法攻击它们,其中缓解措施和主动检测占主导地位。然而,谷歌相信安全编码是减少内存安全漏洞的理想方法,这一点从其在Android上的结果就可以看出。

安全编码方法从一开始就优先考虑使用内存安全的编程语言。然而,有些软件已有多年历史,并且有数百万行关键代码是用“内存不安全”的语言开发的。那么,谷歌在这些情况下的建议是什么?答案是逐步过渡到内存安全的语言(如Rust)以实现新功能。

基本上,Google建议开发人员在开发新功能时开始实现专门的内存安全语言。与此同时,基于不安全语言的旧代码将保持“不变”,除了传统的维护和错误修复。这意味着在新旧代码之间实现安全、高效且经济高效的互操作性。

Android内存安全漏洞6年内下降52%

据Google称,安全编码方法在短短6年内使Android的内存安全漏洞从76%下降到24%。然而,保留内存不安全代码的想法似乎违反直觉。毕竟,如果您追求最大安全性,您的第一个想法就是将所有代码迁移到安全语言。虽然这可能是真的,但Google的方法是有道理的,该公司解释了原因。

Google内存安全漏洞(1)

在软件开发中,代码效率和成本效益是关键。有些工具或整个系统经过了多年的开发。这涉及数百万行基本代码。虽然一家公司可以简单地基于内存安全语言从头开始重写软件,但投资和努力可能不值得。不过,在相对较新的开发中,情况可能会有所不同,因为开发时间并不长。

安全编码和互操作性的优势

Google声称,基于代码互操作性的安全编码方法是一种采用内存安全代码的经济高效且实用的方法。这反过来又使其具有成本效益,因为它允许公司利用以前的投资。与从头开始重写软件相比,成本要低得多。它也很高效,因为它允许在集成新的安全代码的同时继续开发新功能。

使用固有的内存安全代码还可以确保长期降低成本。以前的方法倾向于开发人员和攻击者之间无休止的“攻击和防御”循环。依靠缓解措施和主动检测需要持续采取行动和投资以应对潜在攻击。然而,安全编码可以让开发人员和公司忘记这一点,专注于维护和改进功能或修复错误。

由于代码回滚率较低,生产率也更高。也就是说,由于意外错误而导致的紧急代码回滚情况更少。谷歌声称,Rust的代码回滚率不到C++的一半。从本质上讲,安全编码为企业和开发人员节省了大量的时间和金钱。在当今密切关注盈利能力的行业中,这一点至关重要。

Google透露,它实现了“Rust↔︎C++和Rust↔︎Kotlin”之间的互操作性。该公司还贡献了资金和工具来支持其方法。例如,Google向Rust基金会捐赠了100万美元以促进其发展。它还提供了自己的互操作性工具,例如Crubit和autocxx。

Google内存安全漏洞(3)

安全编码方法就是这样让软件更安全的

您可能仍然想知道,保留内存不安全代码的方法如何能够大幅减少内存安全漏洞。Google也在其博客文章中以非常技术性的方式解释了这一点,但我会尽量让每个人都能轻松理解。

USENIXSecurity和Google自己通过大规模研究发现了一个有趣的现象。研究得出的结论基本上是,软件中绝大多数内存漏洞都源自新代码。其中很大一部分也源自最近修改的代码。Google还注意到,Android内存安全漏洞的密度在旧代码中逐渐降低。

鉴于问题很大一部分源自新代码,因此有必要关注它,对吗?这就是Google决定采用安全编码方法的原因。但为什么新代码中积累的问题和漏洞更多?这是因为每种编程语言都有一个基本属性:成熟度。

虽然语言的基本结构可能会使其内存不安全,但持续更新可以帮助缓解这种情况。因此,从理论上讲,软件较旧部分中使用的不安全代码会随着时间的推移变得不那么脆弱。通过将旧代码的成熟与新开发的固有内存安全代码中的新功能相结合,内存漏洞将呈指数级下降。

关键词:
版权声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

猜你喜欢