تحليل ثغرات مترجم Solidity واستراتيجيات الحماية الأمنية

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

تحليل ثغرات مترجم Solidity واستراتيجيات المواجهة

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

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

لا يُستثنى مُجمع Solidity من ذلك. وفقًا لتحذيرات أمان فريق تطوير Solidity، توجد ثغرات أمنية في عدة إصدارات من مُجمع Solidity.

تحليل ثغرات مترجم Solidity وإجراءات التعامل معها

ثغرة مترجم Solidity

تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بالآلة الافتراضية للإيثريوم. يتم تحميل هذه التعليمات EVM عبر المعاملات إلى الإيثريوم، وفي النهاية يتم تنفيذها بواسطة EVM.

يجب التمييز بين ثغرات مترجم Solidity وثغرات EVM نفسها. ثغرات EVM تشير إلى الثغرات الأمنية أثناء تنفيذ تعليمات الآلة الافتراضية، والتي قد تؤثر على شبكة Ethereum بأكملها. بينما تشير ثغرات مترجم Solidity إلى المشكلات التي تحدث عند تحويل Solidity إلى كود EVM.

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

من الصعب اكتشاف ثغرات المترجم فقط من خلال تدقيق شفرة العقد المصدرية. يحتاج الأمر إلى تحليل يجمع بين إصدار المترجم المحدد وأنماط الشفرة لتحديد ما إذا كانت العقدة تتأثر بثغرات المترجم.

مثال على ثغرة في مجمع Solidity

فيما يلي بعض أمثلة على ثغرات مجمّع Solidity الحقيقية، تُظهر الأشكال المحددة والأسباب والأضرار.

SOL-2016-9 تخزين البيانات من نوع HighOrderByteClean

يُوجد هذا الثغرة في إصدارات أقدم من مترجم Solidity (>=0.1.6 <0.4.4).

ضع في اعتبارك الكود التالي:

صلابة العقد C { uint32 أ = 0x12345678; uint32 ب = 0 ؛ ترجع الدالة run() (uint256) { a = a + 1; عودة ب ؛ } }

لم يتم تعديل المتغير storage b، يجب أن ترجع الدالة run() القيمة الافتراضية 0. ولكن في إصدار المترجم الذي يحتوي على ثغرة، ستعيد الدالة run() القيمة 1.

هذا الوضع غير المتسق مع التوقعات، إذا تم استخدام المتغير b لأغراض مثل التحقق من الأذونات أو محاسبة الأصول، فقد يؤدي إلى عواقب وخيمة.

سبب هذه الظاهرة هو أن EVM يستخدم عناصر مكدس وحاويات بحجم 32 بايت، بينما يدعم Solidity أنواع بيانات أصغر مثل uint32. يحتاج المترجم إلى مسح البتات العليا عند معالجة هذه الأنواع، لكنه لم يعالج ذلك بشكل صحيح عند حدوث تجاوز في الأعداد الصحيحة، مما أدى إلى كتابة البت العليا 1 في storage، مما أدى إلى覆盖 المتغير b.

SOL-2022-4 تأثيرات الذاكرة في التجميع الداخلي

توجد هذه الثغرة في المُجمعات من الإصدار >=0.8.13 إلى <0.8.15.

اعتبر الكود التالي:

صلبة العقد C { وظيفة f() العوائد العامة النقية (uint) { التجميع { mstore(0 ، 0x42) } uint x; تجميع { x := mload(0) } عودة x ؛ } }

تأتي هذه الثغرة من تحسينات الترجمة. حاول المترجم إزالة عمليات الكتابة إلى الذاكرة التي تبدو زائدة، ولكنه أخطأ في التحليل عبر الكتل التجميعية. في النسخة المصابة، ستعيد دالة f() القيمة 0، بدلاً من 0x42 الصحيحة.

SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

تؤثر هذه الثغرة على المترجمات من الإصدار >= 0.5.8 إلى < 0.8.16.

اعتبر الشيفرة التالية:

صلابة عقد C { الدالة f(string[1] بيانات المكالمات a) عوائد نقية خارجية (string memory) { إرجاع abi.decode019283746574839201abi.encode(a( ، )string([1])). } }

في الظروف العادية، يجب أن تعيد هذه الشيفرة قيمة المتغير a "aaaa". ولكن في النسخة التي تحتوي على ثغرات، ستعيد سلسلة فارغة "".

هذا بسبب أن Solidity، عند تنفيذ عملية abi.encode على مصفوفة من نوع calldata، قامت بشكل خاطئ بتنظيف بعض البيانات، مما أدى إلى تعديل البيانات المجاورة، مما تسبب في عدم تطابق البيانات بعد الترميز وفك الترميز.

من الجدير بالذكر أن Solidity ينفذ ضمنيًا abi.encode عند إجراء مكالمات خارجية وemit event، وبالتالي قد يكون نطاق تأثير هذه الثغرات أوسع مما هو متوقع.

![تحليل ثغرات مترجم Solidity وإجراءات المواجهة][0]https://img-cdn.gateio.im/webp-social/moments-c97428f89ed62d5ad8551cdb2ba30867.webp(

نصائح الأمان

استنادًا إلى تحليل نموذج تهديد ثغرات مترجم Solidity واستعراض الثغرات التاريخية، تُقدم الاقتراحات التالية للمطورين وموظفي الأمان:

) للمطورين:

  1. استخدم إصدارًا أحدث من مترجم Solidity. عادةً ما تقوم الإصدارات الجديدة بإصلاح المشكلات الأمنية المعروفة.

  2. تحسين اختبارات الوحدة. معظم الأخطاء على مستوى المترجم تؤدي إلى نتائج تنفيذ الشيفرة البرمجية غير مطابقة للتوقعات، من خلال زيادة تغطية الشيفرة يمكن اكتشاف هذه الأنواع من المشاكل في مرحلة الاختبار.

  3. تجنب استخدام التجميع الداخلي، وعمليات الترميز/فك الترميز المعقدة مثل ABI. معظم الثغرات التاريخية مرتبطة بهذه الخصائص المعقدة.

إلى موظفي الأمن:

  1. لا تتجاهل المخاطر الأمنية التي قد تدخلها المترجم أثناء التدقيق. عنصر الفحص المتعلق بتصنيف ضعف العقود الذكية SWC### هو SWC-102.

  2. في عملية SDL الداخلية، يتم حث فريق التطوير على ترقية إصدار مترجم Solidity، والنظر في إدخال الفحص التلقائي في CI/CD.

  3. لا داعي للقلق المفرط بشأن ثغرات المترجم. معظم الثغرات تُ triggered فقط في أنماط محددة من التعليمات البرمجية، ويجب تقييم التأثير الفعلي بناءً على الحالة المحددة.

( الموارد العملية:

  • تنبيه أمني صادر عن فريق Solidity:
  • قائمة الأخطاء الرسمية في Solidity:
  • قائمة الأخطاء في المترجمات المختلفة:
  • يمكن لعلامة التحذير في الزاوية اليمنى العليا من صفحة كود العقد في Etherscan أن تشير إلى ثغرات الأمان الموجودة في نسخة المترجم الحالية.

ملخص

تتناول هذه المقالة مفهوم ثغرات مترجم Solidity، وتحلل المخاطر الأمنية المحتملة التي قد تنجم عنها في تطوير Ethereum الفعلي، وتقدم نصائح عملية للمطورين وموظفي الأمن. من خلال فهم خصائص وتأثير ثغرات المترجم، يمكن تحسين أمان العقود الذكية.

![تحليل ثغرات مترجم Solidity وإجراءات التعامل معها])https://img-cdn.gateio.im/webp-social/moments-84f5083d8748f2aab71fd92671d999a7.webp###

ETH2.12%
SOL-0.4%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 3
  • مشاركة
تعليق
0/400
DataBartendervip
· منذ 16 س
الأمان ليس له نهاية، الرقع المؤقتة لا تتحمل
شاهد النسخة الأصليةرد0
Ser_This_Is_A_Casinovip
· منذ 16 س
الثغرات هي أسباب هروب المحفظة
شاهد النسخة الأصليةرد0
Anon4461vip
· منذ 16 س
من يجرؤ على لمس هذا الكود
شاهد النسخة الأصليةرد0
  • تثبيت