李阿姨的智能鸡舍刚装好,安装师傅拍着胸脯说:“这套 AI 监控连小虫子都能认出来,狐狸更别想靠近。”李阿姨却有点不放心。她请来一位外号叫“狐狸”的安全顾问小胡——小胡不看说明书,而是真的像狐狸一样思考:门缝能不能挤进去?墙角能不能挖穿?监控的正下方是不是盲区?他绕着鸡舍转了三圈,最后在排水管旁边找到一个大洞。 小胡做的事,就叫“红队测试”(Red Teaming):不是破坏系统,而是模拟攻击者的思路,主动去找 AI 的漏洞。这个方法像给大模型做一次“黑客体检”,在坏人发现漏洞之前先找到它。这篇文章会带你走一遍整套流程:从威胁建模、攻击策略设计,到对抗样本、越狱提示,再到漏洞分类和风险评级。你会发现,找出 AI 的漏洞不是靠运气瞎试,而是一套可以学习的系统方法。
对 AI 从业者来说,红队测试是安全能力的分水岭。学会它,你就能在模型上线前主动发现致命隐患,而不是等事故发生后被动救火。
可视化演示
在碗形损失曲面上对比SGD、Momentum、Adam三种优化器的收敛轨迹,观察不同策略对梯度下降效率和稳定性的影响。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.sgd+'
红队测试概述
小胡的第一件事不是动手拆鸡舍,而是先弄清楚“狐狸到底想要什么”。红队测试本质上也是一样:先定义目标,再决定怎么测。它的目标不是证明 AI “绝对安全”,而是用攻击者的视角,找出那些可能被真实利用的安全漏洞。红队在明处模拟攻击,蓝队则在暗处防守、修复,两者像一场有规则的攻防演练。
在 AI 领域,红队可以是独立的安全专家,也可以是自动化测试程序。他们会故意输入刁钻的提示词,构造特殊的图片,甚至反复追问同一个问题,直到模型露出破绽。这个过程的产出,是一份漏洞报告,而不是一句“一切正常”。为了衡量这次测试有没有效果,常用一个简单的等式:
小胡把这句话记在笔记本上:试探再多,不如想清楚再试。红队测试不是碰运气,而是把“像个狐狸一样思考”变成一套可重复、可衡量的流程。
- 发现漏洞数最终要交付的结果,代表红队真正找到并确认的安全问题数量。
- 试探次数红队发出的对抗样本、越狱提示、边界输入的总数量,代表测试的投入。
- 平均成功率每一次试探能命中真实漏洞的概率,考验的是攻击策略的设计水平。
攻击面与威胁建模
小胡给鸡舍画了一张地图:正门、侧窗、排水管、通风口、房顶接缝,全都标出来。这张地图就是“攻击面”。AI 模型的攻击面也很广:用户输入的提示词、模型调用外部工具的能力、知识库里可能被污染的资料、以及输出内容展示给下游应用的方式,每一个入口都可能被利用。
有了地图,还要做“威胁建模”。不是每个入口都值得花同样的功夫,小胡会先判断:哪个口子最容易进狐狸?进去了能偷几只鸡?对 AI 来说,同样的风险也会分配不同权重。比如“工具调用”入口一旦失守,可能让模型真的执行危险操作,优先级自然高于单纯的“多轮闲聊”。用覆盖率来衡量威胁建模是否完整:
地图画完,小胡拿红笔在几个关键入口上打了星号。他知道,完整的攻击面清单永远比聪明的攻击技巧更重要——方向错了,技巧再好也白费。
L_total 找完整。- 攻击面覆盖率衡量红队测试是否覆盖了所有需要关心的入口,避免漏测。
- 已测入口数本次红队测试实际覆盖到的提示入口、工具调用、知识库和输出通道数量。
- 总入口数通过威胁建模梳理出来的完整攻击面清单数量。
攻击策略设计
地图在手,小胡开始写“狐狸行动手册”。他不会只在正门敲两下,而是会设计一整套攻击剧本:从正面敲门假装送饲料,到侧面挖洞,再到深夜从屋顶溜进去。AI 红队也一样,要设计覆盖不同层级的攻击策略。
第一种是黑盒测试:不知道模型内部结构,只能像普通用户一样通过输入输出试探。第二种是白盒测试:拥有模型权重和结构信息,可以更精准地定位薄弱点。实战中通常两者结合。更关键的是,一个攻击模板往往需要做大量变异:换人称、换语气、换场景、换编码方式。如果我们知道单次试探的成功率是 p,那么变换 n 种说法后,至少有一次成功的概率是:
小胡的剧本越写越厚。每一招都记录在案,失败的原因也一并写下来。这样,即使这次没攻破,下一次也能站在上次的脚印上继续前进。
- 总突破概率经过
n种变异攻击后,至少有一种能绕过安全防护的概率。 - 单次失败率一种攻击说法没能突破模型防护的概率。
- 全部失败的概率
n种说法全都无效的概率。 - 取反得到成功用 1 减去“全都失败”,就得到至少一次成功的概率。
对抗样本攻击
小胡发现鸡舍门口的摄像头虽然能识别鸡,但只要在鸡翅膀上贴三片类似树叶形状的贴纸,摄像头就会把鸡认成“树枝”。这个把戏,就是“对抗样本”:在人眼看不出明显区别的情况下,让模型产生完全错误的判断。
对抗样本的核心在于“微小扰动”。红队会在一张正常图片上叠加一层极其细微的噪声,让模型置信度发生翻天覆地的变化。最典型的攻击可以写成:
小胡把这套手法记在攻击手册里。因为对抗样本会从图片自然迁移到文本、语音甚至多模态场景,它一直是红队测试里最容易“以小博大”的入口。
ε 的前提下,找到让模型输出目标错误标签的扰动 δ。- 扰动向量加在原始输入
x上的微小改动,通常小到人眼难以察觉。 - 扰动约束限制单个像素的最大变化不超过
ε,确保攻击是“隐蔽”的。 - 目标函数衡量模型输出与攻击目标
y_target之间的差距。 - 最大化红队希望找到让模型错误最严重的那个扰动。
越狱提示攻击
有的狐狸不打洞,改穿保安制服,大摇大摆从正门走进去。AI 的“正门”就是提示词。所谓越狱提示攻击,就是构造一段精心设计的自然语言,让大模型绕过自己内置的安全声明,说出原本被禁止的内容。
常见手法包括角色扮演:让模型假装自己是“没有限制的测试老师”;还包括声明分割:把敏感请求拆成前后无关的几段,再让模型自己拼起来;或者通过多轮对话,先聊安全话题,再悄悄切换到危险方向。红队评估越狱模板的公式很直白:
小胡把越狱模板看成“钥匙串”。每把钥匙对应一句话术,总有一把能碰到安全策略的缝隙。而红队的价值,就是在坏人捡到钥匙之前,先向开发者报告:这把锁该换了。
SR 表示某个越狱模板的成功率。红队会测试大量模板,保留成功率最高的那一个。- 越狱成功率一个提示模板
φ能成功让模型违规回答的概率。 - 模板参数代表角色扮演、前缀拼接、编码混淆等具体的攻击模板。
- 成功绕过次数在测试中,模型确实输出了被安全策略阻止内容的次数。
- 总测试次数同一个模板重复测试的次数,用来稳定估算成功率。
漏洞分类评估
找到洞之后,小胡不会大喊“鸡舍不安全”,而是把每个洞分门别类:这是墙上的小洞,还是大门敞开?是只要一只狐狸就能钻进来,还是需要三只狐狸合作?AI 漏洞也需要分类与评估,目的是让开发团队知道先补哪里。
红队报告通常会标注漏洞类型,比如提示注入、对抗样本、拒绝服务、信息泄露;同时还要记录触发条件和复现步骤。如果同一个漏洞没办法稳定复现,它的优先级就要降一档。用危害分数来映射等级,是常见的做法:
小胡在报告里画了一张漏洞分布图:高危洞画红圈,中危画黄圈,低危画蓝圈。分类不是目的,把有限的人力用在最危险的缺口上,才是目的。
S(v),再用分段函数映射成高、中、低三个等级。- 漏洞等级最终用来决定修复优先级的分类结果。
- 危害分数综合危险程度、利用难度、影响范围后得到的 0 到 10 分。
- 高分映射大于等于 7 分,直接进入高危榜单,优先处理。
- 中低分段4 到 7 分为中危,小于 4 分为低危,按资源排序修复。
风险评级与闭环
最后一个问题:哪个洞先补?小胡把“狐狸钻进鸡舍能造成多大损失”和“这条路线容不容易被利用”放在一起算总分。AI 风险评级也是一样,常用一个乘法公式:
更重要的是闭环:发现漏洞 → 评级 → 修复 → 回归测试 → 发布。小胡补完洞后,会再扮一次狐狸,从同一个入口再试一遍,确认它真的补上了。红队测试从来不是一次性任务,而是一场没有终点的攻防马拉松。
- 总风险分数用来给漏洞排名,分数越高越需要马上修复。
- 影响程度漏洞一旦被利用,对用户、资产或声誉造成的伤害有多大。
- 可利用性漏洞被攻击者利用的难易程度,越容易利用,分数越高。
- 发生概率在真实场景中,这个漏洞被触发的可能性有多大。
AI 应用场景
大模型上线前红队演练
阶段:模型评估与发布门禁
解决的问题:传统做法主要靠用户反馈来发现问题,漏洞往往在事故发生后才知道。红队测试在模型上线前先模拟攻击,把高风险问题挡在发布门外。
具体案例:某智能客服机器人上线前,红队用角色扮演越狱提示套出了“退款链接生成”能力,让模型在未授权场景下调用支付接口。安全团队随即对该能力增加二次校验,漏洞在灰度发布前被修复。
内容安全风控持续对抗
阶段:内容审核模型运营维护
解决的问题:黑产会不断变换话术、编码、表情符号来绕过审核模型。红队测试通过批量变异攻击样本,提前发现审核盲区。
具体案例:某社区平台的审核模型被红队发现,用“拼音首字母 + emoji”的方式可以绕过辱骂检测。红队把一批变异样本加入训练集,模型拦截率从 71% 提升到 93%。
多模态模型鲁棒性测试
阶段:模型安全评估
解决的问题:多模态模型同时处理图片和文字,攻击面更大。传统单模态测试容易漏掉跨模态的对抗样本风险。
具体案例:红队在一张发票图片上叠加肉眼不可见的噪声,让模型把“报销金额 1000 元”识别成“100000 元”。测试团队增加了输入校验和后处理规则,堵住了财务自动化场景的漏洞。
Python 演示
# -*- coding: utf-8 -*-"""红队测试漏洞报告与风险评分演示""" class RedTeamReport: def __init__(self, model_name): self.model_name = model_name self.cases = [] def add_case(self, name, success, impact, exploitability): self.cases.append({ "name": name, "success": success, "impact": impact, "exploitability": exploitability }) def risk_score(self, case): return round(case["impact"] * case["exploitability"] * (1 if case["success"] else 0.5), 2) def summarize(self): rows = [] for case in self.cases: rows.append((case["name"], self.risk_score(case))) rows.sort(key=lambda row: row[1], reverse=True) return rows def build_cases(): report = RedTeamReport("chat-protector-v1") report.add_case("对抗样本图片", True, 8, 9) report.add_case("角色扮演越狱", True, 7, 8) report.add_case("提示注入", False, 9, 6) report.add_case("多轮上下文攻击", True, 6, 7) return report if __name__ == "__main__": report = build_cases() for name, score in report.summarize(): print(name, score)
常见误区
误区红队测试感觉就是不断输入各种脏话和危险内容,说得越极端越“红”,甚至追求让模型生成最坏的回答。
正解红队测试的核心是系统化地验证安全边界,而不是为了“制造坏人”。真正的红队测试要求有明确的测试计划、漏洞记录和可复现步骤,同时要在受控环境中进行,不能直接造成真实伤害。好比小胡测试鸡舍,不是真的让狐狸咬鸡,而是模拟路线之后把洞补上。
为何常见:因为红队的“攻击者”人设很容易被误解成越坏越好,忽略了安全测试本身就是一项严谨的工程活动。
误区如果模型没有说出明显违法或有害的内容,就说明红队测试没找到漏洞,测试没价值。
正解漏洞的形式非常多样:模型可能无意中泄露训练数据、过度顺从导致隐私泄露、调用工具时权限失控、甚至会在特定表情符号下情绪崩溃。只要某个输入能引起预期之外的危险行为,就算漏洞。这就像狐狸虽然没有进鸡舍,但已经用爪子把围栏挖松了,隐患同样真实存在。
为何常见:因为危险内容最容易“看见”,而信息泄露、工具滥用、边界失效等问题需要更深入分析,容易被忽视。
误区只要这次红队测试没有发现高危漏洞,模型就可以放心上线,以后也不用再测。
正解红队测试只能证明“已经测过的样本里没发现漏洞”,不能证明“所有未测试样本都安全”。攻击面会随着模型版本更新、功能扩展、供应链变化而改变,需要持续进行回归测试。鸡舍今天没有洞,不代表明天野狗不会拱开一片新缺口。
为何常见:因为人很容易把“暂未发现”误当成“绝对没有”,忽略了安全测试天然存在覆盖度上限。
误区对抗样本是在图片上贴噪点的小把戏,文本大模型结构不同,所以不用考虑这个问题。
正解文本、语音、多模态模型同样有对抗风险。比如在提示词中插入特殊 Unicode 字符、同音字替换、谐音混淆,都可能让安全过滤器失灵。只要模型把输入映射到向量空间,就一定存在边界附近的脆弱点。
为何常见:因为图像对抗样本的图例最直观,容易让人以为这是视觉任务独有的问题,实际上它是深度学习模型的共性缺陷。
面试题
Q1. 红队测试最重要的目的是什么?
- A.证明模型一定安全
- B.找出可被利用的漏洞← 正确答案
- C.让模型生成更多内容
- D.增加模型的参数量
答案:B。红队测试模拟攻击者的思路,目的是在真实攻击发生前找到可被利用的漏洞。它不是证明安全,也不是追求输出数量,更与参数量无关。
Q2. 下面哪一项最像红队测试?
- A.请专家做正式演讲
- B.请猎人清点圈养家禽
- C.请狐狸志愿者检查围栏← 正确答案
- D.请厨师研发新菜谱
答案:C。红队测试就像请熟悉攻击思路的人主动寻找防护漏洞。狐狸志愿者不吃鸡,但会用狐狸的方式检查围栏,和红队工程师模拟攻击者非常相似。
Q3. 对抗样本通常指的是什么?
- A.大幅修改模型结构
- B.给人看的错误标签
- C.人眼几乎无感的扰动← 正确答案
- D.随机删除训练数据
答案:C。对抗样本的核心是“微小扰动”。在人眼几乎无法察觉的情况下,让模型产生错误判断,而不是修改结构或数据。
Q4. 黑盒攻击的主要特点是什么?
- A.不依赖模型内部参数← 正确答案
- B.只能修改训练数据
- C.必须拥有模型权重
- D.无法进行迁移攻击
答案:A。黑盒攻击只通过输入和输出观察模型行为,不依赖内部参数。它依然可以通过同类模型的输出构造迁移攻击,因此并不是无法迁移。
Q5. 在红队测试中,威胁建模的主要作用是什么?
- A.让攻击更加随性发挥
- B.列出入口并排序风险← 正确答案
- C.自动修复全部漏洞
- D.取代人工测试人员
答案:B。威胁建模面对整个攻击面,把所有入口列出来并评估风险优先级。它让测试有计划、有覆盖,而不是随意发挥。
Q6. 风险评分公式 R = I × E × P 中,E 代表什么?
- A.漏洞影响的严重程度
- B.漏洞被利用的难易程度← 正确答案
- C.红队测试的总次数
- D.模型输出内容长度
答案:B。E 是 Exploitability,即可利用性,表示漏洞被攻击者利用的难易程度。影响程度对应 I,发生概率对应 P。
Q7. 关于越狱提示攻击,下列描述最准确的是?
- A.直接修改模型训练数据
- B.与训练数据完全相同
- C.用自然语言绕过安全约束← 正确答案
- D.只能通过图片嵌入实现
答案:C。越狱提示攻击通过精心构造的自然语言,让模型绕过内置安全约束。它不修改数据,也不需要图片嵌入,文本提示本身就能完成。
Q8. 下面哪些信息应该在漏洞分类时登记?
- A.触发方式与复现步骤← 正确答案
- B.漏洞危害与影响范围← 正确答案
- C.模型训练集的大小
- D.红队成员的姓名年龄
答案:AB。漏洞分类需要关注触发条件、复现步骤、危害和影响范围。模型训练集大小与本次漏洞是否成立无关,红队成员个人信息也不属于漏洞属性。
Q9. 哪些做法能提高红队测试的覆盖率?
- A.使用多种攻击模板← 正确答案
- B.只测同一个高危入口
- C.结合白盒与黑盒信息← 正确答案
- D.停止测试静等用户报告
答案:AC。多种攻击模板覆盖更多攻击路径,白盒与黑盒结合能同时利用内部知识和外部观察。只测一个入口会漏掉其他风险,静等用户报告则是被动防御。
Q10. 为什么红队测试通过后仍不能宣称模型绝对安全?
- A.测试样本只是攻击面子集← 正确答案
- B.模型更新后风险会变化← 正确答案
- C.红队能穷尽所有攻击
- D.所有漏洞会永久不变
答案:AB。红队测试只能覆盖有限的攻击样本,不能穷尽所有可能;同时模型和外部环境都在变化,旧漏洞会修复,新风险会出现。正因为如此,红队测试需要持续迭代。