
Scanner de sécurité pour les fichiers de modèles IA/ML. Détecte les codes malveillants, les portes dérobées et les vulnérabilités avant le déploiement.
Sécurisez vos modèles d'IA avant le déploiement. Scanner statique qui détecte le code malveillant, les indicateurs potentiels de backdoor et les vulnérabilités de sécurité dans les fichiers de modèles ML — sans jamais les charger ni les exécuter.
Documentation complète | Exemples d'utilisation | Formats pris en charge
Les modèles sont téléchargés depuis des registres non fiables, transitent par le CI et finissent par être exécutés en production. Les outils SAST traditionnels n'examinent pas les opcodes pickle, les structures de groupes HDF5, les graphes proto ONNX ou les signatures TensorFlow SavedModel — ModelAudit, lui, le fait :
Outils comparables : picklescan (pickle uniquement, basé sur Python), fickling (pickle uniquement, basé sur AST), modelscan (pickle + sous-ensemble TensorFlow + Keras). ModelAudit offre une couverture plus large et embarque un moteur pickle natif en Rust via son package compagnon modelaudit-picklescan.
Nécessite Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
### Fonctionnalités
- Exécution de commandes à distance
- Système de plugins
- Historique des commandes
- Plusieurs langues```
$ 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 inclut 45 scanners enregistrés couvrant les formats de modèles, d'archives et de configuration :
S'ajoutent des scanners pour ZIP, TAR, 7-Zip, couches OCI, templates Jinja2, métadonnées JSON/YAML, manifestes, fiches de modèles, fichiers texte et reconnaissance RAR. Les archives RAR sont signalées comme non prises en charge/échec fermé au lieu d'être ignorées.
Les protobufs TensorFlow SavedModel et MetaGraph structurellement valides sont également reconnus lorsqu'ils sont renommés avec des suffixes autres que ceux des modèles.
Les modèles CoreML peuvent également être reconnus après renommage, la couverture incomplète étant signalée explicitement.
Les fichiers SafeTensors dont le cadrage est surdimensionné mais plausible sont conservés pour une analyse bornée et non concluante sous des suffixes autrement non réclamés, comme .jpg.
Les points de contrôle MessagePack Flax/JAX structurellement plausibles sont également reconnus après renommage avec des suffixes autres que ceux des modèles ;
les structures renommées qui ne peuvent pas être entièrement classifiées sont signalées comme couverture incomplète.
Les métadonnées de points de contrôle JSON structurées JAX/Orbax sont également reconnues après renommage ; les candidats ambigus surdimensionnés sont signalés comme couverture incomplète ; les schémas de sécurité observables dans le préfixe inspecté borné peuvent toujours être signalés de manière prudente.
Voir la documentation complète des formats
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
### Variables d'environnement d'authentification
- `HF_TOKEN` pour les dépôts Hugging Face privés
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (et éventuellement `AWS_SESSION_TOKEN`) pour S3
- `GOOGLE_APPLICATION_CREDENTIALS` pour GCS
- `MLFLOW_TRACKING_URI` pour l'accès au registre MLflow
- `MODELAUDIT_MLFLOW_ALLOWED_ARTIFACT_URIS` pour les racines d'artefacts MLflow non locales (préfixes d'URI séparés par des virgules)
- Utilisez des racines de backend concrètes telles que `s3://bucket/prefix`; les URI logiques `models:/` ou `runs:/` ainsi que les chemins distants encodés en pourcentage sont refusés.
- `JFROG_API_TOKEN` ou `JFROG_ACCESS_TOKEN` pour JFrog Artifactory
- `MODELAUDIT_JFROG_ALLOWED_HOSTS` pour les noms d'hôtes JFrog personnalisés séparés par des virgules pouvant recevoir des identifiants
- `MODELAUDIT_JFROG_ALLOWED_REDIRECT_HOSTS` pour les noms d'hôtes de redirection externes séparés par des virgules pouvant être téléchargés sans identifiants
- Stockez les identifiants dans des variables d'environnement ou un gestionnaire de secrets, et ne committez jamais de jetons/clés.
## Installation```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
L'extra ONNX, y compris la partie ONNX de modelaudit[all], est empaqueté pour Python 3.10-3.12.
Les extras contenant PyTorch nécessitent Python 3.10-3.12 ou CPython 3.13 standard (avec GIL) ; les wheels PyTorch 2.13 patchées
ne prennent pas en charge CPython 3.13t free-threaded. Utilisez un CPython standard, car le scanner natif de pickle de ModelAudit ne prend pas non plus en charge
CPython 3.13t. Sur Apple Silicon, les extras contenant PyTorch nécessitent macOS 14 ou plus récent, car les wheels
ciblent macosx_14_0_arm64 ; l'installation core-only reste disponible pour l'analyse statique sur macOS 11-13.
Commandes principales :```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]
Options de scan courantes :```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
Sélection ciblée du scanner:```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` part d'une liste blanche explicite. `--exclude-scanner` soustrait des scanners de cette liste blanche ou de l'ensemble de scanners par défaut. La sélection des scanners est reflétée dans la sortie JSON sous `scanner_selection`.
Pour les dossiers distants, ModelAudit restreint les téléchargements en fonction des extensions de scanner sélectionnées lorsque cela est sûr. Le routage basé sur le contenu des wrappers renommés s'applique après l'acquisition ; scannez une URL de fichier directe lorsque les noms de fichiers du dépôt peuvent être intentionnellement trompeurs.
## Extraction des métadonnées```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 active les chargeurs de métadonnées du scanner qui peuvent désérialiser le contenu du modèle. N'utilisez cette option que sur des artefacts de confiance dans des environnements isolés.
0 : Aucun problème de sécurité détecté1 : Problèmes de sécurité détectés2 : Erreurs d'analyseModelAudit inclut une télémétrie pour la fiabilité du produit et les analyses d'utilisation.
CI=true est défini ou IS_TESTING=true est défini, et dans les installations de développement en mode éditable sauf si MODELAUDIT_TELEMETRY_DEV=1. Les événements envoyés depuis d'autres fournisseurs d'IC (TeamCity, CodeBuild, Bitbucket Pipelines, Jenkins) sont marqués avec isRunningInCi=true afin de pouvoir être filtrés en aval.~/.promptfoo/promptfoo.yaml pour la corrélation entre outils avec Promptfoo, et chaque session de télémétrie utilise un nouvel identifiant de session. Les identifiants existants dans ~/.modelaudit/user_config.json sont migrés lors de la première exécution après la mise à niveau. Une valeur d'e-mail héritée dans ce fichier, si présente, peut être associée au profil utilisateur d'analytique.Désactivez explicitement la télémétrie avec l'une ou l'autre des variables d'environnement :```bash export PROMPTFOO_DISABLE_TELEMETRY=1
export NO_ANALYTICS=1
Pour activer l'option lors des installations en mode editable/développement :```bash
export MODELAUDIT_TELEMETRY_DEV=1
modelaudit model.pkl --format json --output results.json
modelaudit model.pkl --format sarif --output results.sarif
## Troubleshooting
- Exécutez `modelaudit doctor --show-failed` pour lister les scanners indisponibles et les dépendances optionnelles manquantes.
- Exécutez `modelaudit debug --json` pour collecter les diagnostics d'environnement/config pour les rapports de bugs.
- Utilisez `modelaudit cache cleanup --max-age 30` pour supprimer en toute sécurité les entrées de cache obsolètes.
- Si `pip` installe une version plus ancienne, vérifiez que Python est pris en charge (`python --version` ; ModelAudit prend en charge Python 3.10-3.13).
- Pour des conseils supplémentaires de dépannage et d'authentification cloud, consultez :
- https://www.promptfoo.dev/docs/model-audit/
- https://www.promptfoo.dev/docs/model-audit/usage/
## Documentation
- **[Documentation complète](https://www.promptfoo.dev/docs/model-audit/)** — installation, configuration et utilisation avancée
- **[Exemples d'utilisation](https://www.promptfoo.dev/docs/model-audit/usage/)** — intégration CI/CD, analyse à distance, génération de SBOM
- **[Formats pris en charge](https://www.promptfoo.dev/docs/model-audit/scanners/)** — documentation détaillée des scanners
- **[Politique de support](https://github.com/promptfoo/modelaudit/blob/main/SUPPORT.md)** — versions Python/OS prises en charge et politique de maintenance
- **[Modèle de sécurité et limites](https://github.com/promptfoo/modelaudit/blob/main/docs/user/security-model.md)** — ce que ModelAudit garantit et ne garantit pas
- **[Matrice de compatibilité](https://github.com/promptfoo/modelaudit/blob/main/docs/user/compatibility-matrix.md)** — formats de fichiers vs dépendances optionnelles
- **[Sélection des scanners](https://github.com/promptfoo/modelaudit/blob/main/docs/user/scanner-selection.md)** — listes d'autorisation ciblées et exclusions de scanners
- **[Guide d'extraction des métadonnées](https://github.com/promptfoo/modelaudit/blob/main/docs/user/metadata-extraction.md)** — workflows sécurisés de métadonnées et conseils sur `--trust-loaders`
- **[Guide hors ligne/environnement isolé](https://github.com/promptfoo/modelaudit/blob/main/docs/user/offline-air-gapped.md)** — fonctionnement sécurisé sans accès à Internet
- **Dépannage** — exécutez `modelaudit doctor --show-failed` pour vérifier la disponibilité des scanners
## Paquets associés
- **[`modelaudit-picklescan`](https://pypi.org/project/modelaudit-picklescan/)** — le scanner pickle autonome basé sur Rust utilisé par les scanners pickle, PyTorch, ExecuTorch et PyTorch-ZIP de ModelAudit. Installez-le directement si vous n'avez besoin que de l'analyse pickle (en tant que bibliothèque, pas en tant que CLI) et que vous ne voulez pas l'ensemble complet de scanners.
## Signaler des vulnérabilités
N'ouvrez pas de problèmes publics pour des vulnérabilités suspectées. Consultez [SECURITY.md](https://github.com/promptfoo/modelaudit/blob/main/SECURITY.md) pour la divulgation coordonnée.
## Contribution
Les problèmes, demandes de fonctionnalités et PR sont les bienvenus. Consultez [CONTRIBUTING.md](https://github.com/promptfoo/modelaudit/blob/main/CONTRIBUTING.md).
## Licence
Licence MIT — voir [LICENSE](https://github.com/promptfoo/modelaudit/blob/main/LICENSE) pour plus de détails.
| Format | Extensions | Risque |
|---|
| Pickle | .pkl, .pickle, .dill | ÉLEVÉ |
| PyTorch | .pt, .pth, .ckpt, .bin | ÉLEVÉ |
| Joblib | .joblib | ÉLEVÉ |
| NumPy | .npy, .npz | ÉLEVÉ |
| R Serialized | .rds, .rda, .rdata, artefacts d'espace de travail renommés à signature valide | ÉLEVÉ |
| TensorFlow | .pb, .meta, répertoires SavedModel | MOYEN |
| Keras | .h5, .hdf5, .keras | MOYEN |
| ONNX | .onnx | MOYEN |
| CoreML | .mlmodel, artefacts renommés structurellement valides | FAIBLE |
| MXNet | *-symbol.json, *-NNNN.params, JSON de symbole renommé structurellement valide | FAIBLE |
| NeMo | .nemo, archives renommées avec config racine | MOYEN |
| CNTK | .dnn, .cmf, artefacts renommés à signature valide | MOYEN |
| RKNN | .rknn, artefacts à signature valide sous suffixes renommés non conflictuels | MOYEN |
| Torch7 | Artefacts sérialisés (.t7, .th, .net ou renommés) | ÉLEVÉ |
| CatBoost | .cbm | MOYEN |
| XGBoost | .bst, .model, .json, .ubj, UBJSON sans extension | MOYEN |
| LightGBM | .lgb, .lightgbm, .model, artefacts renommés à signature valide | MOYEN |
| Llamafile | Wrappers exécutables (.llamafile, .exe, sans extension ou renommés) | MOYEN |
| TorchServe | .mar | ÉLEVÉ |
| SafeTensors | .safetensors | FAIBLE |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, artefacts renommés à signature valide | FAIBLE |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | FAIBLE |
| TFLite | .tflite, artefacts à signature valide sous suffixes renommés non conflictuels | FAIBLE |
| ExecuTorch | .ptl, .pte, artefacts autonomes à signature valide sous suffixes renommés non conflictuels | FAIBLE |
| TensorRT | .engine, .plan, .trt | FAIBLE |
| PaddlePaddle | .pdmodel, .pdiparams | FAIBLE |
| OpenVINO | .xml | FAIBLE |
| Skops | .skops | ÉLEVÉ |
| PMML | .pmml | FAIBLE |
| Wrappers compressés | .gz, .bz2, .xz, .lz4, .zlib | MOYEN |