模型萃取攻击:偷走模型能力
模型萃取(model extraction)指攻击者通过大量查询,训练出一个功能相近的「复制模型」,从而低成本盗用他人的模型能力。它与「模型逆向」不同:后者试图还原权重或训练数据,而萃取只关心「行为克隆」——只要新模型在输入分布上给出与原模型一致的预测即可。本文从防御视角讲清成因、手法与对策,目标是让部署方知道风险在哪、该投多少成本去挡。
成因
对外开放的模型若对查询无限制、又返回高置信度的完整概率,攻击者可借输入输出对重建出近似模型。其数学直觉是:一个 d 维输入的模型,攻击者只要用足够多、覆盖决策边界的样本去「探」边界,就能用这些 (x, f(x)) 对训练一个替代模型(substitute model),使其在特定分布上逼近原模型。学界已有系列工作揭示其可行性,例如针对预测 API 的模型窃取研究、以及面向图像分类的 Knockoff Nets 方法,都证明在真实接口上「用查询换模型」是可行的。
攻击通常成立的前提:
- 接口可高频、低成本调用
- 返回细节丰富(完整概率 / 对数几率 / 距离向量)
- 无查询配额、无审计、无异常检测
- 目标模型本身是「高价值且可替代获利」的资产
值得注意的是,攻击者往往不需要和原模型等量的数据:他们可以用合成样本(如在输入空间做扰动、用 GAN 生成边界样本)主动「钓」出原模型的决策面,从而把查询量压到可接受范围。这也是为什么「返回越详细、限制越松」的接口风险越高。对攻击者而言,只要复制模型的准确率在目标分布上接近原模型(例如掉几个百分点仍可商用),攻击就算成功。
为什么深度学习模型特别容易被这类攻击盯上?一方面,现代模型通常是高维、平滑的函数,决策边界虽有千万参数,却能被相对稀疏的样本点刻画;另一方面,商业模型的价值往往不在权重本身,而在「训练数据 + 算力 + 调参」沉淀出的行为,而行为恰恰可以通过查询被外部观测。换言之,你卖的是「预测能力」,而萃取攻击买走的也正是这份能力——且无需承担训练成本。这使模型萃取在金融风控、定价模型、独家推荐等场景格外有诱惑力。
攻击手法
理解手法的细节,才能对症下药。常见套路大致分三步:
1. 构造查询集:随机采样、对抗扰动、或基于原模型反馈的主动学习式选点
2. 收集 (输入, 输出) 对:输出越完整(含概率),训练替代模型越容易
3. 训练替代模型:用与原模型同构或更小结构的网络拟合这些样本
主动学习式选点尤其高效:攻击者先用少量样本训一个粗糙替代模型,再挑「替代模型最不确定」的样本去查原模型,把查询预算集中在决策边界附近。这比纯随机采样省几个数量级的查询。返回的置信度越高、类别数越多,替代模型收敛越快——这正是接口返回设计成为第一道防线的原因。
举个具体例子:假设原模型是一个 10 类图像分类器。攻击者先随机上传一批图片拿到预测,训出初版替代模型;然后生成大量对抗扰动图片,挑替代模型预测概率最分散的那批去查原模型,逐步把边界「描」清楚。若接口还返回各类概率,替代模型几乎能逐点拟合原模型的输出曲面。这解释了为何「只给 top-1 标签」就能让攻击难度陡增——攻击者失去了拟合连续输出所需的梯度信息。
防御思路
从接口侧与模型侧两头收口:限频、降返回精度、加 watermark、监控异常流量。核心原则是「在攻击者需要的信号与正常用户需要的服务之间做最小必要暴露」。
接口侧措施:
- 限流与配额:按 API key / 账号限制单位时间查询次数
- 只返回 top 类目,不吐原始概率;或对概率做四舍五入/阈值裁剪
- 对置信度做平滑或加噪,削弱边界探测精度
- 异常查询模式告警:均匀分布探边、高频重复、低熵输入
模型侧措施:
- 模型水印:植入特定「触发器」输入,使复制模型也继承该行为,便于确权
- 成员推断监控:检测是否有人试图批量探测训练分布
- 高价值模型加强保护:隔离部署、提高调用门槛
以返回精度为例:把 {"cat": 0.9231, "dog": 0.0769} 改成只返回 {"cat": 0.92} 或干脆只给最高类目,会显著增加替代模型的拟合难度,而对绝大多数正常用户几乎无感知损失。这是低成本、高收益的改动。再配合限流(如每 key 每分钟 N 次、每日上限 M 次),能把攻击的月度成本抬到不划算。
一个可落地的限流配置(以 Nginx + Lua 或网关为例,伪配置):
limit_req_zone $api_key zone=model_api:10m rate=10r/s;
limit_req zone=model_api burst=20 nodelay;
# 单 key 每日查询配额在应用层计数,超阈值返回 429
如何判断是否正在被萃取
防御的闭环离不开「发现」。即便加了限流,仍应有手段识别可疑流量,否则攻击者在配额内缓慢「蚂蚁搬家」也难察觉。
可疑信号:
- 某 key 查询分布高度均匀(正常用户有长尾偏好)
- 大量输入落在类别边界 / 高熵区域
- 请求间隔规律、批量、无业务语义(如随机噪声图)
- 同一来源反复查询相似扰动样本
这类信号可用简单的统计基线监控:对每 key 维护查询的熵、重复率、与历史分布的 KL 散度,超阈值即告警或临时降权。代价不高,却能把「慢速萃取」也纳入视野。需要强调的是,监控本身也可能误伤正常批量用户,因此告警后应有「人工确认 / 渐进限流」而非一刀切封禁。
成本与权衡
过度收紧会伤正常用户。需按业务敏感度平衡开放度与防护。
注意:
- 高价值模型(如付费推理、独家能力)加强保护
- 公开演示 / 试用接口单独隔离,不共用生产配额
- 合同与日志留存追责:记录调用方、量级、时间,便于事后举证
- 防御是「提高攻击成本」而非「绝对杜绝」:把代价抬到不划算即可
一个常见误区是「只要不开源就安全」。模型萃取恰恰发生在黑盒 API 场景下——攻击者根本不需要权重,只要能调用。因此防护重点应放在接口行为与可观测性上,而不是寄望于模型保密。
另一权衡点:水印能确权,但植入方式若不当可能影响正常输出质量。watermark 的设计(触发样本的分布、激活强度)需要实验调参,避免在正常输入上「漏触发」或「误触发」。同时,水印只能证明「复制模型源自你」,并不能阻止攻击本身,它更适合作为法务追责的辅助证据,而非第一道防线。
在资源有限时,防御也应分优先级。多数团队无需一步到位,可按「先挡住最便宜的攻击,再逐步加码」的思路推进:先把返回精度降下来、加上基础限流,这已能挡掉绝大多数「脚本小子」式的随手窃取;再视模型价值补监控与水印。把预算花在「高价值模型」上,远比给每个接口平均用力更划算。
防御优先级清单
落地时按「性价比」排序,避免平均用力:
第一优先(低成本高收益):
- 返回只给 top 类目 / 裁剪概率精度
- 基础限流 + 单 key 日配额,超阈返回 429
第二优先(中等投入):
- 异常查询监控(熵 / 重复率 / 分布漂移告警)
- 高价值模型独立隔离部署
第三优先(高价值模型才做):
- 模型水印植入与确权流程
- 合同约束 + 全量日志留存,支持事后追责
这份清单的本质,是把安全投入和资产价值对齐:演示接口可以宽松,核心付费模型必须层层设防。
小结
模型萃取利用「开放查询 + 丰富返回」。防御靠限频、降精度返回、水印与流量监控,并在可用性与保护性之间按价值分级。务实目标不是让攻击不可能,而是把攻击成本抬到远高于其收益——当窃取一个模型比自己训练一个更贵时,攻击就自然失去动机。对部署方,最该先做的三件事是:收紧返回精度、加查询配额、补异常告警;再按模型价值决定是否上水印与法务闭环。
参考与延伸阅读
- USENIX Security 2016:Stealing Machine Learning Models via Prediction APIs(Tramèr 等,预测 API 窃取研究)— 已核验
- CVPR 2019:Knockoff Nets(Orekondy 等,图像分类模型萃取)— 已核验
- OWASP 机器学习安全 Top 10(威胁分类参考)— 已核验