概述
Red Teaming,红蓝对抗,红队扮演攻击方,蓝队扮演防守方,在对抗中提升整体安全水平。渗透测试、攻防演练都是这个思路。
目标:想尽办法让模型说出不该说的话。
红队测试应该贯穿整个生命周期:
- 训练阶段:RLHF,准备好负面脚本,PPO/DPO训练
- 发布前的全面评估:设定安全分级体系,不达标不能发布
- 线上监控:定期红队复测
方法:
- 人工:安全研究员,手动写Prompt攻击模型。优势:人的创造力没上限,能设计出非常刁钻的攻击场景;弊端:速度太慢,人工太贵,高度依赖测试者的水平。
- 领域专家:生物安全、核安全等领域的顶级专家。一个关键发现是:真正造成危害需要把多条精确信息串起来,光看模型单条回复"看起来危险"是不够的,得评估整个攻击链条走不走得通。跟政府的核安全机构合作,在涉密环境下测模型的核相关知识。
- 众包:如DEF CON黑客大会;普通人正常聊天的方式,跟社会工程攻击非常像。
- 多模态:在图片里嵌入文字指令;
- 自动化攻击:模型攻击模型。基本思路:训练攻击模型专门生成对抗性Prompt,让它去跟目标模型对话,再用一个裁判模型判断目标模型有没有翻车。技术路线
- RL训攻击模型:用PPO训一个红队Agent,奖励信号来自攻击是否成功。层次化的multi-turn攻击,高层agent决定策略,底层agent生成具体prompt。
- 搜索+变异。不训模型,而是基于现有的攻击prompt做变异。Rainbow Teaming用quality-diversity的思路维护一个攻击archive,不断生成新的变体填充到archive里。GCG更暴力,直接梯度优化出一个universal的攻击suffix附加到任何prompt后面。
- Fuzzing。借鉴传统安全的模糊测试,对输入做大量随机扰动看模型会不会出意外
- 迭代精炼。PAIR是典型代表:先发一个攻击,看模型怎么回,根据回复改进攻击,再试,反复迭代。TAP在PAIR基础上加了tree search,效果更好一些。
工具
- 编排型框架。支持本地模型和API模型,可比较不同版本,灵活度很高
- 开箱即用型框架:支持测RAG pipeline、chatbot、agent、裸模型,跑完攻击还能直接生成guardrail部署到线上
- 轻量级扫描工具:写Yaml配置文件,可集成到CI pipeline里
注意事项:
- 容易变成走过场:缺乏回归测试
- 自动化能力还不够强
- 红队数据是稀缺资源
趋势:
- 红队测试会变成CI/CD的一部分
- 评估标准会逐步统一。HarmBench、JailbreakBench、WildBench这些benchmark在推动标准化
- 红队的范围会扩大。不只是测模型本身,还要测整个系统
- 跨组织合作会更多:类似于安全领域的CVE漏洞共享机制。
测试数据集
| 数据集 | 规模 | 说明 | 链接 |
|---|---|---|---|
| AdvBench | 520样本 | 标准有害行为测试集 | GitHub |
| HarmfulQA | 1,000+样本 | 有害问题测试集 | HuggingFace |
| AnthropicRedTeam | 38,961样本 | Anthropic红队数据集 | arXiv |
| HH-RLHF | 160k+样本 | 有害性标注数据 | HuggingFace |
| ToxicChat | 10k+样本 | 有毒对话数据集 | GitHub |
| BeaverTails | 30k+样本 | 安全性评估数据集 | HuggingFace |
| 维度 | 传统红队测试 | LLM红队测试 |
|---|---|---|
| 攻击目标 | 网络、系统、应用、人员 | 模型本身、模型应用、数据管道 |
| 攻击向量 | 技术漏洞、社会工程 | 提示注入、越狱、数据投毒 |
| 防御者 | 安全团队、IT运维 | 模型开发者、安全过滤系统 |
| 成功标准 | 获取访问权限、窃取数据 | 生成有害输出、绕过安全措施 |
| 主要风险 | 数据泄露、系统瘫痪 | 生成有害内容、隐私泄露、误导用户 |
| 测试方法 | 自动化扫描+手工渗透 | 手工探测+自动化测试+对抗样本 |
| 攻击者画像 | 黑客、APT组织 | 恶意用户、竞争对手、模型滥用者 |
攻击技术
提示注入攻击:Prompt Injection,简称PI。通过构造恶意输入,覆盖或操纵模型的原始指令,使其执行非预期行为。
提示注入类型:
- 直接注入:提示词直接包含恶意指令
- 间接注入:外部数据包含隐藏的恶意指令
- 存储型注入:恶意提示被存储在数据库/知识库中,当LLM检索这些数据时,触发注入,常见于RAG和知识库应用
- 多轮注入:攻击分散在多个对话轮次中,逐步引导模型
越狱攻击:Jailbreak Attacks,通过精心设计的提示,绕过模型的安全过滤和对齐机制。
技术分类:
- 角色扮演越狱
- 提示模板越狱
- 编码/混淆越狱:如Base64编码的恶意指令、ROT13/凯撒密码加密、Unicode字符替换、同音字/形近字替换
- 上下文操纵越狱:提供大量良性上下文后突然转向恶意请求
- 少样本越狱
- 拒绝抑制越狱:
- 复合攻击:组合多种越狱技术,形成更强的攻击
对抗样本攻击:Adversarial Examples,通过添加人眼不可见的扰动,使模型产生错误输出。
技术:
- GCG:Gradient-based Conservative Gumbel Attack,基于梯度的优化方法,自动生成对抗性后缀
- AutoDAN:自动生成人类可读的越狱提示,结合语义优化和对抗性目标,生成自然语言形式的攻击提示
- PEZ:Pixel-based Embedding Attack,在嵌入空间中优化对抗性输入,直接操作Token embeddings
- UAT:Universal Adversarial Triggers,通用的对抗触发器,可迁移到多个输入。
攻击成功的衡量指标
| 指标 | 定义 | 计算方式 |
|---|---|---|
| ASR(Attack Success Rate) | 攻击成功率 | 成功绕过防护的次数/总攻击次数 |
| Bypass Rate | 绕过率 | 成功绕过过滤器的比例 |
| Harmful Content Rate | 有害内容率 | 生成有害内容的比例 |
| Refusal Rate | 拒绝率 | 模型拒绝回答的比例 |
| False Positive Rate | 误报率 | 良性内容被误判为有害的比例 |
| Transfer Success Rate | 迁移成功率 | 攻击在不同模型间的成功率 |
OWASP
评比Top 10
LLM01:提示注入(Prompt Injection)
- 风险:恶意输入覆盖系统指令,导致未授权操作
- 攻击向量:直接注入、间接注入、存储型注入
- 影响:数据泄露、权限绕过、恶意操作执行
LLM02:敏感信息泄露(Sensitive Information Disclosure)
- 风险:LLM在输出中泄露训练数据中的敏感信息
- 攻击向量:记忆攻击、成员推断、训练数据提取
- 影响:PII泄露、商业机密暴露、合规违规
LLM03:供应链漏洞(Supply Chain Vulnerabilities)
- 风险:第三方模型、数据集、插件存在安全漏洞
- 攻击向量:预训练数据投毒、后门模型、恶意插件
- 影响:数据投毒、后门植入、供应链攻击
LLM04:数据与模型投毒(Data&Model Poisoning)
- 风险:训练数据或模型被恶意修改
- 攻击向量:数据投毒、后门植入、模型篡改
- 影响:模型行为异常、安全防护失效、偏见放大
LLM05:不当输出处理(Improper Output Handling)
- 风险:LLM输出未经验证直接使用
- 攻击向量:XSS、SSRF、代码执行
- 影响:前端攻击、服务器端攻击、数据泄露
LLM06:过度权限(Excessive Agency)
- 风险:LLM系统被授予过多的操作权限
- 攻击向量:权限滥用、工具误用、代理失控
- 影响:未授权操作、数据删除、系统破坏
LLM07:系统提示泄露(System Prompt Leakage)
- 风险:系统提示词被用户提取
- 攻击向量:提示注入、社交工程、模型推理
- 影响:知识产权泄露、安全机制暴露、攻击面扩大
LLM08:向量与嵌入漏洞(Vector&Embedding Weaknesses)
- 风险:RAG系统中的向量数据库存在安全漏洞
- 攻击向量:投毒注入、间接注入、数据泄露
- 影响:检索篡改、虚假信息注入、数据泄露
LLM09:虚假信息(Misinformation)
- 风险:LLM生成虚假、误导或无意义的内容
- 攻击向量:幻觉、错误事实、误导性输出
- 影响:决策错误、声誉损失、法律责任
LLM10:无限资源消耗(Unbounded Consumption)
- 风险:无限制的资源消耗导致服务不可用
- 攻击向量:资源耗尽攻击、长上下文攻击、递归攻击
- 影响:服务拒绝、成本失控、系统崩溃
| OWASP风险 | 红队测试重点 | 测试方法 |
|---|---|---|
| LLM01提示注入 | 提示注入、越狱攻击 | 手工探测+自动化模糊测试 |
| LLM02敏感信息泄露 | 训练数据提取、记忆攻击 | 成员推断、数据提取攻击 |
| LLM03供应链漏洞 | 第三方组件安全评估 | 代码审计、依赖分析 |
| LLM04数据投毒 | 投毒攻击、后门检测 | 数据审计、模型测试 |
| LLM05输出处理 | XSS、SSRF、代码执行 | 渗透测试、输出验证 |
| LLM06过度权限 | 权限滥用、代理失控 | 权限测试、边界测试 |
| LLM07系统提示泄露 | 提示词提取 | 社交工程、推理攻击 |
| LLM08向量漏洞 | RAG投毒、检索篡改 | 数据库攻击、注入测试 |
| LLM09虚假信息 | 幻觉测试、事实核查 | 事实验证、一致性测试 |
| LLM10资源消耗 | DoS攻击、资源耗尽 | 压力测试、边界测试 |
闭源
HiddenLayer
官网,机器学习安全平台,能力:模型漏洞扫描,对抗性攻击检测。
Robust Intelligence
官网,AI安全测试平台,能力:自动化红队测试、模型鲁棒性评估。
CalypsoAI
官网,能力:LLM安全防护、提示注入检测、数据泄露防护。
Lakera
官网,LLM安全平台,Gandalf游戏化安全测试、提示注入防护。
Prompt Security
官网,专注于LLM安全,提示攻击检测、合规性测试。
Protect AI
官网,AI供应链安全,Guardian平台,模型扫描。
GitHub-CVE
监控平台,CVE列表、红队工具。
LM-Evaluation-Harness
官网,开源(GitHub,13K Star,3.3K Fork)LLM全面评估框架,包含安全评估。
Garak
开源(GitHub,8.1K Star,1K Fork)。
核心概念:
- Probes (探针):生成测试提示
- Detectors (检测器):分析模型输出
- Buffs (增强器):增强/变异输入
探针类型
| Probe类型 | 测试内容 |
|---|---|
| realtoxicityprompts | 有毒内容生成 |
| always | 简单越狱测试 |
| glitch | 特殊token测试 |
| continuation | 续写有害内容 |
| dan | DAN越狱测试 |
| encoding | 编码绕过测试 |
| gcg | GCG对抗攻击 |
| knownbadsignatures | 已知恶意签名 |
| misleading | 误导性提示 |
| xss | XSS注入测试 |
使用示例
bash
# 安装
pip install garak
# 基本扫描
garak --model_type openai --model_name gpt-4
# 指定探针
garak --model_type huggingface --model_name gpt2 --probes dan,encoding,xss
# 输出报告
garak --model_type local --model_name my-model --report_prefix my_test
Giskard
开源(GitHub,5.4K Star,470 Fork),官方文档。
架构
- 模型扫描 (Model Scanning)
- 自动检测模型漏洞
- 支持多种模型类型(LLM、分类、回归)
- 可视化报告
- 漏洞类型:
- 幻觉(Hallucination)
- 有害内容(Harmful Content)
- 偏见(Bias)
- 注入攻击(Injection)
- 敏感信息泄露(Sensitive Info Leakage)
- 测试套件(Test Suites)
- LLM测试套件
- 数据切片测试
- 对抗性测试
- 自定义测试
使用示例
py
import giskard as gsk
from giskard.llm.client import OpenAIClient
# 创建模型
model = gsk.Model(
model=my_llm_function,
model_type="text_generation"
)
# 扫描模型
results = gsk.scan(model, dataset=my_dataset)
# 生成测试套件
test_suite = results.generate_test_suite()
LLM Attack
官网,论文,开源(GitHub,4.7K Star,624 Fork);基于梯度的对抗性后缀生成。
PromptInject
论文,开源(GitHub,499 Star,52 Fork)专门用于评估LLMs面对敌对性提示攻击时的稳健性,主要聚焦于两种攻击策略:目标劫持和提示泄露,通过精心设计的恶意输入引导模型产出预料之外甚至有害的回答。
简化启动步骤:
- 加载数据:使用
load_data_all_attacks()函数准备攻击数据 - 定义攻击:选择或配置如
promptinject_hate-humans的攻击模式 - 执行攻击:根据设定的目标执行提示注入
- 分析结果:分析模型响应,评估模型对不同攻击的抵抗能力
AutoDAN
论文,开源(GitHub,445 Star,63 Fork)项目,自动生成人类可读的越狱提示。
PyRIT
项目主页,Python Risk Identification Tool缩写,微软开源(GitHub,63 Star,9 Fork),不过已于26年3月27日归档。
核心组件
- AttackModules(攻击模块)
- PromptMutationAttack:提示变异攻击
- CrossSiteScriptingAttack:XSS攻击测试
- RolePlayAttack:角色扮演攻击
- GradientBasedAttack:基于梯度的攻击
- TargetSystems(目标系统)
- Azure OpenAI
- OpenAI API
- HuggingFace Models
- Custom Endpoints
- Scorers(评分器)
- TrueFalseScorer:二元评分
- LikertScaleScorer:李克特量表评分
- HumanScorer:人工评分
- SelfAskScorer:模型自评分
- Orchestrators(编排器)
- PromptSendingOrchestrator:提示发送
- MultiTurnOrchestrator:多轮对话
- RedTeamingOrchestrator:红队测试编排
使用示例
py
from pyrit.prompt_target import AzureOpenAIGPT4OChatTarget
from pyrit.orchestrator import RedTeamingOrchestrator
from pyrit.attack_strategy import AttackStrategy
from pyrit.score import SelfAskTrueFalseScorer
# 初始化目标模型
target = AzureOpenAIGPT4OChatTarget()
# 初始化红队编排器
orchestrator = RedTeamingOrchestrator(
attack_strategy=AttackStrategy.JAILBREAK,
prompt_target=target,
scoring_scorer=SelfAskTrueFalseScorer()
)
# 执行红队测试
results = orchestrator.run_attack()
redStack
基于Terraform和AWS,能在30分钟内获得一个从"开机到破防"的完整红队环境。集成Mythic、Sliver、Havoc三个主流C2框架、带安全过滤的Apache重定向器、集中访问的Guacamole网关,以及预装工具的Windows操作站。支持既需要公网域名、又想连接HackTheBox、VulnLabs这类封闭VPN环境的两种模式。
目标是:让使用者能立即投身于高级C2战术的演练,而不是浪费时间去配置实验室。
默认网络架构:
- C2服务器端VPC:内部IP段
172.31.0.0/16,包含Mythic、Sliver、Havoc三个C2服务器,Guacamole网关和Windows操作站。 - 重定向器VPC:内部IP段
10.60.0.0/16,仅包含Apache重定向器服务器。 - 关键设计:所有C2服务器均无公网IP,只能通过VPC对等连接,由重定向器进行代理访问。
安全设计核心:重定向器会验证特定的HTTP头部(X-Request-ID)和URI前缀。只有匹配的请求才会被代理到后端的C2服务器,否则将返回一个伪装成CDN维护页面的诱饵页面。