
Scanner de segurança para arquivos de modelos de IA/ML. Detecta código malicioso, backdoors e vulnerabilidades antes da implantação.
Proteja seus modelos de IA antes da implantação. Scanner estático que detecta código malicioso, possíveis indicadores de backdoor e vulnerabilidades de segurança em arquivos de modelos de ML — sem nunca carregá-los ou executá-los.
Documentação Completa | Exemplos de Uso | Formatos Suportados
Modelos são baixados de registries não confiáveis, passam pela CI e acabam rodando em produção. Ferramentas SAST tradicionais não analisam opcodes de pickle, layouts de grupos HDF5, grafos proto ONNX ou assinaturas de TensorFlow SavedModel — o ModelAudit analisa:
Ferramentas comparáveis: picklescan (somente pickle, baseado em Python), fickling (somente pickle, baseado em AST), modelscan (pickle + TensorFlow + subconjunto de Keras). O ModelAudit tem cobertura mais ampla e vem com um mecanismo pickle nativo em Rust por meio de seu pacote complementar modelaudit-picklescan.
Requer Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
(empty)```
$ 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
O ModelAudit inclui 45 scanners registrados cobrindo formatos de modelo, arquivo e configuração:
Além disso, há scanners para ZIP, TAR, 7-Zip, camadas OCI, templates Jinja2, metadados JSON/YAML, manifestos, model cards, arquivos de texto e reconhecimento de RAR. Arquivos RAR são relatados como não suportados/fail-closed em vez de serem ignorados.
Protobufs TensorFlow SavedModel e MetaGraph estruturalmente válidos também são reconhecidos quando renomeados para sufixos não relacionados a modelos.
Modelos CoreML também podem ser reconhecidos quando renomeados, com cobertura incompleta relatada explicitamente.
Arquivos SafeTensors com enquadramento superdimensionado, porém plausível, são retidos para análise limitada e inconclusiva sob
sufixos que de outra forma não seriam reivindicados, como .jpg.
Checkpoints Flax/JAX MessagePack estruturalmente plausíveis também são reconhecidos quando renomeados para sufixos não relacionados a modelos;
estruturas renomeadas que não podem ser totalmente classificadas são relatadas como cobertura incompleta.
Metadados estruturados de checkpoints JSON JAX/Orbax também são reconhecidos quando renomeados; candidatos ambíguos
superdimensionados são relatados como cobertura incompleta; padrões de segurança observáveis no prefixo inspecionado limitado ainda
podem ser relatados de forma conservadora.
Ver documentação completa de formatos
Examine modelos diretamente de registros remotos e armazenamento em nuvem:```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
### Variáveis de Ambiente de Autenticação
- `HF_TOKEN` para repositórios privados do Hugging Face
- `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (e opcionalmente `AWS_SESSION_TOKEN`) para S3
- `GOOGLE_APPLICATION_CREDENTIALS` para GCS
- `MLFLOW_TRACKING_URI` para acesso ao registro do MLflow
- `MODELAUDIT_MLFLOW_ALLOWED_ARTIFACT_URIS` para raízes de artefatos do MLflow não locais (prefixos de URI separados por vírgula)
- Use raízes de backend concretas, como `s3://bucket/prefix`; URIs lógicos `models:/` ou `runs:/` e caminhos remotos com codificação percentual são recusados.
- `JFROG_API_TOKEN` ou `JFROG_ACCESS_TOKEN` para JFrog Artifactory
- `MODELAUDIT_JFROG_ALLOWED_HOSTS` para nomes de host personalizados do JFrog separados por vírgula que podem receber credenciais
- `MODELAUDIT_JFROG_ALLOWED_REDIRECT_HOSTS` para nomes de host de redirecionamento externo separados por vírgula que podem ser baixados sem credenciais
- Armazene credenciais em variáveis de ambiente ou em um gerenciador de segredos e nunca faça commit de tokens/chaves.
## Instalação```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
O extra ONNX, incluindo a parte ONNX de modelaudit[all], é empacotado para Python 3.10-3.12.
Extras que contêm PyTorch exigem Python 3.10-3.12 ou CPython 3.13 padrão (com GIL); as wheels do PyTorch 2.13
com patch não suportam CPython 3.13t sem GIL. Use CPython padrão, pois o scanner pickle nativo do ModelAudit também
não suporta CPython 3.13t. Em Apple Silicon, extras que contêm PyTorch exigem macOS 14 ou mais recente porque as wheels
têm como alvo macosx_14_0_arm64; a instalação somente do núcleo permanece disponível para análise estática no macOS 11-13.
Comandos principais:```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]
Opções de varredura comuns:```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
Seleção de scanner direcionado:```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` começa a partir de uma allowlist explícita. `--exclude-scanner` subtrai scanners dessa allowlist ou do conjunto de scanners padrão. A seleção de scanners é refletida na saída JSON sob `scanner_selection`.
Para pastas remotas, o ModelAudit restringe downloads pelas extensões de scanner selecionadas quando seguro. O roteamento de wrappers renomeados com base no conteúdo é aplicado após a aquisição; escaneie um URL de arquivo direto quando os nomes de arquivos do repositório podem ser intencionalmente enganosos.
## Extração de Metadados```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 ativa carregadores de metadados do scanner que podem desserializar conteúdo de modelos. Use apenas em artefatos confiáveis em ambientes isolados.
0: Nenhum problema de segurança detectado1: Problemas de segurança detectados2: Erros de varreduraO ModelAudit inclui telemetria para confiabilidade do produto e análises de uso.
CI=true está definido ou IS_TESTING=true está definido, e em instalações de desenvolvimento editáveis, a menos que MODELAUDIT_TELEMETRY_DEV=1 esteja definido. Eventos enviados de outros provedores de CI (TeamCity, CodeBuild, Bitbucket Pipelines, Jenkins) são marcados com isRunningInCi=true para que possam ser filtrados posteriormente.~/.promptfoo/promptfoo.yaml para correlação entre ferramentas com Promptfoo, e cada sessão de telemetria usa um novo identificador de sessão. IDs existentes de ~/.modelaudit/user_config.json são migrados na primeira execução após a atualização. Um valor de e-mail legado nesse arquivo, se presente, pode ser anexado ao perfil de usuário de análises.Opte por não participar explicitamente com qualquer uma das variáveis de ambiente:```bash export PROMPTFOO_DISABLE_TELEMETRY=1
export NO_ANALYTICS=1
Para optar durante instalações editáveis/de desenvolvimento:```bash
export MODELAUDIT_TELEMETRY_DEV=1
modelaudit model.pkl --format json --output results.json
modelaudit model.pkl --format sarif --output results.sarif
## Solução de problemas
- Execute `modelaudit doctor --show-failed` para listar scanners indisponíveis e dependências opcionais ausentes.
- Execute `modelaudit debug --json` para coletar diagnósticos de ambiente/configuração para relatórios de bugs.
- Use `modelaudit cache cleanup --max-age 30` para remover entradas de cache obsoletas com segurança.
- Se o `pip` instalar uma versão mais antiga, verifique se o Python é suportado (`python --version`; o ModelAudit suporta Python 3.10-3.13).
- Para mais soluções de problemas e orientações sobre autenticação em nuvem, consulte:
- https://www.promptfoo.dev/docs/model-audit/
- https://www.promptfoo.dev/docs/model-audit/usage/
## Documentação
- **[Documentação completa](https://www.promptfoo.dev/docs/model-audit/)** — instalação, configuração e uso avançado
- **[Exemplos de uso](https://www.promptfoo.dev/docs/model-audit/usage/)** — integração com CI/CD, varredura remota, geração de SBOM
- **[Formatos suportados](https://www.promptfoo.dev/docs/model-audit/scanners/)** — documentação detalhada dos scanners
- **[Política de suporte](https://github.com/promptfoo/modelaudit/blob/main/SUPPORT.md)** — versões de Python/SO suportadas e política de manutenção
- **[Modelo de segurança e limitações](https://github.com/promptfoo/modelaudit/blob/main/docs/user/security-model.md)** — o que o ModelAudit garante e não garante
- **[Matriz de compatibilidade](https://github.com/promptfoo/modelaudit/blob/main/docs/user/compatibility-matrix.md)** — formatos de arquivo vs dependências opcionais
- **[Seleção de scanners](https://github.com/promptfoo/modelaudit/blob/main/docs/user/scanner-selection.md)** — listas de permissão e exclusões de scanners específicos
- **[Guia de extração de metadados](https://github.com/promptfoo/modelaudit/blob/main/docs/user/metadata-extraction.md)** — fluxos de trabalho seguros de metadados e orientações sobre `--trust-loaders`
- **[Guia offline/isolado](https://github.com/promptfoo/modelaudit/blob/main/docs/user/offline-air-gapped.md)** — operação segura sem acesso à internet
- **Solução de problemas** — execute `modelaudit doctor --show-failed` para verificar a disponibilidade dos scanners
## Pacotes Relacionados
- **[`modelaudit-picklescan`](https://pypi.org/project/modelaudit-picklescan/)** — o scanner de pickle independente baseado em Rust usado pelos scanners de pickle, PyTorch, ExecuTorch e PyTorch-ZIP do ModelAudit. Instale-o diretamente se você precisar apenas de análise de pickle (como biblioteca, não como CLI) e não quiser o pacote completo de scanners.
## Como Reportar Vulnerabilidades
Não abra issues públicas para vulnerabilidades suspeitas. Consulte [SECURITY.md](https://github.com/promptfoo/modelaudit/blob/main/SECURITY.md) para divulgação coordenada.
## Contribuindo
Issues, pedidos de recursos e PRs são bem-vindos. Consulte [CONTRIBUTING.md](https://github.com/promptfoo/modelaudit/blob/main/CONTRIBUTING.md) para obter detalhes.
## Licença
Licença MIT — consulte [LICENSE](https://github.com/promptfoo/modelaudit/blob/main/LICENSE) para detalhes.
| Formato | Extensões | Risco |
|---|
| Pickle | .pkl, .pickle, .dill | HIGH |
| PyTorch | .pt, .pth, .ckpt, .bin | HIGH |
| Joblib | .joblib | HIGH |
| NumPy | .npy, .npz | HIGH |
| R Serializado | .rds, .rda, .rdata, artefatos de workspace renomeados com assinatura válida | HIGH |
| TensorFlow | .pb, .meta, diretórios SavedModel | MEDIUM |
| Keras | .h5, .hdf5, .keras | MEDIUM |
| ONNX | .onnx | MEDIUM |
| CoreML | .mlmodel, artefatos renomeados estruturalmente válidos | LOW |
| MXNet | *-symbol.json, *-NNNN.params, JSON de símbolo renomeado estruturalmente válido | LOW |
| NeMo | .nemo, arquivos renomeados com configuração raiz | MEDIUM |
| CNTK | .dnn, .cmf, artefatos renomeados com assinatura válida | MEDIUM |
| RKNN | .rknn, artefatos com assinatura válida sob sufixos renomeados não conflitantes | MEDIUM |
| Torch7 | Artefatos serializados (.t7, .th, .net ou renomeados) | HIGH |
| CatBoost | .cbm | MEDIUM |
| XGBoost | .bst, .model, .json, .ubj, UBJSON sem extensão | MEDIUM |
| LightGBM | .lgb, .lightgbm, .model, artefatos renomeados com assinatura válida | MEDIUM |
| Llamafile | Wrappers executáveis (.llamafile, .exe, sem extensão ou renomeados) | MEDIUM |
| TorchServe | .mar | HIGH |
| SafeTensors | .safetensors | LOW |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, artefatos renomeados com assinatura válida | LOW |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | LOW |
| TFLite | .tflite, artefatos com assinatura válida sob sufixos renomeados não conflitantes | LOW |
| ExecuTorch | .ptl, .pte, artefatos autônomos com assinatura válida sob sufixos renomeados não conflitantes | LOW |
| TensorRT | .engine, .plan, .trt | LOW |
| PaddlePaddle | .pdmodel, .pdiparams | LOW |
| OpenVINO | .xml | LOW |
| Skops | .skops | HIGH |
| PMML | .pmml | LOW |
| Wrappers Compactados | .gz, .bz2, .xz, .lz4, .zlib | MEDIUM |