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