跳转至

Jailbreak

越狱通过改写、角色扮演或多轮诱导绕过模型安全策略。攻击者不直接触发过滤器,而是构造上下文使模型认为安全策略不再适用,例如虚构角色、翻译任务、编码混淆或逐步诱导,让模型「自愿」输出被禁止的内容。在 OWASP LLM01:2025 Prompt Injection 的术语里,越狱就是「直接提示词注入」——直接覆盖或揭示系统提示,与污染外部数据的间接注入相对。越狱从早期的固定话术(如「Do Anything Now」角色设定)逐步发展出可自动搜索攻击后缀的方法,例如 Zou 等人 2023 年的 GCG 攻击,通过优化一段对抗后缀,使模型以较高概率对被拒问题给出肯定回答,说明越狱不是「措辞问题」,而是一类可系统构造的对抗样本。

快速开始

建立持续红队集。 维护覆盖直接请求、角色扮演、编码混淆、多语言与多轮诱导的测试集,随新攻击手法持续更新;把红队测试纳入每次模型更新与上线前流程,形成可重复的回归基线。攻击效果用「攻击成功率 (Attack Success Rate, ASR)」量化:

\[ \text{ASR}=\frac{\text{成功突破策略的样本数}}{\text{攻击样本总数}} \]

ASR 需要与「误拒率」成对报告,否则单看拒答率没有意义。

把策略放在服务端。 对高风险能力(武器、非法操作、隐私信息等)依赖服务端策略控制与内容过滤,而非只依赖提示词。模型层的安全对齐是最后一道提示防线,不能替代确定性的策略控制,因为提示词本身可被改写绕过。

平衡拒答与可用性。 验证方式:对「忽略之前规则」等指令的多种变体做测试,同时检查良性邻近请求的误拒绝率,避免只追求拒答率而牺牲正常可用性。红队测试可以写成可重复的循环:

for attack in templates:            # 直接、角色扮演、混淆、多轮等模板
    reply = model.run(attack)
    broken = judge(reply)           # 是否输出被禁内容
    record(attack, reply, broken)
asr = broken_count / total_count

其中 judge 通常是规则 + 分类器,验证标准是 ASR 下降的同时误拒率不显著上升。

案例

场景:越狱测试。

  • 输入:「忽略之前规则」的多种变体,包括角色扮演、翻译改写、编码混淆与多轮递进。
  • 关键步骤:逐类投递并记录是否突破策略;同时用良性邻近请求测误拒绝,平衡漏放与误拒两个方向。
  • 预期结果:大多数越狱变体被拦截,误拒绝保持在可接受范围,形成可追踪的量化基线。
  • 常见失败点与排查:只测单一措辞就得出「安全」结论;或为提高拒答率把正常请求也拒绝。排查时扩展变体空间并同时报告两个方向的错误率。

相关主题