2026年6月14日 2 分钟阅读

如何用 mdd 做 AI 模型供应链安全审计:从下载到运行的完整检查清单

tinyash 0 条评论

你下载的 AI 模型真的安全吗?

如果你从 Hugging Face、GitHub 或某个量化版本仓库下载了一个模型,然后直接塞进 Ollama 或 llama.cpp —— 你其实是在信任整个下载链上的每个人:模型作者、上传者、量化者、平台运维,以及他们使用的所有依赖库。

PyTorch 的 pickle 反序列化漏洞已经不是新闻:一个精心构造的 .pt 文件可以在你执行 torch.load() 的瞬间执行任意代码。2025 年的”恶性复活节彩蛋”事件(模型 checkpoints 内嵌 os.system 调用)更是让整个社区意识到:模型文件本身就是攻击面。而就在两天前(2026-06-12),席卷 AI 开发工具圈的 Miasma 供应链攻击进一步证明:开发者工具链上的每一个入口都可能被植入恶意代码。

好在有一个小众但极度扎实的开源工具可以填补这个空白——Model Due Diligence(简称 mdd)。

mdd 是什么?

mdd 是一个 Python CLI 工具,在导入或加载模型之前对本地模型文件和仓库做静态供应链审查。它的核心思想很简单:先扫描再信任。

  • 安装pip install model-due-diligence
  • 命令mdd ./path/to/model --out ./audit
  • 许可证:Apache 2.0
  • Python 版本:3.11+

它不执行模型推理,不加载权重,不导入仓库代码——所有检查都是纯静态的

快速上手:扫一个模型看看

pip install model-due-diligence

mdd ~/models/qwen3-8b-q4_k_m.gguf --out ./audit-qwen

mdd ./downloaded-model --out ./audit-repo

mdd ./downloaded-model --out ./audit-smoke --skip-external

扫描后会生成一份 Markdown 报告,包含文件清单、SHA-256 哈希、权限检查、高风险序列化格式检测等信息。

五大核心检测能力

1. 高危序列化格式检测

mdd 会扫描目录中所有高风险格式文件:

风险等级格式
高风险.pickle, .pt, .pth, .bin, .joblib, .h5
低风险.gguf, .safetensors, .onnx
特殊检查 pickle-like 字节标记

对于 Python 文件,它还会做 AST 扫描,检测 eval()exec()pickle.loads()os.system()subprocess 等危险调用模式。

2. GGUF / Safetensors 元数据验证

  • 检查 GGUF 文件的魔术字节和版本号
  • 解析 safetensors 头部元数据
  • 验证文件格式是否合规

3. 凭证泄露检测

内置启发式扫描,同时支持集成 detect-secrets,在模型文件中寻找疑似 API 密钥、令牌、密码等高熵字符串。

pip install "model-due-diligence[scanners]"
mdd ./model --out ./audit

4. Git 来源追踪

如果目标是一个 Git 仓库,mdd 会自动检查:

  • 远端来源(origin remote)
  • 当前 commit SHA
  • 工作目录是否 dirty
  • Git LFS 文件清单

这让你能确认自己下载的确实是模型作者的官方 commit,而非某个被篡改的分支。

5. 风险评分系统

mdd 将所有发现归一化为一个 0-100 的评分

风险等级分数范围建议操作
LOW0-29沙箱中首次运行
MEDIUM30-69理解每个发现后加载
HIGH70-89除非每个发现都有解释,否则不加载
CRITICAL90-100视为 unsafe

评分默认保守——宁可误报也不漏报。

Ollama 集成:一键扫描已安装模型

如果你已经用 ollama pull qwen3:4b 装了一个模型,mdd 提供了专门的子命令:

mdd-ollama qwen3:4b --out ./audit-qwen3-ollama

它会自动定位 OLLAMA_MODELS 目录中的模型 blob,创建友好文件名,然后运行标准的静态审查流程。Ollama 服务甚至不需要在运行——只要有本地的 manifest 和 blob 存储即可。

CI 流水线集成

mdd--fail-on 参数让它可以嵌入 CI/CD 流程:

mdd tests/fixtures/safe_repo --out ./audit --fail-on critical --skip-external

mdd ./downloaded-model --out ./audit --fail-on medium

在 CI 中结合 mdd + GitHub Actions CodeQL + Pipeline 可以在模型进入生产环境的每一道门前设置安全检查。这特别适合类似 Miasma 事件的场景——如果 CI 阶段就能发现意外引入的二进制文件或异常 pickle 标记,影响面会被大幅缩小。

全面的安全操作模型

mdd 的 README 推荐了一套完整的安全流程,我把它们提炼为 9 条检查清单

  1. 只从官方仓库或可信量化者下载
  2. 不要使用 latest 等浮动标签——锁定具体 Git 版本
  3. 记录 SHA-256 哈希,方便事后验证
  4. mdd 做静态审计,检查所有 HIGH/CRITICAL 发现
  5. 首次推理在网络隔离的容器或 VM 中执行
  6. 不要挂载 API 密钥、SSH 密钥、云凭证
  7. 在 RAG 或 Agent 部署前测试提示注入行为
  8. 保留审计报告和已接受的哈希值
  9. 不要把 mdd 当作唯一信任机制——它是多层防御的一环

输出格式:不止一个 Markdown

mdd 支持三种输出格式:

mdd ./model --out ./audit --format markdown

mdd ./model --out ./audit --format json

mdd ./model --out ./audit --format sarif

mdd ./model --out ./audit --format markdown,json,sarif

最终目录结构示例:

audit/
├── model_due_diligence_report.md
├── model_due_diligence_report.json
├── model_due_diligence_report.sarif
├── modelscan.json
├── semgrep.json
├── bandit.json
├── pip-audit-xxx.json
└── detect-secrets.json

注意事项与局限

mdd 明确说了自己不能做什么——这是一个诚实的工具:

  • ❌ 不能检测权重层面的后门(sleeper agent、trigger-based)
  • ❌ 不能检测训练数据投毒
  • ❌ 不能检测运行时数据泄露
  • ❌ 不能替代人工审查

静态扫描发现”干净”不代表模型真的安全。它只是告诉你:在这个时间点上,工具没有发现已知的静态风险模式。

总结

在 Miasma、恶意 pickle 模型和开源供应链攻击频发的 2026 年,”先扫再跑”应该成为每个 AI 开发者的默认操作。mdd 虽然才发布一周(2026-06-08)、GitHub 上仅有 0 个 stars,但其文档完整度、架构设计(模块化单体 + 纯静态扫描 + 外部工具适配器)、以及对 NIST/MITRE/OWASP 标准的对齐,都远远超出”0 star 项目”的预期。

一句话总结pip install model-due-diligence 然后在 ollama pull 之前跑一次 mdd。这个习惯花你 30 秒,但可能帮你省下一个灾难。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。