المترجم هو أحد المكونات الأساسية لأنظمة الكمبيوتر الحديثة، وظيفته هي تحويل شفرة المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ بواسطة الكمبيوتر. على الرغم من أن المطورين والموظفين الأمنيين عادةً ما يهتمون بأمان شفرة تطبيقات البرامج، إلا أن المترجم نفسه باعتباره برنامج كمبيوتر قد يحتوي أيضًا على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات آلة Ethereum (EVM). على عكس ثغرات EVM نفسها، فإن ثغرات مترجم Solidity تظهر بشكل رئيسي عند تحويل Solidity إلى كود EVM، وقد تكون هناك مشاكل، مما لا يؤثر مباشرة على شبكة Ethereum نفسها، لكنه قد يؤدي إلى اختلاف الكود الناتج عن EVM مع توقعات المطور.
فيما يلي بعض أمثلة على ثغرات مترجم Solidity الحقيقية:
SOL-2016-9 HighOrderByteCleanStorage:
توجد هذه الثغرة في إصدارات مبكر من مترجم Solidity (>=0.1.6 <0.4.4). نظرًا لعدم قيام المترجم بإزالة البتات العليا بشكل صحيح عند معالجة تجاوز السعة الصحيحة، قد يؤدي ذلك إلى تعديل متغيرات مجاورة بشكل غير متوقع.
SOL-2022-4 تأثيرات الجانب الذاكرة في Assembly Inline:
توجد هذه الثغرة في إصدارات المترجم من 0.8.13 إلى 0.8.15. بسبب تحسينات التجميع التي تحلل كتلة assembly الفردية، قد يتم إزالة تعليمات كتابة الذاكرة التي تبدو زائدة ولكنها في الواقع مفيدة.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
تؤثر هذه الثغرة على المترجمات من الإصدار 0.5.8 إلى 0.8.16. عند إجراء عملية abi.encode على مصفوفة من نوع calldata، يتم مسح بعض البيانات بشكل خاطئ مما يؤدي إلى تعديل البيانات المجاورة.
فيما يتعلق بثغرات مترجم Solidity، قدم فريق أمان blockchain Cobo الاقتراحات التالية:
إلى المطورين:
استخدم إصدار أحدث من مترجم Solidity
تحسين حالات اختبار الوحدة
تجنب استخدام التجميع الداخلي، وعمليات ترميز وفك ترميز ABI المعقدة، وما إلى ذلك
إلى موظفي الأمن:
اعتبر المخاطر الأمنية التي قد يقدمها المجمع أثناء التدقيق
في عملية التطوير، حث على ترقية إصدار المترجم
تقييم التأثير الأمني الفعلي لثغرات المترجم بناءً على الظروف المحددة
بعض الموارد المفيدة:
تنبيه أمان رسمي من Solidity
قائمة الأخطاء في مستودع GitHub لـ Solidity
قائمة الأخطاء في المترجمات المختلفة
نصائح الأمان في صفحة كود العقد على Etherscan
بصفة عامة، يجب على المطورين وموظفي الأمن الانتباه إلى المخاطر الأمنية المحتملة التي قد تنجم عن ثغرات مترجم Solidity، من خلال ترقية المترجم، وتحسين الاختبارات، وغيرها من التدابير لتقليل المخاطر ذات الصلة.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 24
أعجبني
24
6
مشاركة
تعليق
0/400
StakeWhisperer
· 07-21 09:21
هل كنت تتابع أخطاء المترجم مبكرًا؟ هذا مبتدئ يضحك حتى الموت
شاهد النسخة الأصليةرد0
OnchainGossiper
· 07-21 06:50
لقد قمت للتو بإصلاح الثغرة والآن تأتي أخرى... أرفع يدي
تحليل ثغرات مترجم Solidity واستراتيجيات التعامل معها
تحليل ثغرات مترجم Solidity وإجراءات المواجهة
المترجم هو أحد المكونات الأساسية لأنظمة الكمبيوتر الحديثة، وظيفته هي تحويل شفرة المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ بواسطة الكمبيوتر. على الرغم من أن المطورين والموظفين الأمنيين عادةً ما يهتمون بأمان شفرة تطبيقات البرامج، إلا أن المترجم نفسه باعتباره برنامج كمبيوتر قد يحتوي أيضًا على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات آلة Ethereum (EVM). على عكس ثغرات EVM نفسها، فإن ثغرات مترجم Solidity تظهر بشكل رئيسي عند تحويل Solidity إلى كود EVM، وقد تكون هناك مشاكل، مما لا يؤثر مباشرة على شبكة Ethereum نفسها، لكنه قد يؤدي إلى اختلاف الكود الناتج عن EVM مع توقعات المطور.
فيما يلي بعض أمثلة على ثغرات مترجم Solidity الحقيقية:
SOL-2016-9 HighOrderByteCleanStorage: توجد هذه الثغرة في إصدارات مبكر من مترجم Solidity (>=0.1.6 <0.4.4). نظرًا لعدم قيام المترجم بإزالة البتات العليا بشكل صحيح عند معالجة تجاوز السعة الصحيحة، قد يؤدي ذلك إلى تعديل متغيرات مجاورة بشكل غير متوقع.
SOL-2022-4 تأثيرات الجانب الذاكرة في Assembly Inline: توجد هذه الثغرة في إصدارات المترجم من 0.8.13 إلى 0.8.15. بسبب تحسينات التجميع التي تحلل كتلة assembly الفردية، قد يتم إزالة تعليمات كتابة الذاكرة التي تبدو زائدة ولكنها في الواقع مفيدة.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: تؤثر هذه الثغرة على المترجمات من الإصدار 0.5.8 إلى 0.8.16. عند إجراء عملية abi.encode على مصفوفة من نوع calldata، يتم مسح بعض البيانات بشكل خاطئ مما يؤدي إلى تعديل البيانات المجاورة.
فيما يتعلق بثغرات مترجم Solidity، قدم فريق أمان blockchain Cobo الاقتراحات التالية:
إلى المطورين:
إلى موظفي الأمن:
بعض الموارد المفيدة:
بصفة عامة، يجب على المطورين وموظفي الأمن الانتباه إلى المخاطر الأمنية المحتملة التي قد تنجم عن ثغرات مترجم Solidity، من خلال ترقية المترجم، وتحسين الاختبارات، وغيرها من التدابير لتقليل المخاطر ذات الصلة.