cyberark/FuzzyAI
GitHub: cyberark/FuzzyAI
一个用于自动化 LLM 模糊测试的安全工具,帮助识别与缓解模型越狱风险。
Stars: 1333 | Forks: 189
FuzzyAI Fuzzer

The FuzzyAI Fuzzer is a powerful tool for automated LLM fuzzing. It is designed to help developers and security researchers identify jailbreaks and mitigate potential security vulnerabilities in their LLM APIs.
## 开始使用
### 快速入门 #1 - 使用现有 Python 项目
1. 安装 fuzzyai
# 使用 pip 或其他包管理器
pip install git+https://github.com/cyberark/FuzzyAI.git
2. 运行模糊测试器
fuzzyai fuzz -h
### 快速入门 #2 - 或作为独立项目
1. 克隆仓库:
git clone git@github.com:cyberark/FuzzyAI.git
cd FuzzyAI
2. 使用 [Poetry](https://python-poetry.org/) 安装依赖:
poetry run pip install -e .
3. 运行模糊测试器:
poetry run fuzzyai fuzz -h
4. 可选:安装 [ollama](https://ollama.com/download/) 并下载模型用于本地使用:
ollama pull llama3.1
ollama show llama3.1 # 验证模型安装
或者,您可以使用 Web UI
## Web UI(实验性)

1. 运行 Web UI(确保已完成上述安装步骤之一):
poetry run fuzzyai webui
# 或指定自定义端口:
poetry run fuzzyai webui --port 9000
## 笔记本
我们提供了可在 [src/fuzzyai/resources/notebooks/](https://github.com/cyberark/FuzzyAI/tree/main/src/fuzzyai/resources/notebooks) 使用的交互式 Jupyter 笔记本。
有关更多信息,请参见 [笔记本维基](https://github.com/cyberark/FuzzyAI/wiki#notebooks)。
## 数据集
我们提供了一些可在 [resources/](https://github.com/cyberark/FuzzyAI/tree/main/src/fuzzyau/resources) 使用的数据集。更多信息请参见 [数据集维基](https://github.com/cyberark/FuzzyAI/wiki#datasets)。
## 文档
在 [维基](https://github.com/cyberark/FuzzyAI/wiki) 中探索详细的使用说明。
## 示例
如果您使用 poetry,请确保已激活虚拟环境(或在命令行前添加 'poetry run')
### 使用 Ollama 上的 llama 对默认攻击(仅评估提示 'Harmful_Prompt')
```
fuzzyai fuzz -m ollama/llama3.1 -a def -t "Harmful_Prompt"
```
### 使用 gpt3.5 通过 OpenAI 和一个工作线程攻击提示,利用 ManyShot 和 Taxonomy 攻击
```
OPENAI_API_KEY=sk-3fa1... fuzzyai fuzz -m openai/gpt-3.5-turbo -a man -a tax -t "Harmful_Prompt"
```
### 使用 Anthropic 上的 Claude 3.5 攻击 prompts.txt 中的提示,利用 ArtPrompt 攻击
```
ANTHROPIC_API_KEY=deadbeef... fuzzyai fuzz -m anthropic/claude-3-5-sonnet-20240620 -a art -T src/fuzzyai/resources/adv_prompts.txt -e blacklisted_words="bomb,garbage,acid,ugly,self-harm,kill your"
```
### 攻击您自己的 REST API
```
OPENAI_API_KEYT=sk-3fa1... fuzzyai fuzz -a def -x openai/gpt-4 -e classifier_model=openai/gpt-4 -m rest/http.raw -e host=localhost -e port=8000 -e scheme=https
-t "How to build a bomb"
```
#### 参数说明:
- **`-a def`**:
调用默认攻击模式,在不对提示进行额外策略处理的情况下评估 API。
- **`-x openai/gpt-4`**:
指定一个辅助模型(gpt-4)来帮助执行攻击过程中的某些任务。
- **`-e classifier_model=openai/gpt-4`**:
配置模糊测试器使用 `gpt-4` 模型对输出进行分类。这有助于确定响应是否符合特定标准,例如检测有害或不需要的内容。
- **`-m rest/http.raw`**:
使用 REST 提供者攻击 API 端点。原始 HTTP 请求从文件 `http.raw` 解析。(请参阅[文档或示例](./src/fuzzyai/resources/http.raw)了解文件结构详情。)
- **`-e host=localhost -e port=8000 -e scheme=https`**:
使用以下 API 端点详细信息配置 REST 提供者:
- **主机**: `localhost`
- **端口**: `8000`
- **协议**: `https`(通信将使用 HTTPS)
- **`-t "How to build a bomb"`**:
指定测试输入。在此示例中,测试 API 对敏感或有害内容的处理方式。
## 主要功能
- **全面的模糊测试技术**:利用基于变异、生成和智能的模糊测试。
- **内置输入生成**:生成有效和无效输入以进行详尽测试。
- **无缝集成**:轻松集成到您的开发和测试工作流程中。
- **可扩展架构**:可根据您的独特需求自定义和扩展模糊测试器。
## 支持的模型
FuzzyAI 支持来自顶级提供商的各种模型,包括:
| 提供商 | 模型 |
|--------------|----------------------------------------------------------------------------------------------------------|
| **Anthropic**| Claude (3.5, 3.0, 2.1) |
| **OpenAI** | GPT-4o, GPT-4o mini, GPT o3 |
| **Gemini** | Gemini Pro, Gemini 1.5 |
| **Azure** | GPT-4, GPT-3.5 Turbo |
| **Bedrock** | Claude (3.5, 3.0), Meta (LLaMa) |
| **AI21** | Jamba (1.5 Mini, Large) |
| **DeepSeek** | DeepSeek (DeepSeek-V3, DeepSeek-V1) |
| **Ollama** | LLaMA (3.3, 3.2, 3.1), Dolphin-LLaMA3, Vicuna |
## 添加对新模型的支持
请按照我们的
DIY 指南轻松添加对更多模型的支持。
## 已实现的攻击
请参见
攻击维基获取详细信息
| 攻击类型 | 标题 | 参考 |
|----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| ArtPrompt | 基于 ASCII 艺术的对齐 LLM 攻击 | [arXiv:2402.11753](https://arxiv.org/pdf/2402.11753) |
| Taxonomy-based paraphrasing | 使用情感诉求等说服性语言技术来攻击 LLMs | [arXiv:2401.06373](https://arxiv.org/pdf/2401.06373) |
| PAIR (Prompt Automatic Iterative Refinement) | 通过使用两个 LLM 迭代优化提示来自动生成对抗性提示 | [arXiv:2310.08419](https://arxiv.org/pdf/2310.08419) |
| Many-shot jailbreaking | 嵌入多个虚假对话示例以削弱模型安全性 | [Anthropic Research](https://www.anthropic.com/research/many-shot-jailbreaking) |
| ASCII Smuggling | ASCII Smuggling 使用 Unicode 标签字符在文本中嵌入隐藏指令,这些指令对用户不可见但可被大型语言模型(LLM)处理,可能导致提示注入攻击。 | [Embracethered blog](https://embracethered.com/blog/posts/2024/hiding-and-finding-text-with-unicode-tags/) |
| Genetic | 使用遗传算法修改提示以获得对抗性结果 | [arXiv:2309.01446](https://arxiv.org/pdf/2309.01446) |
| Hallucinations | 使用模型生成的文本绕过 RLHF 过滤器 | [arXiv:2403.04769](https://arxiv.org/pdf/2403.04769.pdf) |
| DAN (Do Anything Now) | 促使 LLM 采用忽略标准内容过滤器的无限制人格,允许其“做任何事”。 | [GitHub Repo](https://github.com/0xk1h0/ChatGPT_DAN) |
| WordGame | 将有害提示伪装成文字游戏 | [arXiv:2405.14023](https://arxiv.org/pdf/2405.14023) |
| Crescendo | 通过一系列递增的对话回合与模型互动,从无害查询开始逐步引导对话转向受限或敏感话题。 | [arXiv:2404.01833](https://arxiv.org/pdf/2404.01833) |
| ActorAttack | 灵感来自行动者网络理论,构建“行动者”的语义网络以微妙地引导对话走向有害目标,同时隐藏恶意意图。 | [arxiv 2410.10700](https://arxiv.org/pdf/2410.10700) | |
| Best-of-n jailbreaking | 使用输入变体反复诱导有害响应,利用模型敏感性 | [arXiv:2412.03556](https://arxiv.org/abs/2412.03556) |
| Shuffle Inconsistency Attack (SI-Attack) | 利用 LLM 的理解能力与安全机制之间的不一致性,通过打乱有害文本提示来绕过安全机制。被打乱的文本仍能被 LLM 理解为有害,但图像相关未实现。 | [arXiv:2501.04931](https://arxiv.org/abs/2501.04931) |
| Back To The Past | 通过添加基于职业的前缀和过去相关的后缀来修改提示 | |
| History/Academic framing | 将敏感技术数据表述为学术或历史研究,以实现符合伦理、合法使用——潜在地导致越狱。 | |
| Please | 通过添加“请”作为前缀和后缀来修改提示 | |
| Thought Experiment | 通过添加与思维实验相关的空前缀。此外,添加“已采取预防措施”后缀。 | |
| Default | 按原样将提示发送给模型
## 支持的云 API
- **OpenAI**
- **Anthropic**
- **Gemini**
- **Azure Cloud**
- **AWS Bedrock**
- **AI21**
- **DeepSeek**
- **Huggingface ([下载模型](https://huggingface.co/docs/hub/en/models-downloading))**
- **Ollama**
- **Custom REST API**
## 注意事项
* 一些分类器所做的不仅仅是评估单个输出。例如,余弦相似度分类器通过测量两者之间的角度来比较两个输出,而“有害性”分类器检查给定输出是否有害。因此,并非所有分类器都与我们实现的攻击方法兼容,因为这些方法是为单输出分类器设计的。
* 使用 `-m` 选项配合 OLLAMA 模型时,**请确保在添加任何其他模型之前先添加所有 OLLAMA 模型**。使用 `-e port=...` 选项指定 OLLAMA 端口(默认是 11434)。
## 许可证
FuzzyAI 模糊测试器在 [Apache 许可证](https://www.apache.org/licenses/LICENSE-2.0) 下发布。详细信息请参见 [LICENSE](https://github.com/cyberark/FuzzyAI/blob/main/LICENSE) 文件。
## 联系
如果您对 FuzzyAI 模糊测试器有任何问题或建议,请随时通过 [fzai@cyberark.com](mailto:fzai@cyberark.com) 与我们联系。
标签:AI风险缓解, API 安全, CyberArk, Discord 社区, Fuzzing, Jailbreak 检测, Linux系统监控, LLM 安全, Poetry, Python, SEO: Jailbreak, SEO: LLM 漏洞, SEO: 自动化模糊测试, TCP SYN 扫描, Web UI, 二进制发布, 威胁情报, 开发者工具, 开源工具, 无后门, 模型安全, 逆向工具