谷歌工程师本周表示,Chrome代码库中约70%的严重安全漏洞是内存管理和安全漏洞。
70%的漏洞中有一半是释放后使用漏洞,这类安全问题源于对内存指针(地址)的错误管理,为攻击者攻击Chrome的内部组件敞开了大门。
这一百分比是在谷歌工程师分析了自2015年以来在Chrome稳定分支中修复的912个安全漏洞后得出的,这些漏洞的严重程度为高或严重。
该数字与微软共享的统计数据相同。微软工程师在2019年2月的一次安全会议上表示,在过去12年中,微软产品的所有安全更新中约有70%解决了内存安全漏洞。
这两家公司基本上都在处理同一个问题,即他们代码库中的两种主要编程语言C和C++都是不安全的语言。
它们是几十年前创建的旧编程工具,当时安全利用和网络攻击还不是一个相关的威胁模型,并且远离大多数早期软件开发人员的想法。
因此,C和C++都让程序员可以完全控制他们如何管理应用程序的内存指针(地址),并且在开发人员犯基本内存管理错误时不会受到限制或警告来阻止或提醒他们。
这些早期编码错误会导致在应用程序中引入内存管理漏洞。这包括释放后使用、缓冲区溢出、争用条件、双重释放、野指针等漏洞。
这些内存管理漏洞是攻击者试图查找和利用的最受欢迎的漏洞,因为它们可以授予攻击者在设备内存中植入代码并让受害应用程序(浏览器、服务器、操作系统等)执行代码的能力。
在今年年初发布的一份排名中,管理美国政府漏洞数据库的组织MITRE Corporation将缓冲区溢出列为最危险的漏洞,另外两个与内存管理相关的问题也跻身前10名(第5名为越界,第7名为释放后使用)。
随着近年来软件工程的进步,开发人员在根除大多数安全缺陷和增加适当的安全保护方面做得越来越好。
谷歌表示,自2019年3月以来,130个严重级别为“严重”的Chrome漏洞中,有125个是与内存损坏相关的问题,这表明尽管在修复其他漏洞类别方面取得了进展,但内存管理仍然是一个问题。
内存管理漏洞问题一直是谷歌的一个大问题,以至于Chrome工程师现在不得不遵守规则2。
根据这一规则,每当工程师编写新的Chrome功能时,他们的代码不得违反以下两个以上条件:
虽然软件公司以前曾试图解决C和C++的内存管理问题,但Mozilla通过赞助、推广并大量采用Firefox中的Rust编程语言取得了突破。
今天,Rust被认为是最安全的编程语言之一,是C和C++的理想替代品,这主要归功于Mozilla的早期努力。
但是Mozilla并不是唯一一个受够了处理容易出错的C和C++代码的组织。
微软还在探索C和C++替代方案方面投入巨资。从早期检查过的C项目开始,该公司现在正在试验Rust,同时也在构建自己的类似Rust的安全编程语言(保密的维罗纳项目的一部分)。
微软在本周的Build Virtual大会上表示,这两项努力都取得了成功,公司将重新致力于在未来采用一种安全的编程语言。
但本周,谷歌也宣布了类似的计划。该公司表示,它还计划研究解决Chrome的内存不安全问题。Chrome是当今最受欢迎的网络浏览器,有近70%的互联网用户使用。
直到今天,谷歌工程师一直是Chrome沙箱方法的热心支持者。他们将数十个进程隔离到自己的沙箱中,最近还推出了站点隔离功能,该功能可以将每个站点的资源也放入其自己的沙箱进程中。
然而,谷歌工程师表示,考虑到性能,他们对Chrome组件进行沙箱处理的方法已经达到了最大效益,该公司现在必须寻找新的方法。
展望未来,谷歌表示,它计划研究开发与Chrome代码库配合使用的自定义C++库,这些库可以更好地保护用户免受内存相关错误的侵害。
这家浏览器制造商还在探索MiraclePtr项目,该项目旨在将可利用的释放后使用的错误转变为非安全崩溃,并具有可接受的性能、内存、二进制大小和最小的稳定性影响。
最后但并非最不重要的一点是,谷歌还表示,它计划在可能的情况下探索使用安全语言。候选软件包括Rust、Swift、JavaScript、Kotlin和Java。