Google指出,善用大型语言模型(Large Language Model,LLM)可自动化开源软件漏洞模糊测试计划OSS-Fuzz,进而使程序代码的检查范围平均提升1.5%到31%。Google计划之后发布工具,让其他开发人员也能用LLM对开源项目自行模糊测试。
模糊测试(fuzz testing)为于软件中输入无效或随机数据,来快速及全面监控程序的反应,经常被用来检测软件或计算机系统的安全漏洞。Google 2016年发布针对开源软件的模糊测试项目OSS-Fuzz,以协助开发人员寻找软件中的瑕疵或安全漏洞。一开始支持C与C++语言,几年下来扩大到JVM/Java、Rust、Go与Python,也可以用于LLVM支持的语言。几个月前,Google OSS-Fuzz项目小组做了一项实验,使用Google大型模型语言(LLM)来提升OSS-Fuzz的性能。他们发现LLM可有效扩大OSS-Fuzz服务对项目程序代码覆盖率,且不需撰写新的程序代码。
OSS-Fuzz自2016年迄今,已识别出超过1,000个安全漏洞,但是Google认为可以再更多。目前OSS-Fuzz一项开源项目程序代码的平均覆盖率仅为30%,即大部分程序代码都被遗漏了,因此项目小组相信,如果扩大fuzz target,可以找到更多漏洞。Fuzz target是发送随机输入值测试程序代码的函数,但是撰写fuzz target得依不同项目进行,且需要人力花时间撰写,问题是这些项目维护人员通常是志工,吃力又不讨好。
为此Google训练LLM来撰写模糊测试fuzz target函数。项目小组写了一个评估框架架在OSS-Fuzz的检查工具和LLM之间并展开实验。他们Fuzz检查工具(Introspector tool)找出样本项目的程序代码未经模糊测试的部分,将程序代码送到评估框架。评估框架发出一项提示,包含一些项目必要资讯,要求LLM撰写新的fuzz target。之后评估框架以LLM撰写的fuzz target执行模糊测试,再观察执行结果及覆盖率。如果fuzz target无法汇编,评估框架就会要求LLM修改fuzz target直到修正错误。
一开始,LLM撰写的fuzz target程序代码的确无法汇编,但重复几次并测试新的fuzz target后,研究人员发现,开源项目程序代码覆盖率平均增加了1.5%到31%。Google的样本项目之一tinyxml2的程序代码覆盖率则由38%上升到69%,项目小组完全零介入。研究人员说,若以人力撰写来复制tinyxml2的结果,至少需要一天时间。这意味着,整个OSS-Fuzz现有处理的1,000多个项目,要以人力来扩大覆盖率,得花好几年。
Google以LLM测试OpenSSL项目时,撰写了一个新的target,在之前没测试的程序代码又发现了CVE-2022-3602。这虽非新漏洞,但也显示,只要扩大程序代码覆盖率,就可能找出更多漏洞。
基于tinyxml2实验的成功证明,加入LLM有望能大幅提升程序代码覆盖,Google希望把LLM的自动化技术正式用在其他OSS-Fuzz项目上。
几个月后,Google会将其评估框架开源,让其他研究人员测试其LLM撰写的fuzz target。Google也会持续改善其LLM撰写fuzz target的能力及基础架构,并且和Google Assured OSS部门合作,以便确保Google Cloud客户拿到更安全的开源软件。