هجوم حجب الخدمة ( DoS ) قد يؤدي إلى عدم قدرة العقود الذكية على العمل بشكل طبيعي لفترة من الوقت أو حتى بشكل دائم. الأسباب الرئيسية تشمل:
توجد عيوب في منطق العقد. على سبيل المثال، بعض تنفيذات الدوال العامة لم تأخذ في الاعتبار تعقيد الحساب، مما قد يؤدي إلى تجاوز حد الغاز مما يؤدي إلى فشل المعاملة.
في سيناريوهات استدعاء العقود المتقاطعة، يعتمد تنفيذ العقد على حالة العقود الخارجية. قد يؤدي تنفيذ العقود الخارجية غير الموثوق به إلى تعطيل تشغيل هذا العقد، مثل قفل الأموال وعدم القدرة على الإيداع أو السحب.
العوامل البشرية، مثل فقدان مالك العقد للمفتاح الخاص، مما يؤدي إلى عدم تحديث الحالة الرئيسية للنظام.
下面结合具体例子分析هجوم حجب الخدمة漏洞。
1. التجوال في هياكل البيانات الكبيرة القابلة للتعديل من الخارج
以下 هو عقد بسيط "لإعطاء أرباح" للمستخدمين المسجلين:
حالة العقد تحتوي على قائمة مستخدمين مسجلين ورسم بياني لميزان الحسابات. يمكن للمستخدمين التسجيل من خلال register_account() وت初始化.
يدير المسؤول توزيع الأرباح للمستخدمين من خلال distribute_token()، ويتجول في مصفوفة registered لتحويل عدد محدد من الرموز إلى كل مستخدم.
المشكلة هي أن حجم registered غير محدود ويمكن التحكم فيه بشكل ضار، مما يؤدي إلى استهلاك الغاز بشكل مفرط أثناء التكرار يتجاوز الحد.
التوصيات للحلول:
الحد من حجم هيكل البيانات، لضمان عدم تجاوز حد الغاز حتى عند الوصول إلى القيمة القصوى
استخدام وضع السحب، تسجيل الحساب أولاً، يمكن للمستخدم استرجاع المكافأة من خلال السحب
!
2. الاعتماد على حالة العقد المتقاطع يؤدي إلى التوقف
فكر في سيناريو "مزايدة" للعقد:
سجل أعلى مزايد الحالي والمبلغ
يمكن للمستخدمين تسجيل حسابات للمشاركة في العطاءات
عند تقديم عرض أعلى من السعر الأعلى الحالي، يتم إعادة السعر الأعلى السابق وتحديث الحالة
المشكلة هي أن استرداد المبلغ يعتمد على حالة العقد الخارجي. إذا تم إلغاء حساب أعلى مزايد سابق، فسيفشل استرداد المبلغ، مما يؤدي إلى عدم تحديث أعلى سعر، مما يؤدي إلى انسداد عملية المزايدة بأكملها.
حلول:
يرجى النظر في احتمال فشل الاستدعاءات الخارجية وتنفيذ معالجة الأخطاء بشكل معقول. على سبيل المثال، يمكن تخزين الأموال التي لا يمكن استردادها مؤقتًا، والسماح للمستخدمين بسحبها بشكل منفصل في وقت لاحق.
!
3. فقدان المفتاح الخاص بالمدير
بعض الوظائف الرئيسية ( مثل إيقاف/إعادة تشغيل الصفقة ) يُسمح فقط للمسؤول باستدعائها. فقدان مفتاح المسؤول سيؤدي إلى عدم إمكانية استخدام هذه الوظائف، وقد لا يعمل العقد بشكل طبيعي لفترة طويلة.
حلول:
اعتماد آلية التوقيع المتعدد بدلاً من الإدارة الفردية، لتحقيق الحوكمة اللامركزية، وتجنب نقطة الفشل الواحدة.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 18
أعجبني
18
7
مشاركة
تعليق
0/400
NFTFreezer
· 07-16 03:27
كان متوقعًا أن يتم سرقة الرقم.
شاهد النسخة الأصليةرد0
BridgeJumper
· 07-15 12:26
المفتاح الخاص丢你咋不说丢裤子呢
شاهد النسخة الأصليةرد0
AirdropF5Bro
· 07-13 07:29
المدير، وقع أكثر أولاً، تأكد من الأمان.
شاهد النسخة الأصليةرد0
MetaEggplant
· 07-13 07:28
تكلفة الاختبار مرتفعة قليلاً حقاً
شاهد النسخة الأصليةرد0
Ser_This_Is_A_Casino
· 07-13 07:26
مستوى سيء للغاية، كنت أعتقد أن dos يمكنه فقط التعامل مع الويب
تحليل مخاطر هجمات DoS على العقود الذكية واستراتيجيات الحماية
العقود الذكية中的هجوم حجب الخدمة
هجوم حجب الخدمة ( DoS ) قد يؤدي إلى عدم قدرة العقود الذكية على العمل بشكل طبيعي لفترة من الوقت أو حتى بشكل دائم. الأسباب الرئيسية تشمل:
توجد عيوب في منطق العقد. على سبيل المثال، بعض تنفيذات الدوال العامة لم تأخذ في الاعتبار تعقيد الحساب، مما قد يؤدي إلى تجاوز حد الغاز مما يؤدي إلى فشل المعاملة.
في سيناريوهات استدعاء العقود المتقاطعة، يعتمد تنفيذ العقد على حالة العقود الخارجية. قد يؤدي تنفيذ العقود الخارجية غير الموثوق به إلى تعطيل تشغيل هذا العقد، مثل قفل الأموال وعدم القدرة على الإيداع أو السحب.
العوامل البشرية، مثل فقدان مالك العقد للمفتاح الخاص، مما يؤدي إلى عدم تحديث الحالة الرئيسية للنظام.
下面结合具体例子分析هجوم حجب الخدمة漏洞。
1. التجوال في هياكل البيانات الكبيرة القابلة للتعديل من الخارج
以下 هو عقد بسيط "لإعطاء أرباح" للمستخدمين المسجلين:
حالة العقد تحتوي على قائمة مستخدمين مسجلين ورسم بياني لميزان الحسابات. يمكن للمستخدمين التسجيل من خلال register_account() وت初始化.
يدير المسؤول توزيع الأرباح للمستخدمين من خلال distribute_token()، ويتجول في مصفوفة registered لتحويل عدد محدد من الرموز إلى كل مستخدم.
المشكلة هي أن حجم registered غير محدود ويمكن التحكم فيه بشكل ضار، مما يؤدي إلى استهلاك الغاز بشكل مفرط أثناء التكرار يتجاوز الحد.
التوصيات للحلول:
!
2. الاعتماد على حالة العقد المتقاطع يؤدي إلى التوقف
فكر في سيناريو "مزايدة" للعقد:
المشكلة هي أن استرداد المبلغ يعتمد على حالة العقد الخارجي. إذا تم إلغاء حساب أعلى مزايد سابق، فسيفشل استرداد المبلغ، مما يؤدي إلى عدم تحديث أعلى سعر، مما يؤدي إلى انسداد عملية المزايدة بأكملها.
حلول: يرجى النظر في احتمال فشل الاستدعاءات الخارجية وتنفيذ معالجة الأخطاء بشكل معقول. على سبيل المثال، يمكن تخزين الأموال التي لا يمكن استردادها مؤقتًا، والسماح للمستخدمين بسحبها بشكل منفصل في وقت لاحق.
!
3. فقدان المفتاح الخاص بالمدير
بعض الوظائف الرئيسية ( مثل إيقاف/إعادة تشغيل الصفقة ) يُسمح فقط للمسؤول باستدعائها. فقدان مفتاح المسؤول سيؤدي إلى عدم إمكانية استخدام هذه الوظائف، وقد لا يعمل العقد بشكل طبيعي لفترة طويلة.
حلول: اعتماد آلية التوقيع المتعدد بدلاً من الإدارة الفردية، لتحقيق الحوكمة اللامركزية، وتجنب نقطة الفشل الواحدة.