المترجم هو أحد المكونات الأساسية لأنظمة الكمبيوتر الحديثة، ووظيفته الرئيسية هي تحويل شفرة المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ من قبل الكمبيوتر. على الرغم من أن معظم المطورين وموظفي الأمن عادة ما يهتمون بأمان شفرة التطبيقات، إلا أن أمان المترجم نفسه لا يمكن تجاهله. في الواقع، يمكن أن يحتوي المترجم كنوع من برمجيات الكمبيوتر على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بالآلة الافتراضية للإيثيريوم. على عكس ثغرات 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، وما إلى ذلك، واستخدم الميزات الجديدة والوظائف التجريبية بحذر
إلى موظفي الأمن:
التركيز على المخاطر التي قد يقدمها المترجم أثناء تدقيق الأمان
دفع ترقية إصدار المترجم في عملية تطوير SDL، مع مراعاة إدخال فحص تلقائي في CI/CD
تقييم التأثير الأمني الفعلي لثغرات المترجم بناءً على حالة المشروع المحددة
بعض الموارد المفيدة:
تنبيه أمان صادر عن Solidity الرسمي
قائمة الأخطاء في مستودع GitHub الخاص بـ Solidity
نصائح الأمان في صفحة كود العقد على Etherscan
من خلال التركيز على أمان المترجم واستخدام الموارد ذات الصلة بشكل معقول، يمكن للمطورين وأفراد الأمن الوقاية بشكل أفضل من المخاطر المحتملة الناجمة عن ثغرات مترجم Solidity، وزيادة الأمان الشامل للعقود الذكية.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تحليل ثغرات مترجم Solidity وإجراءات الوقاية منها
تحليل ثغرات مترجم Solidity وطرق الوقاية منها
المترجم هو أحد المكونات الأساسية لأنظمة الكمبيوتر الحديثة، ووظيفته الرئيسية هي تحويل شفرة المصدر للغات البرمجة عالية المستوى إلى تعليمات قابلة للتنفيذ من قبل الكمبيوتر. على الرغم من أن معظم المطورين وموظفي الأمن عادة ما يهتمون بأمان شفرة التطبيقات، إلا أن أمان المترجم نفسه لا يمكن تجاهله. في الواقع، يمكن أن يحتوي المترجم كنوع من برمجيات الكمبيوتر على ثغرات أمنية، مما قد يؤدي في بعض الحالات إلى مخاطر أمنية خطيرة.
تتمثل وظيفة مترجم Solidity في تحويل كود العقد الذكي إلى كود تعليمات (EVM) الخاص بالآلة الافتراضية للإيثيريوم. على عكس ثغرات 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، وزيادة الأمان الشامل للعقود الذكية.