WebAssembly للمبتدئين الجزء 3: كيفية عمل أمان وقابلية WASM

نشرت: 2023-01-05

تحقق من كيفية عمل نماذج الأمان وقابلية WebAssembly (WASM) في دليل المبتدئين هذا.

كلاهما موضوعان WebAssembly المتقدم (WASM). نوصيك بقراءة الموضوعين السابقين في سلسلة WebAssembly للمبتدئين.

  • WebAssembly للمبتدئين - الجزء 1: مقدمة إلى WASM
  • WebAssembly للمبتدئين - الجزء 2: الأهداف والمفاهيم الأساسية وحالات الاستخدام

هيا بنا نبدأ.

WebAssembly النقل

تجعله قابلية نقل WebAssembly جاهزًا للويب. في الواقع ، يمكنك تعريف WASM كمنصة آلية محمولة.

علاوة على ذلك ، يمكّنه تنسيقه الثنائي من التنفيذ عبر بنى مجموعة التعليمات وأنظمة التشغيل المختلفة. هذا يعني أنه يمكنك استخدام WASM ليس فقط على الويب ولكن أيضًا خارج الويب.

لفهم قابلية نقل WASM ، سنناقش ما يلي:

  • بيئة محلية ومحدودة وغير حتمية.
  • خصائص بيئة التنفيذ المحددة
  • WASM على الويب وإمكانية النقل بخلاف الويب

محلي ومحدود وغير حتمي

يحتاج WASM إلى تنفيذ فعال وبيئات مناسبة محلية ومحدودة وغير حتمية. اللا حتمية هي الحوسبة التي تحدد أن الخوارزمية / المترجم / البيئة تنتج سلوكيات مختلفة أو نتائج حتى لنفس المدخلات. إنه عكس الخوارزمية القطعية.

يرتبط الجانبان الآخران ، المحدود والمحلي ، بالتنفيذ غير الحتمي. لإنجاح التنفيذ غير الحتمي ، تحتاج إلى حالات استخدام محددة جيدًا " محدودة ".

كما أن عمليات الإعدام هذه " محلية " وليس لها أي تأثير خارج البيئة. اقرأ عدم التحديد الرسمي الخاص بهم في مستند WebAssembly لمعرفة المزيد عنه.

خصائص بيئة التنفيذ المحددة

لجعل WebAssembly قابل للنقل ، فإنه يفترض أن بيئة التنفيذ توفر الخصائص التالية:

  • قابلية معالجة دقة ذاكرة البايت و 8 بت بايت.
  • الأعداد الصحيحة الموقعة المكونة من 32 بت اثنين. اختياريا 64 بت.
  • يمكن محاكاة البرامج من خلال عمليات الوصول إلى الذاكرة غير المحاذاة أو الملائمة الموثوقة.
  • دعم النقاط العائمة 32 بت و 64 بت كما هو محدد في IEEE 754-2008.
  • ضمان لتنفيذ جميع سلاسل الرسائل مع التقدم إلى الأمام.
  • للوصول إلى 64 بت ، يجب أن توفر wasm64 مشغلات ذاكرة ذرية خالية من القفل.
  • تشتمل مشغلات الذاكرة الذرية الخالية من القفل على عمليات وصول 8 و 16 و 32 بت.
  • يدعم wasm64 ذاكرة خطية أعلى من 4 جيجا بايت مع مؤشرات أو مؤشرات 64 بت.
  • ترتيب بايت صغير.

تدعم جميع المتصفحات الرئيسية ، بما في ذلك Chrome و Edge و Firefox و WebKit ، كل هذه المتطلبات البيئية.

علاوة على ذلك ، فإن WebAssembly يتطور بوتيرة سريعة. تعمل مجموعة WASM Community Group ومجموعة عمل W3C WebAssembly من أجل توحيدها. هذا يعني أن أيًا من هذه المتطلبات يمكن أن يتغير في المستقبل.

WASM على الويب وإمكانية النقل بخلاف الويب

الغرض الأساسي من WebAssembly هو توفير إمكانية النقل والأداء الأصلي على الويب وغير الويب. في هذا القسم ، سنلقي نظرة على كيفية تحقيق WASM لذلك.

# 1. تضمين الويب

يتكامل WASM جيدًا مع نظام الويب البيئي ، بما في ذلك نموذج أمان الويب وإمكانية نقل الويب وواجهات برمجة تطبيقات الويب. علاوة على ذلك ، يجب أن يحتوي على مساحة كافية للتطوير الإبداعي في المستقبل (اقرأ WebAssembly للمبتدئين - الجزء الثاني لفهم أهدافه)

إذن ، كيف يحقق WASM التوافق مع الويب؟ يستخدم JavaScript APIs ، مما يتيح للمطورين استخدام JavaScript لتجميع وحدات WebAssembly بسهولة. كما أنها تهتم بتخزين واسترجاع وحدات المترجم وإدارة الواردات من وحدات المترجم وإدارة الذاكرة وما إلى ذلك.

لمعرفة المزيد حول كيفية تحقيق WASM لتوافق ويب عالي المستوى ، اقرأ هذا: تضمين الويب - WebAssembly.

# 2. تضمين غير ويب

كما ذكرنا سابقًا ، يعمل WASM أيضًا مع بيئات غير الويب. بصفتك مطورًا أو شركة ، يمكنك إنشاء تطبيقات عالية الأداء أو كتابة أقسام من تطبيقك تحتاج إلى ضبط الأداء. على سبيل المثال ، يمكنك استخدامه على أجهزة إنترنت الأشياء وخوادم مركز البيانات وتطبيقات سطح المكتب / الأجهزة المحمولة.

نظرًا لأن التطبيقات غير التابعة للويب لا يمكنها استخدام واجهات برمجة تطبيقات الويب ، فإنها تعتمد على الارتباط الديناميكي لـ WASM. تحتاج أيضًا إلى استخدام اختبار الميزات ، وهي عملية تطوير برمجيات تختبر التنوعات المتعددة للميزات لمعرفة الأفضل لتجربة المستخدم. علاوة على ذلك ، يمكن للمطورين استخدام JavaScript VMs لتبسيط التضمين غير المتعلق بالويب أو تطوير تطبيقاتهم بدونها.

لمعرفة المزيد ، اقرأ عمليات تضمين غير الويب - WebAssembly.

أمان WebAssembly

WebAssembly هو حل تنسيق ثنائي يقدم أداءً يشبه الأداء الأصلي. إنه يعمل بشكل رائع على الويب ولكن يمكن أيضًا ضبطه للعمل على حفلات الزفاف التي لا تتم على الويب. هذا يجعل WASM متاحًا على نطاق واسع عبر الخدمات والحلول والعمليات. ومع ذلك ، هذا يعني المزيد من التحديات الأمنية.

التحديات والمخاطر الأمنية لـ WASM

على الرغم من أن WebAssembly يعتبر آمنًا وفعالًا ، إلا أنه ينطوي على مخاطر أمنية متعددة ، بما في ذلك:

  • WebAssembly sandbox
  • إدارة الذاكرة
  • التعتيم على الكود
  • عمليات التحقق من النزاهة

# 1. WebAssembly Sandbox

يتم تنفيذ WASM داخل متصفح الويب ، تمامًا مثل JavaScript. يستخدم نفس الجهاز الظاهري (VM) مثل JavaScript. يوفر صندوق الحماية بيئة تنفيذ آمنة بشكل فعال ويعيق ما يتم تشغيله تحت الغطاء.

لذلك ، إذا كانت شفرة JavaScript / WebAssembly تحتوي على تعليمات برمجية ضارة ، فمن الصعب اكتشافها لأنها صندوق أسود. أيضًا ، رمز WASM بتنسيق ثنائي جاهز للتشغيل ؛ يعمل بشكل أسرع ، مما يجعل من الصعب على حلول مكافحة الفيروسات البحث عن أي تعليمات برمجية ضارة. على سبيل المثال ، يمكن أن تحتوي الشفرة على إعلانات غير مرغوب فيها أو القدرة على إعادة توجيه المستخدمين إلى مواقع البرامج الضارة غير المرغوب فيها.

إصابة متصفح-تشفير-تعدين-WASM

بالإضافة إلى ذلك ، فإن اعتماد WebAssembly المفرط على JavaScript للتشغيل على الويب يعني أيضًا أنه يرث ثغرات جافا سكريبت. لهذا السبب ، بصفتك مطورًا ، يجب عليك اتباع احتياطات وتدابير أمان JavaScript عند تشفير WASM.

# 2. إدارة الذاكرة

إدارة الذاكرة في WASM صعبة. أولاً ، لا يصل مباشرةً إلى الذاكرة المادية حيث يتم تنفيذه داخل الجهاز الظاهري. لهذا السبب يستخدم ذاكرة الجهاز المضيف.

ثانيًا ، يتطلب تنظيف الذاكرة في WASM عملية واضحة ، بينما ، بالمقارنة ، يقوم JavaScript بتنظيف نفسه.

بالإضافة إلى ذلك ، عندما تقوم دالة WASM بإرجاع الإخراج إلى JavaScript ، فإنها ترجع مؤشرًا إلى الموضع داخل مساحة ذاكرة WASM المخصصة. لذلك ، إذا أصبحت الذاكرة المعلنة ممتلئة ، يمكن أن يتعطل برنامج WASM ، مما يؤدي إلى تدمير تجربة المستخدم. لمنع ذلك ، يحتاج المبرمجون إلى استخدام المطهرات لتصحيح التعليمات البرمجية الخاصة بهم أو استخدام سلاسل الأدوات مثل emscripten.

ذاكرة خطية wasm

# 3. التعتيم على التعليمات البرمجية

تنفيذ وضع الحماية لـ WASM يجعل كودها غامضًا. بالإضافة إلى ذلك ، فإن تنسيق WASM الثنائي ليس أيضًا مقروءًا من قبل الإنسان ، مما يجعل من الصعب عكس الهندسة ، وهو أمر ضروري لتحديد الشفرة الضارة.

هذه تجعل من الصعب تصحيح كود WebAssembly بسبب افتقاره إلى التنسيق القابل للقراءة من قبل الإنسان. يفتح هذا العديد من الثغرات الأمنية ، بما في ذلك قدرة المتسللين على إخفاء التعليمات البرمجية التي تسرق المعلومات الحساسة أو تقوم بحقن التعليمات البرمجية للسيطرة على الجهاز المضيف.

# 4. عمليات التحقق من النزاهة

أي بيانات يتم نقلها عبر الويب عرضة لتقليل البيانات. على سبيل المثال ، يمكن للقراصنة تنفيذ هجوم رجل في الوسط لتغيير قيم البيانات. إنها مشكلة بالنسبة لـ WASM ، نظرًا لعدم وجود طريقة مناسبة لإجراء فحوصات السلامة.

ومع ذلك ، يمكنه العمل مع JavaScript لإجراء فحوصات النزاهة. هناك طريقة أخرى لتحديد الثغرات الأمنية المحتملة في كود WASM وهي استخدام أدوات التكامل مثل Jit. إنه يضمن خلو الكود من العناصر السيئة ولا يمكنه التأثير على التطبيقات أو البنية التحتية السحابية المحيطة.

رجل في منتصف الهجوم

فهم نموذج أمان WASM

يأخذ WebAssembly الأمان على محمل الجد. لهذا السبب ، في مستندات WASM الرسمية ، ذكروا أن نموذج الأمان الخاص بهم يعتني بهدفين مهمين:

  1. تأكد من عدم تأثير أي وحدات خبيثة أو عربات التي تجرها الدواب على المستخدمين
  2. تأكد من أن المطورين يمكنهم التخفيف من أي مخاطر أمنية وإنشاء تطبيقات آمنة مع ضمان الحفاظ على النقطة 1 دائمًا.

يعرف نموذج أمان WASM أن تطبيقات WebAssembly تعمل بشكل مستقل مع عدم القدرة على الهروب من بيئة وضع الحماية الخاصة بها. ومع ذلك ، يمكن أن تفتح واجهات برمجة التطبيقات طريقة لمهاجمة البيئة المضيفة.

تتضمن تقنية أخرى للتسامح مع الأخطاء تنفيذ التطبيقات بشكل حاسم مع توقعات محدودة. من خلال ضمان كلا الشرطين ، تعتبر معظم عمليات تنفيذ التطبيقات آمنة.

لتحسين الأمان ، يجب على المطورين فرض نفس سياسة المصدر لتدفق المعلومات. إذا كنت تقوم بالتطوير لغير الويب ، فيجب عليك استخدام نموذج أمان POSIX. إذا كنت تريد قراءة المزيد حول نموذج الأمان الخاص به ، فراجع: الأمان - WebAssembly.

واجهة نظام WebAssembly (WASI)

تلعب WASI (واجهة نظام WebAssembly) أيضًا دورًا مهمًا في تضمين WASM غير المتعلق بالويب لأنه يحسن الأمان. إنها واجهة نظام معيارية توفر خصائص أمان وإمكانية نقل مثيرة.

في الواقع ، هو الآن جزء من ميثاق المجموعة الفرعية لواجهة نظام WebAssembly ومن ثم فهو قياسي. بسبب WASI ، تم اعتماد WASM على نطاق واسع في مختلف مجالات الحوسبة / الخادم. أيضًا ، يبسط WASI الأمان عند الانتقال إلى تضمين غير متعلق بالويب من بيئة تضمين الويب.

الكلمات الأخيرة

قابلية النقل والأمان في WebAssembly هما موضوعان رئيسيان. في الجزء 3 من WebAssembly للمبتدئين ، حاولنا تبسيطه وتقسيمه ، خاصة للمبتدئين.

بعد ذلك ، يمكنك التحقق من أوراق غش JavaScript للمطورين والمتعلمين.