城市里有一家“模型小馆”,门口的招牌菜是“图像识别红烧肉”。你不知道的是,后厨有一整套自动化炒菜系统:每道菜的火候、调味、食材配比都被写成密密麻麻的参数。想搞垮这家餐厅的对手,有三种“侦察方式”:拿着完整菜谱和厨房监控的前员工,能直接改配方;只能在门口反复点菜、试菜的食客,只能从一道菜咸不咸来反推配方;还有一个偷看过垃圾桶里旧菜单的老熟人,知道一部分料。这三种视角,就是 AI 安全里说的“白盒、黑盒、灰盒”威胁模型。它不直接告诉你某个攻击该怎么打,而是先定义:攻击者到底能看见多少?看得越清,攻击越精准;反之,就只能靠耐心和旁敲侧击。理解这个分类,就像给餐厅画了一张“谁可能从哪个门进来”的地图,所有攻防设计都要从这里出发。
威胁模型是 AI 对抗安全的“第一块砖”。对从业者而言,学会按黑盒/白盒/灰盒判断攻击者能力,才能选对攻击方法、设计有效防御,是安全测试和风险评估岗位的基本功。
可视化演示
展示黑盒、白盒、灰盒三类威胁模型的知识访问边界、攻击方法选择与防御策略匹配关系。
本节配有交互动效(进入视口后自动加载,约 3KB)。
威胁模型分类 黑盒仅查询输出,灰盒部分知识,白盒完整梯度访问 威胁=知识×能力 攻击者知识访问程度决定攻击方法选择
威胁模型基础
“模型小馆”的后厨究竟有多神秘?这取决于你看过什么。如果你只是路过的食客,只能看到端出来的菜;如果店里出了内鬼,你连每道菜下几克盐都一清二楚;如果捡到过一张旧菜单,你又知道了一部分食材。AI 安全里的威胁模型,做的正是这件事:在攻击发生之前,先写清楚“攻击者是谁、他手里拿着什么钥匙”。它把攻击者的能力假设划分为白盒、黑盒、灰盒三类,用来回答一个根本问题:攻击者能访问模型的知识到什么程度?
技术上说,威胁模型是攻击者能力的一个结构化描述。我们通常从四个维度刻画攻击者:他是否知道模型结构 $\theta$?他能否查询输入并看到输出 $f(x)$?他能否获得损失函数关于输入的梯度 $\nabla_x J$?他是否掌握训练数据分布 $D$?这四个维度合起来,就构成了攻击者的“能力画像”。
有了这把“能力画像”,餐厅才知道该在门口装栏杆、还是在后厨加锁。威胁建模不是防御的备选项,而是攻防设计的起点:先定义攻击者能看见什么,再决定我们该防什么。
- 模型知识 $\mathcal{K}$攻击者是否知道模型结构、权重等内部信息,白盒对应“完全知道”,黑盒对应“完全不知道”。
- 查询权限 $\mathcal{Q}$攻击者可以向模型发送输入并获得输出,黑盒攻击者的主要信息来源就靠它。
- 梯度可达性 $\mathcal{G}$攻击者能否拿到损失对输入的梯度,这是白盒与黑盒最重要的分水岭。
- 训练数据知识 $\mathcal{T}$攻击者是否了解模型在什么数据上训练,灰盒攻击常利用这一点估计决策边界。
黑盒攻击场景
想象一位真正的“黑盒食客”:他站在“模型小馆”门口,不能进后厨,也没有旧菜单,唯一的武器是反复点菜。他点一份“红烧肉”,尝一口,再点一份“糖醋排骨”,再尝一口。他通过观察“同一道菜在什么情况下会变味”——也就是相同输入在微小改动后会不会被识别成另一道菜——来一点点摸索决策边界。
在现实世界,这种场景极其常见:你调用的第三方图像识别 API、语音服务、大模型接口,几乎都是黑盒。服务器不会给你权重文件,更不会开放梯度。攻击者只能向 API 发送图片,拿到 top-1 或 top-5 的分类结果。他们甚至会被限流:每秒最多查 10 次。这正是黑盒攻击的约束条件——信息少、查询贵、还要躲过风控。
黑盒攻击的核心描述是:输入 $x$ 可以被攻击者任意构造,但攻击者只能观察到模型的输出 $f(x)$,而无法观测到中间任何层或梯度。
对这些攻击者来说,没有梯度就像没有菜谱。但他们仍然可以用三种策略:随机扰动试错、模仿一个替代模型来转移攻击、或者利用统计方法估计梯度方向。所以千万别认为黑盒攻击只是“碰运气”,在查询次数足够多时,它也可以精确得像一个看不见后厨却尝得出火候的老饕。
- 输入输出接口攻击者选择一个输入 $x$,模型返回一个分布向量 $f_{\text{black}}(x)$。
- 决策标签攻击者通常只看最大概率对应的类别,把它当作模型的“最终裁决”。
- 查询代价每调用一次 API 就是一次查询,黑盒攻击的难度与查询次数强相关。
白盒攻击原理
再来看另一种攻击者:他是“模型小馆”的前主厨,手里有一本完整的菜谱,甚至清楚每道菜在 180 度还是 200 度下锅。对这样的人来说,想知道“哪道菜最容易搞砸”,根本不需要试吃,他直接看配方就知道:改变某一种材料,菜就毁了。
白盒攻击者拥有模型的全部信息:结构、权重、损失函数,尤其是梯度。梯度告诉他:在输入空间往哪个方向走一小步,会让模型的损失急剧上升。最经典的梯度攻击方法 FGSM,就是沿着损失对输入的梯度符号方向加上一个微小扰动,让模型把“红烧肉”认成“红烧石头”。
白盒攻击是攻击能力的天花板。只要能拿到梯度,攻击成功率通常远高于黑盒;但它也假设攻击者已经拿到了最敏感的信息。因此,白盒攻击多用于内部安全测试:研发团队在发布模型前,用白盒方法找出最脆弱的方向,然后针对性加固。这就像餐厅主厨自己反复试菜,把最容易翻车的配方提前改掉。
- 原始样本从测试集取一个合法输入 $x$ 和正确标签 $y$。
- 计算梯度求损失 $J$ 关于输入 $x$ 的梯度,得到每个像素“往哪个方向改最有效”。
- 取符号只保留梯度方向的正负,不关心大小,保证扰动是“均匀而隐蔽的”。
- 叠加扰动用步长 $\varepsilon$ 缩放后加到原样本上,生成对抗样本。
灰盒中间地带
真实世界很少非黑即白。想象一位“灰盒老熟人”:他不是前主厨,但曾在店里打过半年工,记得盐和糖的大致比例;或者他捡到过一张三个月前的旧菜单,记得那时会用老抽,却不清楚现在是否换了生抽。这些零碎信息不足以完整重建配方,但足以让他判断出“这道菜的弱点大概在甜味还是咸味上”。
灰盒攻击者正是这样:他掌握部分模型信息,可能知道模型结构(比如基于 ResNet 或 Transformer),可能掌握公开的预训练权重,但不知道最终微调后的参数;也可能知道训练数据的大致分布,却不知道确切的权重。这种“知道一半”的状态,在实际中其实最常见——很多开源模型被公司下载后私有化部署,攻击者能拿到开源版本,却拿不到你微调后的版本。
灰盒攻击最有力的武器是迁移性:在公开模型上用白盒方法生成的对抗样本,往往也能骗过结构相似的私有模型。评估这种威胁,通常用迁移攻击成功率来衡量。
可见,灰盒攻击者并不需要拿到完整权重,只需要“沾点边”的信息就能显著降低攻击门槛。这也提醒企业:公开模型结构、开源代码、泄露的旧版本权重,都可能成为灰盒攻击的垫脚石,威胁模型不能只看“黑或白”。
- 替代模型攻击者用一个自己掌握的模型 $f_{\text{sur}}$ 近似目标模型 $f_{\text{target}}$。
- 生成对抗样本在替代模型上用白盒方法(如 FGSM)生成扰动。
- 统计成功率把对抗样本提交给目标模型,统计预测失败的次数占比。
攻击方法选择
不同的钥匙开不同的锁。餐厅的安全主管拿到威胁模型后,首先要回答:来的人是谁?如果是拿着完整菜谱的前主厨,你防的是“他在汤里下料”;如果是一个只能点菜的外卖用户,你防的是“他反复试吃找出破绽”。攻击方法的选择,本质上是被攻击者能力约束的。
白盒攻击者首选各类梯度方法:FGSM、PGD、C&W 都能直接利用 $\nabla_x J$,攻击精度高、迭代快。黑盒攻击者没有梯度,只能选查询类方法:随机搜索、自然进化策略、或者用大量查询估计梯度方向;此外,替代模型迁移攻击也是黑盒场景的利器。灰盒攻击者则介于两者之间,优先利用已知结构信息或公开权重做迁移攻击,再用少量查询精调。我们可以用数学形式描述“能力约束下的最优方法选择”:
这也解释了为什么“威胁模型先于攻击方法”:如果只知道一个模糊的“黑盒”,你无法判断该用 FGSM 还是迁移攻击;但如果明确了“攻击者有查询上限、知道开源权重”,你就能锁定灰盒+迁移+限量的组合。评估攻击方法时,同样要把能力假设写进实验配置里,否则结果无法横向比较。
- 方法空间$\mathcal{M}$ 是所有可用的攻击方法集合,包含梯度类、查询类、迁移类等。
- 能力约束攻击者能力 $\mathcal{A}$ 限制了能调用的方法子集,例如没有梯度时白盒方法不可用。
- 最优选择在允许的方法中选攻击成功率最高者,对应衡量指标就是鲁棒性评估里的最坏情况。
防御设计方向
最后回到餐厅:知道了敌人可能从哪里进来,防御才有的放矢。如果威胁模型表明攻击者只能黑盒查询,那餐厅可以在门口加装“监控摄像头”(输入预处理),限制每个账号的查询频率;如果攻击者是拿着完整菜谱的白盒,那门口监控毫无意义,必须回到后厨,把最脆弱的配方改掉——这就是对抗训练。
防御设计的第一步是明确威胁模型:要防住在哪条知识水平线上的攻击者。第二步是选择防御手段。对抗训练通过在训练集中加入对抗样本,让模型学会识别“被下了料的菜”;输入预处理包括去噪、压缩、随机化,相当于在入口处把可能的毒药先过滤一遍;查询频率限制和置信度遮掩,则专门针对黑盒攻击者的试吃策略。第三步是评估防御效果,常用的指标是鲁棒准确率:
值得注意的是,没有一种防御能同时防住所有威胁模型。对抗训练对白盒梯度攻击有效,但可能增加计算成本;输入预处理会降低正常样本精度。所以防御设计必须回到“为谁服务”:如果产品只对外提供 API,黑盒威胁模型下的限流与检测就是第一道防线;如果模型文件有可能泄露,白盒威胁模型下的对抗训练才是核心。威胁模型决定了防御的优先级,这也是它在数据可信层建设中成为关键角色的原因。
---
- 对抗样本集根据选定的攻击方法生成一组对抗样本 $x^{(i)}_{\text{adv}}$。
- 预测正确性判断模型是否仍能识别正确标签。
- 计算鲁棒率用正确预测的平均比例作为鲁棒性指标。
AI 应用场景
第三方模型 API 黑盒安全审计
阶段:模型上线与供应链安全评估
解决的问题:企业购买外部大模型 API(如人脸识别、语音转写)时,拿不到模型权重,传统安全测试无法从内部进行。黑盒威胁模型帮助审计团队模拟真实攻击者:只通过 API 查询输出,用扰动样本探测模型是否存在漏洞。
具体案例:某金融公司接入人脸识别服务,安全团队使用黑盒方法对 1000 张测试人脸叠加微小噪声,观察识别结果是否翻转,发现 5% 的样本在扰动下被错误识别,随后要求供应商提供鲁棒性说明并升级防护。
开源模型私有化部署的灰盒风险排查
阶段:模型二次开发与部署维护
解决的问题:很多企业基于开源模型(如 LLaMA、Stable Diffusion)微调私有模型。攻击者能拿到开源权重和结构,却看不到微调后参数,正好落入灰盒威胁模型。安全团队需要评估公开信息泄露可能带来的迁移攻击风险。
具体案例:某电商公司微调开源推荐模型后上线,攻击者下载原版模型,用白盒方法生成对抗样本,再提交到电商 API,发现部分样本能绕过推荐过滤,导致恶意内容被推送给用户。排查后加强了请求校验与对抗训练。
内部模型发布前的白盒渗透测试
阶段:模型训练与发布前验证
解决的问题:自研模型在发布前,研发团队拥有完整权重和梯度,此时最适合采用白盒威胁模型做最坏情况评估:如果攻击者已经突破内网拿到权重,模型还能守住多少鲁棒性?
具体案例:自动驾驶团队在发布感知模型前,对 5000 张道路图片实施白盒 PGD 攻击,发现模型在小面积贴纸扰动下存在误检,随后在训练阶段加入对抗样本重训练,鲁棒准确率从 61% 提升到 88%。
Python 演示
"""模拟黑盒、白盒威胁模型下攻击成功率的差异。"""import numpy as np class SimpleClassifier: """一个可微分的小型逻辑回归模型,用于演示攻击能力差异。""" def __init__(self, dim=4): self.W = np.random.default_rng(0).normal(0, 0.5, size=dim) self.b = 0.2 def logit(self, x): return float(np.dot(self.W, x) + self.b) def predict(self, x): return 1 if self.logit(x) > 0 else 0 def prob(self, x): z = self.logit(x) return 1.0 / (1.0 + np.exp(-z)) def make_data(rng, n=120, dim=4): X = rng.normal(0, 1, size=(n, dim)) w_true = np.array([1.2, -0.8, 0.6, 0.4]) y = (X.dot(w_true) + rng.normal(0, 0.2, size=n) > 0).astype(int) return X, y def whitebox_attack(model, x, y_true, eps=0.4): """白盒攻击:利用梯度符号生成对抗样本。""" p = model.prob(x) grad_x = (p - y_true) * model.W adv = x + eps * np.sign(grad_x) return adv def blackbox_attack(model, x, y_true, max_queries=200, eps=0.4): """黑盒攻击:反复加入随机噪声并查询模型输出。""" rng = np.random.default_rng(1) for _ in range(max_queries): noise = rng.uniform(-eps, eps, size=x.shape) if model.predict(x + noise) != y_true: return x + noise, True return x, False def evaluate(): rng = np.random.default_rng(2) X, y = make_data(rng) clf = SimpleClassifier(dim=4) white_ok = 0 black_ok = 0 total = len(X) for xi, yi in zip(X, y): if clf.predict(xi) != yi: total -= 1 continue adv_white = whitebox_attack(clf, xi, yi) if clf.predict(adv_white) != yi: white_ok += 1 adv_black, success = blackbox_attack(clf, xi, yi) if success: black_ok += 1 print("样本总量:", total) print("白盒攻击成功率: %.1f%%" % (100.0 * white_ok / total)) print("黑盒攻击成功率: %.1f%%" % (100.0 * black_ok / total)) if __name__ == "__main__": evaluate()
grad_x = (p - y_true) * model.W逻辑回归的损失对输入 $x$ 的梯度,白盒攻击可以直接利用它。adv = x + eps * np.sign(grad_x)这就是 FGSM:顺着梯度符号方向加一小步扰动。noise = rng.uniform(-eps, eps, size=x.shape)黑盒攻击没有梯度,只能随机加噪声不断查询。if model.predict(x + noise) != y_true一旦扰动让模型“认错”,黑盒攻击就成功了。total -= 1原始分类就不正确的样本不计入攻击成功率,保证公平对比。
常见误区
误区黑盒攻击者看不见模型内部,只能瞎试,所以攻击成功率很低,现实威胁不大。
正解黑盒攻击的关键不是“瞎”,而是通过大量查询获取信息。攻击者可以用随机噪声估计梯度方向,也可以用开源模型生成迁移性对抗样本,在真实 API 上也能达到很高成功率。威胁评估必须按攻击者的查询预算来算,不能只看单次尝试。
为何常见:人们容易把“看不到内部”等同于“完全无能为力”,忽略了黑盒攻击可以通过时间换精度。
误区只有模型开源、权重公开,攻击者才能进行白盒攻击。
正解白盒威胁模型描述的是一种能力假设:只要攻击者拿到了模型权重和梯度,无论通过内鬼、漏洞还是开源渠道,都属于白盒。自研模型如果被内部员工泄露权重,同样面临白盒攻击风险。
为何常见:把“白盒”误解为“公开代码”,混淆了攻击者能力与信息获取路径。
误区灰盒就是“半个白盒”,攻击难度一定取中间值。
正解灰盒是一个宽泛的分类,描述的是“部分信息”。如果攻击者知道模型结构、公开预训练权重以及训练数据分布,他的实际威胁可能接近白盒;如果只听说过“模型用了 Transformer”,则更接近黑盒。威胁建模要具体到有哪些信息,而不是简单套一个灰盒名号。
为何常见:分类标签便于沟通,但人们容易把分类当作准确的等级排序。
误区公司一般是先听说 FGSM、PGD 这些攻击方法,然后直接拿它们测试模型,跳过威胁建模。
正解不先定义攻击者能力,就没法决定哪些攻击方法“有资格”参与测试。例如外部攻击者拿不到梯度时,你用白盒梯度攻击测出来的漏洞可能根本不现实;反过来,真实黑盒攻击依赖查询频率,如果防御方限流了,评估也要包含查询预算。
为何常见:攻击方法直观、容易理解,而威胁模型听起来抽象,初学者容易跳过基础直接做攻防实验。
面试题
Q1. 在威胁模型分类中,黑盒攻击者最典型的能力是:
- A.获得模型完整权重
- B.获得模型输出结果← 正确答案
- C.获得全部梯度信息
- D.获得训练数据标签
答案:B。黑盒攻击者只能通过输入输出接口查询模型结果,看不到权重、梯度等内部信息,因此选项 B 正确。A、C 属于白盒能力,D 属于灰盒或数据泄露场景。
Q2. 白盒攻击相对黑盒的核心优势在于:
- A.仅靠查询输出
- B.直接利用梯度信息← 正确答案
- C.不需要任何数据
- D.必须知道防御方案
答案:B。白盒攻击者拥有模型结构和权重,因此能计算损失对输入的梯度,构造精准扰动。黑盒攻击没有梯度,只能通过大量查询或迁移来近似。C 和 D 不准确。
Q3. 下列哪些属于攻击者能力假设的常见维度?
- A.模型参数是否可访问← 正确答案
- B.能否查询模型输出← 正确答案
- C.是否掌握训练数据分布← 正确答案
- D.机房环境温度湿度
答案:ABC。威胁模型通常从模型知识、查询权限、梯度可达性、训练数据知识四个维度刻画攻击者。机房环境温度湿度与模型攻防无关,因此 D 错误。
Q4. 某公司只对外提供图像分类 API,攻击者只能上传图片并查看分类结果,这种场景属于:
- A.白盒攻击
- B.黑盒攻击← 正确答案
- C.灰盒攻击
- D.物理攻击
答案:B。攻击者只能查询输出,无法获得模型权重与梯度,是典型的黑盒威胁模型。白盒需要完整内部信息,灰盒需要部分信息,都不符合。
Q5. 灰盒攻击者通常意味着:
- A.完全不知道模型结构
- B.只知道部分模型信息← 正确答案
- C.拥有完整全部梯度
- D.不依赖任何模型知识
答案:B。灰盒介于黑盒与白盒之间,攻击者可能知道公开模型结构、旧版本权重或部分训练信息,但不拥有完整梯度。A 是黑盒,C 是白盒,D 不属于常见设定。
Q6. 为什么黑盒攻击可以利用迁移性?
- A.不同模型训练数据完全相同
- B.相似任务模型共享决策边界← 正确答案
- C.所有模型使用同一随机种子
- D.黑盒攻击无需任何查询
答案:B。在相似数据上训练的结构接近模型,决策边界往往具有相似性,因此一个模型上的对抗样本常能骗过另一个模型。A、C 过于绝对,D 与黑盒攻击必须查询的事实矛盾。
Q7. 面对黑盒攻击,防御设计可以优先考虑:
- A.输入预处理与去噪← 正确答案
- B.对抗训练增强← 正确答案
- C.限制查询频率← 正确答案
- D.公开模型全部权重
答案:ABC。输入预处理能过滤扰动,对抗训练能提升模型内在鲁棒性,查询频率限制能削弱黑盒攻击的信息收集能力。公开权重并不防攻击,反而可能把模型变成白盒,因此 D 错误。
Q8. FGSM 方法生成对抗样本主要依赖什么信息?
- A.模型输出的标签结果
- B.损失对输入的梯度符号← 正确答案
- C.随机生成的噪声信号
- D.模型部署的服务器名
答案:B。FGSM 的公式是沿损失对输入梯度的符号方向加扰动,本质是利用白盒梯度信息。A 是黑盒可获取信息,C 是盲目噪声,D 与攻击不相关。
Q9. 在选择攻击和评估方法时,威胁模型的作用包括:
- A.决定能否使用梯度方法← 正确答案
- B.决定是否模拟查询上限← 正确答案
- C.决定防御鲁棒性指标← 正确答案
- D.直接决定模型参数量大小
答案:ABC。威胁模型定义攻击者能力,能力决定可选攻击方法、查询预算、评估指标。模型参数量是一个静态属性,不取决于威胁模型,因此 D 错误。
Q10. 在线 API 场景中,防御方限制每秒查询次数,对以下哪类攻击者影响最大?
- A.已掌握权重的白盒攻击
- B.靠多次查询估计梯度的黑盒攻击← 正确答案
- C.已知模型结构的灰盒攻击
- D.随机猜测输出标签的攻击
答案:B。黑盒攻击需要大量查询来估计梯度或搜索扰动,查询限额会显著拉高成本和耗时。白盒攻击已有权重,灰盒可借助迁移攻击,受查询限制影响相对较小。D 本身不构成有效攻击。