← 最新论文
💻 computer science

On Fixing Insecure AI-Generated Code through Model Fine-Tuning and Prompting Strategies

本文系统研究了微调与提示策略在防范人工智能生成代码中的通用弱点枚举(CWE)漏洞方面的有效性,揭示出尽管这些方法能够减少特定弱点,但往往也会引入新的弱点,且缺乏一种在不同模型和场景中普遍有效的解决方案。

原作者: Ali Soltanian Fard Jahromi, Amjed Tahir, Peng Liang, Foutse Khomh

发布于 2026-05-08
📖 1 分钟阅读☕ 轻松阅读

原作者: Ali Soltanian Fard Jahromi, Amjed Tahir, Peng Liang, Foutse Khomh

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你聘请了一位才华横溢、速度极快但略显粗心的学徒来为你的软件编写代码。这位学徒阅读过数百万本书籍(代码仓库),能够以惊人的速度写出句子(代码)。然而,由于他们学习的书籍中有时包含错误,他们经常会在所建造的“房屋”(程序)中意外地留下“后门”、敞开窗户或使用脆弱的锁。

这篇论文就像一份实验室报告,旨在测试如何训练这位学徒停止犯下这些危险错误。研究人员问道:我们能否教会这位学徒建造更安全的房屋?如果我们这样做了,在解决第一个问题的同时,是否会意外破坏其他东西?

以下是他们研究发现的分解,使用了简单的类比:

1. 问题所在:学徒速度快但存在缺陷

研究人员测试了五种不同的“学徒”(如 GPT-4、Gemini 等 AI 模型),涵盖了四种不同的“语言”(Python、Java、JavaScript 和 Go)。他们给这些模型分配了 10 项已知具有挑战性的特定任务,例如上锁或处理钥匙。

  • 结果: 没有任何一位学徒建造出完全安全的房屋。事实上,他们建造的几乎每座房屋都至少存在一个缺陷。
  • 类比: 这就像要求一位厨师做一顿饭。他们可以让饭菜味道鲜美(功能正常的代码),但可能会忘记洗手(安全弱点)或将刀留在台面上。
  • 语言的影响: 当使用 JavaScriptJava 编写代码时(就像试图建造一座复杂的摩天大楼),学徒犯的错误最多;而在 PythonGo 中犯的错误最少(就像建造一座简单的小屋)。

2. 解决方案:如何纠正错误

研究人员尝试了四种不同的方法来“指导”这位学徒做得更好。可以将这些方法视为不同的教学手段:

  • 方法 A:“别那样做!”(负面示例提示)

    • 方法: 你给学徒看一张破损门的图片,并说:“不要这样建造。”
    • 结果: 这是效果最差的方法。有时,向学徒展示破损的门只会让他们感到困惑,最终他们建造的门和之前一样破损,甚至更糟。这就像试图通过展示某人绊倒的视频来教人不要绊倒;他们可能会直接模仿那个踉跄的动作。
  • 方法 B:“逐步思考”(思维链提示)

    • 方法: 你要求学徒在编写代码之前暂停并解释他们的逻辑。“首先检查锁,然后检查铰链,最后编写代码。”
    • 结果: 这提供了一定程度的帮助。它解决了一些简单的问题(如 SQL 注入,这就像简单的开锁器),但在处理验证用户输入等复杂问题时却显得力不从心。
  • 方法 C:“成为安全专家”(元提示)

    • 方法: 你要求学徒首先为自己写一套如何成为安全专家的规则,然后利用这些规则来编写代码。
    • 结果: 这是所有“口头指导”方法中效果最好的。它在无需额外训练的情况下显著减少了错误。这就像告诉学徒:“在你开始之前,列出一份安全检查清单,然后照做。”
  • 方法 D:“去上学”(微调)

    • 方法: 你不仅仅是给出指令,而是将学徒带到一所特殊的学校,让他们专门学习一段时间完美、安全的代码示例。你重新训练他们的大脑(模型的权重),使其偏好安全的模式。
    • 结果: 这是迄今为止最有效的方法。它将安全漏洞减少了约 80%。这就像学徒进入一所严格的安全学院,回来后拥有了全新的思维模式。然而,这种方法成本高昂且耗时(需要大量计算资源),而其他方法则像是快速的辅导课程。

3. 陷阱:解决一个问题会破坏另一个

研究人员还考察了一个副作用:修复一个漏洞是否会制造出新的漏洞?

  • 发现: 是的,有时会发生。当学徒试图修复“脆弱的锁”(安全漏洞)时,他们有时会意外地将“前门”大开,或者在其他地方安装了一个“暗门”。
  • 类比: 想象你在修补船上的一个洞。在这个过程中,你不小心在船底又撞出了一个洞。
  • 细微差别: 新出现的漏洞通常比原来的漏洞更小、危险性更低。此外,“上学”方法(微调)比“辅导”方法更不容易制造出新的漏洞。

4. 主要结论

  • 没有灵丹妙药: 没有任何一根“魔法棒”能让 AI 生成的代码达到 100% 的安全。即使是最好的方法(微调)也无法解决所有问题。
  • 不要盲目信任: 你不能仅仅因为 AI 生成的代码能运行就认为它是安全的。它需要被检查,就像你不会信任一位新手建造的房屋而不进行验收一样。
  • 最佳策略: 如果你有预算和时间,重新训练模型(微调) 是获取安全代码的最佳方式。如果你需要一个快速、廉价的解决方案,元提示(给 AI 提供详细的安全检查清单)是次优选择。
  • 上下文很重要: 你使用的编程语言类型会影响这些修复措施的效果。

简而言之,AI 是构建软件的强大工具,但目前它仍是一名需要持续监督、特定培训以及在交付你数字王国钥匙之前进行最终安全验收的“初级开发人员”。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →