مشكلات الأمان المحتملة مع ERC777 وعقود المكالمات التعسفية

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

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

في الجزء الأخير من المقالة ، سيتم شرح النتائج التي توصلنا إليها مؤخرًا.

وصف موجز لمتجه الهجوم

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

ERC777 وخطافها

ما هو ERC777

يعتبر ERC777 أحد معايير الرمز المميز مع خطاف النقل. ها هو وصف EIP: ، وهنا ممارسة ERC777 [4] 。

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

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

فيما يلي قائمة ببعض رموز ERC777 مع بعض السيولة على شبكة Ethereum mainnet:

! [Kp6OQ2xMxjKs5X4G5V33hmMqR8TSwawzldCaPOtL.png] (https://img-cdn.gateio.im/social/moments-40baef27dd-6b9d566d85-dd1a6f-62a40f "7057752")

** عندما يحدث الخطاف **

توكنات ERC20 تقوم ببساطة بتحديث الأرصدة أثناء عمليات النقل. لكن توكنات ERC777 تفعل هذا:

  1. قم بإجراء مكالمة هوك إلى عنوان بادئ الرمز المميز

  2. تحديث الرصيد

  3. قم بإجراء مكالمة ربط إلى عنوان مستقبل الرمز المميز

هذا موضح جيدًا في رمز VRA:

مصدر الرمز:

الآن ، دعنا نفحص رمز هذه المكالمات:

كما رأيتم:

  1. تقرأ هذه الوظيفة عقدًا يسمى المنفذ من _ERC1820_REGISTRY
  2. إذا وجدت الوظيفة منفذًا ، يتم استدعاء هذا المنفذ.

دعنا نستكشف هذا السجل ونرى ما هي المنفذين.

التسجيل والمنفذين

جميع الرموز المميزة لـ ERC777 مرتبطة بعقد السجل:

يتم استخدام هذا العنوان بواسطة رموز ERC777 لتخزين مجموعة مستلمي الخطاف. تسمى مستقبلات الخطاف هذه "منفذي الواجهة".

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

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

يمكنها أيضًا اختيار تطبيقات واجهة مختلفة لرموز مختلفة في معظم الحالات.

يتم تخزين هذه التفضيلات في هذا التسجيل المعين:

_interfaceHash هو معرف منفذ الواجهة الذي اختاره أليس لحدث ما.

ويمكن لأي شخص قراءة أداة تنفيذ واجهة Alice بهذه الوظيفة:

كما ترى ، هذه هي الوظيفة التي واجهناها سابقًا في كود VRA.

يتم استخدام المتغير _TOKENS_SENDER_INTERFACE_HASH كـ _interfaceHash ، والذي يمكن أن يكون أي بايت. لكن رمز VRA يستخدم هذه البايتات لتحديد هذا النوع من الخطاف:

تلقي هوك

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

يجب عليها أيضًا تحديد _interfaceHash. ستحصل على هذا _TOKENS_SENDER_INTERFACE_HASH من رمز VRA المميز.

هناك تفصيل أكثر أهمية.

بعد إعداد المنفذ لـ VRA أعلاه ، ستدرك أليس أيضًا أنه حتى إذا تم نقل رموز ERC777 الأخرى ، فسيستقبل بوب المكالمة. مثل IMBTC [5] ، يحتوي imBTC على نفس _interfaceHash على الرموز المميزة المرسلة.

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

كيفية العثور على رموز ERC777

استدعاء التسجيل هو ميزة لجميع ERC777s. حتى نتمكن من تجربة dune.com [6] لاستدعاء جميع العقود الذكية التي تستدعي التسجيل.

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

ملاحظة المترجم: جدول آثار الكثبان الرملية [7] سيتم تسجيل سجل المكالمة الداخلية للمعاملة.

هل هذا التسجيل هو الاحتمال الوحيد؟

من الناحية النظرية ، لا يمكن لأحد أن يضمن حدوث بعض الرموز المميزة لاستخدام هذا العقد 0x1820 كسجل. لكن يمكننا استخدام dune.com [8] تعال تحقق.

تقوم بإرجاع هذه العناوين

0x1820a4b7618bde71dce8cdc73aab6c95905fad24 0xc0ce3461c92d95b4e1d3abeb5c9d378b1e418030 0x820c4597fc3e4193282576750ea4fcfe34ddf0a7

لقد تحققنا من أن 0x1820 هو السجل الوحيد الذي يحتوي على رموز ERC777 المميزة. الرموز المميزة للسجلات الأخرى ليست ذات قيمة.

الوضع العام للرموز القابلة للتوصيل

ERC777 ليس معيارًا مع الخطافات فقط. أيضًا ERC223 أو ERC995 أو ERC667. إنهم ليسوا غير عاديين. يجب أن تكون قد سمعت عن رمز LINK الذي يقوم بتنفيذ ERC667 [9] 。

هجوم متجه باستخدام استدعاء تعسفي

هذا هو ناقل هجوم تم اكتشافه مؤخرًا لأحد عملائنا.

يفترض الباحثون عمومًا أن الرموز المميزة ERC777 تُجري مكالمات للمتصلين والمستلمين. ولكن في الواقع ، يمكن للبادئ والمستقبل اختيار أي "بوب" ليكون مستقبل الخطاف.

لذا تخيل ماذا يحدث عند دمجها مع تلك العقود التي تقوم بإجراء مكالمات عشوائية إلى أي عنوان بأي بيانات؟

هناك وظائف استدعاء عشوائية يمكن استخدامها على نطاق واسع في مجمعات DEX والمحافظ والعقود متعددة المكالمات.

ملاحظة المترجم: تعني وظيفة الاستدعاء التعسفي أن هناك وظيفة مثل هذه في العقد:

وظيفة ute (عنوان الهدف ، قيمة uint ، توقيع ذاكرة السلسلة ، بيانات ذاكرة بايت ، uint eta) الدفع العام ؛

يمكنه استدعاء أي طريقة أخرى.

طريقة الهجوم:

  1. يجد المهاجم عقدًا مستهدفًا (هدفًا) يسمح باستدعاءات دالة عشوائية
  2. يدعو المهاجم الهدف:
  3. registy1820.setInterfaceImplementer (Target، hookHash، Attacker)
  4. الآن ، مهاجمنا هو منفذ الهدف
  5. سيتم استدعاء المهاجم باستخدام hookHash المستخدم في رمز ERC777.
  6. عندما يتلقى العقد المستهدف (الهدف) رموز ERC777 ، سيتلقى المهاجم مكالمة هوك.
  7. تختلف الهجمات التالية حسب كود الهدف:
  • يمكن للمهاجم العودة عندما ينفذ بعض المستخدمين وظائف في العقد المستهدف
  • يمكن للمهاجم التراجع مباشرة ، بحيث يتم استعادة معاملة المستخدم مباشرة

إذا قام مجمع DEX بحساب أن أفضل مسار تحويل يكون من خلال زوج تداول DEX مع رموز ERC777 ، فقد يواجه مشكلات.

يحمي

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

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

الحديث من التجربة

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

وبهذا المعنى ، يجب أن تأخذ المشاريع التي تسمح بالمكالمات التعسفية عناية خاصة وأن تأخذ في الاعتبار ناقل هجوم آخر لـ ERC777.

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • تعليق
  • مشاركة
تعليق
0/400
لا توجد تعليقات
  • تثبيت