
الحماية من هجمات تسلسل النماذج
تُشارَك نماذج تعلّم الآلة (ML) علنًا عبر الإنترنت، داخل الفرق وبين الفرق. وقد أدى ظهور النماذج الأساسية (Foundation Models) إلى زيادة استهلاك نماذج تعلّم الآلة العامة لمزيد من التدريب/الضبط الدقيق. وتُستخدم نماذج تعلّم الآلة بشكل متزايد لاتخاذ قرارات حاسمة وتشغيل تطبيقات بالغة الأهمية. ورغم ذلك، لا تزال النماذج لا تُفحص بنفس دقة فحص ملفات PDF الموجودة في صندوق الوارد الخاص بك.
يجب أن يتغير هذا، والأدوات المناسبة هي الخطوة الأولى.

ModelScan هو مشروع مفتوح المصدر من Protect AI يفحص النماذج لتحديد ما إذا كانت تحتوي على رمز غير آمن. وهو أول أداة لفحص النماذج تدعم تنسيقات نماذج متعددة. يدعم ModelScan حاليًا تنسيقات H5 وPickle وSavedModel. وهذا يحميك عند استخدام PyTorch وTensorFlow وKeras وSklearn وXGBoost، مع دعم المزيد قريبًا.
إذا كنت مستعدًا لبدء فحص نماذجك، فالأمر بسيط:
pip install modelscan
بعد تثبيته، افحص نموذجًا:
modelscan -p /path/to/model_file.pkl
كثيرًا ما تُنشأ النماذج من خطوط أنابيب آلية، وقد يأتي البعض الآخر من كمبيوتر عالم بيانات محمول. في كلتا الحالتين، يحتاج النموذج إلى الانتقال من جهاز إلى آخر قبل استخدامه. وتسمى عملية حفظ النموذج على القرص بالتسلسل (Serialization).
هجوم تسلسل النماذج (Model Serialization Attack) هو إضافة رمز ضار إلى محتويات النموذج أثناء التسلسل (الحفظ) قبل التوزيع — وهو نسخة حديثة من حصان طروادة.
يعمل الهجوم عبر استغلال عملية حفظ النماذج وتحميلها. عند تحميل نموذج باستخدام model = torch.load(PATH)، يفتح PyTorch محتويات الملف ويبدأ بتشغيل الكود الموجود داخله. فور تحميلك للنموذج يكون الاستغلال قد نُفّذ.
يمكن استخدام هجوم تسلسل النماذج لتنفيذ:
هذه الهجمات بسيطة للغاية في تنفيذها، ويمكنك الاطلاع على أمثلة عملية في مجلد 📓notebooks.
يقدم ModelScan فحصًا قويًا مفتوح المصدر. إذا كنت بحاجة إلى أمان شامل للذكاء الاصطناعي، ففكّر في Guardian. إنه منتجنا لفحص النماذج بمستوى المؤسسات.

إذا كان تحميل نموذج باستخدام إطار تعلّم الآلة الخاص بك ينفّذ الهجوم تلقائيًا، فكيف يفحص ModelScan المحتوى دون تحميل الكود الضار؟
الأمر بسيط، فهو يقرأ محتوى الملف بايتًا بايت تمامًا مثل قراءة سلسلة نصية، بحثًا عن تواقيع الكود غير الآمن. وهذا يجعله سريعًا بشكل لا يصدق، حيث يفحص النماذج في الوقت الذي يستغرقه جهاز الكمبيوتر لمعالجة الحجم الكلي للملف من القرص (ثوانٍ في معظم الحالات). كما أنه آمن أيضًا.
يرتب ModelScan الكود غير الآمن على النحو التالي:

إذا تم اكتشاف مشكلة، تواصل مع مؤلفي النموذج فورًا لتحديد السبب.
في بعض الحالات، قد يكون الكود مضمّنًا في النموذج لتسهيل إعادة الإنتاج كعالم بيانات، لكنه يفتح الباب أمام الهجوم. استخدم تقديرك لتحديد ما إذا كان ذلك مناسبًا لأعباء عملك.
سيتوسع هذا باستمرار، لذا ترقب التغييرات في ملاحظات الإصدار.
في الوقت الحالي، يدعم ModelScan أي تنسيق مشتق من Pickle والعديد من التنسيقات الأخرى:
يُثبَّت ModelScan على أنظمتك كحزمة Python (يدعم Python 3.9 إلى 3.12). كما هو موضح أعلاه، يمكنك تثبيته بتشغيل الأمر التالي في الطرفية:
pip install modelscan
لتضمينه في تبعيات مشروعك بحيث يكون متاحًا للجميع، أضفه إلى requirements.txt أو pyproject.toml كما يلي:
modelscan = ">=0.1.1"
تتطلب الماسحات الضوئية لنماذج Tensorflow أو HD5 التثبيت مع الحزم الإضافية:
pip install 'modelscan[ tensorflow, h5py ]'
يدعم ModelScan الوسائط التالية عبر CLI:
تذكّر أن النماذج مثل أي شكل آخر من أشكال الوسائط الرقمية، يجب عليك فحص المحتوى الوارد من أي مصدر غير موثوق قبل استخدامه.
أكواد حالة الخروج في CLI هي:
0: اكتمل الفحص بنجاح، لم يتم العثور على ثغرات1: اكتمل الفحص بنجاح، تم العثور على ثغرات2: فشل الفحص، ألقى modelscan خطأً أثناء الفحص3: لم يتم تمرير أي ملفات مدعومة إلى الأداة4: خطأ في الاستخدام، تم تمرير خيارات غير صالحة أو غير مكتملة إلى CLIبينما يمكن استخدام ModelScan بسهولة عبر CLI، يمكنك أيضًا دمجه مباشرة في تطبيقات أو مهام سير عمل Python الخاصة بك.
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()
يمكنك تخصيص سلوك الفحص باستخدام الإعدادات الخاصة بك:
# 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)
بمجرد اكتمال الفحص، سترى مخرجات مثل هذه إذا تم العثور على مشكلة:

لدينا هنا نموذج يحتوي على عامل غير آمن لكل من ReadFile و WriteFile في النموذج. من الواضح أننا لا نريد لنماذجنا قراءة الملفات وكتابتها بشكل عشوائي. سنتواصل الآن مع منشئ هذا النموذج لتحديد ما كان يتوقع أن يفعله. في هذه الحالة بالذات، يسمح للمهاجم بقراءة بيانات اعتماد AWS الخاصة بنا وكتابتها إلى مكان آخر.
هذا رفض قاطع للاستخدام.
الفحص المخصص (Ad-hoc) هو خطوة أولى رائعة، يرجى ترسيخ هذه العادة في نفسك وزملائك وأصدقائك للقيام بذلك كلما قاموا بسحب نموذج جديد لاستكشافه. لكنه ليس كافيًا لتحسين الأمان لعمليات MLOps الإنتاجية.
يجب إجراء فحص النماذج أكثر من مرة لتحقيق ما يلي:
تسلط الكتل الحمراء أدناه الضوء على ذلك في خط أنابيب تعلم آلي تقليدي.

ستكون العمليات نفسها للضبط الدقيق أو أي تعديلات على نماذج اللغات الكبيرة (LLMs) أو النماذج الأساسية أو النماذج الخارجية.
أدرج الفحوصات في عمليات النشر في أنظمة CI/CD لديك لتأمين الاستخدام عند نشر النماذج أيضًا إذا تم ذلك خارج خطوط أنابيب التعلم الآلي الخاصة بك.
داخل مجلد 📓notebooks يمكنك استكشاف عدد من الدفاتر البرمجية التي تعرض بالضبط كيفية تنفيذ هجمات تسلسل النماذج ضد أطر تعلّم الآلة المختلفة مثل TensorFlow وPyTorch.
للتعمق أكثر في جوهر كيفية عمل هذه الهجمات بالضبط، اطّلع على 🖹 شرح هجمات تسلسل النماذج.
إذا صادفت أي طرق أخرى لتقييم النماذج في سياق ثابت، فيرجى التواصل معنا، يسعدنا معرفة المزيد!
Copyright 2024 Protect AI
مرخّص بموجب ترخيص Apache، الإصدار 2.0 (المشار إليه باسم "الترخيص")؛ لا يجوز لك استخدام هذا الملف إلا بالامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يقتضِ القانون المعمول به أو يتم الاتفاق عليه كتابيًا، يتم توزيع البرنامج المرخّص بموجب الترخيص على أساس "كما هو" (AS IS)، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص للحصول على الأذونات والقيود المحددة التي تحكم استخدام البرنامج بموجب الترخيص.
لقد استلهمنا بشكل كبير من Matthieu Maitre الذي بنى PickleScan. نحن نقدر العمل وقمنا بتوسيعه بشكل كبير مع ModelScan. صدر ModelScan كمصدر مفتوح (OSS) بنفس روح PickleScan.
يسعدنا أن تساهم في مشروعنا مفتوح المصدر ModelScan. إذا كنت ترغب في المساهمة، فيرجى اتباع التفاصيل في صفحة المساهمة.
| مكتبة تعلّم الآلة | 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) | نعم | |
| مكتبات تعلّم الآلة الكلاسيكية (Sklearn, XGBoost وغيرها) | pickle.dump(), dill.dump(), joblib.dump(), cloudpickle.dump() | Pickle, Cloudpickle, Dill, Joblib | نعم |
| الاستخدام | الوسيط | الشرح |
|---|
modelscan -h | -h or --help | عرض مساعدة الاستخدام |
modelscan -v | -v or --version | عرض معلومات الإصدار |
modelscan -p /path/to/model_file | -p or --path | فحص نموذج مخزّن محليًا |
modelscan -p /path/to/model_file --settings-file ./modelscan-settings.toml | --settings-file | فحص نموذج مخزّن محليًا باستخدام إعدادات مخصصة |
modelscan create-settings-file | -l or --location | إنشاء ملف إعدادات قابل للتهيئة |
modelscan -r | -r or --reporting-format | تنسيق المخرجات. الخيارات هي console أو json أو custom (ليتم تعريفه في settings-file). الافتراضي هو console |
modelscan -r reporting-format -o file-name | -o or --output-file | اسم ملف اختياري لتقرير المخرجات |
modelscan --show-skipped | --show-skipped | طباعة قائمة بالملفات التي تم تخطيها أثناء الفحص |