AI/ML 모델 파일용 보안 스캐너입니다. 배포 전에 악성 코드, 백도어 및 취약점을 탐지합니다.
배포 전에 AI 모델을 보호하세요. ML 모델 파일에서 악성 코드, 잠재적 백도어 지표, 보안 취약점을 탐지하는 정적 스캐너입니다. 모델을 로드하거나 실행하지 않습니다.
모델은 신뢰할 수 없는 레지스트리에서 다운로드되고, CI를 거쳐 프로덕션에서 실행됩니다. 기존 SAST 도구는 pickle opcode, HDF5 그룹 레이아웃, ONNX proto 그래프, 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
입력된 콘텐츠가 없습니다.```
$ 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개의 등록된 스캐너가 포함되어 있습니다:
| 형식 | 확장자 | 위험도 |
|---|---|---|
| Pickle | .pkl, .pickle, .dill | 높음 |
| PyTorch | .pt, .pth, .ckpt, .bin | 높음 |
| Joblib | .joblib | 높음 |
| NumPy | .npy, .npz | 높음 |
| R Serialized | .rds, .rda, .rdata, 서명이 유효한 이름이 변경된 워크스페이스 아티팩트 | 높음 |
| TensorFlow | .pb, .meta, SavedModel 디렉터리 | 중간 |
| Keras | .h5, .hdf5, .keras | 중간 |
| ONNX | .onnx | 중간 |
| CoreML | .mlmodel, 구조적으로 유효한 이름이 변경된 아티팩트 | 낮음 |
| MXNet | *-symbol.json, *-NNNN.params, 구조적으로 유효한 이름이 변경된 symbol JSON | 낮음 |
| NeMo | .nemo, 루트 구성이 있는 이름이 변경된 아카이브 | 중간 |
| CNTK | .dnn, .cmf, 서명이 유효한 이름이 변경된 아티팩트 | 중간 |
| RKNN | .rknn, 충돌하지 않는 이름 변경 접미사 아래의 서명이 유효한 아티팩트 | 중간 |
| Torch7 | 직렬화된 아티팩트 (.t7, .th, .net 또는 이름 변경) | 높음 |
| CatBoost | .cbm | 중간 |
| XGBoost | .bst, .model, .json, .ubj, 확장자 없는 UBJSON | 중간 |
| LightGBM | .lgb, .lightgbm, .model, 서명이 유효한 이름이 변경된 아티팩트 | 중간 |
| Llamafile | 실행 가능한 래퍼 (.llamafile, .exe, 확장자 없음 또는 이름 변경) | 중간 |
| TorchServe | .mar | 높음 |
| SafeTensors | .safetensors | 낮음 |
| GGUF/GGML | .gguf, .ggml, .ggmf, .ggjt, .ggla, .ggsa, 서명이 유효한 이름이 변경된 아티팩트 | 낮음 |
| JAX/Flax | .msgpack, .flax, .orbax, .jax, .checkpoint, .orbax-checkpoint | 낮음 |
| TFLite | .tflite, 충돌하지 않는 이름 변경 접미사 아래의 서명이 유효한 아티팩트 | 낮음 |
| ExecuTorch | .ptl, .pte, 충돌하지 않는 이름 변경 접미사 아래의 서명이 유효한 독립형 아티팩트 | 낮음 |
| TensorRT | .engine, .plan, .trt | 낮음 |
| PaddlePaddle | .pdmodel, .pdiparams | 낮음 |
| OpenVINO | .xml | 낮음 |
| Skops | .skops | 높음 |
| PMML | .pmml | 낮음 |
| Compressed Wrappers | .gz, .bz2, .xz, .lz4, .zlib | 중간 |
또한 ZIP, TAR, 7-Zip, OCI 레이어, Jinja2 템플릿, JSON/YAML 메타데이터, 매니페스트, 모델 카드, 텍스트 파일 및 RAR 인식을 위한 스캐너도 포함됩니다. RAR 아카이브는 건너뛰지 않고 지원되지 않음/fail-closed로 보고됩니다.
구조적으로 유효한 TensorFlow SavedModel 및 MetaGraph protobuf는 비모델 접미사로 이름이 변경된 경우에도 인식됩니다.
CoreML 모델은 이름이 변경된 경우에도 인식될 수 있으며, 불완전한 적용 범위는 명시적으로 보고됩니다.
크기가 과대하지만 그럴듯한 프레이밍을 가진 SafeTensors 파일은 .jpg와 같이 달리 사용되지 않는 접미사 아래에서 제한적이고 결론이 나지 않는 분석을 위해 유지됩니다.
구조적으로 타당한 Flax/JAX MessagePack 체크포인트도 비모델 접미사로 이름이 변경된 경우 인식됩니다. 완전히 분류할 수 없는 이름 변경 구조는 불완전 적용 범위로 보고됩니다.
구조화된 JAX/Orbax JSON 체크포인트 메타데이터도 이름이 변경된 경우 인식됩니다. 크기가 과대한 모호한 후보는 불완전 적용 범위로 보고되며, 제한된 검사 접두사에서 관찰 가능한 보안 패턴은 여전히 보수적으로 보고될 수 있습니다.
원격 레지스트리 및 클라우드 스토리지에서 모델을 직접 스캔하세요:```bash
modelaudit https://huggingface.co/gpt2 modelaudit hf://microsoft/DialoGPT-medium