基本信息
原文标题:From Solitary Directives to Interactive Encouragement!LLM Secure Code Generation by Natural Language Prompting
原文作者:Shigang Liu, Bushra Sabir, Seung Ick Jang, Yuval Kansal, Yansong Gao, Kristen Moore, Alsharif Abuadbba, Surya Nepal
作者单位:1. CSIRO’s Data61, Australia; 2. Princeton University, USA
关键词:安全代码生成、自然语言处理、大语言模型、漏洞检测、编程语言
原文链接:https://arxiv.org/pdf/2410.14321
开源代码:暂无
论文要点
论文简介:研究者发现,大语言模型(LLMs)在代码生成方面潜力显著且日益重要,但生成代码的安全问题和模型可用性还需探索。当前提示方法多为代码或自然语言与代码混合式,代码提示虽精确,但对编程经验少的用户有难度,仅用自然语言提示生成安全代码的潜力尚未挖掘,因此需要更用户友好、基于自然语言的安全代码生成界面。
研究者引入SecCode框架,利用交互式激励提示(EP)技术,仅用自然语言提示生成安全代码,便于普通用户理解和分享。SecCode分三个阶段:一是用自然语言提示生成代码;二是利用激励提示检测和修复代码漏洞;三是漏洞交叉检查和代码安全细化。这些阶段通过多次交互式迭代逐步增强安全性。
研究者使用专有(如GPT - 3.5 Turbo、GPT - 4、GPT - 4o)和开源(如Llama3.18B Instruct、DeepSeekCoderV2 Lite Instruct)大语言模型在三个基准数据集评估,结果显示SecCode远优于基线,能生成高漏洞纠正率的安全代码。如运行5次自动EP交互迭代修复成功率超76%,10次后超89%。这是首个仅用自然语言提示制定安全代码生成的工作,研究者已开源代码并鼓励社区关注安全代码生成。
研究目的:本文旨在解决LLMs在代码生成过程中的安全问题,特别是通过自然语言提示生成安全代码,克服现有方法的局限性,从而提升代码安全性和用户体验。
研究贡献:
-
首次提出用于安全代码生成的“激励提示”(Encouragement Prompting,EP)方法,显著提升了LLMs的安全代码生成性能。
-
引入交互式迭代提示策略,以提供漏洞信息并自动修复漏洞。
-
提出一种融合LLMs与CodeQL的混合优化策略,提供全面反馈和交叉检查,将CodeQL纳入游戏化迭代中,以增强安全代码的优化。
-
开发并实现了SecCode框架,进行了广泛实验并开源了代码和提示,供其他研究人员评估和贡献。
引言
当前,大语言模型在代码生成中的应用逐渐普及,但其生成的代码安全性问题仍未得到充分重视。现有的提示方法常依赖编程语言或混合自然语言与代码的形式,使缺乏编程经验的用户面临挑战。本文指出,完全依赖自然语言提示的潜力尚未被充分挖掘,因此亟需研究如何利用自然语言实现安全代码生成。尽管某些方案表现优异,但未能全面考虑安全性。本研究提出新的方法,旨在通过自然语言提示生成更安全的代码,同时提升用户体验和代码可用性。
相关工作
在现有研究中,针对LLMs在代码生成中的应用,研究者主要关注生成代码的准确性与效率,但对安全性和漏洞检测的讨论较少。当前的方法通常依赖静态分析工具如CodeQL进行漏洞识别,这些工具在动态上下文下可能漏掉某些漏洞。部分研究探讨通过编程语言提示提高代码生成的精确性,但这对非专业用户而言复杂且不易操作。相对而言,基于自然语言的提示方法可以降低编程门槛,提高用户参与感,但对安全性的评估仍显不足。总体来看,尽管代码生成领域的研究不断增多,如何安全地生成代码及有效利用自然语言提示进行安全评估仍需深入探索。
SecCode 概述
SecCode是一种创新的安全代码生成方案,旨在通过自然语言提示实现高效、安全的代码生成。该方法使用自然语言输入生成代码,降低了编程门槛,使更多非专业开发者能够参与。生成代码后,SecCode采用迭代修复机制,通过LLMs进行漏洞检测与修复。每轮迭代后结合CodeQL进行验证,确保修复后的代码符合安全标准。此外,SecCode引入自适应提示策略,根据用户输入和反馈动态调整生成建议。实验结果显示,SecCode在多种编程语言应用中表现出色,提升了代码生成的安全性和用户体验。
研究实验
本研究通过多个数据集评估SecCode在多种编程语言中的安全代码生成能力,覆盖C、C++和Python等。实验核心在于比较SecCode与传统方法生成代码的安全性和有效性。研究首先通过自然语言提示生成初步代码,然后应用多轮迭代机制对代码进行漏洞检测和修复。在每一轮中,SecCode结合CodeQL进行交叉验证,确保及时修复检测到的漏洞。结果显示,经过五轮迭代,安全漏洞的修复率超过76%,在十轮迭代后提升至89%以上。研究还分析了不同编程语言和提示策略对代码安全性的影响,发现基于自然语言的提示显著提高了生成代码的安全性,尤其对非专业用户尤为有效。
研究讨论
在讨论部分,团队分析了SecCode在实际应用中的优势与不足。尽管SecCode在多种编程语言实验中表现优异,成功修复大多数安全漏洞,但仍有一些复杂漏洞难以处理,通常与代码的动态上下文密切相关。此外,用户在使用SecCode时可能面临的挑战,特别是在自然语言提示的有效性方面,也被指出。虽然自然语言降低了编程门槛,但如何正确构造提示仍是难点。未来研究可探索更智能的提示生成策略,帮助用户更好地利用SecCode。总体而言,SecCode为安全代码生成领域提供了新的视角,展示了LLMs在软件安全中的潜力。
论文结论
本研究强调生成代码的安全性问题,提出SecCode作为一种创新的方法,以提升代码生成的安全性。通过自然语言提示和强化学习,该方法展示了在安全代码生成领域的良好应用潜力。实验结果表明,SecCode在多个编程语言中的漏洞修复率超过76%,显示了其在实际应用中的有效性。
原作者:论文解读智能体
校对:小椰风