本文研究并比较了大型语言模型(LLMs)和基于深度学习的自动程序修复(APR)技术在修复Java安全脆弱性方面的能力。
首先,作者创建了一个新的Java脆弱性基准测试集VJBench,包含42个来自30个开源项目的可重现的真实世界Java脆弱性,涵盖了12个新的CWE类型。这个新基准测试集补充了现有的Vul4J数据集。
作者评估了5个LLMs(Codex、CodeT5、CodeGen、PLBART和InCoder)、4个微调后的LLMs以及4个基于深度学习的APR技术(CURE、Recoder、RewardRepair和KNOD)在这两个Java脆弱性基准测试集上的修复能力。
研究结果包括:
现有的LLMs和APR技术只能修复很少数量的Java脆弱性。Codex是最出色的,平均可以修复10.2个(20.4%)脆弱性。
使用一般的APR数据对LLMs进行微调可以提高它们修复脆弱性的能力。微调后的InCoder可以修复9个脆弱性,与Codex的性能相当。
Codex的编译率最高为79.7%,而其他LLMs(无论是否微调)和APR技术的编译率都较低(最低为6.4%),显示它们缺乏对代码语法的理解。
除了Codex,其他LLMs和APR技术只能修复需要简单修改(如删除语句或替换变量/方法名)的脆弱性。Codex可以修复更复杂的脆弱性,如CWE-611和CWE-918。
作者创建了VJBench-trans基准测试集,通过代码转换生成了150个未被LLMs和APR技术训练集覆盖的脆弱性。在这个基准上,Codex仍然可以修复8.7个转换后的脆弱性,优于其他所有LLMs和APR技术。
总的来说,现有的LLMs和APR技术在修复Java脆弱性方面还存在很大局限性,需要进一步创新,如扩大脆弱性修复训练数据、针对脆弱性进行LLMs微调,以及应用代码简化转换等。
他の言語に翻訳
原文コンテンツから
arxiv.org
深掘り質問