WildCode Revisited: A Comprehensive Empirical Study on the Security of LLM-Generated Code
本研究通过实证验证了 ChatGPT 生成的真实代码经常缺乏安全性,这证实了先前合成实验的研究结果,同时也揭示了用户在请求代码时很少询问有关安全性的问题。
原始论文根据 CC0 1.0(http://creativecommons.org/publicdomain/zero/1.0/)发布到公有领域。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你有一个非常有才华、速度极快但又有点天真的助手,他可以为你编写计算机代码。你向他要一份食谱,他能在几秒钟内做出美味佳肴。但问题在于,他是通过阅读数百万本食谱来学习烹饪的,但他从未真正进过厨房,也不理解为什么某些食材混合在一起会很危险。
这篇名为**《重访 WildCode》(WildCode Revisited)**的论文,就像是对这个助手所提供的食物进行的一次大规模、现实世界的卫生检查。研究人员并没有在实验室里要求助手做一道特定的测试菜肴(这是大多数以往研究的做法),而是走进了“野外”。他们查看了超过 82,000 段真实的对话,在这些对话中,普通人向这个 AI(ChatGPT)寻求编写代码的帮助。
以下是他们的发现,通过简单的类比进行了拆解:
1. “野外”厨房 vs. “测试”厨房
以往的大多数研究就像是一场烹饪节目,厨师被要求:“做一份完美的千层饼。”厨师知道这是一个测试,所以会尽力而为。
这项研究观察的是 WildChat 数据集,它就像是一个 24 小时营业的餐馆,人们用各种语言订购任何他们想要的东西。研究人员发现,当人们在没有明确说明安全要求的情况下请求代码时,AI 经常端出的菜肴是漏洞百出的。这就像是助手忘记锁后门,让房子处于不设防的状态,任由小偷(黑客)潜入。
2. 安全“泄漏”
研究人员扮演了安全检查员的角色,扫描代码中的常见错误。他们发现 AI 经常提供:
- 弱锁: 使用旧的、容易被撬开的锁(弱加密),而不是现代的、不可破解的锁。
- 开着的窗户: 给陌生人留下了可以随时走入的窗口(SQL 注入漏洞)。
- 假食材: AI 有时会发明一些实际上并不存在的“食材”(软件库)。如果你尝试使用它们,你的程序就会崩溃。更糟的是,坏人可能会创建一个同名的“假食材”并以此植入病毒。
- 脆弱的玻璃: 代码通常是由玻璃制成的,只要稍加注视就会破碎(内存安全问题),尤其是在 C/C++ 等语言中。
大惊喜: 尽管这些代码看起来能运行(它确实能跑起来),但它们往往布满了安全陷阱。AI 非常擅长让事情“运转起来”,但却很不擅长让事情“安全”。
3. 顾客并不关心安全
研究人员还观察了顾客(用户)在询问什么。
- “只要修好就行”的人群: 大多数人只想让代码运行,或者想修复一个 Bug。他们就像是那些只说“给我做个三明治”而不关心面包是否有霉菌的顾客。
- 对安全的沉默: 很少有人会问:“这段代码安全吗?”或者“这是否有后门?”这就像顾客在点餐时从不询问:“这新鲜吗?”或者“这里有卫生检查员吗?”
- “安全”的小故障: 即使当用户确实要求编写安全代码时,AI 也不总能听从指令,而用户也并不总是会跟进检查 AI 是否真的做到了安全。
4. 我们能更好地训练助手吗?(“提示词”实验)
研究人员尝试了一些技巧,看看能否让 AI 烹饪出更安全的食物。他们尝试了:
- 角色扮演: 告诉 AI,“扮演一名安全专家。”(结果:效果不佳。AI 只是假装成了专家,但仍然犯错。)
- 警告标签: 告诉 AI,“这段代码存在安全问题。”(结果:稍好了一些,但并非奇迹。)
- “小抄”: 给 AI 一份由安全扫描器发现的具体错误列表,并说,“修复这些问题。”(结果:这种方法效果最好。 当 AI 被展示出具体哪里出错时,它能更好地修复代码。)
5. “拒绝”游戏
有时,如果 AI 认为请求具有危险性(比如编写病毒),它会拒绝编写代码。研究人员发现,用户有时可以通过稍微改变提问方式来诱导 AI 编写危险代码。这就像一个孩子问:“我可以吃饼干吗?”得到一个“不行”的回答,但接着问:“如果我很饿,我可以吃饼干吗?”就得到了一个“可以”的回答。AI 的安全过滤器并不像我们希望的那样强大。
总结
这项研究是一次现实的警示。它表明,虽然 AI 在快速生成代码方面非常出色,但它目前还不能完全替代人类安全专家。
- 代码: 往往隐藏着陷阱和弱点。
- 用户: 很少询问安全性,默认 AI 知道自己在做什么。
- 解决方法: 我们不能仅仅告诉 AI“要安全”。我们需要给它关于错误的具体反馈(比如使用安全扫描器),以帮助它修补漏洞。
论文的结论是,我们正处于快速使用这些工具的冲刺阶段,但我们在检查门锁是否锁好之前,就已经开始使用了。在让 AI 编写运行我们世界的代码之前,我们需要更加谨慎且积极地对待安全问题。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。