用于 AI/ML 模型文件的安全扫描器。在部署前检测恶意代码、后门和漏洞。
在部署之前保护你的 AI 模型。 静态扫描器,可检测 ML 模型文件中的恶意代码、潜在后门指标和安全漏洞——而无需加载或执行它们。
模型从未受信任的注册表下载,经过 CI,最终在生产环境中运行。传统的 SAST 工具不会检查 pickle 操作码、HDF5 组布局、ONNX proto 图或 TensorFlow SavedModel 签名——而 ModelAudit 可以:
同类工具:picklescan(仅支持 pickle,基于 Python)、fickling(仅支持 pickle,基于 AST)、modelscan(pickle + TensorFlow + Keras 子集)。ModelAudit 覆盖范围更广,并通过其同伴包 modelaudit-picklescan 提供原生的 Rust pickle 引擎。
需要 Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
I'm ready to translate the provided content, but the INPUT section appears to be empty. Please provide the actual chunk 3 content so I can translate it.```
$ modelaudit suspicious_model.pkl
Files scanned: 1 | Issues found: 2 critical, 1 warning
1. suspicious_model.pkl (pos 28): [CRITICAL] Malicious code execution attempt
Why: Contains os.system() call that could run arbitrary commands
2. suspicious_model.pkl (pos 52): [WARNING] Dangerous pickle deserialization
Why: Could execute code when the model loads
ModelAudit 包含 45 个已注册的扫描器,涵盖模型、归档和配置文件格式:
| 格式 | 扩展名 | 风险 |
|---|---|---|
| Pickle | .pkl, .pickle, .dill | 高 |
| PyTorch | .pt, .pth, .ckpt, .bin | 高 |
| Joblib | .joblib | 高 |
| NumPy | .npy, .npz | 高 |
| R 序列化 | .rds, .rda, .rdata、签名验证通过的重命名工作区工件 | 高 |
| TensorFlow | .pb, .meta、SavedModel 目录 | 中 |
| Keras | .h5, .hdf5, .keras | 中 |
| ONNX | .onnx | 中 |
| CoreML | .mlmodel、结构有效的重命名工件 | 低 |
| MXNet | *-symbol.json, *-NNNN.params、结构有效的重命名符号 JSON | 低 |
| NeMo | .nemo、带有根配置的重命名归档 | 中 |
| CNTK | .dnn, .cmf、签名验证通过的重命名工件 | 中 |
| RKNN | .rknn、非冲突重命名后缀下签名验证通过的工件 | 中 |
| Torch7 | 序列化工件 (.t7, .th, .net 或重命名) | 高 |
| CatBoost | .cbm | 中 |
| XGBoost | .bst, .model, .json, .ubj、无扩展名的 UBJSON | 中 |
| LightGBM | .lgb, .lightgbm, .model、签名验证通过的重命名工件 | 中 |
| Llamafile | 可执行包装器 (.llamafile, .exe、无扩展名或已重命名) | 中 |
| TorchServe | .mar | 高 |
| SafeTensors | .safetensors | 低 |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa、签名验证通过的重命名工件 | 低 |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | 低 |
| TFLite | .tflite、非冲突重命名后缀下签名验证通过的工件 | 低 |
| ExecuTorch | .ptl, .pte、非冲突重命名后缀下签名验证通过的独立工件 | 低 |
| TensorRT | .engine, .plan, .trt | 低 |
| PaddlePaddle | .pdmodel, .pdiparams | 低 |
| OpenVINO | .xml | 低 |
| Skops | .skops | 高 |
| PMML | .pmml | 低 |
| 压缩封装 | .gz, .bz2, .xz, .lz4, .zlib | 中 |
另有针对 ZIP、TAR、7-Zip、OCI 层、Jinja2 模板、JSON/YAML 元数据、清单、模型卡、文本文件和 RAR 识别的扫描器。RAR 压缩包会被报告为不支持/失败关闭(fail-closed),而不是被跳过。
结构有效的 TensorFlow SavedModel 和 MetaGraph protobuf,在重命名为非模型后缀时也会被识别。
CoreML 模型在重命名后也能被识别,并且会明确报告覆盖不完整的情况。
具有过大但看似合理的帧结构的 SafeTensors 文件,会在未被其他格式认领的后缀(如 .jpg)下保留,以进行有界且非结论性的分析。
结构上看似合理的 Flax/JAX MessagePack 检查点在重命名为非模型后缀时也会被识别;无法完整分类的重命名结构会被报告为覆盖不完整。
结构化的 JAX/Orbax JSON 检查点元数据在重命名后同样会被识别;过大的模糊候选会被报告为覆盖不完整;在有限的检查前缀中可观察到的安全模式仍会被保守报告。
直接从远程仓库和云存储扫描模型:```bash
modelaudit https://huggingface.co/gpt2 modelaudit hf://microsoft/DialoGPT-medium
modelaudit s3://bucket/model.pt modelaudit gs://bucket/models/
modelaudit models:/MyModel/Production
modelaudit https://company.jfrog.io/artifactory/repo/model.pt modelaudit https://company.jfrog.io/artifactory/repo/models/
modelaudit model.dvc
### 认证环境变量
- `HF_TOKEN` 用于私有 Hugging Face 仓库
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`(以及可选的 `AWS_SESSION_TOKEN`)用于 S3
- `GOOGLE_APPLICATION_CREDENTIALS` 用于 GCS
- `MLFLOW_TRACKING_URI` 用于访问 MLflow 模型注册表
- `MODELAUDIT_MLFLOW_ALLOWED_ARTIFACT_URIS` 用于非本地 MLflow 工件根路径(逗号分隔的 URI 前缀)
- 使用具体的后端根路径,如 `s3://bucket/prefix`;逻辑上的 `models:/` 或 `runs:/` URI 以及百分号编码的远程路径将被拒绝。
- `JFROG_API_TOKEN` 或 `JFROG_ACCESS_TOKEN` 用于 JFrog Artifactory
- `MODELAUDIT_JFROG_ALLOWED_HOSTS` 用于逗号分隔的自定义 JFrog 主机名,这些主机名可能接收凭据
- `MODELAUDIT_JFROG_ALLOWED_REDIRECT_HOSTS` 用于逗号分隔的外部重定向主机名,这些主机名可以在不使用凭据的情况下下载
- 将凭据存储在环境变量或密钥管理器中,切勿提交令牌/密钥。
## 安装```bash
# Broad scanner coverage (recommended; excludes the TensorFlow runtime and platform-specific TensorRT)
pip install "modelaudit[all]"
# Core only (static scanners, pickle, NumPy, archives, manifests, metadata)
pip install modelaudit
# Specific frameworks (TensorFlow installs on Python 3.11-3.12; ONNX installs on Python 3.10-3.12)
pip install "modelaudit[tensorflow,pytorch,h5,onnx,safetensors]"
# CI/CD environments
pip install "modelaudit[all-ci]"
# On Python 3.11-3.12, add TensorFlow only when you need runtime-dependent checkpoint or weight analysis
pip install "modelaudit[all,tensorflow]"
# Docker
docker run --rm -v "$(pwd)":/app ghcr.io/promptfoo/modelaudit:latest model.pkl
ONNX extra(包括 modelaudit[all] 中的 ONNX 部分)适用于 Python 3.10-3.12。
包含 PyTorch 的 extra 需要 Python 3.10-3.12 或标准(启用 GIL 的)CPython 3.13;修补版 PyTorch 2.13
wheel 不支持 free-threaded CPython 3.13t。请使用标准 CPython,因为 ModelAudit 的原生 pickle 扫描器同样
不支持 CPython 3.13t。在 Apple Silicon 上,包含 PyTorch 的 extra 需要 macOS 14 或更高版本,因为这些 wheel
以 macosx_14_0_arm64 为目标;仅核心安装仍可用于在 macOS 11-13 上进行静态扫描。