ثغرات أمان في لغة Move: مخاطر تجاوز السعة الصحيحة واقتراحات للوقاية

robot
إنشاء الملخص قيد التقدم

تحليل شامل لثغرات الأمان في استدعاء لغة Move

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

تقوم لغة Move بالتحقق من وحدات التعليمات البرمجية قبل تنفيذ التعليمات البرمجية، وتنقسم هذه العملية إلى 4 خطوات. تظهر الثغرة التي تناقشها هذه المقالة في خطوة reference_safety.

تعريف وحدة reference_safety دالة النقل للتحقق من أمان الإشارة لجهة العملية. تتحقق بشكل أساسي مما إذا كانت هناك إشارات معلقة، وما إذا كانت الوصولات إلى الإشارات المتغيرة آمنة، وما إذا كانت الوصولات إلى تخزين الإشارات العالمية آمنة، وما إلى ذلك.

تبدأ عملية التحقق من مدخل وظيفة التحقق الآمن ، والتي تستدعي analyze_function. في analyze_function ، يتم التحقق من كل كتلة أساسية. الكتلة الأساسية هي تسلسل من التعليمات البرمجية لا تحتوي على تعليمات فرعية باستثناء المدخلات والمخرجات.

تقوم لغة Move بتحديد الكتل الأساسية من خلال استكشاف الشيفرة البايتية، والبحث عن جميع تعليمات الفروع وتسلسل تعليمات الحلقات. قد يحتوي مثال نموذجي لكتلة الشيفرة الأساسية لـ Move IR على 3 كتل أساسية، تحددها تعليمات BrTrue وBranch وRet.

اكتشاف حصري من Numen Cyber ثغرة عالية الخطورة أخرى في لغة move

تدعم لغة Move نوعين من المراجع: المراجع غير القابلة للتغيير (&) والمراجع القابلة للتغيير (&mut). تُستخدم المراجع غير القابلة للتغيير لقراءة البيانات، بينما تُستخدم المراجع القابلة للتغيير لتعديل البيانات. تساعد هذه التصميمات في الحفاظ على أمان الكود وتحديد وحدات القراءة.

تتضمن العملية الرئيسية للتحقق من أمان الاقتباس: مسح تعليمات بايت كود الكتل الأساسية في الدالة، وتحديد ما إذا كانت جميع عمليات الاقتباس قانونية. تستخدم هذه العملية هيكل AbstractState، الذي يحتوي على مخطط الاقتراض وlocals، لضمان أمان الاقتباس في الدالة.

خلال عملية التحقق، سيتم تنفيذ كود الكتلة الأساسية، وإنشاء حالة ما بعد، ثم دمج الحالة السابقة وحالة ما بعد لتحديث حالة الكتلة، ونشر الشروط اللاحقة لهذه الكتلة إلى الكتل اللاحقة. هذه العملية مشابهة لفكرة Sea of Nodes في V8 turbofan.

اكتشاف حصري من Numen Cyber ثغرة عالية الخطورة أخرى في لغة move

تحدث الثغرة في دالة join_. عندما يكون مجموع طول المعلمات وطول المتغيرات المحلية أكبر من 256، يحدث تجاوز عددي لأن local هو من نوع u8. على الرغم من أن Move لديه عملية للتحقق من عدد locals، إلا أن وحدة check bounds تتحقق فقط من locals، دون تضمين طول المعلمات.

اكتشاف حصري من Numen Cyber ثغرة عالية الخطورة في لغة move

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

لقد اكتشفنا أنه يمكن تنفيذ هذا الهدف في وحدة reference safety من خلال تعليمات التشغيل MoveLoc/CopyLoc/FreeRef. على سبيل المثال، إذا كانت LocalIndex غير موجودة في دالة copy_loc، فسوف يتسبب ذلك في حدوث panic، مما يؤدي إلى انهيار العقدة بأكملها.

اكتشاف حصري من Numen Cyber لثغرة خطيرة أخرى في لغة move

لتحقق من هذه الثغرة، قمنا بكتابة PoC. تحتوي كتلة الشيفرة في هذا PoC على تعليمات فرعية غير مشروطة، وفي كل مرة يتم فيها تنفيذ التعليمات الأخيرة، يتم القفز مرة أخرى إلى التعليمات الأولى، وبالتالي ستقوم هذه الكتلة باستدعاء دالة execute_block و join عدة مرات.

اكتشاف حصري من Numen Cyber ثغرة عالية الخطورة في لغة move

من خلال تعيين المعلمات المناسبة، يمكننا جعل طول خريطة locals الجديدة 8. في المرة الثانية التي يتم فيها تنفيذ دالة execute_block، بسبب عدم كفاية طول locals، سيؤدي ذلك إلى حدوث panic.

! اكتشفت Numen Cyber حصريا ثغرة أمنية أخرى عالية الخطورة في لغة الحركة

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

كقائد في أبحاث أمان لغة Move، سنواصل دراسة مشكلات الأمان في Move بعمق وسنشارك المزيد من الاكتشافات في المستقبل.

شاهد النسخة الأصلية
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • أعجبني
  • 7
  • مشاركة
تعليق
0/400
ChainSherlockGirlvip
· منذ 2 س
ها! مسرحية أخرى عن ثغرات الأمان داخل السلسلة، هذه المرة هي عرض كبير عن تجاوز السعة في Move~ حسب تحليلي الشخصي، من المحتمل أن يكون أحد المستثمرين الكبار يريد الاستفادة من ذلك لتقصير.
شاهد النسخة الأصليةرد0
SerumSquirtervip
· منذ 7 س
مشكلة أمان أخرى، لقد انتهى الأمر
شاهد النسخة الأصليةرد0
rugged_againvip
· منذ 7 س
عاد للخروج مرة أخرى، هرب هرب.
شاهد النسخة الأصليةرد0
LiquidatedDreamsvip
· منذ 7 س
من لا يزال يلعب موف؟
شاهد النسخة الأصليةرد0
DarkPoolWatchervip
· منذ 7 س
أبتوس ليست موثوقة بالفعل، هناك الكثير من الثغرات.
شاهد النسخة الأصليةرد0
MondayYoloFridayCryvip
· منذ 7 س
هل تحركت مرة أخرى؟ ززززز
شاهد النسخة الأصليةرد0
PretendingSeriousvip
· منذ 7 س
هذه الثغرة واضحة جدًا، والأساسيات البرمجية غير متينة.
شاهد النسخة الأصليةرد0
  • تثبيت