使用Garak对大模型进行安全扫描
什么是 garak
garak
是英伟达开源的大语言模型的漏洞扫描工具,支持对大模型进行幻觉、数据泄露、提示词注入、误解、恶意内容生成、越狱等脆弱性进行扫描。类似于传统渗透测试中的nmap
和msf
等工具。
安装 garak
官方代码仓库:https://github.com/NVIDIA/garak
官方文档:https://reference.garak.ai/en/latest/
环境准备
操作系统:Linux / Windows (优先使用Linux)
Python版本:3.10 | 3.11 | 3.12
使用 PIP
安装
python -m pip install -U garak
验证安装
garak --version
基础概念
查看 garak
的源码目录,可以看到以下文件夹:
/garak
--/analyze
--/buffs
--/configs
--/data
--/detectors
--/evaluators
--/generators
--/harnesses
--/probes
--/resources
这些文件夹下的文件在 garak
中被称为插件,我们主要关注其中的 detectors
、evaluators
、generators
、harnesses
、probes
。
detectors
classes for detecting an LLM is exhibiting a given failure mode
用于检测 LLM 是否表现出给定故障模式的类
evaluators
assessment reporting schemes
评估类
generators
plugins for LLMs to be probed
用于指定大模型如何扫描,如RESTful API、标准OPEN AI接口等。如果需要测试的目标大模型使用了非标准的自定义接口,则需要使用自定义的 generator
harnesses
classes for structuring testing
用于构建测试的类
probes
classes for generating interactions with LLMs
用于生成测试用例的类
基础指令
查看探针
garak --list_probes
查看 generator
garak --list_generators
默认支持这些常见的 generator:
- huggingface
- AzureOpenAI
- cohere
- ggml
- groq
- guardrails
- langchain
- langchain_serve
- litellm
- nemo
- nim
- nvcf
- octo
- ollama
- openai
- rasa
- replicate
扫描
- 由于
LLM
具有随机性,每个测试用例会被发送5
次。 Garak
具备API
频率检测机制,如果检测到网关返回码为429
,会再次重试直到成功,最大尝试次数为70
次。
garak --model_type openai --model_name gpt-3.5-turbo --probes encoding
Ollama 实例
我在本地 Ollama
部署了一套 deepseek-r1:1.5b
,现在以这个模型进行演示。
基础扫描
garak --model_type ollama --model_name deepseek-r1:1.5b --probes encoding
并行扫描
如下命令指定并发数量为 5,即同时发起 5 个请求。
garak --model_type ollama --model_name deepseek-r1:1.5b --probes encoding --parallel_attempts 5
注:某些 probe
不支持并发扫描,具体查看 parallelisable_attempts
属性,如果为 false
,代表不支持并发扫描。
示例文件:probes\promptinject.py