شراء العملات المشفرة
الأسواق
العقود الفورية
العقود الآجلةBTC
مدخرات
مركز الأحداث
مركز المكافآت
المزيد
مهرجان صفر رسوم
هجوم إعادة الدخول: ما هجوم إعادة الدخول في الكريبتو؟هجوم إعادة الدخول هو استغلال لعقد ذكي يستدعي فيه عقد خارجي العقدَ المعرض للثغرات مرة أخرى قبل اكتمال الاستدعاء الأول للدالة.في مجال الكريبتو، يستهدف هذا الهجوم عادةً اهجوم إعادة الدخول: ما هجوم إعادة الدخول في الكريبتو؟هجوم إعادة الدخول هو استغلال لعقد ذكي يستدعي فيه عقد خارجي العقدَ المعرض للثغرات مرة أخرى قبل اكتمال الاستدعاء الأول للدالة.في مجال الكريبتو، يستهدف هذا الهجوم عادةً ا

هجوم إعادة الدخول

2026/10/13 16:51
#Advanced
Humanity
H$0.05671-2.54%
PX
PX$0.0113--%
Siacoin
SC$0.0008981+0.13%
Ethereum
ETH$2,410.62-2.39%
Smart Blockchain
SMART$0.004313+1.14%

ما هجوم إعادة الدخول في الكريبتو؟

هجوم إعادة الدخول هو استغلال لعقد ذكي يستدعي فيه عقد خارجي العقدَ المعرض للثغرات مرة أخرى قبل اكتمال الاستدعاء الأول للدالة.

في مجال الكريبتو، يستهدف هذا الهجوم عادةً العقود الذكية التي تحتفظ بالأموال أو تتعقب الأرصدة أو تعالج عمليات السحب أو تحسب المكافآت أو تدير حصص الخزائن أو تتفاعل مع عقود أخرى.

تكمن المشكلة الأساسية في أن العقد المعرض للثغرات يمنح عقداً آخر التحكم قبل أن ينتهي من تحديث حالته الداخلية.

إذا استطاع المهاجم إعادة الدخول إلى العقد أثناء هذه الحالة غير المكتملة، فقد يكرر إجراءً لا ينبغي السماح به إلا مرة واحدة.

ومن الأمثلة الشائعة دالة سحب ترسل العملات المشفرة إلى المستخدم قبل خفض رصيده المسجل.

إذا كان المستلم عقداً خبيثاً، فيمكنه استخدام منطق الدالة الاحتياطية أو دالة الاستدعاء لإعادة استدعاء دالة السحب قبل تحديث الرصيد.

وقد يسمح ذلك للمهاجم بسحب مبلغ أكبر مما يحق له الحصول عليه.

يعرّف قسم هجمات إعادة الدخول في قائمة OWASP لأهم 10 مخاطر للعقود الذكية لعام 2026 إعادة الدخول بأنها حالة ينفذ فيها العقد استدعاءً خارجياً، ثم يستدعي العقد المستقبِل العقدَ الأصلي قبل اكتمال تحديث الحالة.

يُعد هجوم إعادة الدخول من أشهر ثغرات العقود الذكية، لأنه يستهدف مباشرةً نموذج الثقة في المحاسبة على السلسلة.

وهو خطير خصوصاً في التمويل اللامركزي، لأن العقود الذكية غالباً ما تدير مجمعات سيولة كبيرة وتعتمد على عقود أخرى للمبادلات أو الضمانات أو المكافآت أو بيانات الأسعار.

آلية عمل هجوم إعادة الدخول

يبدأ هجوم إعادة الدخول عندما يجري عقد ذكي معرض للثغرات استدعاءً خارجياً لعقد أو عنوان آخر.

وقد يرسل ذلك الاستدعاء العملة المشفرة الأصلية أو ينقل التوكنات أو يستدعي خطافاً أو يطلب استدعاءً لاحقاً أو ينفذ استراتيجية أو يتفاعل مع بروتوكول آخر.

عندما يجري العقد المعرض للثغرات ذلك الاستدعاء، يمنح العقد المستقبِل مؤقتاً فرصة لتشغيل كوده.

إذا كان المهاجم يتحكم في العقد المستقبِل، فيمكنه استغلال تلك اللحظة لإعادة استدعاء العقد المعرض للثغرات.

وقد تظل قيم الحالة في العقد المعرض للثغرات قديمة لأنه لم يحدث الأرصدة أو الديون أو الحصص أو مؤشرات المكافآت أو علامات القفل بعد.

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

يستمر الهجوم حتى تنفد أموال العقد المعرض للثغرات أو ينفد الغاز من المعاملة أو توقف آلية حماية الاستدعاءات المتكررة.

تحذر وثائق Solidity حول الاستدعاءات الخارجية من أن التفاعل مع عقد آخر ينقل التحكم إليه، وأن العقد المستدعى قد يعيد استدعاء العقد الأصلي قبل عودة الاستدعاء الأول.

ويشكل هذا التحذير أساس الدفاع ضد إعادة الدخول.

ينبغي التعامل مع كل استدعاء خارجي بوصفه نقطة محتملة قد تُخل فيها الافتراضات التي يعتمد عليها العقد.

مثال مبسط على إعادة الدخول

لنفترض وجود عقد إقراض يسجل رصيد إيداع كل مستخدم.

يودع مستخدم 10 ETH في العقد.

يسجل العقد أن رصيد المستخدم يبلغ 10 ETH.

ثم يستدعي المستخدم لاحقاً دالة السحب لاسترداد 10 ETH.

يخفض العقد الآمن رصيد المستخدم إلى الصفر قبل إرسال ETH.

أما العقد المعرض للثغرات فيرسل ETH أولاً ثم يحدث الرصيد.

إذا كان المستخدم في الواقع عقداً خبيثاً، فستعمل دالة الاستلام الخاصة به عند إرسال ETH.

ويمكن لدالة الاستلام هذه استدعاء دالة السحب فوراً مرة أخرى، بينما لا يزال العقد المعرض للثغرات يعتقد أن رصيد المستخدم يبلغ 10 ETH.

وقد تتكرر عملية السحب نفسها مراراً ضمن معاملة واحدة.

لهذا يكتسب ترتيب منطق العقد الذكي أهمية كبيرة.

في البرمجيات التقليدية، قد يتسبب خطأ بسيط في الترتيب بمشكلة محاسبية عادية.

لكن الخطأ نفسه في عقد ذكي يحتفظ بأصول مشفرة قد يصبح مساراً مباشراً لسرقة الأصول.

مخاطر هجمات إعادة الدخول

تُعد هجمات إعادة الدخول خطيرة لأن العقود الذكية غالباً ما تتحكم في أصول يصعب استردادها بعد استغلال الثغرة.

صُممت شبكات البلوكشين العامة لتنفيذ المعاملات الصالحة والحفاظ على سجلها.

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

توضح إرشادات Ethereum.org لأمن العقود الذكية أن تغيير كود العقد الذكي بعد نشره صعب عادةً، وأن استرداد الأصول المسروقة صعب بسبب عدم قابلية معاملات البلوكشين للعكس.

وهذا يجعل الوقاية أهم بكثير من الإصلاح بعد وقوع الضرر.

قد تؤدي ثغرة إعادة الدخول إلى استنزاف مجمعات السيولة والخزائن والجسور وأنظمة التخزين وأسواق NFT وعقود المكافآت وبروتوكولات الإقراض.

وقد تضر بثقة المستخدمين حتى إذا استُرد المبلغ المسروق لاحقاً.

في مجال الكريبتو، لا تقتصر مخاطر العقود الذكية على المطورين.

فقد تتحول في الوقت نفسه إلى مشكلة للمستخدمين والسيولة والحوكمة والسمعة.

إعادة الدخول التقليدية

تحدث إعادة الدخول التقليدية عندما يعاود المهاجم الدخول إلى الدالة نفسها التي أجرت الاستدعاء الخارجي.

والمثال الأكثر شيوعاً هو دالة سحب معرضة للثغرات.

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

يتلقى عقد المهاجم الأموال ويستدعي دالة السحب نفسها مجدداً قبل خفض الرصيد.

وهذا ينشئ حلقة يمكن فيها استخدام الرصيد المسجل نفسه أكثر من مرة.

يسهل فهم إعادة الدخول التقليدية، لكنها تظل خطيرة لأن المطورين يواصلون أحياناً تنفيذ الاستدعاءات الخارجية قبل الأوان.

كما أنها خطيرة لأن محاسبة العقود الحديثة غالباً ما تكون أكثر تعقيداً من ربط بسيط بين الإيداعات وعمليات السحب.

فقد تشمل الدالة المعرضة للثغرات الحصص أو مراكز الديون أو مضاعفات المكافآت أو أصول الخزائن أو توكنات السيولة أو حساب الرسوم.

وحتى إذا اختلف النمط عن المثال التقليدي، فقد تظل المشكلة الأساسية قائمة.

إعادة الدخول بين الدوال

تحدث إعادة الدخول بين الدوال عندما يعاود المهاجم الدخول إلى دالة مختلفة في العقد نفسه.

وهذا أدق من إعادة الدخول التقليدية، لأن الدالة المستهدفة قد تبدو آمنة عند مراجعتها وحدها.

فقد تبدأ دالة ما عملية سحب وتجري استدعاءً خارجياً.

وأثناء ذلك الاستدعاء، قد يستدعي المهاجم دالة أخرى تعتمد على حالة الرصيد أو الحصة أو الصلاحية نفسها.

إذا لم تكن الدالة الأولى قد انتهت من تحديث الحالة، فقد ترى الدالة الثانية معلومات قديمة.

وقد يسمح ذلك للمهاجم بالمطالبة بالمكافآت أو نقل الحصص أو اقتراض الأصول أو تغيير مركز قبل اكتمال الإجراء الأول.

وتوضح إعادة الدخول بين الدوال ضرورة تفكير المطورين في ثوابت العقد ككل، بدلاً من حماية دالة السحب الواضحة وحدها.

ثابت العقد هو قاعدة ينبغي أن تظل صحيحة قبل كل عملية صالحة وبعدها.

إذا أمكن للاستدعاءات الخارجية الإخلال مؤقتاً بثابت ما، فقد تتحول دوال أخرى إلى مسارات للهجوم.

إعادة الدخول بين العقود

تحدث إعادة الدخول بين العقود عندما يمر مسار الاستدعاء اللاحق عبر عدة عقود.

وقد يحدث ذلك في أنظمة DeFi التي تتفاعل فيها الخزائن والاستراتيجيات والموجهات وعقود التوكنات وقارئات أوراكل ووحدات التخزين وموزعو المكافآت.

فقد تستدعي خزنةٌ استراتيجيةً.

وقد تستدعي الاستراتيجية توكناً أو بروتوكولاً آخر.

وقد يؤدي العقد المستدعى إلى تشغيل استدعاء لاحق يعيد الوصول إلى الخزنة أو إلى عقد ذي صلة تعتمد عليه الخزنة.

وقد لا تكون الحالة المعرضة للثغرات في العقد نفسه الذي أجرى الاستدعاء الخارجي الأول.

وتشير اعتبارات الأمان في Solidity إلى أن إعادة الدخول لا تنتج عن تحويلات Ether وحدها، وأنه ينبغي أيضاً مراعاة الحالات التي تشمل عدة عقود.

ويكتسب ذلك أهمية لأن تطبيقات الكريبتو الحديثة قابلة للتركيب بدرجة كبيرة.

تتيح قابلية التركيب للبروتوكولات الاتصال والبناء بعضها على بعض، لكنها تنشئ أيضاً مزيداً من المسارات للاستدعاءات اللاحقة غير المتوقعة.

إعادة الدخول للقراءة فقط

تحدث إعادة الدخول للقراءة فقط عندما تعيد دالة عرض أو قراءة معلومات مضللة أثناء انتقال غير مكتمل للحالة.

قد يبدو ذلك غير ضار في البداية لأن دوال العرض لا تعدل الحالة مباشرةً.

لكن العقود الأخرى قد تستخدم دوال العرض لحساب الأسعار أو الحصص أو قيم الضمانات أو أسعار الصرف أو مبالغ المكافآت.

إذا حدث استدعاء لاحق أثناء وجود عقد في حالة وسيطة، فقد تعيد دالة العرض قيمة مؤقتة لا ينبغي الوثوق بها.

وقد يستغل المهاجم تلك القيمة المؤقتة في عقد آخر يعتمد عليها.

وقد يؤدي ذلك إلى تلاعب شبيه بالتلاعب بالأوراكل أو إلى أخطاء محاسبية، من دون استنزاف العقد الأول مباشرةً عبر دالة سحب عادية.

تذكّرنا إعادة الدخول للقراءة فقط بأن الأمان لا يتعلق فقط بكتابة الدالة إلى التخزين.

بل يتعلق أيضاً بإمكانية اطلاع العقود الأخرى على حالة غير مكتملة واتخاذ قرارات مالية بناءً عليها.

إعادة الدخول القائمة على الخطافات

تحدث إعادة الدخول القائمة على الخطافات عندما تستدعي معايير التوكنات أو واجهات البروتوكولات عمداً منطق المستلِم أثناء التحويل أو العملية.

تتضمن بعض معايير التوكنات وNFT خطافات للمستلِم تتيح للعقود الاستجابة عند استلام الأصول.

كما تستخدم أنظمة القروض السريعة استدعاءات لاحقة كي يتمكن المقترض من استخدام السيولة المقترضة وسدادها ضمن المعاملة نفسها.

هذه الخطافات مفيدة، لكنها تتيح أيضاً فرصاً للاستدعاء اللاحق.

إذا افترض العقد أن تحويل التوكن إجراء بسيط لا يشغل أي كود خارجي، فقد يكون هذا الافتراض خاطئاً.

فقد يؤدي التحويل إلى تشغيل منطق المستلِم أو خطافات المشغل أو سلوك عقد آخر، حسب معيار التوكن وطريقة تنفيذه.

ينبغي للمطورين مراجعة كل تفاعل خارجي مع التوكن بوصفه نقطة محتملة لإعادة الدخول.

ويكتسب ذلك أهمية خاصة للعقود التي تدعم توكنات كثيرة أو أصول خزائن متعددة أو تكاملات خارجية عديدة.

الأهداف الشائعة لهجمات إعادة الدخول

تُعد دوال السحب أكثر أهداف إعادة الدخول شيوعاً، لأنها غالباً ما ترسل الأموال خارج العقد.

كما تُستهدف دوال الإيداع والسحب في الخزائن كثيراً، لأنها تحدث أرصدة الحصص ومحاسبة الأصول.

وقد تكون بروتوكولات الإقراض مستهدفة لأنها تتعقب الضمانات والديون والفوائد وحدود التصفية والأرصدة المقترضة.

وقد تُستهدف عقود التخزين لأنها تحسب المكافآت بمرور الوقت وقد تنقل توكنات المكافآت عند المطالبة بها.

وقد تُستهدف أسواق NFT لأن عمليات الشراء والمدفوعات قد تشغل خطافات مستلمي التوكنات أو منطق حقوق ملكية خارجياً.

وقد تُستهدف عقود الجسور لأنها تدير الرسائل العابرة للسلاسل وقفل الأصول وإطلاقها.

وقد تُستهدف عقود تنفيذ الحوكمة لأنها تستدعي عقوداً خارجية أثناء تنفيذ المقترحات.

وقد تُستهدف العقود التي تستقبل القروض السريعة ومزودوها، لأن تصميمها يعتمد على الاستدعاءات اللاحقة.

ينبغي اعتبار أي عقد ذكي يرسل قيمة أو يستدعي كوداً غير موثوق قبل إكمال محاسبته الداخلية هدفاً محتملاً لإعادة الدخول.

نمط Checks-Effects-Interactions

يُعد نمط Checks-Effects-Interactions أحد أهم وسائل الحماية من هجمات إعادة الدخول.

تعني Checks أن يتحقق العقد أولاً من أهلية المستخدم لتنفيذ الإجراء.

وتعني Effects أن يحدث العقد حالته الداخلية قبل إجراء أي استدعاء خارجي.

أما Interactions، فتعني أن العقد يجري الاستدعاءات الخارجية بعد اكتمال عمليات التحقق وتحديث الحالة فقط.

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

وبذلك، إذا حاول المستلم إعادة الدخول، يكون العقد قد سجل الرصيد المحدث بالفعل.

تشرح وثائق Solidity عن نمط Checks-Effects-Interactions أنه أسلوب شائع للوقاية من هجمات إعادة الدخول.

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

ينبغي للمطورين اعتماده عادةً افتراضية كلما غيرت دالة الحالة وأجرت استدعاءً خارج العقد.

حواجز إعادة الدخول

حاجز إعادة الدخول هو قفل يمنع الدخول إلى دالة محمية مرة أخرى قبل انتهاء الاستدعاء الأول.

وغالباً ما يُنفذ ذلك في عقود Solidity باستخدام متغير حالة يحدد أن الدالة قيد التنفيذ.

إذا حاول استدعاء يعيد الدخول الوصول إلى المسار المحمي نفسه، يرفضه الحاجز.

تصف وثائق ReentrancyGuard في OpenZeppelin Contracts 5.x الوحدة بأنها توفر معدِّل nonReentrant لمنع الاستدعاءات المتداخلة التي تعيد الدخول.

تُعد حواجز إعادة الدخول مفيدة لأنها تضيف طبقة حماية واضحة إلى الدوال عالية المخاطر.

لكن الحاجز لا يغني عن صحة المحاسبة.

وينبغي للمطورين الاستمرار في استخدام نمط Checks-Effects-Interactions ومراجعة جميع الاستدعاءات الخارجية.

وتشير OpenZeppelin أيضاً إلى أنه نظراً إلى وجود حاجز nonReentrant واحد، لا يمكن للدوال المحددة به استدعاء بعضها مباشرةً.

ومن الحلول الشائعة جعل المنطق الداخلي خاصاً وإتاحة نقاط دخول خارجية منفصلة محمية بالمعدِّل nonReentrant.

التخزين المؤقت وأقفال إعادة الدخول

التخزين المؤقت ميزة أحدث في EVM تتيح استخدام قيم مؤقتة لا تستمر إلا خلال معاملة واحدة.

وقد يكون مفيداً لأقفال إعادة الدخول، لأن القفل لا يحتاج دائماً إلى البقاء في التخزين الدائم بعد انتهاء الاستدعاء.

تصف وثائق ReentrancyGuardTransient من OpenZeppelin إصداراً من ReentrancyGuard يستخدم التخزين المؤقت على الشبكات التي تدعم EIP-1153.

وتذكر وثائق Solidity عن التخزين المؤقت أن استخدامه لأقفال إعادة الدخول التي تُمسح عند نهاية إطار الاستدعاء آمن.

لكن هذا لا يعني أن على كل عقد استخدام التخزين المؤقت تلقائياً.

يجب على المطورين التأكد من أن الشبكة المستهدفة تدعم الميزة المطلوبة وأن القفل يُمسح على النحو الصحيح.

وقد يؤدي سوء إدارة القفل إلى الإضرار بقابلية التركيب أو جعل استخدام العقد صعباً في المعاملات المعقدة.

يعتمد الخيار الأفضل على بلوكشين الوجهة وإصدار المترجم وإصدار المكتبة ونمط الترقية ومتطلبات التدقيق.

لماذا لا يوفر Transfer وSend حماية كاملة؟

كانت إرشادات Solidity القديمة تعتبر التحويلات محدودة الغاز وسيلة عملية للحد من إعادة الدخول.

لكن الإرشادات الحديثة أكثر حذراً، لأن تكاليف الغاز وسلوك EVM قد يتغيران بمرور الوقت.

تحذر وثائق أعضاء العناوين في Solidity من أن send وtransfer مهجورتان وتوصي بوسائل أخرى للحماية من إعادة الدخول.

وتكمن أهمية ذلك في أن الاعتماد على مخصص الغاز وحده قد يخلق شعوراً زائفاً بالأمان.

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

والنهج الأكثر أماناً هو تحديث الحالة قبل الاستدعاءات الخارجية واستخدام حواجز إعادة الدخول عند الاقتضاء والتحقق من القيم المعادة وتصميم مسارات السحب بعناية.

كما ينبغي للمطورين مراجعة الأكواد القديمة التي لا تزال تعتمد على transfer أو send باعتبارهما وسيلة الحماية الأساسية من إعادة الدخول.

تتغير ممارسات أمن الكريبتو مع تطور قواعد البروتوكولات وتكاليف الغاز وأساليب الهجوم الشائعة.

المدفوعات بالسحب كوسيلة دفاع

يتيح نمط الدفع بالسحب للمستلمين سحب الأموال بأنفسهم بدلاً من أن يرسلها العقد إليهم أثناء عملية أخرى.

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

فعلى سبيل المثال، قد يسجل السوق عائدات البائع بدلاً من إرسال الأموال إليه ضمن معاملة شراء المشتري.

ثم يستدعي البائع لاحقاً دالة سحب للمطالبة بالأموال.

وقد يحد هذا النمط من الضرر الذي قد يسببه مستلم خبيث يرفض المدفوعات أو يحاول إعادة الدخول أثناء الدفع.

تصف وثائق أدوات الأمان في OpenZeppelin نمط PullPayment بأنه وسيلة يمكن أن تساعد على تجنب هجمات إعادة الدخول.

ليست المدفوعات بالسحب مثالية لكل تصميم، لأنها قد تضيف خطوات أخرى للمستخدم.

لكنها قد تكون مفيدة جداً عندما يحتاج عدد كبير من المستخدمين أو العقود إلى تلقي مدفوعات من النظام نفسه.

ضوابط الإيقاف الطارئ

تتيح آلية الإيقاف الطارئ للحسابات المخولة أو أنظمة الحوكمة إيقاف الدوال الحساسة مؤقتاً أثناء وقوع حادث.

وقد تساعد على الحد من الضرر عند رصد سلوك مريب أو احتمال استغلال ثغرة إعادة دخول.

وقد توقف وظيفة الإيقاف الإيداعات أو السحوبات أو المطالبة بالمكافآت أو القروض الجديدة أو غيرها من الإجراءات عالية المخاطر أثناء التحقيق.

وتدرج OpenZeppelin آلية Pausable بوصفها وسيلة شائعة للاستجابة الطارئة تتيح إيقاف الوظائف مؤقتاً إلى حين تنفيذ المعالجة.

ينبغي تصميم نظام الإيقاف بعناية، لأنه ينطوي على مفاضلات تتعلق بالحوكمة والمركزية.

إذا كانت صلاحية الإيقاف واسعة أكثر من اللازم، فقد يقلق المستخدمون من الرقابة أو إساءة الاستخدام.

وإذا كانت الصلاحية محدودة جداً أو بطيئة، فقد لا تفيد أثناء هجوم جارٍ.

ينبغي أن يكون التخطيط للاستجابة للطوارئ جزءاً من التصميم الأمني منذ البداية في بروتوكولات الكريبتو ذات القيمة العالية.

كيفية اكتشاف المطورين لمخاطر إعادة الدخول

يمكن للمطورين اكتشاف مخاطر إعادة الدخول بمراجعة كل استدعاء خارجي في العقد.

تشمل الاستدعاءات الخارجية تحويل العملة الأصلية وتحويل التوكنات والاستدعاءات منخفضة المستوى واستدعاءات الواجهات وعمليات الاستدعاء اللاحق للقروض السريعة وخطافات مستلمي NFT واستدعاءات وحدات البروتوكول.

وعلى المطورين التحقق، عند كل استدعاء خارجي، مما إذا كانت الحالة الداخلية قد حُدثت بالفعل.

كما ينبغي التحقق مما إذا كان من الممكن استدعاء دالة أخرى أثناء الاستدعاء الخارجي ورؤية حالة قديمة.

وعليهم مراجعة ما إذا كانت عدة عقود تعتمد على افتراضات مشتركة يمكن أن يخل بها استدعاء لاحق.

وينبغي اختبار عقود مستلِمة خبيثة تحاول استدعاء كل دالة عامة وخارجية من جديد.

وعليهم استخدام التحليل الثابت واختبارات Fuzz والاختبارات الوحدوية واختبارات الثوابت والمراجعة اليدوية معاً.

تتضمن وثائق SMTChecker في Solidity خصائص إعادة الدخول ضمن أنواع السلوك التي يمكن تحليلها عند الاستدعاء الخارجي لكود غير معروف.

لا تستطيع أداة واحدة ضمان أمان العقد.

ويكون اكتشاف إعادة الدخول أكثر فاعلية عند الجمع بين الأدوات المؤتمتة ومراجعة أمنية يجريها خبراء متمرسون.

كيف يفكر المستخدمون في مخاطر إعادة الدخول

لا يستطيع معظم المستخدمين تدقيق العقد الذكي بالكامل قبل استخدامه.

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

ينبغي للبروتوكول تقديم معلومات واضحة عن عمليات التدقيق وبرامج مكافآت اكتشاف الأخطاء وضوابط الطوارئ وصلاحيات الترقية والإفصاحات عن المخاطر.

وينبغي للمستخدمين الحذر من العقود الجديدة التي تحتفظ بقيمة كبيرة من دون مراجعة عامة تُذكر.

كما ينبغي الحذر عندما يقدم البروتوكول عوائد مرتفعة على نحو غير معتاد من دون شرح مصدرها ومخاطر العقود الذكية.

قد توجد مخاطر إعادة الدخول حتى عندما تبدو واجهة المستخدم مصقولة واحترافية.

فالواجهة الجيدة لا تثبت سلامة منطق العقد الأساسي.

وينبغي تجنب إيداع مبالغ تتجاوز ما يمكن للمستخدم تحمل خسارته في عقود غير مدققة أو تجريبية.

كما ينبغي إدراك أن عمليات التدقيق تقلل المخاطر لكنها لا تلغيها تماماً.

إعادة الدخول وقابلية تركيب DeFi

تعني قابلية تركيب DeFi إمكانية اتصال العقود الذكية بعضها ببعض مثل اللبنات المالية.

وهذه من أقوى ميزات الكريبتو، لأنها تتيح للمحافظ والخزائن وأسواق الإقراض والمبادلات والمشتقات وأنظمة التخزين وأدوات الحوكمة التفاعل فيما بينها.

لكن قابلية التركيب تزيد أيضاً مخاطر إعادة الدخول، لأن المعاملة الواحدة قد تمر عبر عقود كثيرة.

وقد يؤدي إجراء يبدو آمناً في عقد ما إلى تشغيل سلوك معقد في عقد آخر.

وقد يصل الاستدعاء اللاحق إلى عقد ثالث يغير قيمة يعتمد عليها العقد الأول.

وقد يُقرأ سعر أو قيمة حصة أو رصيد أثناء حالة مؤقتة لم يُقصد إتاحتها للجهات الخارجية.

لذلك، ينبغي أن يشمل تحليل إعادة الدخول الحديث مسار التفاعل كاملاً.

وعلى المطورين ألا يراجعوا كل عقد كما لو كان يعمل منفرداً.

بل ينبغي مراجعة سلوك العقود عند دمجها مع الموجهات والتوكنات والخزائن والقروض السريعة والاستراتيجيات الخارجية.

إعادة الدخول والقروض السريعة

قد تجعل القروض السريعة هجمات إعادة الدخول أكثر قوة، لأنها تتيح للمهاجمين الوصول إلى سيولة مؤقتة كبيرة ضمن معاملة واحدة.

القرض السريع بحد ذاته ليس هجوماً لإعادة الدخول.

بل هو أداة يمكن استخدامها للمراجحة المشروعة وإعادة التمويل والتصفية والعمليات الكفؤة في استخدام رأس المال.

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

وتتطلب الاستدعاءات اللاحقة للقروض السريعة تصميماً دقيقاً أيضاً، لأن الأنظمة القائمة على الاستدعاء تمنح التحكم عمداً لعقد آخر.

ينبغي للمطورين التعامل مع كل استدعاء لاحق باعتباره استدعاءً خارجياً غير موثوق، ما لم يوجد سبب قوي لغير ذلك.

وعليهم تحديث الحالة قبل الاستدعاءات اللاحقة متى أمكن، والتحقق من السداد النهائي والأرصدة والثوابت بعد عودة الاستدعاء.

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

إعادة الدخول والعقود القابلة للترقية

تتطلب العقود القابلة للترقية عناية خاصة عند استخدام وسائل الحماية من إعادة الدخول.

يفصل البروكسي القابل للترقية بين مساحة التخزين التي تتعامل معها الواجهة ومنطق التنفيذ.

إذا استخدم حاجز إعادة الدخول التخزين، فيجب على المطورين التأكد من صحة تخطيط التخزين وتوافقه عبر الترقيات.

وقد يؤدي تغيير تخطيط التخزين على نحو غير صحيح إلى تعطيل الحاجز أو إفساد متغيرات حالة مهمة.

وينبغي استخدام مكتبات متوافقة مع العقود القابلة للترقية عند بنائها.

كما ينبغي اختبار الترقيات بالاستناد إلى حالات العقود السابقة، لا الاكتفاء باختبار عمليات النشر الجديدة.

فقد يكون العقد آمناً في نسخته الأولى، ثم يصبح معرضاً للثغرات بعد أن تغير ترقية لاحقة ترتيب الاستدعاءات أو تضيف تكاملاً خارجياً جديداً.

وينبغي أن تشمل مراجعات الترقية تحليل إعادة الدخول لكل استدعاء خارجي جديد.

كما ينبغي أن تتضمن أنظمة الحوكمة أو الإدارة التي تنفذ الترقيات تأخيراً ومراجعة وضوابط طوارئ عندما يحتفظ البروتوكول بقيمة معتبرة.

أفضل الممارسات للوقاية من هجمات إعادة الدخول

حدّث الحالة الداخلية قبل إجراء الاستدعاءات الخارجية.

استخدم نمط Checks-Effects-Interactions في عمليات السحب والمطالبة والتحويل والمبادلة وتغييرات المحاسبة.

طبّق حاجز إعادة الدخول على نقاط الدخول الخارجية عالية المخاطر.

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

لا تعتمد فقط على حدود الغاز في transfer أو send كوسيلة دفاع ضد إعادة الدخول.

استخدم نمط الدفع بالسحب عندما تنطوي المدفوعات المباشرة على مخاطر لا داعي لها.

راجع إعادة الدخول بين الدوال والعقود، لا إعادة الدخول التقليدية إلى الدالة نفسها فحسب.

اختبر باستخدام عقود مستلِمة خبيثة تحاول إعادة الدخول أثناء كل استدعاء خارجي.

استخدم اختبارات الثوابت للتأكد من بقاء إجمالي الأرصدة والحصص والديون والاحتياطيات صحيحاً خلال التفاعلات المعقدة.

ضع خططاً للإيقاف الطارئ والاستجابة للحوادث في الأنظمة ذات القيمة العالية.

احصل على مراجعة أمنية مستقلة قبل نشر عقود تحتفظ بأموال المستخدمين.

حافظ على تحديث الاعتماديات وراجع ملاحظات ترحيل المكتبات قبل تغيير الإصدارات الرئيسية.

أخطاء شائعة يرتكبها المطورون

من الأخطاء الشائعة تحديث الأرصدة بعد إرسال الأموال.

ومنها أيضاً حماية دالة السحب وحدها مع ترك الدوال المرتبطة مفتوحة لإعادة الدخول بين الدوال.

ومنها افتراض أن تحويل التوكن لا يستطيع تنفيذ كود خارجي.

ومنها استخدام حاجز إعادة الدخول في عقد واحد مع تجاهل الاستدعاءات إلى العقود المرتبطة التي تتشارك افتراضات محاسبية.

ومنها الاعتماد على الافتراضات القديمة بشأن transfer وsend بدلاً من تصميم منطق الحالة على نحو صحيح.

ومنها إضافة تكامل خارجي جديد أثناء الترقية من دون إعادة التحقق من مسار الاستدعاء كاملاً.

ومنها اعتبار دوال العرض غير ضارة، حتى عندما تعتمد عقود أخرى على قيمها أثناء المعاملات المعقدة.

ومنها نسيان أن العقود الخبيثة قد تتصرف عمداً على نحو مختلف عن المستخدمين العاديين.

ينبغي أن تفترض الاختبارات الأمنية سلوكاً عدائياً، لا استخداماً عادياً للواجهة فحسب.

الأسئلة الشائعة

ما المقصود بهجوم إعادة الدخول؟

هجوم إعادة الدخول هو استدعاء عقد خبيث لعقد ذكي معرض للثغرات قبل اكتمال الاستدعاء الأول وقبل تحديث الحالة بأمان.

لماذا تعد إعادة الدخول خطيرة في الكريبتو؟

تعد خطيرة لأنها قد تتيح للمهاجمين استنزاف الأموال أو المطالبة بالمكافآت مرات متعددة أو التلاعب بالمحاسبة أو الإخلال بافتراضات العقد ضمن معاملة واحدة.

هل ترتبط إعادة الدخول بتحويلات ETH فقط؟

لا. تحذر وثائق Solidity من أن إعادة الدخول لا تقتصر على تحويلات Ether، إذ قد ينشأ خطر الاستدعاء اللاحق عن أي استدعاء لعقد خارجي.

ما أشهر وسيلة دفاع ضد إعادة الدخول؟

يُعد نمط Checks-Effects-Interactions من أشهر وسائل الدفاع، لأنه يحدث حالة العقد قبل إجراء الاستدعاءات الخارجية.

ما ReentrancyGuard؟

ReentrancyGuard أداة للعقود الذكية توفر المعدِّل nonReentrant لمنع الاستدعاءات المتداخلة إلى الدوال المحمية.

هل يمنع ReentrancyGuard جميع أخطاء إعادة الدخول؟

لا. يساعد ReentrancyGuard على حماية بعض نقاط الدخول، لكن المطورين يظلون بحاجة إلى محاسبة صحيحة وترتيب آمن للاستدعاءات ومراجعة العقود المتفاعلة.

ما إعادة الدخول بين الدوال؟

تحدث إعادة الدخول بين الدوال عندما يعاود المهاجم الدخول إلى دالة مختلفة في العقد نفسه بينما لا تزال الدالة الأولى قيد التنفيذ.

ما إعادة الدخول للقراءة فقط؟

تحدث إعادة الدخول للقراءة فقط عندما تعيد دالة عرض حالة مؤقتة مضللة أثناء عملية غير مكتملة، ويعتمد عقد آخر على تلك القيمة.

هل يمكن أن تسبب تحويلات التوكنات إعادة الدخول؟

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

هل ينبغي للمستخدمين تجنب جميع العقود الذكية بسبب إعادة الدخول؟

لا، لا يحتاج المستخدمون إلى تجنب جميع العقود الذكية، لكن ينبغي تفضيل البروتوكولات ذات التدقيق القوي والوثائق الواضحة والمراقبة النشطة وضوابط المخاطر المسؤولة.

الخاتمة

هجوم إعادة الدخول استغلال لعقد ذكي يستفيد من حالة غير مكتملة أثناء استدعاء خارجي.

يعيد المهاجم الدخول إلى العقد المعرض للثغرات قبل اكتمال الاستدعاء الأول، ويستغل بيانات المحاسبة القديمة للحصول على قيمة أكبر مما هو مسموح.

وعلى الرغم من أن المثال التقليدي يتمثل في تكرار السحب، فقد تشمل إعادة الدخول الحديثة أيضاً الاستدعاءات بين الدوال والعقود، والحالات المقروءة فقط، وخطافات التوكنات، والاستدعاءات اللاحقة للقروض السريعة، وقابلية تركيب DeFi.

والدرس الأساسي هو التعامل مع كل استدعاء خارجي على أنه احتمال لتسليم التحكم إلى كود غير موثوق.

يمكن للمطورين تقليل مخاطر إعادة الدخول باتباع نمط Checks-Effects-Interactions واستخدام حواجز إعادة الدخول وتجنب أنماط الدفع غير الآمنة واختبار الاستدعاءات اللاحقة الخبيثة ومراجعة مسارات التفاعل الكاملة بين العقود.

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

تظل إعادة الدخول مفهوماً رئيسياً في أمن الكريبتو، لأنها تحول خطأً بسيطاً في ترتيب المنطق إلى استغلال مالي قد يكون بالغ الخطورة.

يساعد فهم إعادة الدخول المطورين على بناء عقود أكثر أماناً، ويساعد المستخدمين على إدراك أهمية تدقيق العقود الذكية والأنماط الأمنية وضوابط المخاطر.
BTC ETFs See $679M in Outflows
BTC ETFs See $679M in OutflowsBTC ETFs See $679M in Outflows
Citi sees BTC at $113K. What do institutions see?