
Сканер безопасности для файлов моделей ИИ/МО. Обнаруживает вредоносный код, бэкдоры и уязвимости до развертывания.
Обеспечьте безопасность ваших моделей ИИ перед развертыванием. Статический сканер, который обнаруживает вредоносный код, потенциальные индикаторы бэкдоров и уязвимости безопасности в файлах моделей машинного обучения — без их загрузки или выполнения.
Полная документация | Примеры использования | Поддерживаемые форматы
Модели загружаются из ненадёжных реестров, проходят через CI и в итоге работают в продакшене. Традиционные инструменты SAST не анализируют опкоды pickle, структуру групп HDF5, графы proto ONNX или сигнатуры TensorFlow SavedModel — ModelAudit делает это:
Аналогичные инструменты: picklescan (только pickle, на Python), fickling (только pickle, на основе AST), modelscan (pickle + подмножество TensorFlow + Keras). ModelAudit обеспечивает более широкое покрытие и поставляется с нативным pickle-движком на Rust через сопутствующий пакет modelaudit-picklescan.
Требуется Python 3.10-3.13```bash pip install "modelaudit[all]"
modelaudit model.pkl modelaudit ./models/
modelaudit model.pkl --format json --output results.json
The input chunk is empty — there is no source text to translate. Please provide the actual content for 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 включает 45 зарегистрированных сканеров, охватывающих форматы моделей, архивов и конфигураций:
Кроме того, сканеры для ZIP, TAR, 7-Zip, OCI-слоёв, Jinja2-шаблонов, JSON/YAML-метаданных, манифестов, карточек моделей, текстовых файлов и распознавания RAR. RAR-архивы помечаются как неподдерживаемые/fail-closed, а не пропускаются.
Структурно корректные протобуфы TensorFlow SavedModel и MetaGraph также распознаются при переименовании в суффиксы, не относящиеся к моделям.
Модели 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`; логические URI `models:/` или `runs:/`, а также процентно-закодированные удалённые пути отклоняются.
- `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, включая ONNX-часть modelaudit[all], упаковано для Python 3.10-3.12.
Дополнения, содержащие PyTorch, требуют Python 3.10-3.12 или стандартного CPython 3.13 (с поддержкой GIL); патченные wheel-пакеты PyTorch 2.13
не поддерживают free-threaded CPython 3.13t. Используйте стандартный CPython, поскольку встроенный сканер pickle в ModelAudit также
не поддерживает CPython 3.13t. На Apple Silicon дополнения, содержащие PyTorch, требуют macOS 14 или новее, поскольку wheel-пакеты
рассчитаны на macosx_14_0_arm64; установка только ядра по-прежнему доступна для статического сканирования на macOS 11-13.
Основные команды:```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` исключает сканеры либо из этого списка, либо из набора сканеров по умолчанию. Выбор сканеров отражается в JSON-выводе в поле `scanner_selection`.
Для удалённых папок ModelAudit ограничивает загрузки по расширениям выбранных сканеров, когда это безопасно. Маршрутизация переименованных обёрток на основе содержимого применяется после получения; сканируйте прямой 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 переносятся при первом запуске после обновления. Устаревшее значение email в этом файле, если оно присутствует, может быть прикреплено к аналитическому профилю пользователя.Явно отключите телеметрию с помощью любой из переменных окружения:```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/ОС и политика сопровождения
- **[Модель безопасности и ограничения](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/)** — автономный pickle-сканер на базе Rust, используемый сканерами ModelAudit для pickle, PyTorch, ExecuTorch и PyTorch-ZIP. Установите его напрямую, если вам нужен только анализ 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 |