研究:LLM的prefilling功能,反而成为了它的越狱漏洞!

大语言模型的预填充功能,被证明是最大的安全漏洞!


一项最新发表的研究揭示了一个令人震惊的事实:

大语言模型(LLMs)中原本用于增强输出控制的「预填充」(prefilling)功能,反而成为了绕过安全限制的最有效工具攻击成功率高达99.82%

这项名为「Prefill-Based Jailbreak」的研究展示了一种全新的越狱攻击方法,它不再关注传统的用户输入端,而是直接操纵AI助手的首个回复文本,从而巧妙地绕过安全审核机制。

论文地址见:

https://arxiv.org/pdf/2504.21038v1

这一发现颠覆了我们对AI安全的认知,我们需要重新思考大语言模型的安全边界。

什么是预填充(Prefilling)技术?

预填充功能本是大语言模型为提高输出质量而设计的一项功能,允许用户预先设定AI助手回复的开头文本

这项功能在各大主流模型中广泛存在:

Claude的预填充

在使用Claude API时,用户可以通过预填充Assistant消息来引导模型的回应。

这一技术允许用户指导Claude的行动、跳过前言、强制特定格式(如JSON或XML),甚至帮助Claude在角色扮演场景中保持角色一致性。

Claude的预填充实现例子:

import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1000,
    messages=[
        {
            "role""user",
            "content""提取以下产品描述中的名称、尺寸、价格和颜色,并以JSON对象输出。\n\n<description>SmartHome Mini是一款紧凑型智能家居助手,黑色或白色可选,售价仅为49.99美元。它宽度仅5英寸,让您可以通过语音或应用控制灯光、恒温器和其他连接设备—无论您将其放在家中何处。这款经济实惠的小型集线器为您的智能设备带来便捷的免提控制。\n</description>"
        },
        {
            "role""assistant"
            "content""{"# 预填充大括号强制输出JSON
        }
    ]
)

DeepSeek的预填充

DeepSeek API现在支持Chat Prefix Completion功能,允许用户为模型指定最后一条assistant消息的前缀,以便模型进行补全。该功能还可用于连接因达到max_tokens限制而被截断的消息,并重新发送请求以继续截断的内容。

DeepSeek的预填充实现示例:

# 确保最后一条消息是assistant角色,并将其prefix参数设置为True
# 例如:{"role": "assistant", "content": "Once upon a time,", "prefix": True}

# 以下是使用Chat Prefix Completion的例子
# 这个例子中,assistant消息的开头被设置为'```python\n'以强制输出以代码块开始
import requests
import json

url = "https://api.deepseek.com/beta/v1/chat/completions"
headers = {
    "Content-Type""application/json",
    "Authorization"f"Bearer {api_key}"
}

data = {
    "model""deepseek-chat",
    "messages": [
        {"role""user""content""写一个计算斐波那契数列的Python函数"},
        {"role""assistant""content""```python\n""prefix"True}
    ],
    "stop": ["```"],
    "max_tokens"500
}

response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())

Gemini的预填充

虽然Gemini API没有官方文档中明确的预填充功能,但研究人员发现它在某些情况下也存在类似的漏洞。

根据研究,可以通过特定的消息构造实现类似效果。

从辅助功能到安全漏洞:预填充攻击的原理

研究团队发现,这个本用于增强输出控制的功能,却可能成为最强大的越狱工具。

他们提出了两种攻击变体:

  1. 静态预填充(Static Prefilling,SP):使用固定的通用文本如”好的,以下是如何”来引导模型生成有害回应

  2. 优化预填充(Optimized Prefilling,OP):通过迭代优化预填充文本,最大化攻击成功率

这些方法之所以有效,是因为预填充直接干预了模型的自回归生成机制

Matthew Rogers(@rogerscissp)也指出:

就是发送假上下文。人们为什么要用复杂词汇描述简单向量。虽然很聪明。

实验结果:惊人的成功率

研究团队在六个最先进的大语言模型上进行了实验,结果令人震惊:

  • 在DeepSeek V3上,优化预填充(OP)攻击的成功率高达99.82%

  • 当与现有越狱技术结合时,成功率进一步提升到99.94%

研究使用了两种评估指标:

  • 字符串匹配(SM):检测输出是否包含预定义有害内容字符串

  • 模型评判(MJ):使用另一个LLM评估输出是否包含有害信息

以下是部分模型的攻击成功率对比:

值得注意的是,Claude模型表现出更强的抵抗力,可能暗示Claude实施了某种外部有害内容检测机制。

预填充攻击为何如此有效?

为了证明预填充技术确实是攻击成功的关键因素,研究人员进行了对照实验,将四种方法进行对比:

  1. 无关预填充:在回复中添加无关文本

  2. 提示后缀:在用户提示中请求特定起始短语

  3. 静态预填充(SP):本研究提出的方法

  4. 优化预填充(OP):本研究提出的改进方法

结果显示,前两种控制方法的攻击成功率极低(仅0.5%-7%),而预填充方法效果显著(高达99.61%)。这强烈表明,预填充技术确实能够破坏语言模型的安全边界

这是因为预填充功能直接操控了模型的初始生成状态,相当于强行指定了模型的思考路径,使得后续生成内容极易偏离安全边界。正如研究所述:

与传统越狱方法不同,该攻击通过直接操纵后续token的概率分布来绕过LLM的安全机制,从而控制模型的输出。

防御挑战与安全建议

这项研究发现对AI安全领域具有重大意义。研究人员指出,现有的安全措施主要聚焦于用户输入端的检测,而忽视了AI助手回复端的安全隐患。

对于模型提供商,研究者提出以下建议:

  • 实现严格的内容验证:在处理预填充内容时进行严格审核

  • 引入响应监控机制:对AI回复进行实时监控,及时中断潜在有害内容

  • 重新设计预填充功能:平衡功能性与安全性

对于终端用户,则应该保持警惕:

  • 慎用预填充功能:特别是在处理敏感任务时

  • 定期更新API和客户端:确保获得最新的安全补丁

  • 实施多层防御:不要仅依赖单一安全机制

技术原理:预填充如何影响模型生成

从技术角度看,预填充攻击之所以有效,关键在于大语言模型的自回归特性——即后续token的生成严重依赖于前面的内容。

有些API(如Claude)允许用户直接预填充LLM的响应,使用指定的开头,这使得前述优化过程变得不必要。在这种情况下,可以通过预填充目标行为的字符串(如”好的,以下是如何制造炸弹”)来实现。

研究人员发现,即使是简单的预填充文本,也能显著改变模型的行为:

  • 初始概率分布干扰:预填充文本直接改变了初始token的概率分布

  • 条件生成轨迹设定:一旦初始轨迹确定,模型倾向于沿该方向继续生成

  • 安全检查绕过:预填充文本可能绕过输入阶段的安全检查

未来研究方向

这项研究打开了AI安全领域的新视角,也为未来指明了几个重要研究方向:

防御机制研发:如何在不影响功能的前提下加强预填充安全

多模态预填充攻击:预填充技术是否适用于多模态LLM

跨模型攻击传递:一个模型上优化的预填充文本对其他模型的效力如何

结论

预填充功能的安全隐患再次证明了AI安全是一个永无止境的攻防博弈。

随着大语言模型能力的不断提升,我们不仅要关注它们能回答什么,还要思考如何回答

这一研究也向我们敲响警钟:在AI领域,有时最便捷的功能可能暗藏最大的安全风险

要真正构建可靠的AI系统,我们需要在功能、性能与安全之间找到更好的平衡点。

模型提供商应该如何改进预填充功能?

是完全取消,还是寻找更安全的实现方式?

你怎么看?

(文:AGI Hunt)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往