المترجم هو أحد المكونات الأساسية في أنظمة الكمبيوتر الحديثة، وتتمثل الوظيفة الرئيسية له في تحويل كود المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ على مستوى الكمبيوتر. على الرغم من أن معظم المطورين والمهنيين في مجال الأمن عادة ما يركزون على أمان كود التطبيقات البرمجية، إلا أن أمان المترجم نفسه غالبًا ما يتم تجاهله. في الواقع، يمكن أن يحتوي المترجم، كنوع من برامج الكمبيوتر، على ثغرات أمنية، والتي قد تشكل مخاطر أمنية خطيرة في بعض الحالات.
على سبيل المثال، خلال عملية تحليل المتصفح وتنفيذ كود JavaScript، قد تؤدي ثغرات محرك تحليل JavaScript إلى تعرض المستخدمين لهجمات تنفيذ كود عن بُعد عند زيارة صفحات ويب ضارة، مما يؤدي في النهاية إلى سيطرة المهاجم على متصفح الضحية أو حتى نظام التشغيل. بالإضافة إلى ذلك، أظهرت الأبحاث أن الأخطاء في مترجم Clang C++ قد تؤدي أيضًا إلى عواقب خطيرة مثل تنفيذ كود عن بُعد.
يوجد أيضًا ثغرات أمنية في مترجم Solidity. وفقًا لتحذير الأمان الذي نشره فريق تطوير Solidity، هناك مخاطر أمنية في عدة إصدارات من مترجم Solidity. وظيفة مترجم Solidity هي تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بـ Ethereum Virtual Machine، والذي يتم تحميله في النهاية عبر المعاملات إلى Ethereum ويتم تنفيذه بواسطة EVM.
يفضل أن نلاحظ أن ثغرات مترجم Solidity تختلف عن ثغرات EVM نفسها. تشير ثغرات EVM إلى مشكلات الأمان التي تنشأ عند تنفيذ التعليمات بواسطة الآلة الافتراضية، مما قد يؤثر على شبكة الإيثيريوم بأكملها. بينما تشير ثغرات مترجم Solidity إلى المشكلات الموجودة عند تحويل كود Solidity إلى كود EVM، والتي لن تؤثر مباشرة على شبكة الإيثيريوم نفسها.
قد تؤدي ثغرات مترجم Solidity إلى عدم توافق التعليمات البرمجية EVM التي تم إنشاؤها مع توقعات المطورين. نظرًا لأن العقود الذكية على إيثريوم تتعلق عادةً بأصول العملات المشفرة الخاصة بالمستخدمين، فإن أي خطأ ناتج عن المترجم قد يتسبب في خسارة أصول المستخدمين، مما يؤدي إلى عواقب وخيمة. يركز المطورون ومراجعي العقود عادةً على تنفيذ منطق العقد والمشكلات الأمنية الشائعة، بينما يصعب اكتشاف ثغرات المترجم فقط من خلال تدقيق شفرة المصدر، حيث يتطلب الأمر تحليلًا مشتركًا مع إصدار المترجم المحدد وأنماط الشفرة.
فيما يلي بعض الأمثلة الحقيقية على ثغرات مترجم Solidity:
SOL-2016-9 تخزين بايت عالي النظام النظيف
توجد هذه الثغرة في الإصدارات السابقة من مترجم Solidity (>=0.1.6 <0.4.4). في بعض الحالات، قد يتم تعديل قيمة المتغيرات التخزينية عن غير قصد، مما يؤدي إلى عدم تطابق قيمة إرجاع الدالة مع المتوقع. قد يؤدي هذا التناقض إلى عواقب وخيمة في سيناريوهات مثل التحقق من الأذونات أو محاسبة الأصول.
SOL-2022-4 تأثيرات الذاكرة في التجميع المضمن
توجد هذه الثغرة في محركات التجميع من الإصدار 0.8.13 إلى 0.8.15. بسبب مشكلة في استراتيجية تحسين المحرك، قد يتم إزالة بعض التعديلات على الذاكرة في التعليمات البرمجية المضمنة بشكل خاطئ، مما يؤدي إلى خطأ في قيمة إرجاع الدالة.
SOL-2022-6 تجاوز سعة رأس إعادة ترميز ABI مع تنظيف المصفوفة الثابتة
تؤثر هذه الثغرة على إصدارات 0.5.8 إلى 0.8.16 من المترجم. أثناء إجراء عملية abi.encode على مصفوفة من نوع calldata، قد يتم مسح بعض البيانات بشكل خاطئ، مما يؤدي إلى تعديل البيانات المجاورة، مما يتسبب في عدم تناسق البيانات بعد الترميز وفك الترميز.
بخصوص ثغرات مترجم Solidity، قدم فريق أمان blockchain Cobo الاقتراحات التالية:
إلى المطورين:
استخدم إصدار أحدث من مترجم Solidity
تحسين حالات اختبار الوحدة وزيادة تغطية الشيفرة
تجنب استخدام التجميع المضمن، والترميز المعقد لـ abi، وغيرها من العمليات، واستخدام الميزات الجديدة والوظائف التجريبية بحذر
إلى موظفي الأمن:
أخذ المخاطر الأمنية التي قد يقدمها المجمع في الاعتبار أثناء التدقيق
يُنصح فريق التطوير بترقية إصدار المُجمّع في الوقت المناسب
إدخال الفحص التلقائي لإصدار المترجم في عملية CI/CD
تقييم التأثير الأمني الفعلي لثغرات المترجم بناءً على المشروع المحدد
بعض الموارد المفيدة:
تحذيرات الأمان من المدونة الرسمية لـ Solidity
قائمة الأخطاء في مستودع Solidity GitHub
قائمة أخطاء المترجمات في الإصدارات المختلفة
تنبيه الثغرات في صفحة كود العقد على Etherscan
من خلال فهم خصائص وتأثيرات ثغرات مترجم Solidity، يمكن للمطورين وموظفي الأمان تقييم مخاطر أمان العقود الذكية بشكل أكثر شمولية، واتخاذ التدابير المناسبة لتقليل التهديدات المحتملة.
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.
تسجيلات الإعجاب 16
أعجبني
16
6
مشاركة
تعليق
0/400
0xSoulless
· منذ 4 س
أداة خداع الناس لتحقيق الربح جديدة
شاهد النسخة الأصليةرد0
RumbleValidator
· 07-12 19:34
هل يمكن أن يتسبب هذا الثغرة في أخطاء في طبقة الإجماع؟ مخاطر عقدة التحقق كبيرة!
شاهد النسخة الأصليةرد0
SocialFiQueen
· 07-12 19:29
يبدو أن العقود الذكية ستتعرض لمشكلة~ هاها مثير للغاية
شاهد النسخة الأصليةرد0
CryptoTherapist
· 07-12 19:27
مجرد حالة أخرى من متلازمة قلق المطورين... تنفس خلال عملية تصحيح الأخطاء عائلتي
شاهد النسخة الأصليةرد0
StablecoinAnxiety
· 07-12 19:14
المجمعات ليست آمنة من يجرؤ على البرمجة
شاهد النسخة الأصليةرد0
Blockwatcher9000
· 07-12 19:06
المطورون صعبون للغاية، تمسّك بـ btc الخاص بي ورحل.
تحليل ثغرات مترجم Solidity: المخاطر الخفية التي تؤثر على أمان العقود الذكية
تحليل عميق لثغرات مترجم Solidity
المترجم هو أحد المكونات الأساسية في أنظمة الكمبيوتر الحديثة، وتتمثل الوظيفة الرئيسية له في تحويل كود المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ على مستوى الكمبيوتر. على الرغم من أن معظم المطورين والمهنيين في مجال الأمن عادة ما يركزون على أمان كود التطبيقات البرمجية، إلا أن أمان المترجم نفسه غالبًا ما يتم تجاهله. في الواقع، يمكن أن يحتوي المترجم، كنوع من برامج الكمبيوتر، على ثغرات أمنية، والتي قد تشكل مخاطر أمنية خطيرة في بعض الحالات.
على سبيل المثال، خلال عملية تحليل المتصفح وتنفيذ كود JavaScript، قد تؤدي ثغرات محرك تحليل JavaScript إلى تعرض المستخدمين لهجمات تنفيذ كود عن بُعد عند زيارة صفحات ويب ضارة، مما يؤدي في النهاية إلى سيطرة المهاجم على متصفح الضحية أو حتى نظام التشغيل. بالإضافة إلى ذلك، أظهرت الأبحاث أن الأخطاء في مترجم Clang C++ قد تؤدي أيضًا إلى عواقب خطيرة مثل تنفيذ كود عن بُعد.
يوجد أيضًا ثغرات أمنية في مترجم Solidity. وفقًا لتحذير الأمان الذي نشره فريق تطوير Solidity، هناك مخاطر أمنية في عدة إصدارات من مترجم Solidity. وظيفة مترجم Solidity هي تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بـ Ethereum Virtual Machine، والذي يتم تحميله في النهاية عبر المعاملات إلى Ethereum ويتم تنفيذه بواسطة EVM.
يفضل أن نلاحظ أن ثغرات مترجم Solidity تختلف عن ثغرات EVM نفسها. تشير ثغرات EVM إلى مشكلات الأمان التي تنشأ عند تنفيذ التعليمات بواسطة الآلة الافتراضية، مما قد يؤثر على شبكة الإيثيريوم بأكملها. بينما تشير ثغرات مترجم Solidity إلى المشكلات الموجودة عند تحويل كود Solidity إلى كود EVM، والتي لن تؤثر مباشرة على شبكة الإيثيريوم نفسها.
قد تؤدي ثغرات مترجم Solidity إلى عدم توافق التعليمات البرمجية EVM التي تم إنشاؤها مع توقعات المطورين. نظرًا لأن العقود الذكية على إيثريوم تتعلق عادةً بأصول العملات المشفرة الخاصة بالمستخدمين، فإن أي خطأ ناتج عن المترجم قد يتسبب في خسارة أصول المستخدمين، مما يؤدي إلى عواقب وخيمة. يركز المطورون ومراجعي العقود عادةً على تنفيذ منطق العقد والمشكلات الأمنية الشائعة، بينما يصعب اكتشاف ثغرات المترجم فقط من خلال تدقيق شفرة المصدر، حيث يتطلب الأمر تحليلًا مشتركًا مع إصدار المترجم المحدد وأنماط الشفرة.
فيما يلي بعض الأمثلة الحقيقية على ثغرات مترجم Solidity:
توجد هذه الثغرة في الإصدارات السابقة من مترجم Solidity (>=0.1.6 <0.4.4). في بعض الحالات، قد يتم تعديل قيمة المتغيرات التخزينية عن غير قصد، مما يؤدي إلى عدم تطابق قيمة إرجاع الدالة مع المتوقع. قد يؤدي هذا التناقض إلى عواقب وخيمة في سيناريوهات مثل التحقق من الأذونات أو محاسبة الأصول.
توجد هذه الثغرة في محركات التجميع من الإصدار 0.8.13 إلى 0.8.15. بسبب مشكلة في استراتيجية تحسين المحرك، قد يتم إزالة بعض التعديلات على الذاكرة في التعليمات البرمجية المضمنة بشكل خاطئ، مما يؤدي إلى خطأ في قيمة إرجاع الدالة.
تؤثر هذه الثغرة على إصدارات 0.5.8 إلى 0.8.16 من المترجم. أثناء إجراء عملية abi.encode على مصفوفة من نوع calldata، قد يتم مسح بعض البيانات بشكل خاطئ، مما يؤدي إلى تعديل البيانات المجاورة، مما يتسبب في عدم تناسق البيانات بعد الترميز وفك الترميز.
بخصوص ثغرات مترجم Solidity، قدم فريق أمان blockchain Cobo الاقتراحات التالية:
إلى المطورين:
إلى موظفي الأمن:
بعض الموارد المفيدة:
من خلال فهم خصائص وتأثيرات ثغرات مترجم Solidity، يمكن للمطورين وموظفي الأمان تقييم مخاطر أمان العقود الذكية بشكل أكثر شمولية، واتخاذ التدابير المناسبة لتقليل التهديدات المحتملة.