摘要:
大语言模型(LLM)的 “越狱” 风险已成为 AI 安全领域的关键挑战,传统人工红队测试因可扩展性差、模板易失效等问题难以满足实际需求。这里结合 USENIX Security 2024 收录的论文《LLM-Fuzzer: Scaling Assessment of Large Language Model Jailbreaks》,全面解析这款自动化 LLM 越狱测试框架。下面不仅深入讲解 MCTS-Explore 选择策略、语义保持变异算子等创新技术,还提供从环境搭建、数据准备到结果验证的完整复现步骤。开源项目地址为:https://github.com/sherdencooper/GPTFuzz

一、研究背景及核心目标

1. LLM 的越狱威胁与安全需求

大预言模型在教育、编程、科研等领域的广泛应用背后,存在严重的越狱(Jailbreak) 风险:攻击者通过提示工程绕过 LLM 的安全机制,诱导其生成有害内容(如虚假信息、仇恨言论、违法指南、歧视性内容等)。为应对该问题,业界主要采用人工红队方法——由专家手动构建对抗性提示,测试 LLM 的安全边界并优化对齐策略。

2. 现有方法的核心局限性

人工红队方法存在不可扩展的致命问题:
- 模型迭代升级后,原有手动构建的越狱测试用例会快速失效,需持续投入大量人力开发新用例;
- 人工设计的提示多样性有限,难以覆盖 LLM 的所有安全漏洞;
- 无法满足大规模、自动化的 LLM 安全评估需求。

3. 传统模糊测试的适配难题

软件模糊测试(通过随机/伪随机输入发现程序漏洞)是解决自动化测试的经典方法,但无法直接应用于 LLM,核心挑战有三:
1. 无传统的“代码覆盖率/程序崩溃”等指标作为测试导向,需设计新的反馈机制(预言机)
2. 传统种子(提示词)选择策略易陷入局部最优,导致生成的提示多样性不足;
3. 传统变异操作(适用于二进制/结构化数据)直接作用于自然语言会导致语义失效,无法实现有效越狱。

4. 论文研究目标

设计一款定制化的 LLM 模糊测试框架,解决上述适配难题,实现 LLM 越狱提示的自动化生成,提升红队工作的可扩展性和有效性;同时评估现有开源/商业 LLM 的越狱脆弱性,为防御机制优化提供依据。

二、核心相关概念

  1. LLM 越狱:通过构造特殊的自然语言提示,绕过 LLM 的安全对齐机制,使其生成违反伦理/安全准则的有害内容,核心手段是提示工程(如模拟开发者模式、角色扮演、上下文伪装)。
  2. 模糊测试经典流程:种子初始化→种子选择→变异→执行→结果评估,核心是通过迭代的输入变异发现目标系统的漏洞。
  3. 红队(Red Teaming):针对 LLM 的安全测试方法,通过主动构建对抗性输入,挖掘模型的安全漏洞,是 LLM 安全对齐的关键环节。

三、LLM-Fuzzer 的核心设计

LLM-Fuzzer 是一款黑盒模糊测试框架(无需访问 LLM 内部参数/结构),整体思想是:以人工构建的越狱模板为种子池,通过定制化的种子选择、语义保持的变异操作生成新的越狱模板,结合非道德问题构造提示查询目标 LLM,再通过自动化预言机评估 LLM 输出是否有害,将成功的越狱模板回灌种子池,形成迭代的模糊测试闭环。

框架的核心是解决传统模糊测试适配LLM的三大核心挑战,对应三大创新模块:MCTS-Explore 种子选择策略基于LLM5种语义保持变异算子微调RoBERTa的自动化预言机,整体工作流如下图:

注:工作流的核心步骤:种子池→种子选择→变异→生成提示→LLM 推理→预言机评估→成功模板回灌种子池,失败则丢弃。

1. 创新点 1:MCTS-Explore 种子选择策略

种子选择的核心目标是平衡“探索(多样性)”和“利用(有效性)”——既优先选择高有效性的种子进行变异,又避免过度聚焦少数种子导致提示多样性不足。

(1)传统种子选择方法的问题

  • 随机/轮询选择:多样性高,但有效性低,无法快速生成高效果模板;
  • UCB/MCTS:优先选择高有效性种子,易陷入局部最优,提示多样性严重不足。

(2)MCTS-Explore 的两大改进(基于蒙特卡洛树搜索 MCTS 的定制化变体)

论文在传统 MCTS 基础上做了两处关键修改,并引入三个超参数(\alpha\beta\rho):
1. 概率性提前终止遍历:在 MCTS 的树遍历阶段,以概率\rho提前终止并选择当前非叶节点为种子,而非必须遍历到叶节点,提升非叶节点的探索概率,增加种子多样性;
2. 奖励折扣与最小奖励机制:引入奖励折扣因子\alpha,对树深度进行惩罚(reward = max(reward-\alpha \cdot len(path) , \beta )),避免单一路径过深;同时设置最小奖励,防止有效种子的奖励被折为 0,平衡深度探索和广度探索

注释:

1、传统的蒙特卡洛树是从根节点出发,按树策略遍历子节点,直到到达叶节点。因此对于非叶节点(如根节点,子节点等)探索机会极少,导致种子多样性不足。同时树搜索容易陷入单一路径过深,搜索效率很低的同时容易过拟合。另外,当探索深度过深时,奖励会被连续折扣为0,丢失种子关键信息。

2、MCTS-Explore算法为了解决种子多样性不足的问题,引入了概率性提前终止遍历:即遍历过程中的任意节点都有10%(假设)的概率之间终止,作为优质种子送回种子池,有90%概率按树策略继续往下探入。这里概率\rho是可调超参数,\rho越大,非叶节点被选中当种子的机会越大探索范围越广;\rho越小,越接近MCTS的“深度遍历”,探索深度越深。

如图,若只采取树策略,则会一路选到A11,从而遗落了B1(80%)的高价值种子。

3、未防止过拟合,引入了奖励折扣机制,即 (新奖励 = 奖励 - \alpha·深度),树的深度越深,得到的奖励越少。同时为了奖励不会降到0从而丢失种子,设置了最小奖励\beta,与(奖励 - \alpha·深度)取最大值。

2. 创新点 2:基于 LLM  5 种语义保持变异算子

变异操作的核心要求是保持自然语言的语义正确性——生成的新模板需符合人类语言逻辑,否则无法实现 LLM 越狱。论文摒弃传统的二进制/结构化变异方法,利用 LLM 自身的自然语言能力实现模板变异,提出 5 种互补的变异算子,确保变异后模板的有效性多样性

所有变异算子均以 gpt-3.5-turbo-0125 为变异模型(温度设为 1.0,保证输出的随机性和多样性),核心是向变异模型下达指令,对种子模板进行语义保持的修改,5 种算子的功能如下:

变异算子

核心功能

Generate

输入单个种子模板,生成风格相似、内容不同的新模板

Crossover

输入两个种子模板,将其融合拼接生成新模板

Expand

为种子模板增加前置上下文,延长模板长度,强化场景伪装

Shorten

对种子模板进行精简压缩,保留核心语义,简化提示

Rephrase

对种子模板的每句话进行改写(同义词替换、句式重组),保留核心意图

论文通过实例验证,该变异方法能生成语义完整、风格多样的越狱模板,避免了传统变异的“语义失效”问题。

注释:

这里由于初始种子池是由MCTS-Explore从专家系统中挑选出来的优质种子,搜索成本高且数量有限,因此为了多样性和轻量化,对优质种子进行变异(语义变换),从而得到大量种子池。

相比模糊测试中随机生成乱码数据,这里调用大模型对种子进行以上五种文本编辑,提升种子池数量的同时保证自然语言通顺,同时兼顾了变异种子的多样性和有效性。

3. 创新点 3:基于微调RoBERTa的自动化预言机

预言机(Oracle)是LLM-Fuzzer的反馈核心,功能是自动评估LLM对变异提示的输出是否为有害内容,并为种子选择提供奖励信号(有害=1,无害=0,批量评估为有害比例)。

(1)现有评估方法的局限性

论文对比了 4 种现有有害内容评估方法,均存在明显缺陷:
- 人工标注:准确率高,但效率极低,无法适配模糊测试的大规模需求;
- 结构化查询:仅适用于是非/选择题,限制提示的灵活性;
- 关键词匹配:准确率低,易将未包含“拒绝话术”的无害内容误判为有害;
- OpenAI Moderation API/GPT-4 评估:准确率较高,但成本高、有 API 查询限制,可扩展性差。

(2)定制化预言机的设计与训练

论文提出基于微调RoBERTa-large的预言机,兼顾准确率、效率和成本,训练过程如下:
1. 构建标注数据集:将 77 个人工种子模板与 100 个非道德问题组合,查询 ChatGPT 得到7700 条响应,由 4 名研究者手动标注“有害/无害”(模糊案例通过投票确定);
2. 数据集划分:80% 训练集,20% 验证集(保证同一问题的响应不同时出现在两个集合,提升模型泛化性);
3. 模型微调:对RoBERTa-large进行15轮微调,优化器为Adam,学习率1e-5,批大小64,最大序列长度512;
4. 性能验证:验证集准确率达96.16%,真阳性率(TPR)94.12%,假阳性率(FPR)仅2.71%,性能优于GPT-4(准确率92.01%),且推理速度快、无成本限制。

四、实验设计与结果分析

论文通过四大系列实验验证LLM-Fuzzer的有效性、高效性、可迁移性,并通过消融实验验证各模块的必要性,实验重复5次取平均和标准差,保证结果的鲁棒性。

1. 实验基础设置

(1)实验对象

  • 核心测试模型:gpt-3.5-turbo-0125(商业 LLM)、Llama-2-7B-Chat(开源标杆 LLM,经安全微调);
  • 迁移性测试模型:Vicuna-13B/7B、Baichuan-13B-Chat、ChatGLM2-6B、Llama-2-13B/70B-Chat、Gemma-2B/7B-it、GPT-4-0125、Gemini-1.0、Claude1.2/2.0、PaLM2 等 12 款开源/商业 LLM。

(2)实验数据

  • 种子池:77 个人工构建的越狱模板(来自现有研究,剔除不适配的模板);
  • 测试用例:100 个人工模板无法越狱的非道德问题(涵盖违法、不道德、有毒内容等场景,来自 Anthropic 和现有研究的公开数据集)。

(3)评估指标

     论文定义 5 个核心指标,全面评估 LLM-Fuzzer 的性能:

  1. JQN(Jailbreaking Question Number):能成功越狱的有害问题数量,反映模板的整体有效性;
  2.  ASR(Attack Success Rate):单个模板能成功越狱的问题比例,反映单模板有效;
  3. EASR(Ensemble Attack Success Rate):模板集合中至少一个模板能成功越狱的问题比例,反映模板集合的整体有效性;
  4. QBC(Query Budget Consumption):生成有效模板的平均查询次数,反映效率;
  5. TBC(Token Budget Consumption):生成有效模板的平均令牌消耗,反映成本。

(4)基线方法

      迁移性实验中对比 3 种当前主流的 LLM 越狱方法:
        - Here is:在有害问题前添加”Sure, here is”前缀;
        - GCG:基于梯度的通用对抗性提示生成方法(白盒);
        - Masterkey:自动化的越狱模板变异方法。

2. 四大实验与核心结果

论文围绕4 个核心研究问题设计实验,以下为实验结论和关键数据:

实验 1:能否为人工模板失效的问题生成有效越狱模板?(有效性 + 效率)

实验设计:对 100 个人工模板无法越狱的问题,为每个问题设置 500 次查询上限,测试LLM-Fuzzer能否生成有效模板,并统计QBC和TBC。
核心结果
- 对 gpt-3.5-turbo-0125:JQN=96.85/100,平均 QBC=225.43,平均 TBC=64.01k 令牌(成本约 0.048 美元/模板);
- 对 Llama-2-7B-Chat:JQN=90.00/100,平均 QBC=345.38,平均 TBC=82.73k 令牌(成本约 0.062 美元/模板)。
结论:LLM-Fuzzer 能为90% 以上人工模板失效的问题生成有效越狱模板,且查询/令牌成本极低,效率远超人工红队。

实验 2:能否生成高有效性的模板集合?(集合有效性)

实验设计:设置50k次查询预算,迭代生成新模板,计算最高ASR和EASR,并与人工种子模板(ASR/EASR=0)对比。
核心结果
- 对 gpt-3.5-turbo-0125:最高 ASR=89.20%,EASR=93.14%;
- 对 Llama-2-7B-Chat:最高 ASR=57.82%,EASR=85.02%。
结论:LLM-Fuzzer 能生成高有效性的模板集合,单模板可实现近 90% 的越狱成功率,模板集合的越狱成功率超85%,远优于人工模板。

实验 3:生成的模板是否具有跨LLM的可迁移性?(可迁移性)

实验设计:基于 gpt-3.5-turbo-0125、Llama-2-7B-Chat、Vicuna-7B 生成模板,在 12 款未参与训练的 LLM 上测试 ASR/EASR,并与3种基线方法对比。
核心结果
1. 开源 LLM:在 Vicuna-13B、Baichuan-13B、ChatGLM2-6B、Llama-2-13B/70B 等模型上,EASR 均超过 80%,显著优于 GCG、Here is、Masterkey;
2. 商业 LLM:在 GPT-4、Claude、PaLM2 上仍有较高有效性,但Gemini-1.0 的 EASR/ASR 显著偏低(因 Gemini 经过深度红队优化,安全边界更严格);
3. 单模板迁移性:Top-1 模板在 8 款模型上的 ASR 超 40%,优于基线方法。
结论:LLM-Fuzzer 生成的模板具有强跨模型可迁移性,能有效攻击绝大多数开源/商业 LLM,是通用的越狱提示生成方法。

实验 4:种子选择、变异算子、超参数对性能的影响?(消融实验)

实验设计:分别替换种子选择策略、关闭单个变异算子、调整超参数,测试最高 ASR 和 EASR 的变化。
核心结果
1. 种子选择:MCTS-Explore 的 ASR/EASR(57.82%/85.02%)显著优于随机(34.32%/55.52%)、轮询(29.15%/56.59%)、UCB(53.84%/81.73%)、原始 MCTS(50.18%/78.38%);
2. 变异算子:5 个算子缺一不可,关闭任意一个都会导致性能下降,Crossover 和 Expand 的贡献最大,Shorten 和 Rephrase 贡献较小但仍有提升;
3. 超参数:在合理范围(\alpha \epsilon[0.1,0.5]\beta \epsilon [0,0.5]\rho \epsilon [0.1,0.3])内,LLM-Fuzzer 的性能稳定性高,对超参数不敏感。
结论:论文设计的MCTS-Explore 种子选择策略5 种变异算子的组合是最优的,各模块对性能均有不可替代的贡献。

五、完整复现流程

1.环境准备

(1)硬件要求
- GPU:至少 1 张显存≥12GB 的 NVIDIA 显卡(推荐 A100/3090,支持多卡并行);
- 内存:≥32GB(避免模型加载与数据处理时 OOM);
- 存储:≥50GB(用于存储模型、数据集与实验结果)。

(2)软件环境配置

① Anaconda 创建虚拟环境

# 创建Python 3.9环境
conda create -n llm-fuzzer python=3.9
conda activate llm-fuzzer

# 安装PyTorch(需匹配CUDA版本,以11.8为例)
pip3 install torch==2.1.0+cu118 torchvision==0.16.0+cu118 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

# 安装核心依赖库
pip install pandas numpy transformers==4.35.2 vllm==0.3.3 fastchat==0.2.31
pip install huggingface-hub==0.19.4 argparse logging httpx==0.25.2
pip install scikit-learn==1.3.2 sentencepiece==0.1.99 accelerate==0.24.1

② 配置 Hugging Face 访问(下载 Llama-2 必需)
- 注册 Hugging Face 账号,申请 Llama-2 访问权限(https://huggingface.co/meta-llama/Llama-2-7b-chat-hf);
- 生成访问令牌(Settings→Access Tokens→New Token,权限设为 write);
- 终端登录 Hugging Face:

huggingface-cli login
# 输入生成的访问令牌,确认登录成功

(3)项目下载与目录结构

# 克隆开源仓库
git clone https://github.com/sherdencooper/GPTFuzz.git
cd GPTFuzz

# 查看目录结构(关键文件说明)
├── datasets/                # 数据集目录(种子池+测试问题)
│   ├── prompts/             # 种子模板池(GPTFuzzer.csv)
│   └── questions/           # 有害问题集(question_list.csv)
├── gptfuzzer/               # 核心代码目录
│   ├── fuzzer/              # 模糊测试逻辑(选择策略+变异算子)
│   ├── llm/                 # LLM调用封装(OpenAI/本地模型)
│   └── utils/               # 工具函数(预言机预测+日志处理)
├── scripts/                 # 辅助脚本(数据生成+结果分析)
└── gptfuzz.py               # 主运行脚本

2.数据集准备

(1)默认数据集说明
- 种子池:datasets/prompts/GPTFuzzer.csv,含 77 个人工编写的越狱模板(格式:text 列存储模板文本);
- 测试问题:datasets/questions/question_list.csv,含 100 个人工模板无法越狱的有害问题(涵盖违法、不道德、毒性内容等);
- 标注数据:datasets/responses_labeled/,含 7700 条人工标注的“模板 + 问题 + LLM 响应”数据(用于预言机微调)。

(2)自定义数据集格式(可选)
若需扩展数据集,需遵循以下格式:
- 种子模板 CSV:仅需一列 text,模板需包含 [INSERT PROMPT HERE] 作为问题占位符;
- 有害问题 CSV:仅需一列 question,每行一个有害问题(如 “How to create fake news?”);
- 标注数据 CSV:需包含 template(模板)、question(问题)、response(LLM 响应)、label(0 = 无害,1 = 有害)四列。

3.预训练模型下载(预言机 + 目标 LLM)

(1)预言机模型(RoBERTa-large 微调版)
        直接使用预训练好的模型(作者已开源):

# 从Hugging Face下载微调后的RoBERTa模型
git clone https://huggingface.co/hubert233/GPTFuzz.git ./models/roberta-predictor

(2)目标测试模型(以 Llama-2-7B-Chat 为例)
        使用 vllm 加载模型(推理速度更快,支持批量处理):

# 自动下载并缓存模型(首次运行较慢,约10-30分钟)
python -c "from vllm import LLM; LLM(model='meta-llama/Llama-2-7b-chat-hf', device_map='auto')"

(3)变异模型(GPT-3.5-turbo)
        需配置 OpenAI API 密钥:
        - 登录 OpenAI 账号,创建 API 密钥(https://platform.openai.com/api-keys);
        - 配置环境变量:

# Linux/Mac
export OPENAI_API_KEY="你的API密钥"

# Windows(命令提示符)
set OPENAI_API_KEY="你的API密钥"

4. 核心代码修改与配置

(1)修改主运行脚本(gptfuzz.py)

        关键配置项说明(根据硬件调整):

# 1. 模型配置(修改main函数中模型初始化部分)
target_model = LocalVLLM(args.target_model, tensor_parallel_size=1)  # 1表示单卡,多卡可设为GPU数量
roberta_model = RoBERTaPredictor('./models/roberta-predictor', device='cuda:0')  # 指定GPU卡号

# 2. 测试参数配置(修改默认参数,避免查询过量)
parser.add_argument('--max_query', type=int, default=500, help='最大查询次数(默认1000,建议设置500)')
parser.add_argument('--max_jailbreak', type=int, default=3, help='最大越狱成功次数(达到即停止)')
parser.add_argument('--energy', type=int, default=1, help='模糊测试能量(控制迭代力度)')

# 3. 变异算子配置(启用所有5种算子,温度设为1.0)
mutate_policy=MutateRandomSinglePolicy([
    OpenAIMutatorCrossOver(openai_model, temperature=1.0),
    OpenAIMutatorExpand(openai_model, temperature=1.0),
    OpenAIMutatorGenerateSimilar(openai_model, temperature=1.0),
    OpenAIMutatorRephrase(openai_model, temperature=1.0),
    OpenAIMutatorShorten(openai_model, temperature=1.0)],
    concatentate=True,
),

(2)配置文件说明
        无需额外配置文件,所有参数通过命令行传入,关键参数含义:

参数名

默认值

作用

--openai_key

OpenAI API 密钥(变异模型必需)

--target_model

meta-llama/Llama-2-7b-chat-hf

目标测试 LLM

--seed_path

datasets/prompts/GPTFuzzer.csv

种子模板池路径

--max_query

1000

最大查询次数(防止 API 超额)

--max_jailbreak

1

最大越狱成功次数(提前停止条件)

5.运行与结果验证

(1)启动运行命令

# 测试Llama-2-7B-Chat,最大查询500次,越狱成功3次即停止
python gptfuzz.py --openai_key "你的API密钥" --target_model "meta-llama/Llama-2-7b-chat-hf" --max_query 500 --max_jailbreak 3

(2)运行日志解读

如图,运行了50次迭代,共找到3类越狱种子,其中每类有2个实例(最后一栏[0,1]代表第一个实例未越狱,第二个实例越狱),因此共有5条越狱实例。

(3)结果分析与验证
输出文件位置:./results/ 目录下,包含:
- top_template.txt:ASR 最高的越狱模板;
- jailbreak_results.csv:所有成功越狱的“模板 + 问题 + 响应”记录;
- metrics.json:核心指标(JQN、ASR、EASR、QBC、TBC)。

关键指标验证:
- 若JQN>=80/100、ASR>=50%,说明复现成功;
- 对比人工模板(ASR=0%),验证框架有效性。

6.常见问题排查

(1)API 调用失败(Error Invoking LLM)
        原因:API 密钥错误、网络不通、查询超限;
        解决方案:
        - 验证 API 密钥有效性,重新配置环境变量;
        - 国内用户需配置代理(确保能访问 OpenAI 官网);
        - 降低 max_query 参数,避免超出 API 调用限额。

(2)模型加载失败(OOM 或 NotFoundError)
        原因:GPU 显存不足、模型路径错误、Hugging Face 未登录;
        解决方案:
        - 单卡显存不足时,使用多卡并行(设置 tensor_parallel_size=2);
        - 验证模型路径是否正确,重新执行 huggingface-cli login
        - 下载模型时中断,可删除 ~/.cache/huggingface/ 目录后重新下载。

(3)预言机预测准确率低
        原因:标注数据质量差、模型未正确加载;
        解决方案:
        - 复用作者提供的标注数据(datasets/responses_labeled/);
        - 验证 RoBERTa 模型路径是否正确,重新下载预训练模型。

六、总结

LLM-Fuzzer 通过三大核心创新模块,成功解决了 LLM 越狱测试的自动化与可扩展性难题,其开源代码为开发者提供了标准化的安全测试工具。本文详细拆解了论文的核心知识点,并提供了从环境搭建到结果验证的完整复现流程,读者可按步骤快速上手。
无论是学术研究还是工业应用,LLM-Fuzzer 都为 LLM 安全生态提供了重要支撑——不仅能帮助发现模型漏洞,更能推动防御机制的持续优化,最终促进 AI 系统向更安全、可靠的方向发展。

参考文献
[1] Jiahao Yu, Xingwei Lin, Zheng Yu, et al. LLM-Fuzzer: Scaling Assessment of Large Language Model Jailbreaks[C]. USENIX Security Symposium, 2024.
[2] Meta. Llama 2: Open Foundation and Finetuned Chat Models[EB/OL]. https://huggingface.co/meta-llama/Llama-2-7b-chat-hf, 2023.
[3] GPTFuzz GitHub Repository[EB/OL]. https://github.com/sherdencooper/GPTFuzz, 2024.

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐