近日,谷歌宣布其基于人工智能的模糊测试工具 OSS-Fuzz 成功发现了26个开源代码库中的漏洞,其中包括 OpenSSL 加密库中的一个中等严重性漏洞。
谷歌的开源安全团队在一篇分享的博客文章中表示:“这些漏洞的发现标志着自动化漏洞检测的新里程碑:每个漏洞都是通过 AI 生成和增强的模糊测试目标找到的。”
此次发现的 OpenSSL 漏洞编号为 CVE-2024-9143(CVSS 评分为4.3),其表现为一个越界内存写入错误,可能导致应用程序崩溃或远程代码执行。该问题已在 OpenSSL 的多个版本中得到修复,包括3.3.3、3.2.4、3.1.8、3.0.16、1.1.1zb 和1.0.2zl。谷歌指出,这个漏洞可能在代码库中存在了近20年,而传统人类编写的模糊测试目标无法发现该问题。
谷歌还提到,借助 AI 生成的模糊测试目标,272个 C/C++ 项目的代码覆盖率得到了提升,增加了超过370,000行的新代码。谷歌解释道,之所以许多错误会被忽视,是因为代码覆盖率并不等同于功能没有漏洞。仅靠代码覆盖率这一指标并不能衡量所有可能的代码路径和状态,因为不同的标志和配置可能会触发不同的行为,从而暴露出不同的漏洞。
这种 AI 辅助的漏洞发现还得益于大语言模型(LLMs)在模拟开发者模糊测试工作流程方面的出色表现,进一步提高了自动化程度。此外,谷歌本月初还透露,其基于 LLM 的框架 Big Sleep 帮助检测到 SQLite 开源数据库引擎中的一个零日漏洞。
为了提高自身代码库的安全性,谷歌正在推动将代码迁移到内存安全语言如 Rust,并对现有的 C++ 项目进行空间内存安全漏洞的修复。这包括迁移到安全缓冲区并启用硬化 libc++,通过对标准 C++ 数据结构添加边界检查,消除一类重要的空间安全漏洞。谷歌表示,实施这些改进所造成的性能损耗极小,平均仅为0.30%。
谷歌进一步强调,最近由开源贡献者添加的硬化 libc++ 引入了一系列安全检查,旨在在生产环境中捕捉诸如越界访问等漏洞。尽管 C++ 语言无法完全实现内存安全,这些改进无疑降低了风险,使软件更加可靠和安全。