
AI/MLモデルファイル向けセキュリティスキャナー。デプロイ前に悪意のあるコード、バックドア、脆弱性を検出します。
AIモデルをデプロイ前に保護しよう。 MLモデルファイル内の悪意のあるコード、潜在的なバックドア指標、セキュリティ脆弱性を検出する静的スキャナです。モデルをロードしたり実行したりすることは一切ありません。
モデルは信頼できないレジストリからダウンロードされ、CIを通過し、本番環境で実行されることになります。従来のSASTツールはpickleオペコード、HDF5グループレイアウト、ONNXプロトグラフ、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
(no input provided)```
$ 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 の登録済みスキャナが含まれています:
さらに、ZIP、TAR、7-Zip、OCI レイヤー、Jinja2 テンプレート、JSON/YAML メタデータ、マニフェスト、モデルカード、テキストファイル、および RAR 認識用のスキャナもあります。RAR アーカイブはスキップされる代わりに、未サポート/フェイルクローズとして報告されます。
構造的に有効な 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を含むextrasはPython 3.10-3.12または標準(GIL有効)CPython 3.13を必要とします。パッチ適用済みPyTorch 2.13
wheelはfree-threaded CPython 3.13tをサポートしていません。ModelAuditのネイティブpickleスキャナも
CPython 3.13tをサポートしていません。標準CPythonを使用してください。Apple Siliconでは、wheelが
macosx_14_0_arm64を対象としているため、PyTorchを含むextrasはmacOS 14以降を必要とします。macOS 11-13では静的スキャン用のcore-onlyインストールが引き続き利用可能です。
主なコマンド:```bash modelaudit [PATHS...] # Default scan command modelaudit scan [OPTIONS] PATHS... # Explicit scan command modelaudit scan --list-scanners # List scanner IDs for targeted scans modelaudit metadata [OPTIONS] PATH # Extract model metadata safely (no deserialization by default) modelaudit doctor [--show-failed] # Diagnose scanner/dependency availability modelaudit debug [--json] [--verbose] # Environment and configuration diagnostics modelaudit cache [stats|clear|cleanup] [OPTIONS]
一般的なスキャンオプション:```text
--format {text,json,sarif} Output format (default: auto-detected)
--output FILE Write results to file
--strict Fail on warnings, scan all file types, strict license validation
--sbom FILE Generate CycloneDX SBOM
--stream Process files one-by-one; remote downloads are deleted after scanning
--assume-shard-family Treat explicitly listed cross-directory shards as one model family
--max-size SIZE Size limit (e.g., 10GB)
--timeout SECONDS Override scan timeout
--dry-run Preview what would be scanned
--verbose / --quiet Control output detail
--blacklist PATTERN Additional patterns to flag
--no-cache Disable result caching
--cache-dir DIR Set cache directory for downloads and scan results
--progress Force progress display
--scanners LIST Only run selected scanners (IDs/classes; comma-separated or repeated)
--exclude-scanner NAME Exclude a scanner from the active set (comma-separated or repeated)
--list-scanners List scanner IDs, class names, extensions, and dependencies
ターゲット指定スキャナの選択:```bash
modelaudit scan --list-scanners modelaudit scan --list-scanners --format json
modelaudit scan ./models --scanners pickle,tf_savedmodel modelaudit scan ./model.pkl --scanners PickleScanner
modelaudit scan ./models --exclude-scanner weight_distribution
modelaudit scan ./archive.zip --scanners zip,pickle
`--scanners` は明示的な許可リストから開始します。`--exclude-scanner` はその許可リストまたはデフォルトのスキャナーセットからスキャナーを差し引きます。スキャナーの選択は、`scanner_selection` の下の JSON 出力に反映されます。
リモートフォルダの場合、ModelAudit は安全な場合に選択されたスキャナーの拡張子に基づいてダウンロードを絞り込みます。コンテンツベースの renamed-wrapper ルーティングは取得後に適用されます。リポジトリのファイル名が意図的に紛らわしい可能性がある場合は、直接ファイル URL をスキャンしてください。
## メタデータ抽出```bash
# Human-readable summary (safe default: no model deserialization)
modelaudit metadata model.safetensors
# Machine-readable output
modelaudit metadata ./models --format json --output metadata.json
# Focus only on security-relevant metadata fields
modelaudit metadata model.onnx --security-only
--trust-loaders は、モデルコンテンツを逆シリアル化する可能性のあるスキャナメタデータローダーを有効にします。信頼されたアーティファクトに対してのみ、隔離された環境で使用してください。
0: セキュリティ問題が検出されなかった1: セキュリティ問題が検出された2: スキャンエラーModelAudit には、製品の信頼性と利用状況分析のためのテレメトリが含まれています。
CI=true または IS_TESTING=true が設定されている場合、および編集可能な開発インストールでは MODELAUDIT_TELEMETRY_DEV=1 が設定されていない限り、テレメトリは自動的に無効になります。他の CI プロバイダー(TeamCity、CodeBuild、Bitbucket Pipelines、Jenkins)から送信されたイベントには isRunningInCi=true のタグが付けられ、後段でフィルタリングできます。~/.promptfoo/promptfoo.yaml に保存され、Promptfoo とのツール間相関に使用されます。各テレメトリセッションでは新しいセッション識別子が使用されます。~/.modelaudit/user_config.json の既存の ID は、アップグレード後の初回実行時に移行されます。そのファイルにレガシーのメールアドレス値が存在する場合、分析ユーザープロファイルに添付されることがあります。次のいずれかの環境変数で明示的にオプトアウトしてください。```bash export PROMPTFOO_DISABLE_TELEMETRY=1
export NO_ANALYTICS=1
編集可能/開発インストール時にオプトインするには:```bash
export MODELAUDIT_TELEMETRY_DEV=1
modelaudit model.pkl --format json --output results.json
modelaudit model.pkl --format sarif --output results.sarif
## トラブルシューティング
- `modelaudit doctor --show-failed` を実行すると、利用できないスキャナーと不足しているオプション依存関係を一覧表示できます。
- `modelaudit debug --json` を実行すると、バグ報告用の環境・設定診断情報を収集できます。
- `modelaudit cache cleanup --max-age 30` を使用すると、古いキャッシュエントリを安全に削除できます。
- `pip` が古いリリースをインストールする場合は、Python がサポートされているか確認してください(`python --version`。ModelAudit は Python 3.10〜3.13 をサポートしています)。
- 追加のトラブルシューティングとクラウド認証のガイダンスについては、以下を参照してください:
- https://www.promptfoo.dev/docs/model-audit/
- https://www.promptfoo.dev/docs/model-audit/usage/
## ドキュメント
- **[完全なドキュメント](https://www.promptfoo.dev/docs/model-audit/)** — セットアップ、設定、高度な使用方法
- **[使用例](https://www.promptfoo.dev/docs/model-audit/usage/)** — CI/CD 統合、リモートスキャン、SBOM 生成
- **[対応フォーマット](https://www.promptfoo.dev/docs/model-audit/scanners/)** — スキャナーの詳細ドキュメント
- **[サポートポリシー](https://github.com/promptfoo/modelaudit/blob/main/SUPPORT.md)** — サポート対象の Python/OS バージョンとメンテナンスポリシー
- **[セキュリティモデルと制限事項](https://github.com/promptfoo/modelaudit/blob/main/docs/user/security-model.md)** — ModelAudit が保証することと保証しないこと
- **[互換性マトリクス](https://github.com/promptfoo/modelaudit/blob/main/docs/user/compatibility-matrix.md)** — ファイル形式とオプション依存関係の対応
- **[スキャナー選択](https://github.com/promptfoo/modelaudit/blob/main/docs/user/scanner-selection.md)** — 対象を絞ったスキャナーの許可リストと除外設定
- **[メタデータ抽出ガイド](https://github.com/promptfoo/modelaudit/blob/main/docs/user/metadata-extraction.md)** — 安全なメタデータワークフローと `--trust-loaders` のガイダンス
- **[オフライン/エアギャップガイド](https://github.com/promptfoo/modelaudit/blob/main/docs/user/offline-air-gapped.md)** — インターネット接続なしでの安全な運用
- **トラブルシューティング** — `modelaudit doctor --show-failed` を実行してスキャナーの利用可能性を確認
## 関連パッケージ
- **[`modelaudit-picklescan`](https://pypi.org/project/modelaudit-picklescan/)** — ModelAudit の pickle、PyTorch、ExecuTorch、PyTorch-ZIP スキャナーが使用する、Rust ベースのスタンドアロン pickle スキャナーです。pickle 解析のみが必要で(CLI ではなくライブラリとして)、完全なスキャナーバンドルが不要な場合は、これを直接インストールしてください。
## 脆弱性の報告
疑わしい脆弱性について公開の Issue を開かないでください。協調的な開示については [SECURITY.md](https://github.com/promptfoo/modelaudit/blob/main/SECURITY.md) を参照してください。
## コントリビューション
Issue、機能リクエスト、PR は歓迎します。[CONTRIBUTING.md](https://github.com/promptfoo/modelaudit/blob/main/CONTRIBUTING.md) を参照してください。
## ライセンス
MIT ライセンス — 詳細は [LICENSE](https://github.com/promptfoo/modelaudit/blob/main/LICENSE) を参照してください。
| 形式 | 拡張子 | リスク |
|---|
| Pickle | .pkl, .pickle, .dill | HIGH |
| PyTorch | .pt, .pth, .ckpt, .bin | HIGH |
| Joblib | .joblib | HIGH |
| NumPy | .npy, .npz | HIGH |
| R Serialized | .rds, .rda, .rdata, シグネチャ検証済みの名前変更されたワークスペースアーティファクト | HIGH |
| TensorFlow | .pb, .meta, SavedModel ディレクトリ | MEDIUM |
| Keras | .h5, .hdf5, .keras | MEDIUM |
| ONNX | .onnx | MEDIUM |
| CoreML | .mlmodel, 構造的に有効な名前変更済みアーティファクト | LOW |
| MXNet | *-symbol.json, *-NNNN.params, 構造的に有効な名前変更済みシンボル JSON | LOW |
| NeMo | .nemo, ルート設定を持つ名前変更済みアーカイブ | MEDIUM |
| CNTK | .dnn, .cmf, シグネチャ検証済みの名前変更済みアーティファクト | MEDIUM |
| RKNN | .rknn, 競合しない名前変更済みサフィックス下のシグネチャ検証済みアーティファクト | MEDIUM |
| Torch7 | シリアライズされたアーティファクト (.t7, .th, .net または名前変更済み) | HIGH |
| CatBoost | .cbm | MEDIUM |
| XGBoost | .bst, .model, .json, .ubj, 拡張子なし UBJSON | MEDIUM |
| LightGBM | .lgb, .lightgbm, .model, シグネチャ検証済みの名前変更済みアーティファクト | MEDIUM |
| Llamafile | 実行可能ラッパー (.llamafile, .exe, 拡張子なしまたは名前変更済み) | MEDIUM |
| TorchServe | .mar | HIGH |
| SafeTensors | .safetensors | LOW |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, シグネチャ検証済みの名前変更済みアーティファクト | LOW |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | LOW |
| TFLite | .tflite, 競合しない名前変更済みサフィックス下のシグネチャ検証済みアーティファクト | LOW |
| ExecuTorch | .ptl, .pte, 競合しない名前変更済みサフィックス下のシグネチャ検証済みスタンドアロンアーティファクト | LOW |
| TensorRT | .engine, .plan, .trt | LOW |
| PaddlePaddle | .pdmodel, .pdiparams | LOW |
| OpenVINO | .xml | LOW |
| Skops | .skops | HIGH |
| PMML | .pmml | LOW |
| Compressed Wrappers | .gz, .bz2, .xz, .lz4, .zlib | MEDIUM |