
モデルシリアライゼーション攻撃に対する保護
機械学習(ML)モデルは、インターネット上、チーム内、チーム間で公開共有されています。基盤モデル(Foundation Models)の台頭により、公開されているMLモデルは、さらなるトレーニングやファインチューニングのためにますます消費されるようになっています。MLモデルは、重要な意思決定やミッションクリティカルなアプリケーションの駆動にますます使用されています。 それにもかかわらず、モデルは受信トレイ内のPDFファイルほどの厳格さではまだスキャンされていません。
この状況を変える必要があり、適切なツールがその第一歩です。

ModelScanは、Protect AIによるオープンソースプロジェクトで、モデルに安全でないコードが含まれているかどうかを判定するためにモデルをスキャンします。複数のモデル形式をサポートする最初のモデルスキャンツールです。 ModelScanは現在、H5、Pickle、SavedModel形式をサポートしています。これにより、PyTorch、TensorFlow、Keras、Sklearn、XGBoostを使用する際に保護され、さらに多くの形式が追加される予定です。
モデルのスキャンをすぐに始めたい場合は、簡単です:
pip install modelscan
インストールしたら、モデルをスキャンします:
modelscan -p /path/to/model_file.pkl
モデルは自動化されたパイプラインから作成されることが多く、データサイエンティストのノートパソコンから来るものもあります。どちらの場合でも、モデルは使用される前に、あるマシンから別のマシンへ移動する必要があります。モデルをディスクに保存するこのプロセスは、シリアライゼーションと呼ばれます。
モデルシリアライゼーション攻撃(Model Serialization Attack) とは、配布前にシリアライゼーション(保存)中にモデルの内容に悪意のあるコードが追加される攻撃です。これは、トロイの木馬の現代版です。
この攻撃は、モデルの保存および読み込みプロセスを悪用して機能します。model = torch.load(PATH) でモデルを読み込むと、PyTorchはファイルの内容を開き、その中のコードの実行を開始します。モデルを読み込んだ瞬間に、エクスプロイトが実行されます。
モデルシリアライゼーション攻撃は、以下を実行するために使用される可能性があります:
これらの攻撃は非常に簡単に実行でき、実際の動作例は 📓notebooks フォルダで確認できます。
ModelScanは堅牢なオープンソースのスキャンを提供します。包括的なAIセキュリティが必要な場合は、Guardian を検討してください。これは、エンタープライズグレードのモデルスキャン製品です。

機械学習フレームワークでモデルを読み込むと攻撃が自動的に実行されるなら、ModelScanは悪意のあるコードを読み込まずにどのようにモデルの内容をチェックするのでしょうか?
簡単です。ファイルの内容を文字列のように1バイトずつ読み取り、安全でないコードシグネチャを探します。これにより非常に高速で、コンピュータがディスクからファイルサイズ全体を処理するのと同じ時間(ほとんどの場合数秒)でモデルをスキャンします。また、安全です。
ModelScanは安全でないコードを次のようにランク付けします:

問題が検出された場合は、すぐにモデルの作者に連絡して原因を特定してください。
場合によっては、データサイエンティストが再現を容易にするためにコードがモデルに埋め込まれていることがありますが、それは攻撃に対して開かれた状態になります。それがワークロードに適切かどうかは、ご自身の判断で決定してください。
これは継続的に拡大される予定ですので、リリースノートの変更に注目してください。
現在、ModelScanはPickle派生のあらゆる形式とその他多くの形式をサポートしています:
| MLライブラリ | API | シリアライゼーション形式 | modelscanサポート |
|---|---|---|---|
| Pytorch | torch.save() and torch.load() | Pickle | はい |
| Tensorflow | tf.saved_model.save() | Protocol Buffer | はい |
| Keras | keras.models.save(save_format= 'h5') | HD5 (Hierarchical Data Format) | はい |
| keras.models.save(save_format= 'keras') | Keras V3 (Hierarchical Data Format) | はい | |
| 古典的なMLライブラリ (Sklearn, XGBoostなど) | pickle.dump(), dill.dump(), joblib.dump(), cloudpickle.dump() | Pickle, Cloudpickle, Dill, Joblib | はい |
ModelScanはPythonパッケージ(Python 3.9〜3.12対応)としてシステムにインストールされます。上記のように、ターミナルで次を実行してインストールできます:
pip install modelscan
プロジェクトの依存関係に含めて全員が利用できるようにするには、requirements.txt または pyproject.toml に次のように追加します:
modelscan = ">=0.1.1"
TensorflowまたはHD5形式のモデル用スキャナは、extrasを指定したインストールが必要です:
pip install 'modelscan[ tensorflow, h5py ]'
ModelScanはCLI経由で次の引数をサポートしています: