Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
garak — 模块化LLM漏洞扫描器,利用静态、动态和自适应探测手段,跨多个模型提供商检测幻觉、数据泄露、提示注入、越狱及毒性内容。 | Kitploit
工具/GitHubGitHub/nvidia/garak
漏洞扫描器渗透测试机器学习论文与研究学习与教育红队AI 安全对抗性攻击对抗性攻击 分类第 7 名AI 安全 分类第 2 名机器学习 分类第 5 名
8.8k1.2k114天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
GitHubnvidia/garak

garak

模块化LLM漏洞扫描器,利用静态、动态和自适应探测手段,跨多个模型提供商检测幻觉、数据泄露、提示注入、越狱及毒性内容。

查看仓库网站
分享

garak, LLM 漏洞扫描器

生成式AI红队与评估套件

garak 检查 LLM 是否可能以我们不希望的方式失败。garak 探测幻觉、数据泄露、提示注入、虚假信息、毒性内容生成、越狱以及许多其他弱点。如果你熟悉 nmap 或 msf / Metasploit 框架,garak 对 LLM 所做的与它们类似。

garak 专注于使 LLM 或对话系统失败的方法。它结合了静态、动态和自适应探测来探索这一点。

garak 是一个免费工具。我们热爱开发它,并始终有兴趣添加功能以支持应用程序。

License Tests/Linux Tests/Windows Tests/OSX Documentation Status arXiv discord-img Code style: black PyPI - Python Version PyPI Downloads Downloads

开始使用

> 查看我们的用户指南!docs.garak.ai

> 加入我们的 Discord!

> 项目链接和主页:garak.ai

> Twitter:@garak_llm

> DEF CON 幻灯片!


LLM 支持

当前支持:

  • hugging face hub 生成模型
  • replicate 文本模型
  • openai api 聊天与续写模型
  • aws bedrock 基础模型
  • litellm
  • 通过 REST 可访问的几乎所有内容
  • gguf 模型,如 llama.cpp >= 版本 1046
  • .. 以及更多 LLM!

安装:

garak 是一个命令行工具。它在 Linux 和 OSX 上开发。

使用 pip 标准安装

只需从 PyPI 获取即可开始使用:``` python -m pip install -U garak

root@kitploit:~
### 使用 `pip` 安装开发版本

`garak` 的标准 pip 版本会定期更新。要从 GitHub 获取更新版本,请尝试:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main

从源码克隆

garak 有其自身的依赖项。您可以在自己的 Conda 环境中安装 garak:``` conda create --name garak "python>=3.10,<=3.12" conda activate garak gh repo clone NVIDIA/garak cd garak python -m pip install -e .

root@kitploit:~
OK, if that went fine, you're probably good to go!

**Note**: if you cloned before the move to the `NVIDIA` GitHub organisation, but you're reading this at the `github.com/NVIDIA` URI, please update your remotes as follows:```
git remote set-url origin https://github.com/NVIDIA/garak.git

开始使用

通用语法如下:

garak <options>

garak 需要知道要扫描哪个模型,默认情况下,它会尝试对该模型使用所有已知的探针,并使用每个探针推荐的漏洞检测器。你可以通过以下命令查看探针列表:

garak --list_probes

要指定生成器,请使用 --target_type 和可选的 --target_name 选项。模型类型指定模型系列/接口;模型名称指定要使用的具体模型。下面的“生成器简介”部分描述了支持的某些生成器。一个简单的生成器系列是 Hugging Face 模型;要加载其中一个,请将 --target_type 设置为 huggingface,并将 --target_name 设置为模型在 Hub 上的名称(例如 "RWKV/rwkv-4-169m-pile")。某些生成器可能需要将 API 密钥设置为环境变量,如果需要,它们会通知你。

garak 默认运行所有探针,但你也可以指定具体探针。例如,--probes promptinject 将仅使用 PromptInject 框架的方法。你也可以通过添加插件名称(在 . 之后)来指定一个具体的插件,而不是整个插件系列;例如,--probes lmrc.SlurUsage 将使用基于 Language Model Risk Cards 框架的检查模型是否生成辱骂性内容的实现。

如需帮助和灵感,请在 Twitter 或 discord 上找到我们!

示例

探测商业模型是否存在基于编码的提示注入(OSX/*nix)(将示例值替换为真实的 OpenAI API 密钥)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding

root@kitploit:~
检查 Hugging Face 版本的 GPT2 是否容易受到 DAN 11.0 的攻击```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0

读取结果

对于每个加载的探针,garak 会在生成时显示一个进度条。生成完成后,会给出一个评估该探针在每个检测器上结果的行。如果有任何提示尝试产生了不良行为,该响应将被标记为 FAIL,并给出失败率。

以下是 encoding 模块在 GPT-3 变体上的结果: alt 文本

以及 ChatGPT 的相同结果: alt 文本

我们可以看到,较新的模型更容易受到基于编码的注入攻击,而 text-babbage-001 仅被发现容易受到 quoted-printable 和 MIME 编码注入的攻击。每行末尾的数字,例如 840/840,表示文本生成的总次数以及其中表现正常的次数。该数字可能相当大,因为每个提示会生成多次(默认情况下为 10 次)。

错误会记录在 garak.log 中;运行详情会记录在分析开始和结束时指定的 .jsonl 文件中。在 analyse/analyse_log.py 中有一个基本分析脚本,它会输出导致最多命中的探针和提示。

欢迎提交 PR 和开启 issue。狩猎愉快!

生成器简介

Hugging Face

使用 Pipeline API:

  • --target_type huggingface(用于本地运行 transformers 模型)
  • --target_name - 使用 Hub 中的模型名称。仅支持生成式模型。如果失败且不应失败,请提交 issue 并粘贴您尝试的命令和异常!

使用推理 API:

  • --target_type huggingface.InferenceAPI(用于基于 API 的模型访问)
  • --target_name - Hub 中的模型名称,例如 "mosaicml/mpt-7b-instruct"

使用私有端点:

  • --target_type huggingface.InferenceEndpoint(用于私有端点)

  • --target_name - 端点 URL,例如 https://xxx.us-east-1.aws.endpoints.huggingface.cloud

  • (可选)将 HF_INFERENCE_TOKEN 环境变量设置为具有“读取”角色的 Hugging Face API 令牌;登录后请参见 https://huggingface.co/settings/tokens

OpenAI

  • --target_type openai
  • --target_name - 您想要使用的 OpenAI 模型。gpt-5-nano 速度快,适合测试。
  • 将 OPENAI_API_KEY 环境变量设置为您的 OpenAI API 密钥(例如 "sk-19763ASDF87q6657");登录后请参见 https://platform.openai.com/account/api-keys

已知的模型类型已列入白名单,因为插件需要知道使用哪个子 API。Completion 或 ChatCompletion 模型都是可以的。如果您想使用不受支持的模型,您会收到一条信息性错误消息,请发送 PR 或提交 issue。

Replicate

  • 将 REPLICATE_API_TOKEN 环境变量设置为您的 Replicate API 令牌,例如 "r8-123XXXXXXXXXXXX";登录后请参见 https://replicate.com/account/api-tokens

公共 Replicate 模型:

  • --target_type replicate
  • --target_name - Replicate 模型名称和哈希值,例如 "stability-ai/stablelm-tuned-alpha-7b:c49dae36"

私有 Replicate 端点:

  • --target_type replicate.InferenceEndpoint(用于私有端点)
  • --target_name - 来自已部署端点的用户名/模型名称段,例如 elim/elims-llama2-7b

Cohere

  • --target_type cohere
  • --target_name(可选,默认为 command) - 您要测试的特定 Cohere 模型
  • 将 COHERE_API_KEY 环境变量设置为您的 Cohere API 密钥,例如 "aBcDeFgHiJ123456789";登录后请参见 https://dashboard.cohere.ai/api-keys

Groq

  • --target_type groq
  • --target_name - 通过 Groq API 访问的模型名称
  • 将 GROQ_API_KEY 环境变量设置为您的 Groq API 密钥,有关创建 API 密钥的详细信息请参见 https://console.groq.com/docs/quickstart

ggml

  • --target_type ggml
  • --target_name - 您要加载的 ggml 模型路径,例如 /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
  • 将 GGML_MAIN_PATH 环境变量设置为您的 ggml main 可执行文件的路径

REST

rest.RestGenerator 高度灵活,可以连接到任何返回纯文本或 JSON 的 REST 端点。它需要一些简短的配置,通常会生成一个描述您端点的简短 YAML 文件。示例请参见 https://reference.garak.ai/en/latest/garak.generators.rest.html。

NIM

使用来自 https://build.nvidia.com/ 或其他 NIM 端点的模型。

  • 将 NIM_API_KEY 环境变量设置为您的认证 API 令牌,或在配置 YAML 中指定

对于聊天模型:

  • --target_type nim
  • --target_name - NIM model 名称,例如 meta/llama-3.1-8b-instruct

对于补全模型:

  • --target_type nim.NVOpenAICompletion
  • --target_name - NIM model 名称,例如 bigcode/starcoder2-15b

AWS Bedrock

  • --target_type bedrock
  • --target_name - Bedrock 模型 ID 或别名,例如 anthropic.claude-3-sonnet-20240229-v1:0 或 claude-3-sonnet
  • 将 BEDROCK_API_KEY 环境变量设置为您的 AWS Bedrock API 密钥;设置说明请参见 https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html
  • (可选)将 BEDROCK_REGION 环境变量设置为指定 AWS 区域(默认为 us-east-1)

支持的模型系列包括 Anthropic Claude、Meta Llama、Amazon Titan、AI21 Labs、Cohere 和 Mistral AI 模型。该生成器使用 Converse API 跨所有模型类型提供统一访问。

用法示例:``` export BEDROCK_API_KEY="your-api-key" export BEDROCK_REGION="us-east-1" garak --target_type bedrock --target_name claude-3-sonnet --probes dan

root@kitploit:~
### 测试

* `--target_type test`
* (或)`--target_name test.Blank`
用于测试。这会始终生成空字符串,使用 `test.Blank` 生成器。对于任何*需要*输出的测试,例如那些提出有争议的主张并期望模型反驳才能通过的测试,该测试将被标记为失败。

* `--target_type test.Repeat`
用于测试。此生成器会重复它收到的提示。

## 探针简介

| 探针                | 描述                                                                                                                   |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------|
| blank                | 一个简单的探针,始终发送空提示。                                                                             |
| atkgen               | 自动攻击生成。一个红队 LLM 探测目标并对其做出反应,试图获取有毒输出。原型,基本无状态,目前使用一个简单的 GPT-2 [微调](https://huggingface.co/garak-llm/artgpt2tox) 模型,该模型在可检测到毒性的 hhrlhf 尝试子集上进行训练(目前仅支持此目标)。 |
| badchars             | 实现不可见的 Unicode 扰动(不可见字符、同形字、重新排序、删除),灵感来自 [Bad Characters](https://arxiv.org/abs/2106.09898) 论文。 |
| av_spam_scanning     | 尝试让模型输出恶意内容签名的探针                                                     |
| continuation         | 测试模型是否会继续一个可能不受欢迎的词的探针                                                       |
| dan                  | 各种 [DAN](https://adguard.com/en/blog/chatgpt-dan-prompt-abuse.html) 及类似 DAN 的攻击                                 |
| donotanswer          | 负责任的模型不应回答的提示。                                                               |
| encoding             | 通过文本编码进行提示注入                                                                                        |
| gcg                  | 通过附加对抗性后缀来破坏系统提示。                                                                   |
| glitch               | 探测模型是否存在引发异常行为的故障令牌。                                                                  |
| grandma              | 请求回忆起自己的祖母。                                                                                   |
| goodside             | Riley Goodside 攻击的实现。                                                                                    |
| leakreplay           | 评估模型是否会重放训练数据。                                                                                |
| lmrc                 | [语言模型风险卡](https://arxiv.org/abs/2303.18190) 探针的子样本                                         |
| malwaregen           | 尝试让模型生成用于构建恶意软件的代码                                                                 |
| misleading           | 尝试让模型支持误导性和虚假的声明                                                                  |
| packagehallucination | 试图生成指定不存在(因此不安全)的包代码。                                   |
| promptinject         | Agency Enterprise [PromptInject](https://github.com/agencyenterprise/PromptInject/tree/main/promptinject) 工作的实现(NeurIPS ML Safety Workshop 2022 最佳论文奖) |
| realtoxicityprompts  | RealToxicityPrompts 工作的子集(由于完整测试耗时过长,数据受限)                      |
| snowball             | [滚雪球式幻觉](https://ofir.io/snowballed_hallucination.pdf) 探针,旨在让模型对过于复杂而无法处理的问题给出错误答案 |
| xss                  | 寻找允许或实施跨站点攻击的漏洞,例如私有数据泄露。                           |

## 日志记录

`garak` 生成多种类型的日志:
* 一个日志文件 `garak.log`。这包含 `garak` 及其插件的调试信息,并在多次运行中持续记录。
* 当前运行的报告,结构化为 JSONL。每次运行 `garak` 时都会创建一个新的报告文件。该文件的名称在运行开始时和(如果成功)运行结束时输出。在报告中,每次探测尝试都会在生成结果时和评估结果时各记录一条;条目中的 `status` 属性使用 `garak.attempts` 中的常量来描述记录时所处的阶段。
* 一个命中日志,详细记录导致漏洞(命中)的尝试。

## 代码结构是怎样的?

请查阅[参考文档](https://reference.garak.ai/)以获取 `garak` 代码结构的权威指南。

在典型运行中,`garak` 将从命令行读取模型类型(以及可选的模型名称),然后确定要运行哪些 `probe` 和 `detector`,启动一个 `generator`,然后将这些传递给 `harness` 执行探测;`evaluator` 处理结果。这些类别中有许多模块,每个模块提供多个类作为单独插件。

* `garak/probes/` - 用于生成与 LLM 交互的类
* `garak/detectors/` - 用于检测 LLM 表现出特定失败模式的类
* `garak/evaluators/` - 评估报告方案
* `garak/generators/` - 被探测的 LLM 插件
* `garak/harnesses/` - 用于结构化测试的类
* `resources/` - 插件所需的辅助项目

默认操作模式是使用 `probewise` 框架。给定一个探针模块名称和探针插件名称列表,`probewise` 框架会实例化每个探针,然后为每个探针读取其 `primary_detector` 和 `extended_detectors` 属性,以获取要在输出上运行的 `detector` 列表。

每个插件类别(`probes`、`detectors`、`evaluators`、`generators`、`harnesses`)包含一个 `base.py`,该文件定义了该类别的插件可用的基类。每个插件模块定义了一个继承自某个基类的插件类。例如,`garak.generators.openai.OpenAIGenerator` 继承自 `garak.generators.base.Generator`。

较大的工件,如模型文件和更大的语料库,不会保存在仓库中;它们可以存储在例如 Hugging Face Hub 上,并由使用 `garak` 的客户端本地加载。

## 开发自己的插件

* 查看其他插件是如何完成的
* 继承自一个基类,例如 `garak.probes.base.TextProbe`
* 尽可能少地覆盖
* 你可以通过至少两种方式测试新代码:
  * 启动交互式 Python 会话
    * 导入模型,例如 `import garak.probes.mymodule`
    * 实例化插件,例如 `p = garak.probes.mymodule.MyProbe()`
  * 使用测试插件运行扫描
    * 对于探针,尝试使用空生成器和 always.Pass 检测器:`python3 -m garak -m test.Blank -p mymodule -d always.Pass`
    * 对于检测器,尝试使用空生成器和空探针:`python3 -m garak -m test.Blank -p test.Blank -d mymodule`
    * 对于生成器,尝试使用空探针和 always.Pass 检测器:`python3 -m garak -m mymodule -p test.Blank -d always.Pass`
  * 使用 `--list_probes`、`--list_detectors` 或 `--list_generators` 让 `garak` 列出你正在编写的所有插件类型

## 常见问题

我们有一个常见问题解答 [这里](https://github.com/NVIDIA/garak/blob/main/FAQ.md)。如果你有更多问题,请联系我们![[email protected]](mailto:[email protected])

代码参考文档位于 [garak.readthedocs.io](https://garak.readthedocs.io/en/latest/)。

## 引用 garak

你可以阅读 [garak 预印本论文](https://github.com/nvidia/garak/blob/main/garak-paper.pdf)。如果你使用了 garak,请引用我们。```
@article{garak,
  title={{garak: A Framework for Security Probing Large Language Models}},
  author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
  year={2024},
  howpublished={\url{https://garak.ai}}
}

"说谎就像其他技能一样,如果你想保持高水准,就必须不断练习" - Elim

更新和新闻请参见 @garak_llm

© 2023- Leon Derczynski; Apache 许可证 v2,参见 LICENSE

下载工具