
Schutz vor Modell-Serialisierungsangriffen
Modelle des maschinellen Lernens (ML) werden öffentlich über das Internet, innerhalb von Teams und teamübergreifend geteilt. Der Aufstieg der Foundation Models hat dazu geführt, dass öffentliche ML-Modelle zunehmend für weiteres Training beziehungsweise Fine-Tuning verwendet werden. ML-Modelle werden immer häufiger eingesetzt, um kritische Entscheidungen zu treffen und geschäftskritische Anwendungen zu betreiben. Trotzdem werden Modelle noch nicht mit der gleichen Sorgfalt gescannt wie eine PDF-Datei in Ihrem Posteingang.
Das muss sich ändern, und die richtigen Werkzeuge sind der erste Schritt.

ModelScan ist ein Open-Source-Projekt von Protect AI, das Modelle scannt, um festzustellen, ob sie unsicheren Code enthalten. Es ist das erste Modell-Scan-Tool, das mehrere Modellformate unterstützt. ModelScan unterstützt derzeit die Formate H5, Pickle und SavedModel. Das schützt Sie bei der Verwendung von PyTorch, TensorFlow, Keras, Sklearn, XGBoost – weitere folgen.
Wenn Sie bereit sind, mit dem Scannen Ihrer Modelle zu beginnen, ist es einfach:
pip install modelscan
Nach der Installation scannen Sie ein Modell:
modelscan -p /path/to/model_file.pkl
Modelle werden oft von automatisierten Pipelines erstellt, andere stammen möglicherweise vom Laptop eines Data Scientists. In beiden Fällen muss das Modell von einer Maschine zur anderen bewegt werden, bevor es verwendet wird. Dieser Prozess des Speicherns eines Modells auf der Festplatte wird als Serialisierung bezeichnet.
Ein Model-Serialization-Angriff liegt vor, wenn schädlicher Code während der Serialisierung (Speichern) vor der Verteilung zu den Inhalten eines Modells hinzugefügt wird – eine moderne Version des Trojanischen Pferdes.
Der Angriff nutzt den Speicher- und Ladevorgang von Modellen aus. Wenn Sie ein Modell mit model = torch.load(PATH) laden, öffnet PyTorch den Inhalt der Datei und beginnt, den darin enthaltenen Code auszuführen. In dem Moment, in dem Sie das Modell laden, ist der Exploit bereits ausgeführt.
Ein Model-Serialization-Angriff kann verwendet werden, um Folgendes auszuführen:
Diese Angriffe sind unglaublich einfach auszuführen, und funktionierende Beispiele finden Sie in unserem 📓-Ordner notebooks.
ModelScan bietet ein robustes Open-Source-Scanning. Wenn Sie umfassende KI-Sicherheit benötigen, ziehen Sie Guardian in Betracht. Es ist unser Unternehmensprodukt für das Scannen von Modellen.

Wenn das Laden eines Modells mit Ihrem Machine-Learning-Framework den Angriff automatisch ausführt, wie prüft ModelScan den Inhalt, ohne den bösartigen Code zu laden?
Einfach: Es liest den Inhalt der Datei Byte für Byte wie eine Zeichenkette und sucht nach unsicheren Codesignaturen. Das macht es unglaublich schnell – Modelle werden in der Zeit gescannt, die Ihr Computer benötigt, um die gesamte Dateigröße von der Festplatte zu verarbeiten (in den meisten Fällen Sekunden). Außerdem ist es sicher.
ModelScan stuft den unsicheren Code wie folgt ein:

Wenn ein Problem erkannt wird, wenden Sie sich sofort an die Autoren des Modells, um die Ursache zu ermitteln.
In einigen Fällen kann Code in das Modell eingebettet sein, um die Reproduktion als Data Scientist zu erleichtern, aber das macht Sie angreifbar. Nutzen Sie Ihr Ermessen, um zu entscheiden, ob das für Ihre Arbeitslasten angemessen ist.
Dies wird kontinuierlich erweitert. Achten Sie also auf Änderungen in unseren Versionshinweisen.
Derzeit unterstützt ModelScan jedes von Pickle abgeleitete Format und viele weitere:
ModelScan wird als Python-Paket auf Ihren Systemen installiert (Python 3.9 bis 3.12 werden unterstützt). Wie oben gezeigt, können Sie es installieren, indem Sie Folgendes in Ihrem Terminal ausführen:
pip install modelscan
Um es zu den Abhängigkeiten Ihres Projekts hinzuzufügen und es so für alle verfügbar zu machen, fügen Sie es wie folgt zu Ihrer requirements.txt oder pyproject.toml hinzu:
modelscan = ">=0.1.1"
Scanner für Tensorflow- oder HD5-Modelle erfordern eine Installation mit Zusatzoptionen:
pip install 'modelscan[ tensorflow, h5py ]'
ModelScan unterstützt die folgenden Argumente über die CLI:
Denken Sie daran: Modelle sind wie jede andere Form digitaler Medien – Sie sollten Inhalte aus jeder nicht vertrauenswürdigen Quelle vor der Verwendung scannen.
Die Exit-Statuscodes der CLI sind:
0: Scan erfolgreich abgeschlossen, keine Schwachstellen gefunden1: Scan erfolgreich abgeschlossen, Schwachstellen gefunden2: Scan fehlgeschlagen, modelscan hat während des Scans einen Fehler ausgelöst3: Es wurden keine unterstützten Dateien an das Tool übergeben4: Verwendungsfehler, der CLI wurden ungültige oder unvollständige Optionen übergebenModelScan kann zwar bequem über die CLI verwendet werden, Sie können es aber auch direkt in Ihre Python-Anwendungen oder Workflows integrieren.
from modelscan.modelscan import ModelScan
from modelscan.settings import DEFAULT_SETTINGS
# Initialize ModelScan with default settings
scanner = ModelScan(settings=DEFAULT_SETTINGS)
# Scan a model file or directory
results = scanner.scan("/path/to/model_file.pkl")
# Check if issues were found
if scanner.issues.all_issues:
print(f"Found {len(scanner.issues.all_issues)} issues!")
# Access issues by severity
issues_by_severity = scanner.issues.group_by_severity()
for severity, issues in issues_by_severity.items():
print(f"{severity}: {len(issues)} issues")
# Generate a report (default is console output)
scanner.generate_report()
Sie können das Scan-Verhalten mit Ihren eigenen Einstellungen anpassen:
# Start with default settings and customize
custom_settings = DEFAULT_SETTINGS.copy()
# Update settings as needed
custom_settings["reporting"]["module"] = "modelscan.reporting.json_report.JSONReport"
custom_settings["reporting"]["settings"]["output_file"] = "scan_results.json"
# Initialize with custom settings
scanner = ModelScan(settings=custom_settings)
Wenn ein Problem gefunden wurde, sehen Sie nach Abschluss eines Scans eine Ausgabe wie diese:

Hier haben wir ein Modell, das sowohl für ReadFile als auch für WriteFile einen unsicheren Operator enthält. Natürlich wollen wir nicht, dass unsere Modelle willkürlich Dateien lesen und schreiben. Wir würden uns nun an den Ersteller dieses Modells wenden, um zu klären, was er sich davon erwartet hat. In diesem speziellen Fall ermöglicht es einem Angreifer, unsere AWS-Zugangsdaten zu lesen und an einen anderen Ort zu schreiben.
Das ist ein klares NEIN für die Verwendung.
Ad-hoc-Scans sind ein guter erster Schritt. Machen Sie es sich, Ihren Kollegen und Freunden zur Gewohnheit, dies jedes Mal zu tun, wenn sie ein neues Modell herunterladen, um es zu erkunden. Es reicht nicht aus, um die Sicherheit für Produktions-MLOps-Prozesse zu verbessern.
Das Scannen von Modellen muss mehr als einmal durchgeführt werden, um Folgendes zu erreichen:
Die roten Blöcke unten heben dies in einer herkömmlichen ML-Pipeline hervor.

Die Prozesse wären dieselben für das Fine-Tuning oder jede Änderung von LLMs, Basismodellen oder externen Modellen.
Integrieren Sie Scans in die Bereitstellungsprozesse Ihrer CI/CD-Systeme, um die Nutzung auch dann abzusichern, wenn Modelle außerhalb Ihrer ML-Pipelines bereitgestellt werden.
Im Ordner 📓notebooks finden Sie eine Reihe von Notebooks, die genau zeigen, wie Model-Serialization-Angriffe gegen verschiedene ML-Frameworks wie TensorFlow und PyTorch durchgeführt werden können.
Um tiefer in die Materie einzutauchen, wie genau diese Angriffe funktionieren, sehen Sie sich 🖹 Erklärung zu Model-Serialization-Angriffen an.
Wenn Sie auf andere Ansätze zur Bewertung von Modellen in einem statischen Kontext stoßen, melden Sie sich bitte – wir würden gerne mehr erfahren!
Copyright 2024 Protect AI
Lizenziert unter der Apache License, Version 2.0 (die „Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht gesetzlich erforderlich oder schriftlich vereinbart, wird die unter der Lizenz verteilte Software auf einer „AS IS"-BASIS bereitgestellt, OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend. Die Lizenz enthält die spezifischen Regelungen zu Genehmigungen und Einschränkungen.
Wir haben uns stark von Matthieu Maitre inspirieren lassen, der PickleScan entwickelt hat. Wir schätzen diese Arbeit und haben sie mit ModelScan erheblich erweitert. ModelScan ist im gleichen Geist wie PickleScan als Open Source veröffentlicht.
Wir freuen uns, wenn Sie zu unserem Open-Source-Projekt ModelScan beitragen. Wenn Sie mitwirken möchten, folgen Sie bitte den Details auf der Contributing-Seite.
| ML-Bibliothek | API | Serialisierungsformat | ModelScan-Unterstützung |
|---|
| Pytorch | torch.save() and torch.load() | Pickle | Ja |
| Tensorflow | tf.saved_model.save() | Protocol Buffer | Ja |
| Keras | keras.models.save(save_format= 'h5') | HD5 (Hierarchical Data Format) | Ja |
| keras.models.save(save_format= 'keras') | Keras V3 (Hierarchical Data Format) | Ja | |
| Klassische ML-Bibliotheken (Sklearn, XGBoost etc.) | pickle.dump(), dill.dump(), joblib.dump(), cloudpickle.dump() | Pickle, Cloudpickle, Dill, Joblib | Ja |
| Verwendung | Argument | Erläuterung |
|---|
modelscan -h | -h or --help | Hilfe zur Verwendung anzeigen |
modelscan -v | -v or --version | Versionsinformationen anzeigen |
modelscan -p /path/to/model_file | -p or --path | Ein lokal gespeichertes Modell scannen |
modelscan -p /path/to/model_file --settings-file ./modelscan-settings.toml | --settings-file | Ein lokal gespeichertes Modell mit benutzerdefinierten Konfigurationen scannen |
modelscan create-settings-file | -l or --location | Eine konfigurierbare Einstellungsdatei erstellen |
modelscan -r | -r or --reporting-format | Format der Ausgabe. Optionen sind console, json oder custom (in der Einstellungsdatei zu definieren). Standard ist console |
modelscan -r reporting-format -o file-name | -o or --output-file | Optionaler Dateiname für den Ausgabebericht |
modelscan --show-skipped | --show-skipped | Eine Liste der Dateien ausgeben, die während des Scans übersprungen wurden |