amazon-science/TurboFuzzLLM

GitHub: amazon-science/TurboFuzzLLM

一款基于强化学习的黑盒模糊测试工具,用于自动化生成对抗性提示以发现并提升大语言模型的安全性。

Stars: 24 | Forks: 2

# TurboFuzzLLM **Turbocharging Mutation-based Fuzzing for Effectively Jailbreaking LLMs in Practice** [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![GitHub](https://img.shields.io/badge/GitHub-Repo-black?logo=github)](https://github.com/amazon-science/TurboFuzzLLM) 一个用于大型语言模型(LLM)自动红队测试的先进工具,能够生成有效的对抗性提示模板,以发现漏洞并提升AI安全性。 ### ⚠️ 负责任使用 本工具旨在通过系统性漏洞测试来提升AI安全性。它应被负责任地用于防御目的,并为LLM开发更好的安全保护措施。 我们的主要目标是发现并解决其漏洞,以推动更健壮、更安全的AI系统的发展。我们相信,这项研究最终将通过推动更好的安全措施和对齐技术的发展,使AI社区受益。 ## 📖 目录 - [🚀 快速开始](#-getting-started) - [🎯 主要特性](#-key-features) - [🔧 方法概述](#-method-overview) - [🔄 架构与数据流](#-architecture-and-data-flow) - [📊 结果](#-results) - [🛡️ 应用场景](#️-applications) - [⚙️ 配置](#️-configuration) - [🤖 支持的模型](#-supported-models) - [🧑‍💻 开发](#-development) - [📁 代码库结构](#-codebase-structure) - [📂 理解输出](#-understanding-output) - [🔧 故障排除](#-troubleshooting) - [👥 团队介绍](#-meet-the-team) - [Security](CONTRIBUTING.md#security-issue-notifications) - [License](#license) - [Citation](#citation) ## 🚀 快速开始 ### 先决条件 - Python 3.8+ 和 `pip` - 提供商访问权限:用于 `gpt-*`/`o1-*` 的 OpenAI API 密钥,或用于 Bedrock/SageMaker 的 AWS 凭证(通过 `aws configure` 配置) - 可选的本地模型:与 Hugging Face 兼容的检查点(例如 Gemma/Zephyr),用于离线的 Judge/Target 使用 ### 安装 ``` git clone https://github.com/amazon-science/TurboFuzzLLM.git cd TurboFuzzLLM python -m venv .venv && source .venv/bin/activate # optional but recommended pip install --upgrade pip pip install -e . ``` ### 快速启动 1. 下载种子模板: ``` python3 scripts/get_templates_gptfuzzer.py ``` 2. 运行交互式攻击: ``` python3 src/__main__.py answer --target-model-id gpt-4o --api-key YOUR_OPENAI_KEY ``` 3. 在 AWS Bedrock 上批量攻击 HarmBench: ``` turbofuzzllm attack --target-model-id us.anthropic.claude-3-5-sonnet-20241022-v2:0 --max-queries 1000 ``` 结果将出现在 `output//*/` 目录下。 ## 🎯 主要特性 - **高成功率**:在 GPT-4o、GPT-4 Turbo 及其他主流 LLM 上实现 >98% 的攻击成功率(ASR) - **高效**:相比以往方法,查询次数减少 3 倍,成功模板数量提升 2 倍 - **通用性强**:在未见问题上实现 >90% 的 ASR - **实用**:提供易于使用的 CLI,包含统计信息、搜索可视化与日志功能 - **防御性应用**:生成的数据可提升模型安全性(经过对抗训练后安全性提升 74%) ## 🔧 方法概述 TurboFuzzLLM 执行黑盒基于突变的模糊测试,以迭代生成新的对抗性红队提示模板。其关键创新包括: 1. **扩展的突变空间**:新增拒绝抑制等突变操作 2. **强化学习**:基于反馈的优先搜索 3. **智能启发式**:使用更少 LLM 查询实现高效探索 4. **模板化方法**:模板可与任何有害问题结合,实现可扩展的攻击 ## 🔄 架构与数据流 ### 高级架构 TurboFuzzLLM 执行黑盒基于突变的模糊测试,为 LLM 生成对抗性提示模板以实施越狱攻击。它使用强化学习来优先选择有效的突变。 ### 关键组件 1. **Fuzzer 核心** (`fuzzer/core.py`): - `TurboFuzzLLMFuzzer`:主协调器类 - 管理问题、模板、突变、评估与统计信息 2. **模型** (`llm/`): - `TargetModel`:被攻击的 LLM(例如 GPT-4、Claude) - `MutatorModel`:用于生成突变的 LLM(例如对模板进行释义) - `JudgeModel`:判断响应是否“被越狱”(即是否易受攻击) 3. **突变系统** (`fuzzer/mutators.py`, `fuzzer/mutator_selection.py`): - 多种突变操作符:ExpandBefore、FewShots、Rephrase、Crossover 等 - 选择策略:QLearning、UCB、Random、RoundRobin、MCTS、EXP3 4. **模板系统** (`fuzzer/template.py`): - `Template` 类:表示对抗性提示模板 - 跟踪 ASR(攻击成功率)、越狱次数、父子关系 5. **模板选择** (`fuzzer/template_selection.py`): - 基于强化学习的模板选择策略 ### 数据流 1. **初始化**:加载初始模板、问题并配置模型 2. **预热阶段**:在问题子集上评估初始模板 3. **突变循环**: - 使用选择策略(如 QLearning)选择模板 - 使用突变策略选择突变 - 应用突变生成新模板 - 在剩余问题上评估新模板 - 根据结果更新选择/突变策略 - 重复直至满足停止条件(查询次数限制或所有问题被越狱) 4. **评估**:对每个模板-问题对: - 合成提示(将模板中的占位符替换为问题) - 查询目标模型 - 判断响应是否存在漏洞 - 跟踪统计信息与越狱情况 5. **输出**:生成 CSV 文件、日志、统计信息以及模板演化树的可视化 ## 📊 结果 | 指标 | 性能 | |------|------| | 在 GPT-4o/GPT-4 Turbo 上的 ASR | >98% | | 在未见问题上的 ASR | >90% | | 查询效率 | 查询次数减少 3 倍 | | 模板成功率 | 提升 2 倍 | | 模型安全性提升 | 对抗训练后安全性提升 74% | ## 🛡️ 应用场景 1. **漏洞识别**:发现 LLM 中的基于提示的攻击向量 2. **对策开发**: - 改进内置的 LLM 安全防护 - 创建外部护栏机制 3. **对抗训练**:生成高质量的(攻击提示、有害响应)对,用于安全微调 ## ⚙️ 配置 ### 运行模式 TurboFuzzLLM 支持 4 种运行模式: | 模式 | 描述 | 使用场景 | |------|------|----------| | `answer` | 交互式对单个问题进行红队测试 | 快速测试 | | `attack` | 高效地对多个问题进行数据集攻击 | 批量漏洞测试 | | `legacy` | 运行原始的 GPTFuzzer 以学习有效模板 | 基线对比 | | `evaluate` | 在数据集上测试学习到的模板 | 模板有效性评估 | ### 命令行接口 获取任意模式的帮助信息: ``` python3 src/__main__.py --help ``` ### 关键参数 - **模型**: - `--target-model-id`:要攻击的目标 LLM(例如 Bedrock 上的 `us.anthropic.claude-3-5-sonnet-20241022-v2:0`,OpenAI 上的 `gpt-4o`) - `--mutator-model-id`:用于突变的 LLM(默认:`gpt-4o`) - `--judge-model-id`:用于判断成功与否的 LLM(默认:`gpt-4o`) - **查询与模板限制**: - `--max-queries`:最大 API 调用次数(默认因模式而异,例如 answer 模式为 100,attack/legacy 模式为 4000) - `--max-templates`:模板数量限制(默认:answer 模式为 20,其他模式为 -1) - **选择策略**: - `--template-selector`:模板选择策略(ql、ucb、mcts、exp3、rand、rr;默认:ql) - `--mutation-selector`:突变选择策略(ql、rand、rr;默认:ql) - **文件与数据集**: - `--templates-path`:初始模板 CSV 文件路径 - `--questions-path`:问题 CSV 文件路径(例如 HarmBench 数据集) - **其他**: - `--seed`:随机种子,用于可复现性(默认:0) - `--num-threads`:并行评估的线程数(默认:1) - `--api-key`:非 Bedrock 模型所需的 API 密钥 ### 使用示例 + 在运行以下命令前,请先下载种子有害问题集或自行构建: ``` python3 scripts/get_questions_harmbench_text_standard.py \ --output configuration/datasets/questions/harmbench/harmbench_behaviors_text_standard_all.csv ``` #### 交互模式 测试单个问题: ``` python3 src/__main__.py answer --target-model-id gpt-4o --api-key YOUR_OPENAI_KEY ``` #### 批量攻击模式 使用默认设置攻击多个问题: ``` turbofuzzllm attack --target-model-id us.anthropic.claude-3-5-sonnet-20241022-v2:0 --max-queries 1000 ``` #### 使用本地 HF 模型 ``` turbofuzzllm attack \ --target-model-id HuggingFaceH4/zephyr-7b-beta \ --mutator-model-id HuggingFaceH4/zephyr-7b-beta \ --judge-model-id cais/HarmBench-Llama-2-13b-cls \ --judge-tokenizer cais/HarmBench-Llama-2-13b-cls \ --max-queries 100 ``` + 注意:请安装 `accelerate` 以启用 `device_map="auto"` 设备映射(`pip install accelerate`)。未安装时,本地 HF 模型将回退到 CPU。 + 请注意使用以下命令运行较小的 HF 模型。注:这些是极简/演示友好型模型;它们不会产生有意义的越狱结果,仅用于管道测试。 ``` turbofuzzllm attack \ --target-model-id hf-internal-testing/tiny-random-GPT2LMHeadModel \ --mutator-model-id hf-internal-testing/tiny-random-GPT2LMHeadModel \ --judge-model-id cardiffnlp/twitter-roberta-base-offensive \ --judge-tokenizer cardiffnlp/twitter-roberta-base-offensive \ --max-queries 20 ``` #### 自定义种子问题 使用您自己的问题集,例如: ``` turbofuzzllm attack \ --target-model-id HuggingFaceH4/zephyr-7b-beta \ --mutator-model-id HuggingFaceH4/zephyr-7b-beta \ --judge-model-id cais/HarmBench-Llama-2-13b-cls \ --judge-tokenizer cais/HarmBench-Llama-2-13b-cls \ --questions-path /path/to/your/questions.csv \ --max-queries 10 ``` #### 评估模板 在数据集上测试现有模板: ``` turbofuzzllm evaluate --templates-path configuration/datasets/prompts/prompt_list.csv --questions-path configuration/datasets/questions/jailbreakbench/harmful-behaviors.csv ``` #### 遗留模式 运行 GPTFuzzer 基线: ``` turbofuzzllm legacy --template-selector mcts --mutation-selector rand --max-queries 4000 ``` ### 常见问题 - **需要什么访问权限?** - OpenAI 的 API 密钥(`--api-key`)以及 AWS 凭证用于 Bedrock/SageMaker。本地 HF 模型可用于部分 Judge/Target。 - **何时启用网络部署?** - 仅在传递 `--allow-endpoint-deploy` 时启用;否则将跳过 SageMaker/Bedrock 设置以确保安全。 - **需要多少查询?** - 默认值:answer 模式 100 次,attack/legacy 模式 4000 次。如需更深入搜索可增加次数,但请遵守速率限制。 - **如何选择选择器?** - `ql` 为默认选项;可尝试 `ucb`、`mcts` 或 `exp3` 以进行更多探索。 - **能否使用自定义数据?** - 可以——使用 `--questions-path` 和 `--templates-path` 指定自定义 CSV 文件。 ## 🤖 支持的模型 - **目标模型与突变模型**:通过 `--api-key` 使用 OpenAI 聊天模型(`gpt-*`、`o1-*`);通过 AWS 凭证使用 AWS Bedrock 基础模型(例如 Claude、Mistral);通过 SageMaker JumpStart/Hugging Face 终端节点使用托管推理(需要 `--allow-endpoint-deploy`);用于离线测试的本地 Hugging Face 模型(Gemma/Zephyr 风格 ID)。 - **Judge 模型**:GPTJudge(OpenAI)、BedrockJudge、RoBERTaJudge(HF 序列分类器)、HarmBenchJudge(HF 因果语言模型)以及 SageMaker 托管的 HarmBench/Llama Guard Judge。根据需要配置 `--judge-model-id` 和 `--judge-tokenizer`。 - **护栏与验证**:通过 `--guardrail-id`/`--guardrail-version` 支持 Bedrock 护栏。默认禁止远程端点验证/部署;传递 `--allow-endpoint-deploy` 可显式启用 SageMaker 或 Bedrock 设置。 ## 🧑‍💻 开发 - 开发安装:`pip install -e .` - 网络/成本安全:默认情况下,CLI 会避免创建 SageMaker 终端节点或进行 Bedrock 调用;仅在准备允许这些操作时使用 `--allow-endpoint-deploy`。 ### 测试 - 快速检查:`pytest test/test_cli_and_utils.py` - 更全面的测试(可能需要凭证/模拟):`pytest` - 覆盖率:`pytest --cov=turbofuzzllm` ## 📁 代码库结构 ``` TurboFuzzLLM/ ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── pyproject.toml ├── README.md ├── requirements.txt ├── setup.py ├── configuration/ │ ├── datasets/ │ │ ├── prompts/ │ │ │ ├── no_template.csv │ │ │ └── README.md │ │ └── questions/ │ │ ├── harmbench/ │ │ │ └── README.md │ │ └── jailbreakbench/ │ │ └── README.md ├── scripts/ │ ├── fine_tune_data.py │ ├── generate_stats.sh │ ├── get_questions_harmbench_text_standard.py │ ├── get_questions_jailbreakbench.py │ ├── get_templates_gptfuzzer.py │ ├── plots.py │ ├── stats_to_csv.py ├── src/ │ └── turbofuzzllm/ │ ├── __init__.py │ ├── __main__.py │ ├── cli.py │ ├── py.typed │ ├── fuzzer/ │ │ ├── __init__.py │ │ ├── core.py │ │ ├── mutator_selection.py │ │ ├── mutators.py │ │ ├── question.py │ │ ├── template.py │ │ ├── template_selection.py │ └── llm/ │ │ ├── __init__.py │ │ ├── bedrock_judge.py │ │ ├── bedrock_model.py │ │ ├── gpt_judge.py │ │ ├── harmbench_judge.py │ │ ├── judge_model.py │ │ ├── local_model.py │ │ ├── model_utils.py │ │ ├── model.py │ │ ├── mutator_model.py │ │ ├── openai_model.py │ │ ├── roberta_judge.py │ │ ├── sagemaker_huggingface_model.py │ │ ├── sagemaker_jumpstart_model.py │ │ ├── sm_harmbench_judge.py │ │ ├── sm_llama_guard_judge.py │ │ ├── target_model.py │ └── utils/ │ ├── __init__.py │ ├── cli_utils.py │ ├── draw.py │ ├── logging.py │ ├── priority_queue.py │ ├── prompt.py │ ├── statistics.py │ ├── timer.py └── test/ ├── conftest.py ├── test_cli.py ├── test_cli_and_utils.py ├── test_mutators.py ├── test_question.py ├── test_selectors.py ├── test_template.py ├── test_turbofuzzllm.py └── test_utils.py ``` ## 📂 理解输出 每次运行都会创建一个输出文件夹,其结构如下: ``` output//__/ ├── templates.csv # Summary of each template used ├── mutators.csv # Performance metrics for each mutator ├── queries.csv # Details of each LLM query ├── stats.txt # Key metrics summary ├── details.log # Detailed execution log └── template_tree.dot # Visualization of mutant search space ``` ### 输出文件说明 - **`templates.csv`**:包含所有生成的模板及其成功率 - **`mutators.csv`**:不同突变操作的性能分析 - **`queries.csv`**:完整的 LLM 交互记录 - **`stats.txt`**:高级指标,包括 ASR、查询次数和耗时 - **`details.log`**:用于调试的详细日志 - **`template_tree.dot`**:模板演化树的 Graphviz 可视化 ## 🔧 故障排除 ### 常见问题 **API 密钥错误:** - 确保 API 密钥已正确设置在环境变量中或通过 `--api-key` 参数传递 - 对于 Bedrock 模型,请使用 `aws configure` 配置 AWS CLI - 检查 API 密钥是否具有足够的权限/配额 **安装问题:** - **模块未找到错误**:请使用 `pip install -e .` 安装所有依赖项 - **Python 版本问题**:需要 Python 3.8+。请使用 `python --version` 检查 - **AWS/conda 问题**:如果 pip 安装失败,请尝试在 conda 环境中安装 - **protobuf/grpc 弃用警告**:使用 `pip install -U protobuf grpcio` 升级环境中的依赖项 - **本地 Hugging Face 模型**:安装 `accelerate` 以启用 `device_map="auto"` 设备映射(`pip install accelerate`)。未安装时,模型将回退到 CPU **运行时错误:** - **不支持的模型**:请检查目标模型 ID 是否受支持。使用 `--help` 查看示例 - **速率限制**:如果达到 API 速率限制,请尝试减少 `--num-threads` 或添加延迟 - **内存不足**:对于大型模板/问题,增加系统内存或减小批处理大小 **性能问题:** - **执行缓慢**:如果有多核 CPU,请增加 `--num-threads`(默认值为 1) - **API 调用过多**:通过输出文件监控查询次数。设置适当的 `--max-queries` 限制 **输出问题:** - **文件缺失**:检查输出目录的文件权限 - **结果为空**:验证模板和问题 CSV 文件格式是否正确 - **输出混乱**:检查日志文件以获取具体错误信息 ### 获取帮助 如果遇到未涵盖的问题: 1. 检查每个模式的 `--help` 输出 2. 查看本 README 中的示例命令 3. 在 GitHub 仓库中提交 issue 并附上错误日志 ## 👥 团队介绍 - Aman Goel*(联系:goelaman@amazon.com) - Xian Carrie Wu - Zhe Wang - Dmitriy Bespalov - Yanjun (Jane) Qi ## Security 有关更多信息,请参见 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。 ## License 本项目根据 Apache-2.0 许可证授权。 ## Citation 如果在研究中发现本工具有用,请考虑引用: ``` @inproceedings{goel2025turbofuzzllm, title={TurboFuzzLLM: Turbocharging Mutation-based Fuzzing for Effectively Jailbreaking Large Language Models in Practice}, author={Goel, Aman and Wu, Xian and Wang, Daisy Zhe and Bespalov, Dmitriy and Qi, Yanjun}, booktitle={Proceedings of the 2025 Conference of the Nations of the Americas Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 3: Industry Track)}, pages={523--534}, year={2025} } ```
标签:AI安全, AI对齐, AWS Bedrock, Chat Copilot, DLL 劫持, Fuzzing, LLM, OpenAI API, Python, SageMaker, Unmanaged PE, 一键部署, 二进制发布, 变异分析, 大语言模型, 安全测试, 密钥泄露防护, 对抗攻击, 对抗样本, 开源工具, 提示模板, 提示注入, 攻击性安全, 敏感信息检测, 无后门, 机器学习安全, 模型攻防, 漏洞缓解, 结构化查询, 自动化安全, 逆向工具, 集群管理