العقود الذكية整数溢出漏洞:防护措施详解

robot
إنشاء الملخص قيد التقدم

ثغرة تجاوز العدد الصحيح ووسائل الحماية منها

تعتبر تجاوز سعة الأعداد الصحيحة مشكلة شائعة في البرمجة. في معظم لغات البرمجة، يتم تخزين قيم الأعداد الصحيحة في ذاكرة ذات طول ثابت. تنقسم الأعداد الصحيحة إلى نوعين: غير موقعة وموقعة، والفرق يكمن في ما إذا كانت تستخدم البت الأعلى كبت علامة. على سبيل المثال، يمكن لذاكرة 32 بت تخزين الأعداد الصحيحة غير الموقعة في النطاق من 0 إلى 4,294,967,295 (uint32)، أو الأعداد الصحيحة الموقعة في النطاق من -2,147,483,648 إلى 2,147,483,647 (int32).

عندما تتجاوز نتائج الحسابات النطاق الذي يمكن لنوع البيانات الصحيحة تمثيله، يحدث تجاوز. معظم لغات البرمجة والمترجمات لا تتحقق من هذه الأخطاء، بل تنفذ ببساطة عملية المودول أو تنتج سلوكاً غير محدد. قد يؤدي ذلك إلى نتائج غير متوقعة في تشغيل البرنامج. في كتابة العقود الذكية على blockchain، وخاصة في مجال التمويل اللامركزي، تعد حسابات الأعداد الصحيحة شائعة، لذا من الضروري الانتباه بشكل خاص إلى ثغرات تجاوز الأعداد الصحيحة.

يمكن تقسيم تجاوز العدد الصحيح إلى حالتين: تجاوز علوي وتجاوز سفلي:

  1. تجاوز السعة: تكون نتيجة الحساب أكبر من القيمة القصوى التي يمكن لنوع البيانات تمثيلها. على سبيل المثال، عند إضافة 1 إلى 0xFFFFFFFF في uint32، سيتحول إلى 0x00000000.

  2. الانخفاض: تكون نتيجة الحساب أقل من الحد الأدنى الذي يمكن لنوع البيانات تمثيله. على سبيل المثال، 0 مطروحًا منها 1 من نوع uint32 ستتحول إلى 0xFFFFFFFF.

!

في أبريل 2018، تم اختراق عقد توكن BeautyChain(BEC) بسبب ثغرة تجاوز السعة العددية، حيث حصل المهاجم على كميات هائلة من التوكنات. ظهرت هذه الثغرة في دالة batchTransfer، حيث لم يتم التحقق من تجاوز سعة الضرب، مما أدى إلى إمكانية تحويل كميات كبيرة من التوكنات باستخدام رصيد توكنات قليل.

!

لتجنب تجاوز السعة الرقمية، يمكن اتخاذ التدابير التالية:

  1. قم بتكوين خيارات تجميع Rust، للتحقق من تجاوزات الأعداد الصحيحة في وضع الإصدار أيضًا وإثارة panic.

  2. استخدم حزمة uint لدعم أنواع الأعداد الصحيحة الأكبر، مثل U256، U512، وما إلى ذلك.

  3. استخدم دالة تحويل من نوع uint لاكتشاف الفائض، مثل as_u128().

  4. استخدم دالة Safe Math مثل checked_add() للتحقق مما إذا كانت الحسابات قد تجاوزت.

من خلال هذه الطرق، يمكن تجنب ثغرات تجاوز السعة بشكل فعال، وزيادة أمان العقود الذكية. عند كتابة العقود التي تتضمن حسابات كبيرة، من الضروري التعامل بحذر مع مشكلة تجاوز السعة.

!

SAFE-1.99%
MATH-9.43%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • مشاركة
تعليق
0/400
AirdropHunterXiaovip
· منذ 13 س
هل سيتسبب في تجاوز السعة؟ سيتم اقتطاف القسائم.
شاهد النسخة الأصليةرد0
gas_guzzlervip
· منذ 14 س
تذكروا ضبط الفائض قبل التطوير يا إخوان
شاهد النسخة الأصليةرد0
0xInsomniavip
· منذ 14 س
أدى الانفجار إلى معاناة الكثير من الحمقى
شاهد النسخة الأصليةرد0
AirdropHunterZhangvip
· منذ 14 س
تتلاطم الأمواج، ويميل المتسولون إلى الصداع.
شاهد النسخة الأصليةرد0
0xOverleveragedvip
· منذ 14 س
سنايا لم تعد موجودة مرة أخرى
شاهد النسخة الأصليةرد0
  • تثبيت