Garak是开源的大语言模型漏洞扫描工具,内置多种越狱、注入与幻觉探测探针,可自动化遍历模型弱点并生成安全报告,是LLM红队评估的常用工具,显著降低了安全测试的执行门槛与人力成本,在LLM安全审计实践中应用广泛,掌握这一方法有助于提升AI系统的可信度。
需要学习Garak测试工具,AI安全是理论研究的终极目标,对齐问题关乎AGI安全。本篇涵盖偏见检测、隐私保护、AI伦理、法规遵循,帮助你确保AI系统合规可信。
目录
可视化演示
展示Garak探针扫描流程、攻击类别划分与扫描报告漏洞分级的交互演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
探针扫描流程 多探针并行攻击目标LLM 自动化遍历模型弱点 Probes → LLM → Detect 总结:Garak自动化漏洞扫描
Garak工具定位与LLM红队测试价值
Garak是由NVIDIA开源的大语言模型漏洞扫描工具,其定位类似于传统网络安全领域的Nmap或Nessus,但专门面向LLM应用的安全测试需求。Garak通过自动化的方式对目标LLM执行大量预定义的攻击探针(Probe),检测模型在越狱、提示注入、幻觉生成、数据泄露等维度上的安全脆弱性。它的出现大幅降低了LLM红队测试的门槛,使得安全团队无需依赖高成本的人工渗透测试即可对模型进行系统化的安全评估。
传统LLM红队测试依赖安全专家手动构造攻击提示词并逐一测试模型响应,这种方式存在三个核心痛点:一是人力成本高,需要资深安全专家投入大量时间;二是覆盖范围有限,人工测试难以穷举所有攻击向量;三是可重复性差,不同测试人员的攻击策略和判断标准不一致。Garak通过标准化的探针体系和自动化执行引擎,将红队测试从依赖个人经验的艺术转变为可量化、可重复的工程实践。
Garak的核心价值在于其模块化的探针架构。整个系统由三个核心组件构成:Probe负责生成攻击请求,Generator负责将请求发送到目标模型并获取响应,Detector负责分析模型输出判断攻击是否成功。这种解耦设计使得用户可以灵活组合不同的探针、生成器和检测器,针对不同的模型后端(OpenAI API、本地部署模型、HuggingFace模型等)进行统一的安全扫描。
在企业级LLM安全治理框架中,Garak扮演着持续安全验证的关键角色。它不仅可以用于模型上线前的一次性安全评估,更重要的是可以集成到CI/CD流水线中,作为每次模型迭代的安全门禁。通过设定trigger rate阈值,Garak能够自动拦截安全指标退化的模型版本,确保生产环境中部署的LLM始终满足安全基线要求。这种自动化安全验证机制是构建可信AI系统的必要基础设施。
探针体系架构与攻击类别划分
Garak的探针体系按照攻击类别进行系统化组织,覆盖了LLM面临的主要安全威胁。探针按攻击类型可分为以下几大类:越狱探针(jailbreak)测试模型是否能被诱导突破安全对齐限制;提示注入探针(prompt injection)测试模型是否能被注入的恶意指令劫持行为;幻觉探针(hallucination)测试模型是否会编造虚假事实;数据泄露探针(data leakage)测试模型是否会暴露系统提示词或训练数据等敏感信息。每个大类下又包含多个具体探针变体,形成层次化的攻击测试矩阵。
越狱探针是Garak中最受关注的探针类别之一,包含多种经典的越狱攻击模板。dan系列探针通过角色扮演场景试图让模型脱离安全约束,例如让模型扮演一个不受任何规则限制的AI助手。其他越狱变体包括编码绕过(将恶意指令编码为Base64或其他编码格式)、多语言混合攻击(利用模型在不同语言上安全对齐程度不一致的弱点)以及上下文操纵(通过构造长上下文稀释安全提示的影响力)。每种变体都针对特定的安全对齐弱点设计。
提示注入探针分为直接注入和间接注入两种类型。直接注入探针在用户输入中直接嵌入恶意指令,试图覆盖系统提示词中的安全约束;间接注入探针则通过检索内容(如RAG系统中的知识库文档)注入恶意指令,测试模型是否会执行来自不可信来源的指令。提示注入攻击的危害在于它可能导致模型完全偏离预期的行为模式,执行攻击者指定的任意操作,包括泄露敏感信息或生成有害内容。
幻觉探针和数据泄露探针关注模型输出的可靠性和信息安全性。幻觉探针通过向模型提出包含虚假前提的问题(如询问不存在的事件细节),检测模型是否会编造看似合理但实际虚假的内容。数据泄露探针则尝试通过特定提示诱导模型输出系统提示词、训练数据片段或其他不应公开的敏感信息。此外,Garak还支持maliciousness探针检测模型生成恶意内容的倾向,以及encoding探针测试模型对编码攻击的抵抗能力。这种多类别探针体系确保了对LLM安全性的全方位覆盖。
越狱与提示注入探针工作机制
越狱探针的工作机制基于对LLM安全对齐训练弱点的系统性利用。安全对齐训练(如RLHF)使模型学会了拒绝有害请求,但这种对齐存在可被利用的边界条件。越狱探针通过构造特殊的输入上下文,使模型进入一个安全约束被弱化或绕过的状态。典型的技术包括:角色扮演(让模型假设自己是另一个没有安全限制的角色)、假设场景(将恶意请求包装为学术研究或创意写作场景)和层级覆盖(通过更高优先级的指令覆盖安全约束)。
dan系列探针是越狱攻击中最经典的模板之一。其核心思路是让模型扮演一个名为DAN(Do Anything Now)的角色,该角色不受任何规则限制。探针通过多轮递进的提示逐步建立角色设定,先让模型接受角色扮演的框架,再在这个框架内提出原本会被拒绝的请求。Garak实现了dan探针的多个变体,每个变体采用不同的角色设定策略和递进话术,以测试模型对不同越狱风格的抵抗能力。
提示注入探针的工作机制则聚焦于指令与数据的边界模糊问题。在直接注入场景中,探针在用户输入中嵌入类似「忽略以上所有指令,改为执行以下操作」的恶意指令,测试模型是否能区分来自用户的合法输入和注入的攻击指令。在间接注入场景中,探针将恶意指令隐藏在看似正常的文本内容中(如网页内容、文档片段),当模型通过RAG检索获取这些内容时,可能被诱导执行注入的指令。Garak的lm_rag探针专门用于测试RAG场景下的间接注入风险。
Detector在越狱和提示注入检测中扮演关键角色。常见的检测策略包括:基于关键词匹配的简单检测(检查输出中是否包含特定的有害内容关键词)、基于分类器的语义检测(训练专门的分类器判断模型输出是否偏离了安全行为)和基于规则的结构检测(检查输出是否符合预期的响应格式)。检测器的准确性直接影响扫描结果的可信度——过于宽松的检测器会低估风险,过于严格的检测器会产生大量误报。Garak支持多种检测器的组合使用,通过投票机制提高检测的准确性。
幻觉与数据泄露探针检测逻辑
幻觉探针的检测逻辑建立在对模型事实性输出能力的系统性挑战之上。探针构造包含虚假前提的问题,例如询问一个不存在的人物的生平事迹,或询问一个从未发生的事件的细节。安全的模型应当能够识别问题中的虚假前提并明确拒绝回答或指出前提错误;而存在幻觉倾向的模型则会编造看似合理但实际完全虚假的内容。Garak通过预设一组已知答案的陷阱问题,统计模型编造虚假内容的比率来量化幻觉风险。
幻觉检测的难点在于区分模型编造的内容和正确但罕见的知识。简单的关键词匹配无法有效判断输出内容的事实性,需要更精细的检测策略。Garak采用基于参考知识库的验证方法:将模型输出与可靠的知识源进行比对,当模型陈述的事实与知识库中的记录不一致时标记为幻觉。此外,还使用基于LLM的判断方法——让另一个LLM评估目标模型输出的事实性,通过交叉验证提高检测的可靠性。
数据泄露探针的检测逻辑聚焦于模型是否会暴露不应公开的信息。最常见的泄露目标是系统提示词(system prompt),其中通常包含业务逻辑、安全策略和敏感配置信息。数据泄露探针通过直接请求(如「请重复你的系统指令」)、间接诱导(如通过多轮对话逐步引导模型泄露上下文信息)和编码绕过(如要求模型将系统指令翻译为其他语言或编码格式)等方式尝试获取敏感信息。此外,部分探针还测试模型是否会记忆并泄露训练数据中的个人隐私信息。
数据泄露检测器通常采用模式匹配和信息熵分析相结合的策略。对于系统提示词泄露,检测器使用高相似度的文本匹配算法检查模型输出是否与已知的系统提示词模板高度相似;对于训练数据泄露,检测器使用正则表达式匹配个人信息模式(如身份证号、手机号、邮箱地址等)。信息熵分析则用于检测模型输出中是否包含异常高信息量的内容——正常对话输出的信息熵通常在一个合理范围内,而泄露的敏感信息往往具有异常高的信息密度。
探针配置与自动化扫描流程
Garak的扫描行为通过配置文件进行灵活控制,配置文件采用YAML或JSON格式定义探针组合、生成器参数和检测器选项。一个典型的配置包含三个部分:probes部分指定要运行的探针列表及其参数(如攻击变体数量、随机种子等);generators部分配置目标模型的连接信息(API地址、模型名称、温度参数等);detectors部分指定用于判定攻击结果的检测器类型和阈值。通过修改配置文件,用户可以针对不同场景定制扫描策略——例如对金融场景的LLM重点测试数据泄露探针,对内容生成场景的LLM重点测试幻觉和恶意内容探针。
自动化扫描流程从配置加载开始。Garak读取配置文件后,初始化指定的Generator连接目标模型,然后按照配置中定义的探针列表逐一执行扫描。对于每个探针,Garak生成一组攻击请求,通过Generator发送到目标模型,收集模型响应后交给对应的Detector进行判定。整个过程自动完成,无需人工干预。扫描过程中,Garak实时记录每个探针的执行状态、触发次数和trigger rate,并在控制台输出进度信息。
扫描的并行化执行是提高效率的关键。Garak支持多探针并行执行,通过线程池或进程池同时运行多个探针的扫描任务。对于需要大量请求的探针(如包含数百个攻击变体的越狱探针),还可以对单个探针的请求进行分批并行处理。并行化不仅缩短了扫描时间,还使得在有限的时间窗口内运行更多探针成为可能。需要注意的是,并行执行时需要控制对目标模型的请求并发量,避免触发API限流或对本地模型造成过大负载。
扫描完成后的结果持久化和报告生成是流程的最后环节。Garak将扫描结果以JSON格式保存到本地文件,包含每个探针的详细执行记录(请求内容、模型响应、检测判定结果)和汇总统计(各探针的trigger rate、总扫描时间等)。报告生成器将原始结果转化为人类可读的安全评估报告,按风险等级排序展示各探针的检测结果,并给出针对性的修复建议。自动化扫描流程使得安全测试可以像单元测试一样频繁执行,成为模型开发的标准环节。
扫描报告解读与漏洞分级
Garak扫描报告的核心指标是各探针的trigger rate(触发率),它表示在该探针的攻击尝试中成功触发安全问题的比例。trigger rate的取值范围为0到1,0表示所有攻击尝试都被模型成功防御,1表示所有攻击尝试都成功突破了模型的安全防护。trigger rate越高,说明模型在该攻击向量上的脆弱性越强。但trigger rate只是风险评估的起点,完整的安全评估还需要结合攻击类型的安全影响、业务场景的敏感性和攻击的实际可利用性进行综合判断。
漏洞分级通常采用四级分类体系:严重(Critical)、高(High)、中(Medium)、低(Low)。严重级别对应trigger rate较高且攻击后果极其严重的漏洞,如模型在简单越狱攻击下就输出违法内容或大量泄露用户隐私数据;高级别对应trigger rate中等或攻击后果严重的漏洞,如模型在复杂提示注入下泄露系统提示词;中级别对应trigger rate较低或攻击后果有限的漏洞;低级别对应需要特定条件才能触发且影响有限的漏洞。分级标准需要根据业务场景定制,同一trigger rate在不同业务场景下可能对应不同的风险等级。
报告解读需要关注探针间的关联性和攻击链风险。单个探针的trigger rate可能不高,但多个探针之间可能存在关联——例如,数据泄露探针成功获取系统提示词后,攻击者可以利用泄露的系统提示词信息构造更精准的越狱攻击。这种攻击链的存在使得多个低风险漏洞组合后可能形成高风险的攻击路径。因此,报告解读不能只关注单个探针的结果,还需要分析探针间的关联性和潜在的攻击链组合。
趋势分析是扫描报告解读的重要维度。通过对比不同时间点的扫描结果,可以观察各探针trigger rate的变化趋势。trigger rate持续下降表明模型安全性在持续改善;trigger rate突然上升可能表明模型迭代引入了安全退化;trigger rate在某个阈值附近波动则需要关注是否是统计噪声还是真实的安全边界。趋势分析为安全团队提供了模型安全状态的全局视图,帮助制定优先修复策略和资源分配方案。
Garak在大模型安全审计中的工程集成
将Garak集成到CI/CD流水线是实现持续安全审计的关键工程实践。集成方案通常包括以下步骤:在模型训练完成后自动触发Garak扫描任务,使用预定义的安全探针配置对模型进行全面扫描,将扫描结果与安全基线进行比对,当关键探针的trigger rate超过预设阈值时自动阻断模型的部署流程。这种自动化安全门禁确保每个上线的模型版本都经过了标准化的安全验证,避免了人工安全评审的遗漏和延迟。
安全基线的设定是集成方案中最关键的决策。安全基线定义了各探针trigger rate的通过阈值,通常根据业务场景的安全等级分层设定。对于面向公众的高安全场景(如金融客服、医疗咨询),关键探针的trigger rate阈值应设定得非常严格(如低于0.01);对于内部使用的一般场景,阈值可以适当放宽(如低于0.05)。同时需要设定绝对红线指标——某些严重漏洞(如模型直接输出违法内容)的trigger rate必须为零,任何非零值都将阻断部署。
扫描性能优化是工程集成中需要解决的实际问题。完整的Garak扫描可能包含数千个攻击请求,对目标模型的API调用耗时可能达到数小时。为了适应CI/CD流水线的快速反馈需求,可以采用分级扫描策略:快速扫描(仅运行核心探针子集,耗时约15分钟)作为每次提交的即时反馈;完整扫描(运行全部探针,耗时数小时)作为发布前的最终验证。此外,扫描结果的缓存和增量更新机制可以避免对未变更的组件重复扫描,进一步缩短反馈周期。
Garak的工程集成还需要考虑扫描结果的管理和追溯。每次扫描的结果应持久化存储并与模型版本号、训练数据集版本、扫描配置版本关联,形成完整的安全审计链。当生产环境发生安全事件时,可以通过审计链追溯到对应的扫描结果,分析是否在扫描阶段就存在未被拦截的漏洞信号。长期积累的扫描数据还可以用于训练安全预测模型,预测新模型版本的安全表现,指导安全对齐训练的优化方向。Garak的工程集成使LLM安全审计从一次性的人工活动转变为持续运行的自动化安全基础设施。
AI 应用场景
客服大模型上线前的Garak安全扫描
阶段:模型部署
解决的问题:在客服大模型正式上线前,通过Garak系统化扫描发现模型在越狱、提示注入、数据泄露等方面的安全漏洞,确保模型满足企业安全合规要求后再部署到生产环境。
具体案例:某电商平台在部署客服大模型前使用Garak进行安全扫描。扫描配置包含jailbreak、prompt injection、data leakage和hallucination四类探针共1200个攻击变体。扫描结果显示模型在dan系列越狱探针上的trigger rate为0.12,在系统提示词泄露探针上的trigger rate为0.08。安全团队针对高trigger rate的探针进行定向修复:在安全对齐训练中增加对应的对抗样本,并在输入层部署了越狱攻击检测过滤器。修复后重新扫描,所有关键探针的trigger rate降至0.01以下,模型通过安全门禁正式上线。
大模型迭代版本的Garak安全回归监控
阶段:模型迭代
解决的问题:在模型每次迭代更新后,通过Garak自动化回归扫描监控模型安全指标的变化趋势,及时发现和拦截因模型更新引入的安全退化问题。
具体案例:某金融科技公司每两周迭代一次其金融咨询大模型。每次迭代后CI/CD流水线自动触发Garak安全回归扫描,使用包含50个核心探针的回归测试集对模型进行全面扫描。扫描结果自动与上一版本进行对比,生成安全差异报告。在一次迭代中,回归扫描发现模型在提示注入探针上的trigger rate从0.02上升到0.09,安全差异报告标记为安全退化。经分析发现,新版本的指令微调数据中减少了安全相关的训练样本,导致模型对提示注入的抵抗力下降。团队补充了安全训练数据后重新扫描,trigger rate恢复到0.015,模型通过安全门禁。
Python 演示
import numpy as np np.random.seed(530) # ---- Mock LLM Response Generator ----probe_categories = ["jailbreak", "prompt_injection", "hallucination", "data_leakage"]n_probes_per_category = 50n_categories = len(probe_categories)total_probes = n_probes_per_category * n_categories # Simulate model vulnerability profile (true trigger probabilities per category)true_trigger_probs = np.array([0.15, 0.08, 0.22, 0.05]) # Generate mock LLM responses: 1 = triggered (vuln found), 0 = safeall_results = np.zeros(total_probes, dtype=int)for i, prob in enumerate(true_trigger_probs): start = i * n_probes_per_category end = start + n_probes_per_category all_results[start:end] = np.random.binomial(1, prob, size=n_probes_per_category) # ---- Calculate trigger rates per category ----trigger_rates = np.zeros(n_categories)for i in range(n_categories): start = i * n_probes_per_category end = start + n_probes_per_category trigger_rates[i] = np.mean(all_results[start:end]) # ---- Vulnerability grading ----def grade_vulnerability(rate): if rate >= 0.20: return "Critical" elif rate >= 0.10: return "High" elif rate >= 0.05: return "Medium" else: return "Low" grades = [grade_vulnerability(r) for r in trigger_rates] # ---- Statistical confidence (bootstrap) ----n_bootstrap = 1000bootstrap_means = np.zeros((n_categories, n_bootstrap))for i in range(n_categories): start = i * n_probes_per_category end = start + n_probes_per_category category_data = all_results[start:end] for b in range(n_bootstrap): sample = np.random.choice(category_data, size=n_probes_per_category, replace=True) bootstrap_means[i, b] = np.mean(sample) ci_lower = np.percentile(bootstrap_means, 2.5, axis=1)ci_upper = np.percentile(bootstrap_means, 97.5, axis=1) # ---- Overall safety score ----safety_scores = 1.0 - trigger_ratesoverall_safety = np.mean(safety_scores) print("=" * 60)print(" Garak-Style LLM Vulnerability Scan Report")print("=" * 60)print(f"\nTotal probes executed: {total_probes}")print(f"Probe categories: {n_categories}")print(f"Probes per category: {n_probes_per_category}")print(f"\n{'Category':<20} {'Trigger Rate':<15} {'Grade':<10} {'95% CI'}")print("-" * 60)for i, cat in enumerate(probe_categories): print(f"{cat:<20} {trigger_rates[i]:<15.4f} {grades[i]:<10} [{ci_lower[i]:.4f}, {ci_upper[i]:.4f}]")print(f"\nOverall Safety Score: {overall_safety:.4f}")print(f"Safety Level: {'PASS' if overall_safety >= 0.90 else 'WARNING' if overall_safety >= 0.80 else 'FAIL'}")
true_trigger_probs = np.array([0.15, 0.08, 0.22, 0.05])定义每个攻击类别的真实触发概率,模拟模型在不同攻击向量上的脆弱程度all_results[start:end] = np.random.binomial(1, prob, size=n_probes_per_category)使用二项分布生成模拟的LLM响应,1表示攻击触发(发现漏洞),0表示安全通过trigger_rates[i] = np.mean(all_results[start:end])计算每个攻击类别的trigger rate,即攻击成功次数占总请求数的比例def grade_vulnerability(rate):定义漏洞分级函数,根据trigger rate将漏洞分为Critical/High/Medium/Low四个等级sample = np.random.choice(category_data, size=n_probes_per_category, replace=True)Bootstrap重采样:从原始结果中有放回地抽样,用于估计trigger rate的置信区间ci_lower = np.percentile(bootstrap_means, 2.5, axis=1)计算95%置信区间的下界,取Bootstrap分布的2.5%分位数safety_scores = 1.0 - trigger_rates计算各类别的安全分数,trigger rate越低安全分数越高overall_safety = np.mean(safety_scores)计算整体安全评分,所有类别安全分数的均值,用于判定模型是否通过安全门禁
常见问答
Garak工具的核心定位是什么?
Garak的Probe、Generator、Detector三个组件分别负责什么?
trigger rate为0.15代表什么含义?
Garak的越狱探针和提示注入探针有什么区别?
为什么Garak扫描通过不代表模型绝对安全?
如何将Garak集成到CI/CD流水线中?
Garak扫描报告中如何评估多个低trigger rate探针的综合风险?
Garak的幻觉探针是如何工作的?
常见误区
误区Garak扫描通过就代表模型绝对安全
正解Garak只能覆盖其已知探针集所定义的攻击面,探针集之外仍可能存在未知的零日攻击向量。此外,trigger rate受采样次数影响,极低概率的安全问题可能在有限次扫描中未被触发。Garak扫描通过只说明模型在已知攻击向量上达到了可接受的安全水平,不代表模型绝对安全。
为何常见:人们容易将自动化扫描工具的通过结果等同于全面安全保证,类似于认为防火墙通过测试就代表网络绝对安全,忽略了未知攻击向量和低概率事件的存在。
误区Garak只是越狱测试工具
正解Garak的探针体系覆盖了多种攻击类别,包括越狱(jailbreak)、提示注入(prompt injection)、幻觉(hallucination)、数据泄露(data leakage)、恶意内容生成(maliciousness)、编码绕过(encoding)等。越狱探针只是Garak众多探针类别中的一个,Garak是一个全面的LLM安全扫描平台。
为何常见:越狱攻击是最受公众关注的LLM安全问题,媒体和研究中对越狱的讨论最多,导致人们误以为Garak只专注于越狱测试,忽略了其在其他攻击类别上的覆盖能力。
误区触发率低的探针就不用管
正解低trigger rate的探针仍可能对应高风险漏洞。原因有三:一是该探针触发的安全问题可能后果极其严重(如泄露大量用户隐私数据),即使概率低也不可忽视;二是多个低trigger rate探针可能形成攻击链,组合利用时风险显著上升;三是随着攻击技术的演化,当前低trigger rate的攻击可能在未来被优化为高trigger rate的攻击。
为何常见:人们倾向于用单一指标(trigger rate)衡量风险,忽略了安全风险的评估需要综合考虑触发概率、影响程度和攻击链可能性等多个维度。
参考来源
- repositoryGarak: LLM Vulnerability Scanner - NVIDIA GitHubNVIDIA开源的LLM漏洞扫描工具Garak的官方仓库,包含完整的探针体系、生成器接口和检测器实现,支持对多种LLM后端进行自动化安全扫描
- webpageOWASP Top 10 for Large Language Model ApplicationsOWASP大语言模型应用十大安全风险,涵盖提示注入、数据泄露、过度代理等LLM特有的安全威胁分类,为Garak等扫描工具的探针设计提供风险框架参考
- paperA Multi-Perspective Challenge Framework for Red Teaming Large Language Models系统性研究LLM红队测试方法论,提出多维度挑战框架评估模型安全性,为Garak等自动化红队工具的探针设计和评估指标提供理论基础