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.14 필요
pip install "modelaudit[all]"
# Scan a file or directory
modelaudit model.pkl
modelaudit ./models/
# Export results for CI/CD
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
스캔 증거 및 소스 오류에는 JSON, SARIF, SBOM 및 공유 보고서를 포함하여 원본 자격 증명 값이 포함될 수 있습니다. 자격 증명 정규화는 탐지, 그룹화 또는 억제에 영향을 미치는 부분에 그대로 유지됩니다.
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, 루트 config가 있는 이름이 변경된 아카이브 | 중간 |
| 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 | 낮음 |
| 압축 래퍼 | .gz, .bz2, .xz, .lz4, .zlib | MEDIUM |
ZIP, TAR, 7-Zip, OCI 레이어, Jinja2 템플릿, JSON/YAML 메타데이터, 매니페스트, 모델 카드, 텍스트 파일 및 RAR 인식을 위한 스캐너가 추가되었습니다. RAR 아카이브는 건너뛰지 않고 지원되지 않음/실패 시 차단(fail-closed)으로 보고됩니다.
구조적으로 유효한 TensorFlow SavedModel 및 MetaGraph 프로토콜 버퍼는 모델이 아닌 접미사로 이름이 변경된 경우에도 인식됩니다.
CoreML 모델도 이름이 변경된 경우 인식될 수 있으며, 불완전한 커버리지는 명시적으로 보고됩니다.
프레이밍이 과대하지만 그럴듯한 SafeTensors 파일은 .jpg와 같이
그 외에는 주장되지 않은 접미사 아래에서 제한된, 결론을 내릴 수 없는 분석을 위해 보존됩니다.
구조적으로 그럴듯한 Flax/JAX MessagePack 체크포인트도 모델이 아닌 접미사로 이름이 변경된 경우 인식됩니다;
완전히 분류할 수 없는 이름이 변경된 구조는 불완전한 커버리지로 보고됩니다.
구조화된 JAX/Orbax JSON 체크포인트 메타데이터 역시 이름이 변경된 경우 인식됩니다; 과대하고 모호한
후보는 불완전한 커버리지로 보고됩니다; 제한적으로 검사된 접두사에서 관찰 가능한 보안 패턴은
여전히 보수적으로 보고될 수 있습니다.