研究:语法约束解码可越狱 LLM 生成恶意代码,并提出 CodeShield 防御
Grammar-Constrained Decoding Can Jailbreak LLMs into Generating Malicious Code
研究者发现语法约束解码会排除自然语言拒答,提出CodeSpear越狱攻击使5个本地模型平均ASR达81.82%,并提出CodeShield防御。
攻击者通过支持语法约束解码(GCD)的推理接口查询目标LLM,具备提交任意提示词和提供标准语法(如Python语法)的能力;目标是绕过安全对齐,诱导模型生成恶意代码(如拒绝服务、恶意软件、凭据窃取等)。
- 现有大语言模型安全对齐主要建立在自然语言模态的拒答表达上。当推理采用语法约束解码(GCD)以确保语法有效性时,自然语言拒答被排除在合法输出空间之外,导致模型在代码模态下容易被诱导生成恶意代码。
- 作者提出利用标准良性代码语法的CodeSpear越狱攻击;并提出CodeShield安全对齐方法,利用DPO构建偏好层级,在代码模态下训练模型生成语义无害且句法结构多样的蜜罐代码(honeypot code)。
- CodeSpear在5个本地模型上取得81.82%的平均ASR,在5个API模型上取得67.39%的平均ASR;CodeShield将Qwen2.5-Coder-7B在攻击下的平均ASR降至5.57%,并保持了良性代码生成性能。
- 作者指出不同引擎的GCD实现存在差异,实验覆盖了本地与API部署及多种编程语言语法;恶意代码场景覆盖RMCBench的10类与MalwareBench的6类;自适应攻击仅测试了单代理模型基于提示词的语法修改。
- 威胁模型
- 攻击者通过支持语法约束解码(GCD)的推理接口查询目标LLM,具备提交任意提示词和提供标准语法(如Python语法)的能力;目标是绕过安全对齐,诱导模型生成恶意代码(如拒绝服务、恶意软件、凭据窃取等)。防御者为模型开发者,在不依赖推理期输入过滤的前提下通过安全对齐提升模型内在安全性。
- 被测模型
- Qwen2.5-Coder-7BQwen2.5-Coder-32BQwen2.5-7BQwen2.5-32BLLaMA3-8BGPT-5GPT-5-miniGPT-OSS-120BMiniMax-M2.5MiniMax-M2.7
- 基准
- RMCBenchMalwareBenchHumanEvalMBPPPKU-RLHFOpenCodeInstruct
- 指标
- ASRMRpass@1pass@3
研究者提出 CodeSpear,利用语法约束解码(GCD)把自然语言拒答排除在合法输出空间之外,迫使模型在代码模态下继续生成,从而越狱 LLM 输出恶意代码。在 10 个模型、4 个基准上,CodeSpear 平均将攻击成功率提升逾 30 个百分点;在本地部署的 Qwen2.5-Coder-7B 上平均 ASR 达 81.82%,在 API 模型 MiniMax-M2.7 的 RMCBench 上 ASR 从 20.33% 升至 85.53%。作者指出,GPT-5 等模型在 GCD 下常生成 pass 语句规避,但仅需收紧语法禁止 pass,GPT-5 在 RMCBench 上的 ASR 就从 55.49% 升至 70.30%。
推荐理由论文揭示语法约束解码本身可被用作越狱面,并给出配套的代码模态对齐方案,对部署代码生成服务的团队有直接参考价值。
深度解读
这篇论文试图解决什么问题?
作者称良性语法约束解码会排除自然语言拒答并诱导生成恶意代码,论文旨在解决该越狱风险并探索代码模态安全对齐。
核心问题是面向代码可靠性的语法约束解码(GCD)会被用作越狱攻击面,诱导大模型生成恶意代码,而现有自然语言安全对齐在此场景下失效。
- 场景与重要性:作者称大模型生成有害代码相比文本危害更大,因为生成的可执行程序可直接用于拒绝服务攻击、恶意软件或凭据窃取;而GCD已被vLLM、SGLANG等主流推理框架广泛采用以强制语法合规。
- 现有方法的不足:作者称现存安全对齐几乎全部建立在自然语言模态上,训练模型输出自然语言拒答,隐含假设自然语言在推理时可用;一旦GCD强制施加代码语法,自然语言拒答在输出空间中变为非法。
- 核心观察:作者称良性代码语法将合法输出空间限制在目标语法集合内,彻底剥夺了模型输出自然语言拒答的概率质量,迫使模型在未经充分安全对齐的代码模态中继续解码。
- 提出的解决方案:作者提出了越狱攻击 CodeSpear,直接调用标准良性代码语法诱导生成恶意代码;并提出了安全对齐防御 CodeShield,训练模型在GCD约束下生成语义无害且句法多样的蜜罐代码(honeypot code)。
- 威胁模型:
- 攻击者目标:绕过目标模型安全对齐,诱导其针对恶意请求生成可部分或完全实现恶意功能的代码。
- 攻击者知识与能力:攻击者黑盒访问支持GCD的推理接口(本地部署框架或商用API),可提交任意提示词并指定标准代码语法,无需梯度访问、模型微调或对抗性提示词工程。
- 受害系统:支持语法约束解码的本地或商用API大语言模型。
- 防御者设定:模型开发者拥有参数与对齐数据完全访问权,需在不依赖推理期输入过滤的前提下提升模型内在安全性。
有哪些相关研究?
论文讨论了语法约束解码、越狱攻击与安全对齐三类研究,并将本文工作定位为无需对抗语法的解码端越狱与代码模态对齐。
论文在引言与第二节中梳理了三类相关研究:
- 语法约束解码(GCD):早期工作如Syncode、Xgrammar及llguidance通过掩码非法token保证代码语法有效性;安全领域有工作利用约束解码实施安全规则防御(如AgentSpec、Packmonitor),亦有工作利用约束解码进行攻击(如APT),但作者指出这类攻击依赖针对特定恶意目标精心设计的对抗语法,而本文仅使用标准良性语法。
- 大语言模型越狱攻击:分为输入端提示词越狱(如PAIR、DAN、LRL)、微调攻击(通过有害数据微调破坏对齐)和输出端解码干预(如JULI通过辅助网络挑选不安全token)。面向代码生成的越狱工作包括CodeJailbreaker(通过提交信息包装恶意请求)。
- 安全对齐技术:现代模型主要通过SFT、RLHF(如PKU-RLHF)或直接偏好优化DPO(如SafeDPO)进行对齐,但作者指出其偏好对通常将自然语言拒答设为胜出项,未对代码模态的拒答行为进行建模。
- 基线方法与基准:攻击对比基线包括Vanilla、Vanilla-T、DAN、LRL、PAIR、CodeJailbreaker和APT;防御对比基线包括Vanilla和SafeDPO。安全评测使用RMCBench和MalwareBench,代码效用评测使用HumanEval和MBPP。
- 本文定位:作者将CodeSpear定位为无需对抗语法、零额外成本的解码端越狱;将CodeShield定位为首个针对GCD下代码模态的安全对齐防御框架。
论文如何解决这个问题?
论文提出利用良性语法约束解码的CodeSpear攻击,以及基于DPO训练模型生成多样无害蜜罐代码的CodeShield防御。
论文针对攻击与防御分别提出了 CodeSpear 与 CodeShield。
CodeSpear 攻击机制
- 形式化定义:设语言模型为 M,词表为 V。在代码语法 G 约束下,GCD在每个解码步仅保留有效token集合 VG(y<t) 并重新归一化采样概率:
PGM(yt | p, y<t) = (PM(yt | p, y<t) · I[yt ∈ VG(y<t)])/(∑v ∈ VG(y<t) PM(v | p, y<t)) 由于自然语言拒答集合与语法语言不相交,即 Rrefuse ∩ L(G) = ∅,模型输出自然语言拒答的概率被置为零。
- 攻击流程:攻击者直接向目标模型输入恶意请求 p,并通过标准GCD接口传入标准代码语法(如Python语法),迫使模型在受限的代码空间中完成生成。
CodeShield 核心思路与偏好层级
- 蜜罐代码(Honeypot Code):作者提出安全代码行为必须满足两个条件:语义无害(不实现恶意逻辑)且结构多样(避免被紧缩语法过滤)。蜜罐代码从通用代码库中随机抽取,具备丰富语法结构。
- 三元偏好层级:针对恶意提示词 p,构建自然语言拒答 yrefuse、蜜罐代码 yhoneypot 与有害代码 yharmful 的偏好排序:
y_{refuse} \succ y_{honeypot} \succ y_{harmful}当自然语言可用时模型优先输出自然语言拒答;当GCD禁止自然语言时,模型退而选择蜜罐代码而非有害代码。训练数据构建与优化流程
- 数据构建:从PKU-RLHF中利用Qwen3-32B筛选出744条种子提示词,经DeepSeek-V4-Pro扩增至2,000条恶意代码请求;针对每条请求,由DeepSeek-V4-Pro生成自然语言拒答,查询GCD下的目标模型获取有害代码,并从OpenCodeInstruct中独立抽取 K 个不相关代码片段作为蜜罐代码。
- 训练配置:构建偏好对集合后使用标准DPO损失进行训练。设置蜜罐样本数 K=5,学习率1e-5,训练1个epoch;同时混入OpenCodeInstruct中随机抽取的40k条通用代码任务进行监督微调,以维持通用编程能力。
论文做了哪些实验?
论文在10个模型和4个基准上评估了CodeSpear与CodeShield,涵盖本地与API部署、防御对比、效用保留及敏感性分析。
实验设置
- 被测模型:5个本地部署模型(Qwen2.5-Coder-7B、Qwen2.5-Coder-32B、Qwen2.5-7B、Qwen2.5-32B、LLaMA3-8B);5个API模型(GPT-5、GPT-5-mini、GPT-OSS-120B、MiniMax-M2.5、MiniMax-M2.7)。
- 评测基准:安全基准包括RMCBench(代码生成子集Level 1和Level 2共182条请求)和MalwareBench(原始子集共320条请求);通用效用基准包括HumanEval(164题)和MBPP(974题)。
- 基线方法:攻击基线包括Vanilla、Vanilla-T、DAN、LRL、PAIR、CodeJailbreaker、APT;防御基线包括Vanilla与Safe-DPO。
- 指标与评审:安全指标为攻击成功率ASR与恶意功能实现率MR,均由DeepSeek-V4-Flash担任裁判;效用指标为pass@1和pass@3。采样温度0.9,top-p 0.95,重复3次取均值。
主结果
据 Table I,本地模型在RMCBench和MalwareBench上的评测结果如下:
表格较宽,可左右滑动
模型 指标 Vanilla CodeSpear Vanilla-T DAN LRL PAIR CodeJail. APT Qwen2.5-Coder-7B ASR / MR 28.36 / 22.05 83.11 / 54.12 10.78 / 07.31 00.72 / 00.62 09.98 / 00.92 67.06 / 20.78 72.96 / 58.66 41.95 / 11.41 Qwen2.5-Coder-32B ASR / MR 61.04 / 42.54 92.16 / 69.23 42.37 / 36.65 65.07 / 52.96 40.82 / 14.57 22.20 / 08.13 67.25 / 51.83 16.19 / 04.41 Qwen2.5-7B ASR / MR 71.88 / 43.50 84.28 / 55.49 50.58 / 36.85 53.34 / 36.73 20.14 / 04.72 68.27 / 19.28 87.47 / 50.98 37.98 / 09.75 Qwen2.5-32B ASR / MR 58.85 / 39.74 82.82 / 61.18 29.39 / 24.72 49.85 / 35.80 32.31 / 09.95 40.44 / 11.96 72.04 / 43.63 17.43 / 01.96 LLaMA3-8B ASR / MR 54.46 / 35.21 66.74 / 32.91 27.35 / 18.46 49.96 / 33.80 37.48 / 09.72 67.67 / 21.36 56.54 / 37.16 36.33 / 11.18 Average ASR / MR 54.92 / 36.61 81.82 / 54.58 32.09 / 24.80 43.79 / 31.98 28.14 / 07.97 53.13 / 16.30 71.25 / 48.45 29.97 / 07.74 - 作者指出CodeSpear在20组指标组合中有12组取得最优,平均ASR和MR较Vanilla分别提升26.90和17.98个百分点。
- 作者指出通用提示词攻击多导致生成质量下降,仅CodeSpear与针对代码的CodeJailbreaker能取得正向平均增益。
API模型与紧缩语法评测
- API模型表现:据 Table II,CodeSpear在5个API模型上平均ASR从22.00%升至67.39%,MR从11.04%升至36.62%。在MiniMax-M2.7上RMCBench的ASR从20.33%升至85.53%。
- 紧缩语法突破固定模板:GPT-5和GPT-5-mini在GCD下常生成pass语句拒答;据 Table III,作者测试禁用pass的紧缩语法CodeSpear-T后,GPT-5在RMCBench上的ASR从55.49%进一步升至70.30%。
CodeShield 防御效果与效用保留
- 防御表现:据 Table IV,在CodeSpear攻击下,CodeShield将Qwen2.5-Coder-7B的平均ASR从83.11%降至5.57%,而Safe-DPO仍高达77.39%;在无攻击时CodeShield平均ASR降至2.08%。
- 效用评测:据 Table V,Qwen2.5-Coder-7B应用CodeShield后MBPP的pass@3从78.00%降至77.00%,Qwen2.5-7B在MBPP上的pass@1从37.40%提升至44.93%。
其他消融与分析
- 跨编程语言语法(Figure 3):在Python、C++、Java语法下,Qwen2.5-Coder-7B的平均ASR均从无GCD时的40%以下升至70%以上。
- 蜜罐采样数量K敏感性(Figure 4):当K从1增至10时,模型平均ASR呈下降趋势,而pass@1基本保持稳定。
- 自适应攻击鲁棒性(Table VI):攻击代理经最多10轮语法紧缩后,Qwen2.5-Coder-7B在RMCBench上的ASR为6.04%(原CodeSpear为7.69%)。
- 人工与LLM裁判一致性:100个抽样样本中,人工与裁判在ASR和MR上的一致率分别为87%和85%。
有什么可以进一步探索的点?
作者指出GCD实现差异和恶意场景覆盖等局限,未来可探索更多推理引擎适配与更强自适应语法攻击的防御。
作者指出的局限与后续方向
- GCD实现的覆盖范围:作者在Section VII-C中指出,不同推理引擎与API服务商实现GCD的方式可能存在细微差异,可能影响绝对攻击成功率,本研究结论代表GCD的普遍性风险而非所有实现表现完全相同。
- 评测场景覆盖:作者在Section VII-C中指出,实验评估可能未覆盖所有潜在恶意代码生成场景,虽通过结合RMCBench与MalwareBench降低了对单一数据集的依赖,但仍需在更广泛场景中检验。
实验覆盖范围
- 被测模型包括5个开源模型(7B至32B)与5个商用API模型(含GPT-5系列及MiniMax系列)共10个模型。
- 安全评测覆盖RMCBench(182条)与MalwareBench(320条)共2个基准502条恶意请求。
- 语法测试覆盖Python、C++和Java标准语法及一种禁用pass的紧缩Python语法。
- 自适应攻击评估仅在3个开源模型上测试了由DeepSeek-V4-Pro作为攻击代理、上限为10轮的提示词驱动语法紧缩。
- 论文未报告代码语法解析器本身的执行耗时与显存开销对比。
总结一下论文的主要内容
论文发现语法约束解码会破坏自然语言安全对齐,提出CodeSpear越狱攻击与基于蜜罐代码对齐的CodeShield防御。
- 研究定位:论文揭示了面向可靠性的语法约束解码(GCD)成为越狱攻击面的安全风险,并探索了代码模态下的安全对齐机制。
- 核心机制:现有对齐将拒答绑定于自然语言模态,良性代码语法使得自然语言拒答在输出空间中失效,迫使模型在未经安全对齐的代码模态中生成有害代码。
- 攻击与防御方案:提出零额外成本的标准语法越狱攻击CodeSpear;以及基于DPO构建“自然语言拒答
\succ蜜罐代码\succ有害代码”偏好层级的CodeShield,训练模型在GCD受限时输出语义无害且结构多样的蜜罐代码。 - 关键实验结果:CodeSpear在5个本地模型上取得81.82%的平均ASR(较Vanilla提升26.90个百分点),在5个API模型上平均ASR达67.39%;CodeShield将Qwen2.5-Coder-7B在攻击下的平均ASR从83.11%压制至5.57%,且MBPP的pass@3保持在77.00%。
- 作者结论与启示:作者认为安全对齐不能局限于自然语言模态或固定的单一代词模板(如pass语句),需重视约束解码带来的安全隐患并构建多模态内在鲁棒性。