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