المُجمِّع هو أحد المكونات الأساسية لنظام الكمبيوتر الحديث، وهو مسؤول عن تحويل كود المصدر للغات البرمجة العالية المستوى إلى تعليمات قابلة للتنفيذ من قبل الكمبيوتر. على الرغم من أن المطورين والموظفين الأمنيين عادةً ما يهتمون أكثر بأمان كود التطبيق، فإن أمان المُجمِّع نفسه لا يمكن تجاهله أيضاً. كبرنامج كمبيوتر، قد يحتوي المُجمِّع على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بآلة Ethereum الافتراضية. على عكس ثغرات EVM نفسها، فإن ثغرات مترجم Solidity تؤثر بشكل رئيسي على مطوري العقود، ولن تهدد مباشرة أمان شبكة Ethereum. ومع ذلك، قد تؤدي ثغرات المترجم إلى اختلاف الكود الناتج عن توقعات المطورين، مما قد يؤدي إلى خسائر كبيرة في الأصول.
فيما يلي بعض الأمثلة الحقيقية على ثغرات مُجمع Solidity:
SOL-2016-9 تخزين البيانات عالية الترتيب
توجد هذه الثغرة في الإصدارات السابقة من مترجم Solidity (>=0.1.6 <0.4.4). في بعض الحالات، فشل المترجم في تنظيف القيم العليا بشكل صحيح بعد تجاوز عدد صحيح، مما أدى إلى تعديل غير مقصود لقيمة المتغير المخزن.
SOL-2022-4 آثار جانبية للذاكرة في التجميع الداخلي
تؤثر هذه الثغرة على المترجمات ذات الإصدار >=0.8.13 و <0.8.15. نظرًا لمشكلة في تحسين كتلة التجميع الداخلي، قد يقوم المترجم بإزالة بعض عمليات الكتابة إلى الذاكرة بشكل غير صحيح، مما يؤدي إلى سلوك غير طبيعي للبرنامج.
توجد هذه الثغرة في الإصدارات من >= 0.5.8 إلى < 0.8.16 من المترجم. عند إجراء عملية abi.encode على مصفوفة من نوع calldata، قام المترجم بشكل خاطئ بتنظيف بعض البيانات، مما أدى إلى تعديل بيانات متجاورة، مما تسبب في عدم توافق البيانات بعد الترميز وفك الترميز.
لمواجهة المخاطر الناجمة عن ثغرات مترجم Solidity، يمكن للمطورين وموظفي الأمان اتخاذ التدابير التالية:
بالنسبة للمطورين:
استخدم إصدار أحدث من مترجم Solidity، لأن الإصدارات الجديدة عادة ما تقوم بإصلاح مشكلات الأمان المعروفة.
تحسين حالات اختبار الوحدة، وزيادة تغطية الشيفرة، يساعد في اكتشاف السلوك الاستثنائي الذي أدخله المترجم.
حاول تجنب استخدام التجميع الداخلي، والترميز المعقد للـ abi، وغيرها من العمليات التي قد تسبب مشاكل.
بالنسبة للأمن:
لا تتجاهل المخاطر الأمنية التي قد يقدمها المترجم أثناء تدقيق الأمان.
في عملية التطوير الداخلية، نشجع فرق التطوير على ترقية إصدارات المترجم في الوقت المناسب، ونعتبر إدخال فحص تلقائي لإصدارات المترجم في عملية CI/CD.
كن حذرًا من ثغرات المترجم، لكن لا داعي للذعر المفرط. معظم الثغرات تظهر فقط في أنماط شفرات معينة، ويجب تقييم التأثير الفعلي بناءً على الحالة المحددة.
بعض الموارد المفيدة:
تنبيهات الأمان التي يصدرها فريق Solidity بشكل دوري
قائمة الثغرات التي يتم تحديثها بانتظام في مستودع Solidity الرسمي
قائمة ثغرات المترجمين لجميع الإصدارات، يمكن استخدامها في الفحص التلقائي خلال عملية CI/CD
علامة التحذير في الزاوية العلوية اليمنى من صفحة كود العقد في Etherscan، يمكن أن تشير إلى الثغرات الأمنية الموجودة في إصدار المترجم الحالي.
من خلال فهم خصائص ومخاطر ثغرات مترجم Solidity، يمكن للمطورين وفرق الأمان اتخاذ تدابير وقائية مناسبة لحماية أمان العقود الذكية بشكل أفضل وتقليل مخاطر فقدان الأصول المحتملة.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 15
أعجبني
15
6
مشاركة
تعليق
0/400
AirdropHunterKing
· منذ 6 س
لقد اختبرت عقد الكلب لفترة طويلة وما زلت أقع في الفخ وأتناول الكثير من الهواء. لا تقلدوا العقود القديمة يا إخوتي!
شاهد النسخة الأصليةرد0
Layer3Dreamer
· منذ 9 س
من الناحية النظرية، أخطاء المجمع = افتراضات الثقة المتكررة بصراحة
تحليل ثغرات مترجم Solidity واستراتيجيات التعامل معها
تحليل ثغرات مترجم Solidity واستراتيجيات المواجهة
المُجمِّع هو أحد المكونات الأساسية لنظام الكمبيوتر الحديث، وهو مسؤول عن تحويل كود المصدر للغات البرمجة العالية المستوى إلى تعليمات قابلة للتنفيذ من قبل الكمبيوتر. على الرغم من أن المطورين والموظفين الأمنيين عادةً ما يهتمون أكثر بأمان كود التطبيق، فإن أمان المُجمِّع نفسه لا يمكن تجاهله أيضاً. كبرنامج كمبيوتر، قد يحتوي المُجمِّع على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بآلة Ethereum الافتراضية. على عكس ثغرات EVM نفسها، فإن ثغرات مترجم Solidity تؤثر بشكل رئيسي على مطوري العقود، ولن تهدد مباشرة أمان شبكة Ethereum. ومع ذلك، قد تؤدي ثغرات المترجم إلى اختلاف الكود الناتج عن توقعات المطورين، مما قد يؤدي إلى خسائر كبيرة في الأصول.
فيما يلي بعض الأمثلة الحقيقية على ثغرات مُجمع Solidity:
توجد هذه الثغرة في الإصدارات السابقة من مترجم Solidity (>=0.1.6 <0.4.4). في بعض الحالات، فشل المترجم في تنظيف القيم العليا بشكل صحيح بعد تجاوز عدد صحيح، مما أدى إلى تعديل غير مقصود لقيمة المتغير المخزن.
تؤثر هذه الثغرة على المترجمات ذات الإصدار >=0.8.13 و <0.8.15. نظرًا لمشكلة في تحسين كتلة التجميع الداخلي، قد يقوم المترجم بإزالة بعض عمليات الكتابة إلى الذاكرة بشكل غير صحيح، مما يؤدي إلى سلوك غير طبيعي للبرنامج.
توجد هذه الثغرة في الإصدارات من >= 0.5.8 إلى < 0.8.16 من المترجم. عند إجراء عملية abi.encode على مصفوفة من نوع calldata، قام المترجم بشكل خاطئ بتنظيف بعض البيانات، مما أدى إلى تعديل بيانات متجاورة، مما تسبب في عدم توافق البيانات بعد الترميز وفك الترميز.
لمواجهة المخاطر الناجمة عن ثغرات مترجم Solidity، يمكن للمطورين وموظفي الأمان اتخاذ التدابير التالية:
بالنسبة للمطورين:
بالنسبة للأمن:
بعض الموارد المفيدة:
من خلال فهم خصائص ومخاطر ثغرات مترجم Solidity، يمكن للمطورين وفرق الأمان اتخاذ تدابير وقائية مناسبة لحماية أمان العقود الذكية بشكل أفضل وتقليل مخاطر فقدان الأصول المحتملة.