模型窃取攻击(Model Stealing Attack)技术原理

什么是模型窃取攻击?

模型窃取攻击是指攻击者在不访问目标模型内部参数的情况下,仅通过黑盒API查询,重建出一个功能上等价(或接近)的替代模型。—

一、核心原理

攻击者将目标模型视为一个黑盒预言机(Oracle),通过大量查询收集输入-输出对,再用这些数据训练出一个"替代模型",使其行为尽可能逼近目标模型。

本质上是知识蒸馏的滥用版本

正常蒸馏:自己的大模型 → 自己的小模型(授权)
模型窃取:他人的模型API → 自己的替代模型(未授权)

二、主要攻击策略

策略 1:基于随机查询(Random Query)

最简单粗暴的方式:

# 攻击者发送大量随机输入
queries = generate_random_inputs(n=100000)
for x in queries:
    soft_label = target_model_api(x)   # 调用目标API
    dataset.append((x, soft_label))    # 收集输入-输出对

# 用收集的数据训练替代模型
surrogate_model.train(dataset, loss=KL_divergence)
  • 优点:实现简单
  • 缺点:查询效率低,需要大量API调用

策略 2:主动学习攻击(Active Learning)

更聪明的方式——优先查询"信息量最大"的样本:

不确定性采样:选择替代模型最不确定的样本
边界采样:优先查询决策边界附近的样本
多样性采样:保证查询样本的分布多样性

效果:用 1/10 的查询量达到同等的窃取精度。


策略 3:数据增强攻击(Data Augmentation)

利用少量种子数据,通过增强生成更多查询:

seed_data = [...]  # 少量公开数据
augmented = []
for x in seed_data:
    # 对每个样本做变换,生成更多查询
    for variant in [flip, rotate, crop, noise](x):
        augmented.append(variant)
        
# 用增强后的数据查询API,快速扩充替代数据集

策略 4:对抗性查询攻击(Adversarial Query)

专门生成能最大化信息量的查询,是最高效的攻击方式

目标:min D_KL( f_target(x) ∥ f_surrogate(x) )

方法:
  1. 用梯度信息找到最能区分两个模型的输入
  2. 优先在这些"分歧区域"发起查询
  3. 迭代更新替代模型 → 找新的分歧区域 → 继续查询

三、针对 LLM 的特殊手法

大语言模型的窃取比传统分类模型更复杂,但有专门手段:

手法 具体操作 目标
输出蒸馏 大量调用API,收集问答对 复制通用能力
指令微调数据窃取 构造多样化指令,收集响应 复制指令遵循能力
思维链蒸馏 收集带CoT推理的输出 复制推理能力
对齐行为克隆 收集RLHF偏好相关输出 复制安全/对齐行为

四、量化攻击效果的指标

模型精度保真度(Accuracy Fidelity):
  替代模型在测试集的精度 vs 目标模型精度

Agreement Rate(一致率):
  两个模型在同一输入上给出相同输出的比例(理想值→100%)

查询效率:
  达到 X% 保真度所需的最少API调用次数

五、防御手段

被攻击方可以采取的措施:

输出扰动:在API输出中注入微小噪声,使软标签不可直接用于蒸馏

output = model(x) + gaussian_noise(epsilon=0.01)

查询限流:检测异常高频查询,触发速率限制或封禁

水印注入(Model Watermarking)
在模型中植入隐藏水印,若替代模型使用了该输出,水印也会被蒸馏进去,事后可取证

输出截断:只返回 Top-1 标签而不返回完整概率分布,大幅降低信息量

对抗性输出:检测到可疑查询时,故意返回低质量或错误输出


六、法律与伦理边界

违反服务条款 ──→ 民事责任(OpenAI、Google等均明确禁止用于训练竞品)
商业秘密侵犯 ──→ 潜在法律诉讼
知识产权争议 ──→ 模型版权归属尚无定论(各国法律不同)

目前这一领域法律仍处于灰色地带,相关诉讼案例正在推动立法完善。


模型窃取攻击是 AI 安全领域的核心威胁之一,它揭示了一个根本矛盾:模型越有用(输出越精准),就越容易被窃取

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐