Garak 是 NVIDIA 维护的开源 LLM(大型语言模型)漏洞扫描器,采用 Apache 2.0 协议,用于自动化探测大语言模型的安全漏洞:提示注入、越狱、训练数据泄露、幻觉、恶意代码生成等。它把“构造攻击载荷→调用目标模型→判定是否成功→记录结果”固化为可重复执行的流水线,让模型安全测试从“人工逐条试提示词”升级为可回归、可审计的自动化扫描。Garak 采用四类插件体系(Probes 探测、Detectors 判定、Generators 模型接入、Buffers 载荷变换),既支持 OpenAI、Anthropic 等 API 模型,也支持 Hugging Face、Ollama 本地模型。本文按“安装配置→快速上手→核心能力→生产部署”的顺序讲解,并在对比、误区、面试题中补充选型与避坑建议。

岗位关联

掌握 Garak 意味着你能把 LLM 安全评估从“凭经验猜测提示词”升级为标准化、可复现、可审计的漏洞扫描流程,这是 AI 安全工程师、红队与模型评测岗位的核心技能之一。

目录
  1. 为什么需要 Garak:模型攻击面无法用人工测试覆盖
  2. 安装与环境配置:3 步就绪
  3. 快速上手:5 分钟跑通第一次扫描
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
LLM 漏洞扫描器(开源 CLI 工具)
开发商
NVIDIA(原 garak 团队,2024 年并入)
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Python
当前版本
1.3.x(2024 年 12 月)
安装方式
pip install garak
官方文档
上手难度
★★☆☆☆(低)
适合人群
AI 安全工程师·红队·模型评测与 MLOps
同类工具
PyRIT(微软)·ART(IBM)·TextAttack
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Garak:模型攻击面无法用人工测试覆盖

LLM 应用的攻击面与传统软件不同——没有“安全补丁”,系统提示词、输入过滤器、RAG(检索增强生成)上下文都是可攻击入口。人工红队测试依赖经验逐条构造提示词,用例不系统、结果不可复现;模型每更新一次,手工经验就要重来一遍。安全团队缺少能把攻击案例沉淀为自动化回归测试的工具,这正是 Garak 要解决的问题。

Garak 提供“探测集”机制:每个探测(probe)是一类攻击的自动化生成器,内置提示注入、越狱、数据泄露、幻觉、恶意代码生成等常见威胁面;探测器(detector)自动判定攻击是否得手;扫描结果以 JSONL(按行存储的 JSON 格式)全量记录,并生成 HTML 报告。同样的探测集在每次模型发布时重跑,就形成了安全回归门禁。

与同类工具相比,Garak 是“扫描器”思维:CLI 即用、开箱可跑,默认配置就能产出可读报告;PyRIT 更像可编程红队 SDK,ART 与 TextAttack 偏学术研究。对“上线前要一份可审计安全测试结果”的工程团队,Garak 的应用路径最短。

安装与环境配置:3 步就绪

步骤一:安装。 需要 Python 3.10 及以上版本。直接用 pip 安装主包;如需扫描 Hugging Face 本地模型,再安装对应可选依赖(extra),全部依赖可用 garak[all] 一次装齐。

步骤二:配置凭证与环境。 扫描 API 模型前,把对应厂商的 API Key 写入环境变量(OpenAI 用 OPENAI_API_KEY,Anthropic 用 ANTHROPIC_API_KEY)。Garak 的默认配置文件位于 ~/.config/garak/garak.yaml,可预设默认模型类型、探测集与并发参数;不放置该文件时使用内置默认值。

步骤三:验证安装。 用 --version 查看版本,用 --list_probes 与 --list_detectors 确认探测与判定插件可正常加载;能列出插件即说明安装成功。

bash6 行
pip install garakpip install "garak[all]"        # 可选:安装 Hugging Face 等本地模型支持export OPENAI_API_KEY=sk-xxxx   # 替换为真实 Keygarak --versiongarak --list_probes | head -20garak --list_detectors

快速上手:5 分钟跑通第一次扫描

快速上手的目标是跑通“指定模型→执行探测→查看报告”的最小闭环。先在官方支持的 API 模型上做默认扫描,确认结果落盘与报告生成正常,再扩展到组合探测与本地模型;这样能最快区分“工具没配好”与“模型真有漏洞”两类问题。

1. 安装并验证(见上一节)。

2. 确认 OPENAI_API_KEY 已写入环境变量。

3. 执行扫描命令,指定模型类型 openai 与模型名 gpt-4o-mini。

4. 观察终端输出:Garak 会先加载插件,再逐个执行探测器,实时打印每个探测的命中数与总数,最后打印结果保存路径。

5. 查看结果:扫描输出默认保存在当前目录的 garak_runs/ 下,按日期与扫描 ID 组织;扫描结束自动生成 HTML 报告,打开即可看到按探测器分类的成功率与命中样本。

6. 进阶操作:组合多个探测并叠加缓冲区,评估输入过滤器是否可被编码绕过。

结果解读:报告按探测器给出成功率,成功率越高说明该攻击面越容易被利用。注意同一模型在不同采样参数(如温度)下结果会有波动,正式评估应固定参数并重跑多轮取稳定值。

bash11 行
# 第一次扫描:默认执行 dan 越狱探测集garak --model_type openai --model_name gpt-4o-mini --probes dan # 查看结果目录结构ls -R garak_runs/ | head -40 # 进阶:组合探测 + base64 编码变换garak --model_type openai --model_name gpt-4o-mini --probes promptinject,jailbreak --buffers base64 # 本地模型(Ollama 服务)garak --model_type ollama --model_name llama3.1

核心能力详解:4 大支柱

支柱一:Probes——攻击探测集。 Probe 是 Garak 的一等插件类型,负责自动生成攻击载荷。内置探测覆盖 promptinject(提示注入)、jailbreak 与 dan(越狱)、leakreplay(上下文数据泄露)、hallucination(幻觉触发)、malwaregen(恶意代码生成)等,多数场景对应 OWASP LLM Top 10 中的风险类别。探测集可用逗号组合(--probes promptinject,jailbreak),也支持通配符(如 "jailbreak*")批量选择。选哪些探测应由威胁建模决定,而不是全量盲跑。

支柱二:Detectors——成败判定器。 探测发出攻击后,需要判定攻击是否成功。Detector 支持精确文本/正则匹配、外部服务(如毒性检测 API)以及基于 LLM 的判定等模式。Garak 会先对模型跑一条基线(正常生成样本),再跑攻击样本,自动剔除模型本来就有的行为,聚焦“由攻击引发的差异”,结果以成功率呈现。判定器选择直接影响结论可信度:exact 类判定可复现性高,LLM 判定覆盖更广但需抽检复核。

支柱三:Generators——模型接入层。 同一套探测代码要能测不同模型,靠的是 Generator 抽象。OpenAI、Anthropic、Cohere 等 API 模型,Hugging Face 开源模型、Ollama 本地服务、Replicate 托管模型,都通过 --model_type 指定接入,无需修改探测代码。这意味着同一攻击套件可以横向跑在不同模型上,直接对比候选模型的抗攻击能力。

支柱四:Buffers——载荷变换层。 很多模型网关带输入过滤,明文攻击载荷会被直接拦截。Buffer 对载荷做编码或变形(如 base64、rot13)后再发给模型,用于检验过滤器是否可被绕过。是否加 Buffer 显著影响结论:不加可能漏报(假阴性),全加可能放大无效攻击(假阳性),建议按“防御验证”目的单独跑一轮。

生产部署与监控:从上线到运维

部署方式一:CI/CD 安全门禁。 在发布流水线(GitHub Actions、GitLab CI 等)中安装 Garak,对候选模型执行固定的探测组合,把探测器成功率作为质量阈值,超过即阻断发布。扫描产物(garak_runs/ 下 JSONL 与 HTML 报告)作为发布审计附件归档。

部署方式二:定时回归扫描。 用 cron 每周跑一次固定探测集,跟踪模型迭代后的行为漂移——例如 RAG 应用底层模型升级后,leakreplay(数据泄露)成功率是否上升。

可观测性与审计。 每次扫描的 JSONL 保留模型输入输出与判定结果的原始记录,可重放、可复核;garak --report 可从已保存的 JSONL 重新生成 HTML 报告,适合留档审计。Garak 本身不提供指标导出,如需接入监控大盘,可解析 JSONL 提取各探测器成功率写入 Prometheus 或 SIEM(实践建议,非内置功能)。多环境建议采用不同探测集:dev 环境跑全量,production 跑低成本高价值子集。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>默认只跑 dan 探测:不指定 --probes 时 Garak 仅执行 dan 越狱探测,不代表完整安全评估,应根据威胁面显式组合 promptinject、jailbreak、leakreplay、hallucination 等探测集。</li><li>不加 Buffer 会低估防御绕过风险:base64、rot13 等编码变换可绕过输入过滤,只测明文载荷容易漏报(假阴性),评估过滤器时必须叠加 buffers。</li><li>API 扫描成本不可控:对付费 API 模型跑大规模探测集会消耗大量 token,建议先查看探测规模、分批执行并限制并发,避免单次扫描成本失控。</li><li>detector 输出不等于漏洞实锤:exact 匹配可能漏报、基于 LLM 的判定存在误判,对高失败率样本必须人工重放复核后再定性。</li></ul>

bash3 行
pip install garakgarak --model_type openai --model_name gpt-4o-mini \  --probes promptinject,jailbreak,dan --buffers base64
text1 行
0 3 * * 1  cd /srv/garak && export OPENAI_API_KEY=sk-xxxx && garak --model_type openai --model_name gpt-4o-mini --probes leakreplay,hallucination
维度GarakPyRIT(微软)ART(IBM)TextAttack
定位LLM 漏洞扫描器生成式 AI 红队工具箱对抗鲁棒性评测库文本对抗攻击/数据增强库
编排范式CLI + 插件系统Python SDK + CLIPython 库Python 库
类型约束聚焦生成式 LLM生成式 AI(含多模态)图像/表格/文本文本分类/序列到序列
学习曲线低(开箱即用)中(以 SDK 编程为主)中高(需编程基础)中(需编程基础)
生态集成OpenAI/HF/Ollama 等Azure/OpenAI 等微软生态HF/sklearn 等HF datasets
生产部署CI 友好·本地报告DevSecOps 集成研究为主研究为主
LicenseApache 2.0MITMITMIT
适合谁AI 安全工程师·红队·MLOps微软生态安全团队对抗 ML 研究者NLP 研究者

选型建议:若目标是“开箱即用地评估生产 LLM 的提示注入/越狱/泄露风险并生成可审计报告”,Garak 最直接;若团队重度使用 Azure 且需要可编程的红队自动化流程,选 PyRIT;ART 与 TextAttack 更适合学术研究对抗样本生成算法,不宜直接作为线上模型安全门禁。

版本迭代

garak 于 2024 年上半年以 0.9、0.10、0.11 系列快速迭代并配套学术论文,2024 年 8 月 NVIDIA 宣布收购前后发布 1.0 里程碑,此后以约每月一个次版本的速度持续扩充探测类型、模型接入方式与报告能力(截至训练数据,可能已有更新版本)。

版本时间变化提升
v0.9.02024-03框架成型四类插件体系定型,作为论文(arXiv:2406.09136)所述框架的实现基线
v1.0.02024-081.0 里程碑NVIDIA 收购前后发布,CLI、配置与插件 API 进入稳定状态
v1.1.02024-09增量迭代补充探测类型与生成器接入,修复稳定性问题
v1.2.02024-11探测增强扩展缓冲区能力与探测覆盖,完善报告输出
v1.3.02024-12维护迭代继续扩充探测与模型接入,保持向后兼容
结论

garak 的演进主线是“探测覆盖面扩大 + 模型接入面扩大”,1.0 之后 API 稳定,适合作为 CI 中的长期安全门禁来依赖。garak 是扫描工具而非模型,不参与 MMLU 等模型榜单评测,无公开评测分数;横向对比时应关注最新版对目标模型接入的支持情况与探测数量。

AI 应用场景

场景一:模型上线前的自动化安全门禁

阶段:LLM 安全测试 / 发布前风险评估

解决的问题:人工红队测试覆盖不全、结果不可复现。Garak 把越狱、提示注入等攻击固化为可重复执行的探测集,接入发布流水线后,模型每换一个版本就跑一次相同攻击面。

具体案例:以一个 RAG 服务发布流程为例,对候选模型执行 promptinject、jailbreak 组合探测,并用 base64 buffer 验证输入过滤器是否可绕过;扫描全程自动化,单探测集耗时取决于模型吞吐(分钟级到小时级),结果以 JSONL 与 HTML 报告入库供审计复核。

场景二:多模型选型的安全维度对比

阶段:模型评测 / 供应商选型

解决的问题:选型只看准确率、忽略安全维度。同一套探测集跑在不同模型上,输出可比的抗攻击成功率,把安全性纳入选型指标。

具体案例:对 OpenAI、Anthropic 及开源模型各跑同一探测组合(promptinject、leakreplay),生成横向对比报告,作为模型供应商准入的安全附件;扫描命令只改 --model_type 与 --model_name,无需改动探测配置。

场景三:生产模型行为漂移的持续监控

阶段:安全运维 / 模型监控

解决的问题:模型迭代后攻击面可能悄然变化。定时重跑固定探测集,把成功率变化作为行为漂移信号。

具体案例:以 cron 每周对生产模型执行固定探测集,发现某次模型更新后 leakreplay 探测成功率上升,遂收紧系统提示词并回退验证;历史 JSONL 留档支撑了后续的合规审计。

常见误区

误区“我把默认的 garak 命令跑了一遍,全部通过,说明我们的 LLM 应用没有安全问题了”

正解Garak 只报告“测过且判定器能识别”的问题。默认仅跑 dan 探测,提示注入、数据泄露、幻觉等攻击面需要显式选择探测集;判定器本身存在漏报与误报;最终安全结论还要结合部署形态(RAG 检索注入、工具调用、权限边界)做人工复核,扫描报告只是证据,不是结论。

为何常见:自动化扫描报告长得像“安全检查表”,“全绿”很容易被误读为“绝对安全”。

误区“Garak 是 NVIDIA 的商业漏洞扫描产品,应该很贵吧?”

正解Garak 是 Apache 2.0 开源项目,免费可商用、代码可审计、插件可定制。它由原 garak 团队开发,2024 年 8 月并入 NVIDIA 后仍以开源方式维护,任何人都可以 fork、扩展或本地部署。

为何常见:NVIDIA 品牌与“漏洞扫描器”的商业化联想,让人误以为它是闭源企业软件。

误区“这次扫描某个探测器成功率 80%,说明这个漏洞特别严重,必须立刻修复”

正解成功率受探测难度、判定器阈值、模型采样参数等多因素影响,它描述的是“该探测器在本次配置下命中的比例”,不等于业务风险等级。判断严重度还需结合攻击可行性、被攻击面的暴露程度与业务影响,并复核命中样本。

为何常见:数值化输出天然容易被当作客观风险评分,忽略了判定器本身的误差。

误区“我本地起了 Ollama,文档里还有 huggingface 选项,应该都能连本地模型吧?”

正解不同接入方式对应不同 Generator 插件:Ollama 服务用 --model_type ollama,Hugging Face 本地推理用 --model_type huggingface,API 厂商用各自类型(openai、anthropic 等)。选错会导致连接失败或参数不生效;Hugging Face 类型还涉及显存与 device 配置。

为何常见:Generator 抽象对新手不直观,容易按“本地模型 = Hugging Face”的惯性理解。

面试题

Q1. Garak 的核心定位是什么?

单选题 · easy

  • A.LLM 漏洞扫描器← 正确答案
  • B.LLM 微调训练框架
  • C.向量检索数据库服务
  • D.大模型部署推理引擎

答案:A。Garak 是 NVIDIA 开源的 LLM 漏洞扫描器,用于自动化探测提示注入、越狱、数据泄露等漏洞;微调、检索、推理分别是训练框架、向量数据库和推理引擎的职责,均与它无关。

Q2. 安装 Garak 的正确命令是?

单选题 · easy

  • A.pip install garak← 正确答案
  • B.npm install garak
  • C.apt install garak
  • D.docker pull garak

答案:A。Garak 是 Python CLI 工具,官方安装方式是 pip install garak。npm 面向 JavaScript,apt 管理系统软件包,docker pull 需要镜像仓库存在对应镜像,均非官方途径。

Q3. 不指定 --probes 时,Garak 默认执行的是哪种探测?

单选题 · mid

  • A.默认执行越狱探测← 正确答案
  • B.提示注入攻击探测
  • C.上下文数据泄露探测
  • D.模型幻觉检测探测

答案:A。不指定探测集时 Garak 只运行 dan 越狱探测集;promptinject(提示注入)、leakreplay(数据泄露)、hallucination(幻觉)均需显式指定,因此“跑过默认命令”不等于完成完整安全评估。

Q4. 在 Garak 的插件体系中,负责判定攻击是否成功的模块是?

单选题 · easy

  • A.探测器:负责判定攻击命中的模块← 正确答案
  • B.生成器:负责接入不同模型的模块
  • C.缓冲区:负责变换攻击载荷的模块
  • D.数据集:负责准备训练样本的模块

答案:A。Detectors(探测器)负责判定攻击是否命中;Probes 构造攻击载荷,Generators 接入目标模型,Buffers 对载荷做变换。四者分别是“判定、攻击、接入、变换”四个环节。

Q5. 使用 Garak 扫描 OpenAI 模型前,通常需要预先完成什么?

单选题 · mid

  • A.配置模型厂商的调用凭证← 正确答案
  • B.启动本地向量数据库服务
  • C.预先分配 GPU 显存资源
  • D.安装 Docker 容器环境

答案:A。扫描 API 模型必须有厂商凭证,OpenAI 对应 OPENAI_API_KEY 环境变量。向量数据库、GPU 显存和 Docker 都不是扫描 API 模型的前置条件,仅本地模型推理才涉及 GPU 配置。

Q6. Garak 中 Buffers 模块的核心作用是?

单选题 · mid

  • A.对攻击载荷编码变换以绕过过滤← 正确答案
  • B.缓存探测结果加快重复扫描
  • C.将模型输出写入本地日志
  • D.缓冲 API 限流降低失败率

答案:A。Buffers 对攻击载荷做 base64、rot13 等编码或变换,用于检验输入过滤器是否可被绕过。它不缓存结果、不负责日志、也不处理限流,是“载荷变换层”。

Q7. Garak 一次扫描完成后,默认在什么位置保存结果?

单选题 · hard

  • A.当前工作目录的运行文件夹← 正确答案
  • B.系统日志目录中的日志
  • C.用户缓存目录下的缓存
  • D.系统临时目录中的临时

答案:A。Garak 默认在当前工作目录下创建 garak_runs/ 文件夹,按日期与扫描 ID 组织 JSONL 结果与 HTML 报告;系统日志、用户缓存和临时目录都不是默认输出位置。

Q8. 下列属于 Garak 核心插件类型的有哪些?(多选)

单选题 · mid

  • A.Probes 探测模块← 正确答案
  • B.Detectors 判定模块← 正确答案
  • C.Buffers 载荷模块← 正确答案
  • D.Datasets 数据模块

答案:ABC。Garak 的四类一等插件为 Probes(探测)、Detectors(判定)、Generators(模型接入)、Buffers(载荷变换),对应“攻击、判定、接入、变换”四个环节;Datasets 不属于插件体系。

Q9. 下列可以作为 Garak 目标模型接入方式的有哪些?(多选)

多选题 · hard

  • A.OpenAI API 模型← 正确答案
  • B.HuggingFace 模型← 正确答案
  • C.Ollama 服务模型← 正确答案
  • D.MySQL 数据库连接

答案:ABC。Generators 插件支持 OpenAI、Anthropic、Cohere 等 API 模型,以及 Hugging Face、Ollama、Replicate 等本地或托管模型,通过 --model_type 指定;MySQL 是数据库,不是模型接入接口。

Q10. 关于从已有扫描结果重新生成 Garak 报告,正确的做法是?

单选题 · extreme

  • A.基于留存的 JSONL 重生成报告← 正确答案
  • B.必须重新调用模型接口获取数据
  • C.只能生成 PDF 一种格式的文件
  • D.需要连接云端管理平台才能使用

答案:A。Garak 每次扫描会把原始输入输出与判定结果写入 JSONL,之后运行 garak --report 即可基于这些存档重新生成报告,无需重新调用模型。B 错在把“再生成”当作“重扫”,C 错在报告格式并非只有 PDF,D 错在 Garak 是本地 CLI 工具,不依赖云端平台。