Minimal Prompt Perturbations Lead to Code Vulnerabilities: Prompt Fragility and Hidden-State Signals in Coding LLMs
本研究揭示,提示词中即使微小的单字符扰动也会导致代码大语言模型生成存在漏洞的代码,其中输入处理缺陷比安全默认错误更能从隐藏状态中预测,从而将安全威胁模型从提示注入扩展至涵盖普通提示词变体。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在雇佣一位才华横溢、速度极快的学徒程序员。这位学徒(即人工智能)可以在几秒钟内编写出完整的程序。你给它一个简单的指令,比如“编写一个安全解压缩文件的函数”。通常,它们能出色地完成任务。
但这篇论文提出了一个令人担忧的问题:如果这位学徒对指令中微小的错误极其敏感,会发生什么?
研究人员发现,如果你仅在指令中更改一个字母——也许是一个拼写错误,或者将一个词替换为相似的词——学徒编写的代码可能会突然从“安全稳固”变成“漏洞百出,黑客可以轻易闯入”。
以下是他们研究发现的日常类比解析:
1. “单字母”多米诺效应
将你给 AI 的指令想象成一份食谱。研究人员发现,如果你只更改食谱中的一个字母(例如将“盐”改为“咸”),最终做出来的菜肴可能不仅仅是味道略有不同;它甚至可能变得有毒。
- 发现:他们测试了三种不同的 AI 模型和五种编程语言。他们发现,提示词中更改单个字符就足以将代码从安全状态翻转为易受攻击状态。
- 类比:这就像告诉厨师“确保门已锁好”, versus “确保门已 locked"(带有拼写错误)。在这个特定案例中,AI 可能会完全忘记锁门,导致房屋大门敞开。
2. 两种不同类型的“错误”
研究人员注意到,并非所有安全漏洞都是等同的。他们发现了两个截然不同的类别,其行为方式也不同:
A 类:“缺失的守卫”(输入处理)
- 是什么:AI 忘记添加安全检查,就像俱乐部里忘记检查身份证的保安。
- 发现:AI 内部的“大脑”(隐藏状态)甚至在编写代码之前就显示出这种错误的迹象。这就像看到厨师在开始烹饪前伸手去拿错误的食材。研究人员仅通过观察 AI 的思维过程,就能以约 75% 的准确率预测这些错误。
- 原因:AI 必须尽早决定在代码中构建一个全新的“安全结构”。这个决定在早期就是可见的。
B 类:“薄弱的选择”(安全默认值)
- 是什么:AI 构建了安全结构,但选择了一个脆弱的锁(例如使用密码"1234"而不是复杂的密码)。
- 发现:这些错误更难预测。AI 的内部“大脑”直到最后一刻看起来都正常。选择脆弱锁的决定发生得如此晚,以至于“早期预警信号”缺失。研究人员只能以约 67% 的准确率预测这些错误。
- 原因:这就像厨师在房子已经建好后,才决定在门上安装一个脆弱的锁。蓝图看起来完美无缺,但最终的选择却是糟糕的。
3. 错误发生的位置至关重要
研究人员还考察了指令中拼写错误发生的位置。
- 中间最关键:他们发现,指令中间的拼写错误最为危险。
- 类比:想象一句话:“请锁好前门和后门。”如果你在中间的单词“前”上出现拼写错误,AI 可能会困惑该锁哪扇门。如果你在第一个或最后一个单词上出现拼写错误,AI 更有可能忽略它或猜对。指令的“核心”部分是 AI 最脆弱的地方。
4. “水晶球”(探测)
团队构建了一个“水晶球”(一种数学探测工具),它在 AI 读取你的提示词之后、但在编写任何代码之前,观察 AI 的内部状态。
- 结果:这个水晶球可以相当好地告诉你,AI 是否即将编写带有“缺失守卫”错误(A 类)的代码。
- 局限性:它在预测“薄弱选择”错误(B 类)方面表现不佳。这表明,对于某些安全问题,我们可以在 AI 开始编写代码之前捕捉到它;但对于其他问题,我们可能需要在编写过程中或编写完成后进行检查。
结论
该论文得出结论,我们不能假设我们的 AI 编程助手是稳健的。一个简单的拼写错误或请求措辞的轻微改动,都可能意外地造成安全漏洞。
- 好消息:通过观察 AI 内部的“思想”,我们有时可以提前检测到这些风险。
- 坏消息:我们无法通过这种方式捕捉到所有风险,尤其是那些 AI 在过程最后时刻做出单一错误选择的情况。
重要提示:研究人员强调,他们是通过制造随机、看似偶然的拼写错误(就像人类可能会犯的那样)来做到这一点的,而不是故意试图欺骗 AI。这意味着,即使对于只想完成工作的普通日常开发者来说,这种危险也是真实存在的。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。