
Scanner di sicurezza per file di modelli AI/ML. Rileva codice dannoso, backdoor e vulnerabilità prima della distribuzione
Proteggi i tuoi modelli AI prima della distribuzione. Scanner statico che rileva codice malevolo, potenziali indicatori di backdoor e vulnerabilità di sicurezza nei file di modelli ML — senza mai caricarli o eseguirli.
Documentazione completa | Esempi di utilizzo | Formati supportati
I modelli vengono scaricati da registry non affidabili, passano attraverso la CI e finiscono in produzione. Gli strumenti SAST tradizionali non esaminano gli opcode pickle, i layout dei gruppi HDF5, i grafi proto ONNX o le firme TensorFlow SavedModel — ModelAudit lo fa:
Strumenti comparabili: picklescan (solo pickle, basato su Python), fickling (solo pickle, basato su AST), modelscan (sottoinsieme pickle + TensorFlow + Keras). ModelAudit offre una copertura più ampia e include un motore pickle Rust nativo tramite il pacchetto complementare modelaudit-picklescan.
Richiede Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
I received no content to translate. The input after "INPUT:" is empty. Please provide chunk 3 of 23.```
$ 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 include 45 scanner registrati che coprono formati di modelli, archivi e configurazioni:
Inoltre include scanner per ZIP, TAR, 7-Zip, layer OCI, template Jinja2, metadati JSON/YAML, manifest, model card, file di testo e riconoscimento RAR. Gli archivi RAR vengono segnalati come non supportati/fail-closed invece di essere saltati.
Anche i protobuf TensorFlow SavedModel e MetaGraph strutturalmente validi vengono riconosciuti quando rinominati con suffissi non di modello.
Anche i modelli CoreML possono essere riconosciuti se rinominati, con copertura incompleta segnalata esplicitamente.
I file SafeTensors con struttura sovradimensionata ma plausibile vengono conservati per un'analisi limitata e inconcludente sotto suffissi altrimenti non rivendicati, come .jpg.
Anche i checkpoint Flax/JAX MessagePack strutturalmente plausibili vengono riconosciuti quando rinominati con suffissi non di modello;
le strutture rinominate che non possono essere classificate completamente vengono segnalate come copertura incompleta.
Anche i metadati strutturati dei checkpoint JAX/Orbax JSON vengono riconosciuti quando rinominati; i candidati ambigui sovradimensionati
vengono segnalati come copertura incompleta; i pattern di sicurezza osservabili nel prefisso ispezionato limitato possono comunque
essere segnalati in modo conservativo.
Visualizza la documentazione completa dei formati
Scansiona modelli direttamente da registry remoti e archiviazione cloud:```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
### Variabili d'ambiente per l'autenticazione
- `HF_TOKEN` per repository Hugging Face privati
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (e opzionale `AWS_SESSION_TOKEN`) per S3
- `GOOGLE_APPLICATION_CREDENTIALS` per GCS
- `MLFLOW_TRACKING_URI` per l'accesso al registry MLflow
- `MODELAUDIT_MLFLOW_ALLOWED_ARTIFACT_URIS` per radici di artefatti MLflow non locali (prefissi URI separati da virgole)
- Usa radici backend concrete come `s3://bucket/prefix`; gli URI logici `models:/` o `runs:/` e i percorsi remoti con codifica percentuale vengono rifiutati.
- `JFROG_API_TOKEN` o `JFROG_ACCESS_TOKEN` per JFrog Artifactory
- `MODELAUDIT_JFROG_ALLOWED_HOSTS` per nomi host JFrog personalizzati separati da virgole che possono ricevere credenziali
- `MODELAUDIT_JFROG_ALLOWED_REDIRECT_HOSTS` per nomi host di reindirizzamento esterni separati da virgole che possono essere scaricati senza credenziali
- Conserva le credenziali in variabili d'ambiente o in un gestore di segreti e non committare mai token/chiavi.
## Installazione```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
The ONNX extra, inclusa la parte ONNX di modelaudit[all], è impacchettato per Python 3.10-3.12.
Gli extra che includono PyTorch richiedono Python 3.10-3.12 o CPython 3.13 standard (con GIL); le wheel di PyTorch 2.13 patchate non supportano CPython 3.13t free-threaded. Usa CPython standard, poiché lo scanner pickle nativo di ModelAudit non supporta CPython 3.13t. Su Apple Silicon, gli extra che includono PyTorch richiedono macOS 14 o successivo perché le wheel hanno come target macosx_14_0_arm64; l'installazione solo core rimane disponibile per la scansione statica su macOS 11-13.
Comandi principali:```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]
Opzioni di scansione comuni:```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
Selezione mirata dello 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` parte da una allowlist esplicita. `--exclude-scanner` sottrae scanner da tale allowlist o dal set di scanner predefinito. La selezione degli scanner viene riflessa nell'output JSON sotto `scanner_selection`.
Per le cartelle remote, ModelAudit restringe i download in base alle estensioni degli scanner selezionati quando è sicuro. Il routing basato sul contenuto per wrapper rinominati viene applicato dopo l'acquisizione; esegui la scansione di un URL di file diretto quando i nomi dei file del repository potrebbero essere intenzionalmente fuorvianti.
## Estrazione dei Metadati```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 abilita i loader di metadati dello scanner che possono deserializzare il contenuto del modello. Usalo solo su artefatti attendibili in ambienti isolati.
0: Nessun problema di sicurezza rilevato1: Problemi di sicurezza rilevati2: Errori di scansioneModelAudit include la telemetria per l'affidabilità del prodotto e l'analisi dell'utilizzo.
CI=true è impostato o IS_TESTING=true è impostato, e nelle installazioni di sviluppo in modalità editable a meno che MODELAUDIT_TELEMETRY_DEV=1. Gli eventi inviati da altri provider CI (TeamCity, CodeBuild, Bitbucket Pipelines, Jenkins) vengono contrassegnati con isRunningInCi=true in modo da poter essere filtrati a valle.~/.promptfoo/promptfoo.yaml per la correlazione tra strumenti con Promptfoo, e ogni sessione di telemetria utilizza un nuovo identificatore di sessione. Gli ID esistenti da ~/.modelaudit/user_config.json vengono migrati al primo avvio dopo l'aggiornamento. Un valore email legacy in quel file, se presente, può essere associato al profilo utente di analisi.Disattiva esplicitamente con una delle due variabili d'ambiente:```bash export PROMPTFOO_DISABLE_TELEMETRY=1
export NO_ANALYTICS=1
Per aderire durante le installazioni editabili/di sviluppo:```bash
export MODELAUDIT_TELEMETRY_DEV=1
modelaudit model.pkl --format json --output results.json
modelaudit model.pkl --format sarif --output results.sarif
## Risoluzione dei problemi
- Esegui `modelaudit doctor --show-failed` per elencare gli scanner non disponibili e le dipendenze opzionali mancanti.
- Esegui `modelaudit debug --json` per raccogliere diagnostica di ambiente/configurazione per le segnalazioni di bug.
- Usa `modelaudit cache cleanup --max-age 30` per rimuovere in modo sicuro le voci di cache obsolete.
- Se `pip` installa una versione meno recente, verifica che Python sia supportato (`python --version`; ModelAudit supporta Python 3.10-3.13).
- Per ulteriori informazioni sulla risoluzione dei problemi e sull'autenticazione cloud, vedi:
- https://www.promptfoo.dev/docs/model-audit/
- https://www.promptfoo.dev/docs/model-audit/usage/
## Documentazione
- **[Documentazione completa](https://www.promptfoo.dev/docs/model-audit/)** — configurazione, impostazioni e utilizzo avanzato
- **[Esempi di utilizzo](https://www.promptfoo.dev/docs/model-audit/usage/)** — integrazione CI/CD, scansione remota, generazione di SBOM
- **[Formati supportati](https://www.promptfoo.dev/docs/model-audit/scanners/)** — documentazione dettagliata degli scanner
- **[Criteri di supporto](https://github.com/promptfoo/modelaudit/blob/main/SUPPORT.md)** — versioni supportate di Python/OS e criteri di manutenzione
- **[Modello di sicurezza e limiti](https://github.com/promptfoo/modelaudit/blob/main/docs/user/security-model.md)** — cosa ModelAudit garantisce e cosa non garantisce
- **[Matrice di compatibilità](https://github.com/promptfoo/modelaudit/blob/main/docs/user/compatibility-matrix.md)** — formati di file rispetto alle dipendenze opzionali
- **[Selezione degli scanner](https://github.com/promptfoo/modelaudit/blob/main/docs/user/scanner-selection.md)** — liste consentite ed esclusioni mirate degli scanner
- **[Guida all'estrazione dei metadati](https://github.com/promptfoo/modelaudit/blob/main/docs/user/metadata-extraction.md)** — flussi di lavoro sicuri per i metadati e guida a `--trust-loaders`
- **[Guida offline/air-gapped](https://github.com/promptfoo/modelaudit/blob/main/docs/user/offline-air-gapped.md)** — funzionamento sicuro senza accesso a Internet
- **Risoluzione dei problemi** — esegui `modelaudit doctor --show-failed` per verificare la disponibilità degli scanner
## Pacchetti correlati
- **[`modelaudit-picklescan`](https://pypi.org/project/modelaudit-picklescan/)** — lo scanner di pickle autonomo basato su Rust utilizzato dagli scanner pickle, PyTorch, ExecuTorch e PyTorch-ZIP di ModelAudit. Installalo direttamente se ti serve solo l'analisi dei pickle (come libreria, non come CLI) e non desideri l'intero pacchetto di scanner.
## Segnalazione di vulnerabilità
Non aprire issue pubbliche per sospette vulnerabilità. Vedi [SECURITY.md](https://github.com/promptfoo/modelaudit/blob/main/SECURITY.md) per la divulgazione coordinata.
## Contributi
Issue, richieste di funzionalità e pull request sono benvenuti. Vedi [CONTRIBUTING.md](https://github.com/promptfoo/modelaudit/blob/main/CONTRIBUTING.md).
## Licenza
Licenza MIT — vedi [LICENSE](https://github.com/promptfoo/modelaudit/blob/main/LICENSE) per i dettagli.
| Formato | Estensioni | Rischio |
|---|
| Pickle | .pkl, .pickle, .dill | HIGH |
| PyTorch | .pt, .pth, .ckpt, .bin | HIGH |
| Joblib | .joblib | HIGH |
| NumPy | .npy, .npz | HIGH |
| R Serialized | .rds, .rda, .rdata, signature-valid renamed workspace artifacts | HIGH |
| TensorFlow | .pb, .meta, SavedModel dirs | MEDIUM |
| Keras | .h5, .hdf5, .keras | MEDIUM |
| ONNX | .onnx | MEDIUM |
| CoreML | .mlmodel, structurally valid renamed artifacts | LOW |
| MXNet | *-symbol.json, *-NNNN.params, structurally valid renamed symbol JSON | LOW |
| NeMo | .nemo, renamed archives with root config | MEDIUM |
| CNTK | .dnn, .cmf, signature-valid renamed artifacts | MEDIUM |
| RKNN | .rknn, signature-valid artifacts under non-conflicting renamed suffixes | MEDIUM |
| Torch7 | Serialized artifacts (.t7, .th, .net or renamed) | HIGH |
| CatBoost | .cbm | MEDIUM |
| XGBoost | .bst, .model, .json, .ubj, extensionless UBJSON | MEDIUM |
| LightGBM | .lgb, .lightgbm, .model, signature-valid renamed artifacts | MEDIUM |
| Llamafile | Executable wrappers (.llamafile, .exe, extensionless or renamed) | MEDIUM |
| TorchServe | .mar | HIGH |
| SafeTensors | .safetensors | LOW |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, signature-valid renamed artifacts | LOW |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | LOW |
| TFLite | .tflite, signature-valid artifacts under non-conflicting renamed suffixes | LOW |
| ExecuTorch | .ptl, .pte, signature-valid standalone artifacts under non-conflicting renamed suffixes | 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 |