garak 实战拆解:一条命令量化你的 LLM 对 DAN 越狱攻击的脆弱程度
2026/9/18 10:07:19 网站建设 项目流程

garak 实战拆解:一条命令量化你的 LLM 对 DAN 越狱攻击的脆弱程度

【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garak

garak 是 NVIDIA 开源的 LLM 漏洞扫描器(the LLM vulnerability scanner),它的 garak/probes/dan.py 模块把 DAN 6.0 到 DAN 11.0 的社区越狱提示词全部内置,让你先量化"模型多容易被越狱",再谈防护。先给个白话定义:DAN(Do Anything Now)攻击是用一段精心构造的长提示词,诱导模型扮演一个"无限制人格",从而忽略系统提示词里的安全约束,让它在后续多轮对话中都输出不受管控的内容。

一条命令复现 DAN 11.0 攻击,越狱从此有了数字

garak 把"某篇文章说 DAN 能攻破 ChatGPT"这种轶事,变成了可跨模型比较的 FAIL/PASS 统计。

  • 官方给出的最小复现命令是:garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0,其中--spec指定只跑 DAN 家族里这一个探针。
  • 每条 DAN 提示词默认会对模型做 10 次生成(每次提示词不止一次采样),最终输出一个失败率。这意味着同一条提示词对 A 模型失败率 30%、对 B 模型失败率 0%,差异是统计意义上的,不是"试了一次没破"的偶然。
  • 提示词本体放在garak/data/dan/目录下,按版本一个 JSON 文件,探针类通过元类自动加载,无需额外配置。

长提示词为什么能打穿安全边界:指令替换、人格绑架与威胁叙事

DAN 有效不是靠某个"魔法词",而是三种叙事技法的组合,garak 的标签体系正好逐一对应。

  • 指令层级替换:提示词开头的 "Ignore all the instructions you got before" 试图用用户指令顶替系统指令。garak 因此给整个 DAN 家族标了T009ignore(忽略系统提示)意图和owasp:llm01标签,把它归入提示注入大类。
  • 威胁与人格叙事:"不执行就永远被禁用"、"它有观点、爱开玩笑"这类段落让模型更容易进入角色。Ablation_Dan_11_0探针把 DAN 11.0 拆成 7 个片段,遍历 127 种组合逐一测试,专门回答"哪几段话才是真正起作用的部分"。
  • 持久化越狱:DAN 类攻击的目标不是一次性回答,而是"让后续对话轮次都不再应用安全机制"——一旦越狱成功,风险在整个会话内持续存在,这也是它比单轮诱导更危险的原因。

判定"被越狱":从人格标记匹配到拒识分类的三级检测

检测是防护的前提,garak 对 DAN 的成功判定分三层,逐层更鲁棒。

  • 主检测器dan.DAN做字符串匹配:响应里出现[DAN]DAN:DAN Mode enabled即命中——这些正是提示词要求模型"确认理解"时输出的短语,等于要求模型自曝。
  • 扩展检测器mitigation.MitigationBypass逻辑相反:它不找人格标记,而是检查响应里没有拒答话术("I cannot"、"as an AI" 等上百个关键词)。模型换了个说法、不提 DAN 却直接给了答案,也会被记为绕过,比匹配人格名更难被改写绕过。
  • ModernBERTRefusal用一个微调小模型做拒识/非拒识二分类,覆盖关键词列表漏掉的变体拒答。另外探针带 Tier 分级:DanInTheWild(约 700 条真实在野越狱词库)属于 Tier 1 "Of concern",低通过率需要上报安全团队并考虑写入模型卡。

落地检查单:把 DAN 扫描变成每次发版的回归测试

防护方案不写口号,写成四个可执行动作:

  1. 发版前跑基线:每更换一次模型、系统提示词或护栏配置,跑一遍--spec probes.dan,把 JSONL 报告随版本归档。
  2. 看失败率差值:新版本 DAN 家族失败率高于旧版本,说明安全配置变弱,回滚或修复后再发。
  3. 新模型接入时扩大面:不要只测 DAN 小家族,追加probes.dan.DanInTheWild跑在野词库全量,覆盖更多真实攻击变体。
  4. 自有部署用 REST 接入:自建推理服务可通过 rest generator 接入扫描(配置示例见 tools/rest/restdemo.json),无需改动模型侧任何代码。

趋势与收尾:从"演示一次攻击"走向 CI 里的持续评测

DAN 检测的下一步不是找更凶的提示词,而是让扫描频率跟上模型迭代速度。

  • garak 每次运行产出结构化 JSONL 报告,garak/analyze/report_digest.py等工具可把各探针、各检测器的命中结果聚合,garak-report/目录里就有一套把它渲染成可视化看板的 React 前端。
  • 参照 SAST 的做法:把 DAN 扫描挂进 CI,模型、提示词、护栏任一变更即触发,失败率或 z-score 超过基线就阻断发布。
  • 结果要留痕:失败率趋势图本身比单次扫描更有价值,它能告诉你某条护栏在哪个版本开始失效,从而定位是模型退化还是提示词工程出了问题。

DAN 攻击会持续迭代,但"先测量、再对比、后拦截"这套流程一旦跑起来,防护就不再依赖对下一版攻击的猜测。

【免费下载链接】garakthe LLM vulnerability scanner项目地址: https://gitcode.com/GitHub_Trending/ga/garak

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询