模型供应链
模型系统是一条供应链:第三方权重、开源框架、CUDA 库、自定义算子——每一环都是攻击面。传统软件供应链(依赖包投毒、构建污染)在模型世界有新的形态:权重文件的反序列化漏洞、模型投毒、框架依赖投毒。本章讲清楚模型供应链的攻击面与防御。
供应链的攻击面
Section titled “供应链的攻击面”| 环节 | 威胁 | 现实性 |
|---|---|---|
| 权重文件 | 反序列化漏洞(pickle)、模型投毒 | 高(pickle 是代码执行) |
| 框架与依赖 | 包投毒(PyPI 的恶意包) | 高(传统威胁的新形态) |
| CUDA/算子库 | 库投毒、构建污染 | 中 |
| tokenizer/配置 | 投毒(词表、特殊 token) | 中 |
| 下载通道 | 中间人、镜像污染 | 中 |
权重文件:最大的攻击面
Section titled “权重文件:最大的攻击面”pickle 反序列化是代码执行:.pt/.pth 文件本质是 Python pickle——加载第三方 pickle = 执行任意代码。这是模型供应链最大的单点攻击面。
防御按优先级:
- safetensors 优先:零 pickle 的权重格式(见模型发布),只存张量、无代码执行——第三方权重只接受 safetensors
- 来源可信 + hash 校验:下载通道的完整性校验(hash 锚定在可信渠道)
- 隔离加载:确需加载 pickle 时(老 checkpoint),在隔离环境(容器/沙箱)里转换成 safetensors
投毒(backdoor/poisoning):训练数据或权重里植入后门——特定触发词激活恶意行为:
| 类型 | 手段 | 检测 |
|---|---|---|
| 数据投毒 | 训练语料里植入后门样本 | 来源可信 + 数据审计(见数据治理) |
| 权重投毒 | 直接改权重(微调植入) | 第三方权重的行为测试(红队集 + 触发词测试) |
| 微调服务投毒 | 第三方微调平台植入 | 微调数据的审计 + 产出的行为测试 |
第三方权重的行为测试是发布门禁(与记忆化测试同级):红队集 + 安全基准 + 触发词测试——"下载了就能用"不是供应链的姿势。
传统软件供应链的威胁在模型世界一模一样:
- 包投毒:PyPI 上的恶意包(typosquatting、维护者劫持)
- 防御:依赖锁定(lock 文件)、私有镜像、依赖审计(自动扫描 CVE)
模型世界的特殊点:CUDA 库与算子(cuDNN/NCCL/自定义 kernel)也是依赖——构建链的完整性(库的来源与 hash)与代码同级。
构建与分发的完整性
Section titled “构建与分发的完整性”模型从训练到用户的完整信任链:
训练集群(可信环境) ↓ 权重导出(safetensors)+ hash 锚定模型仓库(注册表,见[模型注册](/platform-mlops/01-lifecycle/model-registry-release.md)) ↓ 分发(hash 校验)推理集群(部署时校验) ↓用户(API 端点)每一跳的完整性校验(hash + 签名)——信任链断一环,全程失效。
- 第三方权重只接受 safetensors(零 pickle)
- hash 锚定在可信渠道(下载通道校验)
- 第三方权重的行为测试进发布门禁(红队 + 触发词)
- 依赖锁定 + 私有镜像 + 自动 CVE 扫描
- CUDA/算子库与代码同级管理(构建链完整性)
- 全链路 hash + 签名(训练 → 仓库 → 部署)
- 模型供应链五攻击面:权重(pickle 反序列化 = 代码执行,最大单点)、框架依赖、CUDA 库、tokenizer、下载通道。
- safetensors 是权重安全的正解:零 pickle 只存张量;第三方 pickle 在沙箱转换。
- 模型投毒的真实性:数据投毒靠来源可信,权重投毒靠行为测试(红队 + 触发词)——"下载了就能用"不是姿势。
- CUDA/算子库与代码同级:构建链的完整性(来源 + hash)是信任链的一环。
- 全链路 hash + 签名:训练 → 仓库 → 部署,断一环全程失效。