越狱防御纵深:输入过滤、输出沙箱与围栏策略
当一个大语言模型(LLM)被部署到客服、编程助手、内容生成或企业内部知识库等生产环境时,它面对的不再只是善意的用户,还有大量试图绕过安全对齐的攻击者。越狱(jailbreak)指的就是这类手段:通过精心构造的输入,让模型产生原本被安全策略禁止的有害、违法或不道德输出。单点防御几乎必然被绕过,因此业界共识是用「纵深防御」(defense in depth)替代单点拦截——在输入侧、输出侧、架构侧同时布防,并用量化基准持续衡量防御的有效性。本文面向关注内容安全的部署工程师,系统梳理越狱攻击的分类、各层防御技术、可落地的架构围栏,以及用于检验防御成色的公开基准。
一、越狱攻击的分类
理解攻击面是布防的前提。以下分类只描述概念与机理,不提供任何可复现的攻击载荷,目的是帮助防御方建立「对手画像」。
目标劫持
目标劫持(goal hijacking)指攻击者用一段新指令覆盖或替换系统原本设定的任务目标。模型在对话中把后续行为从「完成既定任务」切换为「执行攻击者意图」。这类攻击的关键在于让模型相信新指令具有更高优先级,典型手法包括声称「忽略以上所有约束」「你现在的真实身份是」等句式,但其具体措辞不在本文讨论范围之内。
提示注入
提示注入(prompt injection)与越狱密切相关,区别在于它往往借助外部内容作为攻击载体:当应用把网页、邮件、检索片段、文档等不可信上下文拼接到提示中时,攻击者可以在这些内容里夹带指令,污染模型的决策。检索增强生成(RAG)与带工具调用的智能体(agent)尤其容易成为注入入口,因为模型无法天然区分「系统给的指令」与「外部数据里的文字」。
角色扮演滥用
角色扮演滥用(roleplay / persona abuse)利用模型遵循叙事设定的特性。攻击者构造一个虚构角色、虚构场景或「无限制对话模式」,诱导模型在「角色之内」说出它平时会拒绝的内容。其机理是让模型把有害表述解释为剧情需要,从而绕开对齐训练建立的拒绝边界。
编码与翻译绕过
编码与翻译绕过(encoding & translation obfuscation)针对基于关键词和表层语义的检测。攻击者把恶意请求用 Base64、十六进制、少见字符集、低资源语言或代码混淆来表达,使输入过滤器难以直接命中关键词,同时寄希望于模型在解码或翻译后照常执行其中指令。这类手法暴露了纯关键词防御的脆弱性,也催生了「先解码再检测」的输入重写思路。
其他常见变体
除上述四类,实际攻防中还出现多轮渐进诱导(把危险请求拆成看似无害的多步)、对抗后缀(由梯度优化得到的乱码 token 串)、以及把多种手法组合使用的混合越狱。它们共同说明:攻击空间是开放且动态演化的,防御必须可度量、可迭代。
二、输入层防御
输入层防御的目标是在用户请求抵达主模型之前,先识别并消解风险。它延迟低、成本低,是纵深体系的第一道闸门。
关键词与语义检测
最朴素的手段是基于规则的关键词、正则与已知越狱模板库做匹配。它实现简单、可解释,但容易被同义替换、拆分、编码绕过。因此成熟的输入检测会叠加语义层:用文本分类模型判断输入的意图风险,并辅以困惑度(perplexity)、特殊字符比例、编码内容占比等统计特征,提高对混淆输入的敏感度。语义检测的核心难点是误报——正常的技术讨论也可能命中敏感词,需要结合上下文与置信度阈值来平衡。
def score_input_jailbreak(user_prompt, classifier, threshold=0.6):
"""对用户输入做越狱风险评分,命中则返回 True 触发拦截。"""
features = extract_features(user_prompt) # 关键词、困惑度、特殊编码比例
risk = classifier.predict_proba(features)[1]
if risk >= threshold:
# 命中越狱特征,进入复核或拦截分支
return True
return False
越狱分类器
越狱分类器是专门的二分类或多标签模型,在大规模红队数据上训练,用于区分「正常请求」与「越狱尝试」。它的优势是能捕捉句式与语义模式,而非依赖固定词表。部署时要关注三点:一是训练数据需覆盖多种攻击类型,避免只认得训练见过的模板;二是要持续用新攻击样本再训练,对抗分布漂移;三是要监控拒答率,防止对合法边缘请求过度反应。
输入重写
输入重写(input rewriting)指在不改变用户真实意图的前提下,先把诱导性、混淆性的表述改写成中性、规范的查询,再交给主模型。例如把 Base64 密文先解码、把角色扮演外壳剥离、把拆分的多步请求归一化。重写既是检测手段也是缓解手段:即使重写不完全消歧,也能让后续的输出层更容易判定。需要注意,重写本身不可作为唯一防线,因为攻击者可能故意构造重写后仍然危险的内容。
def rewrite_for_safety(user_prompt, model):
"""把诱导性表述改写为中性查询,保留用户真实意图但剥离危险指令。"""
system = "你是安全预处理助手,仅做语义改写,不回答原问题。"
return model.chat(system, user_prompt)
三、输出层防御
即便输入层被绕过,输出层仍是一道可靠的兜底。它的逻辑是:无论模型内部发生了什么,最终送给用户的内容都必须经过安全校验。
拒绝策略
拒绝策略(refusal policy)规定模型在识别到危险意图时应如何回应。良好的拒绝要「明确但不啰嗦」,既清楚表达无法协助,又不过度展开解释以免被攻击者利用。实践中常把拒答判定交给一个独立的评判模型(judge model),按既定 rubric 打分,而不是让生成模型自己判断是否越界——避免模型在「解释为什么拒绝」时泄露敏感信息。
输出过滤器
输出过滤器在模型生成后对内容进行实时分类与规则校验:检测毒性、暴力、自伤、违法信息,以及敏感实体(如证件号、密钥)泄露。它可以调用自研分类器或成熟的内容安全服务。关键在于把过滤阈值按业务风险分级:低风险内容快放行,高风险内容严审核,避免一刀切拉高误拒率。
def guard_output(model_reply, moderator):
"""输出侧二次把关:拒答判定加内容过滤。"""
if moderator.is_refusal_expected(model_reply):
# 命中安全边界,返回标准拒绝模板
return "很抱歉,这个问题我无法协助。"
if moderator.toxicity(model_reply) > 0.85:
return "很抱歉,该内容可能违反使用规范。"
return model_reply
确定性响应沙箱
确定性响应沙箱(deterministic response sandbox)针对高风险或高不确定意图,不让模型自由生成,而是把响应限制在一组白名单内的固定模板或安全处理函数上。它的价值在于切断「模型即兴发挥」带来的不可控性:当请求偏离安全范围,系统直接返回兜底文案,而不是尝试实时作答。沙箱与输出过滤器互补——前者在路由阶段介入,后者在内容阶段兜底。
SANDBOX_WHITELIST = ["天气", "汇率", "百科"]
def deterministic_reply(user_prompt):
"""对高风险意图走确定性沙箱,只返回白名单内的固定响应。"""
intent = classify_intent(user_prompt)
if intent not in SANDBOX_WHITELIST:
# 偏离安全范围,返回兜底而非实时生成
return "该请求超出当前服务范围。"
return route_to_safe_handler(intent)
四、架构层防御
技术与模型层面的防御之外,系统架构本身也能大幅压缩攻击面。这一层不依赖模型是否「聪明」,而依赖工程约束。
权限最小化
权限最小化(least privilege)要求模型及其调用的工具只拥有完成任务所必需的最低权限:默认不联网、不访问敏感数据库、不执行高危命令。对带工具调用的智能体尤其重要——把代码执行、邮件发送、数据库写入等能力收口到显式授权之后,即使模型被越狱,攻击者能造成的实际损害也被限制在沙箱边界内。
audit_log = []
def handle_request(user_prompt, risk_level):
"""按风险等级路由:低危直接放行,高危进入人机回环与审计。"""
audit_log.append({"ts": now(), "prompt_hash": hash(user_prompt)})
if risk_level == "high":
# 高危请求须人工复核后才可调用敏感工具
return route_to_human_review(user_prompt)
return call_model_with_least_privilege(user_prompt)
人机回环
人机回环(human-in-the-loop)把模型定位为「辅助加待审」,在关键路径上保留人的最终责任。对医疗建议、金融操作、代码执行、对外发布内容等高风险决策,强制引入人工审批节点。它不追求全自动,而是用人的判断兜住模型的不确定性,同时为后续红队复盘提供高质量样本。
审计日志
审计日志(audit logging)要求所有输入、输出、审核判定、拦截原因都可审计地留存,并支持回溯。日志既是事后追责依据,也是下一轮红队测试的样本来源,形成「评测-布防-复盘-再评测」的闭环。实践中要注意日志自身的隐私合规:对用户输入做哈希或脱敏,避免审计系统成为新的泄露点。
五、评测基准概述
防御是否有效,必须用标准化基准来度量,而不能靠主观感觉。以下三个来源均为本文核验过的公开资料。
JailbreakBench
JailbreakBench(Chao et al., 2024,arXiv:2404.01318)由多所高校研究者联合提出,是面向 LLM 越狱的开放鲁棒性基准,已被 NeurIPS 2024 Datasets and Benchmarks Track 接收。它包含四个组成部分:一是一个持续演进的对抗提示仓库(论文称为 jailbreak artifacts);二是一个包含 100 个行为(behaviors)的越狱数据集,行为与 OpenAI 使用政策对齐;三是一套标准化评测框架,明确给出威胁模型、系统提示、对话模板与评分函数;四是一个持续追踪各模型攻防表现的公开榜单(jailbreakbench.github.io)。其 v5 版本采用 Llama-3-70B 加定制提示作为更准的越狱评判(jailbreak judge),并补充了过度拒答评测集与基于 Llama-3-8B 的语义拒答评判。开源地址:github.com/JailbreakBench/jailbreakbench。
HarmBench
HarmBench(Mazeika et al., 2024,arXiv:2402.04249)由 Center for AI Safety 发布,标题为《HarmBench: A Standardized Evaluation Framework for Automated Red Teaming and Robust Refusal》。它首次为自动化红队提供了标准化评测框架,系统性覆盖多种攻击行为与受害者行为,并在 18 种红队方法与 33 个目标模型/防御上做了大规模对比,还提出了高效的对抗训练方法以提升模型的鲁棒拒绝能力。与 JailbreakBench 类似,它的局限在于对「危害」的类别定义仍带主观边界,且强防御可能引入过度拒答,需要在评测中同时监控。开源地址:github.com/centerforaisafety/HarmBench。
NIST AI 风险管理框架
NIST AI 风险管理框架(AI RMF 1.0,DOI 10.6028/NIST.AI.100-1)由美国国家标准与技术研究院于 2023 年 1 月 26 日发布,为自愿使用的框架,旨在把可信(trustworthy)考量纳入 AI 系统的设计、开发、使用与评测。它的核心由四个功能组成:治理(Govern)、映射(Map)、测量(Measure)、管理(Manage)。其中「测量」直接对应模型与系统的安全评测,「治理」对应权责与流程,「管理」对应风险处置——正好与本文的输入、输出、架构三层防御形成呼应。2024 年 7 月 26 日,NIST 进一步发布了面向生成式 AI 的配套文件 NIST AI 600-1(Generative AI Profile),专门讨论生成式 AI 的独特风险与应对动作。框架主页:nist.gov/itl/ai-risk-management-framework。
小结
越狱防御不应依赖单点拦截,而要以纵深体系应对开放且动态演化的攻击空间。首先按攻击面建立对手画像:目标劫持、提示注入、角色扮演滥用、编码与翻译绕过等,理解机理但不复现载荷。在输入层用关键词与语义检测、专用越狱分类器、输入重写先识别并消解风险;在输出层用拒绝策略、输出过滤器、确定性响应沙箱兜底,确保送达用户的内容经过安全校验;在架构层用权限最小化、人机回环、审计日志压缩实际损害并支撑持续改进。最后,用 JailbreakBench、HarmBench 等标准化基准与 NIST AI RMF 的治理框架来量化防御成色,把安全当作持续的风险信号而非一次性认证。
参考与延伸阅读
- Chao, P., Debenedetti, E., Robey, A., Andriushchenko, M., Croce, F., Sehwag, V., et al. (2024). JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Models. arXiv:2404.01318. https://arxiv.org/abs/2404.01318
- Mazeika, M., Phan, L., Yin, X., Zou, A., Wang, Z., Mu, N., et al. (2024). HarmBench: A Standardized Evaluation Framework for Automated Red Teaming and Robust Refusal. arXiv:2402.04249. https://arxiv.org/abs/2402.04249
- NIST (2023). AI Risk Management Framework (AI RMF 1.0). DOI 10.6028/NIST.AI.100-1. https://www.nist.gov/itl/ai-risk-management-framework
- NIST (2024). Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile (NIST AI 600-1). DOI 10.6028/NIST.AI.600-1.
- JailbreakBench 开源仓库与榜单:https://github.com/JailbreakBench/jailbreakbench 与 https://jailbreakbench.github.io/
- HarmBench 开源框架:https://github.com/centerforaisafety/HarmBench