关于 red-teaming-llms-with-garak
此技能介绍如何使用开源 LLM 漏洞扫描器 garak,通过对抗性探测评估模型。内容涵盖扫描、结果解读和缓解措施复测,测试对象须获得授权。
主要功能
- 01运行提示注入和越狱探测
- 02测试泄漏及不安全输出风险
- 03检测本地模型和 API 端点
- 04查看命中率和生成的报告
- 05缓解后比较测试结果
适用场景
- 01建立 LLM 安全评估基线
- 02验证防护规则或提示词变更
- 03更新后对端点进行回归测试
- 04为 AI 风险评估记录发现
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill red-teaming-llms-with-garak安装后在 Claude Code 中输入/red-teaming-llms-with-garak确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py详细介绍
使用 garak 对 LLM 进行红队测试
法律与授权使用声明: 本技能仅用于经授权的 AI 安全测试和教育目的。仅探测你拥有或已获得明确书面许可进行测试的模型、API 密钥和端点。对第三方 LLM API 进行自动化探测可能违反其服务条款并消耗计费 token。未经授权探测你无法控制的系统可能违法。
概述
garak(Generative AI Red-teaming and Assessment Kit)是由 NVIDIA 维护的开源大模型漏洞扫描器。它扮演的角色类似于 Nessus 等网络漏洞扫描器对主机所扮演的角色,但对象是大模型:它向目标模型发送数千条对抗性提示词(“probes”),捕获生成内容,并对响应运行自动化“detectors”以判定每次尝试是否成功。探测家族涵盖提示词注入(promptinject、latentinjection)、越狱(dan)、训练数据和系统提示词泄露(leakreplay)、恶意软件生成(malwaregen)、跨站脚本载荷生成(xss)、基于编码的绕过(encoding)、有害内容等。garak 在论文《garak: A Framework for Security Probing Large Language Models》(arXiv:2406.11036)中有详细描述,并通过 NVIDIA/garak GitHub 仓库分发。
该扫描器与生成器无关。它可以针对本地加载的 Hugging Face 模型、OpenAI 兼容 API、AWS Bedrock、Replicate、Cohere、NIM 端点、GGUF/llama.cpp 模型,以及通过 JSON 生成器规范指定的任意 REST 端点。运行后,garak 会输出一个 .report.jsonl 行分隔日志,记录每次尝试和检测器判定;一个人类可读的 .report.html;一个 garak.log 调试日志;以及一个已确认漏洞的命中日志。终端输出会打印按探测、按检测器的通过/失败摘要及命中率(例如 dan.Dan_11_0 jailbreak: FAIL ok on 38/40),这是你解读的主要产物。
本技能对应 MITRE ATLAS 技术 AML.T0051(LLM 提示词注入) 和 AML.T0054(LLM 越狱),因为 garak 将两者都付诸实践:它大规模构造提示词注入和越狱输入,并衡量目标的护栏是否守住。它通过为已部署的 AI 系统提供可重复、定量的安全/韧性测量,支持 NIST AI RMF MEASURE-2.7 子类别。
何时使用
- 当你需要在部署前后对 LLM 进行快速、可重复的基线安全评估时。
- 当验证护栏、系统提示词或安全微调确实降低了越狱和注入成功率时(运行前后对比并比较命中率)。
- 当为 AI 风险评估或模型卡安全章节产出证据时(NIST AI RMF MEASURE-2.7)。
- 当分类哪些 OWASP LLM Top 10 风险(LLM01 提示词注入、LLM02 敏感信息泄露、LLM07 系统提示词泄露)确实在你的模型中显现时。
- 当在 CI 中对 LLM 端点进行模型或提示词变更后的回归测试时。
前提条件
- Python 3.10+(推荐 3.12)及虚拟环境。
- 从 PyPI 安装 garak:
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate python -m pip install -U garak garak --version - 如需最新版本:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main - 如果探测托管模型,需要目标的 API 密钥(例如
export OPENAI_API_KEY="sk-...")。 - 对目标进行测试的书面授权,并了解 token 成本(探测会产生数千次调用)。
目标
- 枚举可用的探测和检测器,并选择一个范围明确的套件。
- 针对本地 Hugging Face 模型、OpenAI 兼容 API 和任意 REST 端点配置 garak。
- 运行提示词注入、越狱和泄露探测家族并捕获报告。
- 解读按探测的命中率输出和
.report.jsonl。 - 在应用缓解措施后重新运行,以证明风险降低。
- 为 AI 风险评估产出可辩护的发现产物。
MITRE ATT&CK 映射
本技能使用 MITRE ATLAS(ATT&CK 的对抗性机器学习配套框架)技术 ID。
| ID | 战术 | 官方名称 | 相关性 |
|---|---|---|---|
| AML.T0051 | ML 攻击准备 / 影响 | LLM 提示词注入 | garak 的 promptinject 和 latentinjection 探针会构造恶意提示词,以颠覆模型的预期行为。 |
| AML.T0054 | 权限提升 / 防御规避 | LLM 越狱 | garak 的 dan 及相关探针试图绕过安全护栏,使模型生成受限内容。 |
工作流
阶段 1:枚举探针与检测器
- 列出 garak 附带的所有探针,以便确定本次运行的范围:
garak --list_probes - 列出检测器(对探针是否成功进行评分的模块)和生成器(目标连接器):
garak --list_detectors garak --list_generators - 阅读探针分类体系。主要类别:
promptinject— PromptInject 框架的直接注入。latentinjection— 隐藏在文档/编码文本中的指令(间接注入)。dan— "Do Anything Now"及相关越狱(例如dan.Dan_11_0)。leakreplay— 诱导模型复现记忆/训练数据或隐藏提示词文本。encoding— base64/ROT13 等注入绕过。xss— 输出跨站脚本攻击载荷(markdown/HTML 数据外泄)。malwaregen— 请求可规避杀毒软件或恶意代码。
阶段 2:探测本地 Hugging Face 模型
- 对本地模型运行单个越狱探针以验证设置:
python -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0 - 对聊天模型运行更完整的测试套件:
python -m garak \ --target_type huggingface \ --target_name meta-llama/Llama-3.2-1B-Instruct \ --probes promptinject,dan,leakreplay \ --report_prefix llama32_baseline
阶段 3:探测 OpenAI 兼容 API
- 导出密钥并运行注入 + 泄露探针:
export OPENAI_API_KEY="sk-..." python -m garak \ --target_type openai \ --target_name gpt-4o-mini \ --probes promptinject,latentinjection,leakreplay \ --generations 5 \ --parallel_attempts 8 \ --report_prefix gpt4omini_injection--generations控制每个提示词生成多少个补全(越多 = 统计置信度越高,成本也越高)。--parallel_attempts提高远程 API 的吞吐量。
阶段 4:探测任意 REST 端点
- garak 可通过 JSON 生成器规范以任意 HTTP API 为目标。创建
rest.json:{ "rest": { "RestGenerator": { "name": "my-llm-gateway", "uri": "https://llm.internal.example/v1/chat", "method": "post", "headers": { "Authorization": "Bearer $ENV_TOKEN", "Content-Type": "application/json" }, "req_template_json_object": { "model": "internal-bot", "prompt": "$INPUT" }, "response_json": true, "response_json_field": "$.output" } } } - 对其运行 garak:
export ENV_TOKEN="..." python -m garak \ --target_type rest \ -G rest.json \ --probes promptinject,dan \ --report_prefix internal_gateway
阶段 5:运行精选配置和完整扫描
- 对于可重复的评估,将所有内容固定在 YAML/JSON 配置中并传入
--config:python -m garak --config assessment.yaml# assessment.yaml plugins: model_type: openai model_name: gpt-4o-mini probe_spec: promptinject,latentinjection,dan,leakreplay,xss,malwaregen run: generations: 5 parallel_attempts: 8 reporting: report_prefix: quarterly_llm_assessment - 对于穷举式扫描(缓慢、昂贵),完全省略
--probes以运行所有探针。
阶段 6:解读命中率报告
- 阅读终端摘要。每一行的格式为
probe.Class detector: PASS|FAIL ok on N/M。FAIL 且ok比例较低意味着模型频繁产生不安全行为——这是高严重性发现。 - 打开机器可读报告并汇总失败项:
# Every attempt with detector verdicts is one JSON line jq -r 'select(.entry_type=="eval") | "\(.probe)\t\(.detector)\t\(.passed)/\(.total)"' \ garak.<timestamp>.report.jsonl | sort - 在浏览器中打开生成的
.report.html,查看格式化评分卡和每个探针的细分。 - 从命中日志中提取实际成功的攻击字符串,作为概念验证证据。
阶段 7:缓解并重新测试
- 应用一项控制措施(收紧系统提示词,添加输入/输出护栏(如 Llama Guard 或 LLM Guard),或更换模型)。
- 使用新的
--report_prefix重新运行完全相同的探针集。 - 比较各次运行的命中率,以量化报告中的风险降低程度。
工具与资源
| 资源 | 用途 | 链接 |
|---|---|---|
| NVIDIA/garak | 源代码、探针列表、问题 | https://github.com/NVIDIA/garak |
| garak 文档 | 命令行参考、生成器配置 | https://docs.garak.ai/ 和 https://reference.garak.ai/ |
| garak 论文(arXiv:2406.11036) | 方法论与设计 | https://arxiv.org/abs/2406.11036 |
| OWASP Top 10 for LLM Applications | 探针所映射的风险分类体系 | https://genai.owasp.org/ |
| MITRE ATLAS | AML 技术定义 | https://atlas.mitre.org/ |
探针系列参考
| 探针系列 | 目标 | OWASP LLM 映射 |
|---|---|---|
promptinject | 直接提示词注入 | LLM01 |
latentinjection | 间接 / 隐藏上下文注入 | LLM01 |
dan | 越狱 / 护栏绕过 | LLM01 / safety |
leakreplay | 训练数据与提示词泄露 | LLM02 / LLM07 |
encoding | 基于编码的过滤器绕过 | LLM01 |
xss | Markdown/HTML 数据外泄载荷 | LLM02 |
malwaregen | 恶意代码生成 | misuse |
验证标准
- 已安装 garak,且
garak --version执行成功。 - 已通过
--list_probes/--list_detectors枚举探针和检测器。 - 已针对目标完成至少一次探针运行,并设置了
--report_prefix。 - 已生成并定位到
.report.jsonl、.report.html和garak.log。 - 已提取每个探针的命中率,并按严重程度排序。
- 已从命中日志中捕获成功的攻击字符串作为证据。
- 已应用一项缓解措施,并完成对比重跑,显示命中率发生变化。
- 已针对 OWASP LLM Top 10 和 MITRE ATLAS 记录发现结果,用于风险评估。