最佳实践:检查清单与反模式
9.1 落地检查清单
工件与格式
- [ ] 默认只接受 safetensors / GGUF 等数据格式;pickle 系格式必须过扫描器 +
weights_only=True加载。 - [ ] 所有进入生产的工件有 merkle 清单 + 签名;部署节点加载前完成验签与逐文件对比。
- [ ] 训练 CI 使用 OIDC 临时凭据签名,无私钥长期驻留;扫描与签名使用不同凭据。
- [ ] 模型目录含数据清单(来源、hash、许可、PII 扫描结论),随版本永久保存。
数据与后门
- [ ] 入库数据跑 PII / 秘密 / 近重复扫描;高风险来源进隔离区。
- [ ] 发布前跑 canary 触发率与红队探针集,结果与基线对比存档。
- [ ] 触发器库覆盖业务语言与输入模态;canary 样本量做过功效分析(能区分运营上要区分的比例差)。
MCP 工具链
- [ ] 批准单元是"代码 digest + 描述快照 + 版本",不是 Server 名字。
- [ ] 运行时校验三件事:版本锁定、代码 hash、描述 diff;diff 处置策略(阻断/重审批)成文。
- [ ] 第三方 Server 默认不可信档位:沙箱执行 + egress 白名单 + 动作分级确认。
运行时与资产
- [ ] 工具调用在沙箱内执行(gVisor/Firecracker/托管沙箱按威胁模型选型)。
- [ ] 出站流量走白名单代理,DNS 层兜底;文件系统只读挂载 + 临时写层。
- [ ] 核心模型出厂前嵌水印(strength > 最粗发布量化步长)、指纹集存档。
- [ ] API 侧查询限流 + 抽取行为画像;批量导出双人审批。
运营与合规
- [ ] 扫描器误报有白名单运营流程(否则团队会在两周内绕过扫描)。
- [ ] 审计日志独立账号、只增不改;事件响应剧本每半年演练一次。
- [ ] EU AI Act 技术文档由门禁日志聚合生成;标识办法的隐式标识与日志留存合规。
9.2 常见反模式
"平台扫过了就等于安全"。 HF 的 ClamAV + pickle 扫描是 best-effort 滤网(官方文档原文),nullifAI 事件证明存在系统性逃逸面。平台扫描是第一道,不是最后一道。
把验签写进加载进程。 torch.load 之前才想起来"校验一下文件"的代码,跑在被攻击者已经能改文件的进程里。验签必须是独立组件(init 容器 / sidecar / 部署系统),失败即不启动。
扫描器接了但误报淹没人就关掉。 96% 量级的误报是常态而非失败;没有白名单运营的扫描部署会在一个月内被开发者绕过。正确姿势:从宽进严出开始(先 audit 模式跑两周收集白名单,再转 enforce)。
"用了 safetensors,所以不用管后门。" 格式安全与权重可信是两个独立问题。safetensors 消掉的是恶意代码类威胁,投毒类威胁一分没少——canary 与行为评测不能省。
MCP 批准只看名字和描述截图。 rug pull 的全部前提就是"客户端只记名字"。没有 digest 与描述快照的批准,等于没有批准。
水印 strength 拍脑袋。 strength 小于发布链路的量化步长,水印在第一次导出时就物理消失(demo 实测:步长 1.0 下 strength 0.05 归零)。先量化分析发布链路的扰动上界,再定 strength。
canary 触发率只报均值不报样本量。 100 个 canary 上 0/100 触发与 1000 个上 4/1000 触发信息量完全不同;报告必须带置信区间,阈值必须做功效分析。
合规审计前突击补录。 门禁日志聚合生成报告 vs 手工造报告,前者一小时后者三周,而且前者经得起抽查。把合规当门禁的副产品,不要当独立的文书工程。
9.3 决策速查表
落地时最常见的十一个"怎么办",按场景速查:
| 场景 | 首选动作 | 底线 |
|---|---|---|
| 业务要紧急上一个社区模型 | 走拉取代理,扫描 + 来源审查,先发 shadow 不发流量 | 不跳过验签 |
| pickle 格式是上游唯一选择 | 扫描通过 + weights_only 加载 + 记录例外审批 | 不在生产容器直接 torch.load 未扫文件 |
| 扫描误报淹没队列 | 转 audit 模式两周收集白名单,再转 enforce | 不直接关闭扫描 |
| MCP Server 请求更新工具 | 重跑审批流程,对比描述快照与代码 digest | 不接受"只是小改动"口头确认 |
| 核心模型要开源发布 | 嵌水印(strength > 量化步长)→ 再签名 | 不先签名后水印 |
| 发现疑似后门行为 | canary 全量集复测 + 红队探针对比基线 | 不用"再跑几个正常样本"下结论 |
| 供应商给不出签名 | 降级到隔离环境 + 全量行为评测 | 不因为"是大厂"免检 |
| API 流量疑似被蒸馏 | 限流 + 指纹探测 + 输出扰动分级 | 不在无证据时指控客户 |
| 沙箱选型定不下来 | 先 gVisor 跑通,高危工具迁 Firecracker | 不裸奔等"选完型" |
| 合规审计要技术文档 | 从门禁日志聚合,一次脚本出稿 | 不手工补录 |
| 事件响应找不到受影响面 | 回滚 merkle 清单定位下游(事前没清单就先补清单) | 不只改密码不查工件 |
9.4 一句话总结
供应链安全的工程本质是把"信任"从人转移到可验证的工件上:每一次加载前有验签,每一次批准有快照,每一次执行有沙箱,每一次泄露能举证——剩下的问题是运营节奏,不是技术方案。