وفقًا للتحذير الأمني لنظام SlowMist MistEye، في 7 أكتوبر 2023، تعرض البروتوكول الاجتماعي لسلسلة Avalanche للهجوم على Stars Arena، مما تسبب في خسارة ما يقرب من 2.9 مليون دولار أمريكي. قام فريق أمان SlowMist بتحليل حادث الهجوم لفترة وجيزة وشارك النتائج على النحو التالي.
معلومات ذات صله
عنوان المهاجم:
عقد الهجوم:
معاملة الهجوم:
** قلب الهجوم **
يستغل المهاجم ثغرة إعادة الدخول للتلاعب بالسعر المقابل لحصة الإيداع الخاصة به. في وقت لاحق، عند البيع، حدث تلاعب مماثل في الأسعار بسبب اعتماد حساب السعر على التلاعب الضار. من خلال حساب سعر السهم المحدث بدقة عند إعادة الدخول، يسرق المهاجم الأموال من العقد.
تحليل المعاملات
يمكننا أن نجد أن هناك مكالمة إعادة دخول في معاملة الهجوم، ونقوم بتحليل طريقة الاتصال تدريجيًا عن طريق فك التعليمات البرمجية.
قام المهاجم أولاً بإنشاء عقود هجوم (0x7f283 و0xdd9af)، تسمى طريقة 0xe9ccf3a3 الخاصة بـ Stars Arena: عقد الأسهم من خلال عقد الهجوم، ثم قام بإيداع رمز AVAX واحد.
وفقًا لتتبع التعليمات البرمجية التي تم فك ترجمتها خطوة بخطوة، فإن طريقة 0xe9ccf3a3 التي استخدمها المهاجم لأول مرة هي وظيفة مشابهة للإيداع، والتي تستدعي الطريقتين 0x326c و0x2058. الطريقة 0x326c هي مجرد استدعاء يتم إرجاعه كمعلمة، بينما الطريقة 0x2058 تشبه وظيفة تتعامل مع شراء أو تبادل رمز معين، تستخدم هذه الطريقة مبلغ رمز AVAX والعنوان الذي تم تمريره في 0xe9ccf3a3 لتنفيذ العملية التالية والمشاركة والرسوم.احسب.
باتباع منطق الاتصال للسطر 92 من طريقة 0x2058، نجد أن طريقة 0x1a9b هي دالة حسابية، والنتيجة المحسوبة هي قيمة مشابهة للسعر، وقيمة الإرجاع الخاصة بها هي v24 / 0xde0b6b3a7640000 أو _initialPrice المحسوبة حديثًا.
توجد مكالمات اتصال منخفضة المستوى في طرق 0x307c و0x30ef في الأسطر 109 و110 و116، ولا يزال استدعاء 0x30ef بمثابة مكالمة خارجية لـ g1، وهو عنوان عقد الهجوم 0xdd9af الوارد. لا تحتوي الوظيفة على قيود قفل ضد إعادة الدخول، وبعد تنفيذ الاستدعاء الخارجي، ستنفذ هذه الطريقة حكم if اللاحق لتحديث معلمات field0.length وfield0. ليس هناك شك في أن إعادة الدخول تحدث هنا.
دعونا نلقي نظرة على البيانات التي أنشأها المهاجم في مكالمة إعادة الدخول.
الاستدعاء الخارجي لإعادة الدخول هو الأسلوب 0x5632b2e4، ويتم تمرير 4 معلمات أنشأها المهاجم. ويتم تحويل هذه المعلمات إلى 91000000000 من خلال التحويل الست عشري.
كما هو مذكور أعلاه، يتم تنفيذ الاستدعاء الخارجي للأسلوب 0x5632b2e4 قبل الحكم if (g0 == _getMyShares[address(g1)][msg.sender]). في الوقت الحالي، قيمة field0.lengt هي 0 ولم يتم تحديثها. استخدم المهاجم للتو هذه الطريقة لتجاوز الحكم في طريقة 0x5632b2e4 وقام بتغيير حالات المعلمات الأربعة التالية لـ msg.sender، وهو عقد الهجوم 0xdd9af، إلى البيانات التي تم إنشاؤها عند إجراء مكالمة خارجية.
بعد العمليات المذكورة أعلاه، اتصل المهاجم بـ SellShares لبيع حصته وحصل على 266,102.97278 AVAX.
بالتعمق في وظيفة SellShares، كانت الوظيفة تسمى أولاً طريقة 0x1a9b، وكان هناك استدعاء للطريقة السابقة 0x2058، وهي وظيفة تتولى شراء أو تبادل رموز معينة. يمكننا أن نجد أن الطريقة 0x2329 في الطريقة 0x1a9b ستقوم بتحديث المالك_9f [g0] ، وتم تعديل هذه المعلمة إلى 91000000000 التي أنشأها المهاجم أثناء إعادة الدخول.
ارجع إلى طريقة 0x1a9b وأعد الحساب بناءً على القيمة التي تم إنشاؤها مسبقًا بشكل ضار (راجع التعليقات الخاصة بمبلغ الحساب).
بعد الحساب أعلاه، تغير السعر المقابل للحصة المحسوبة حديثًا، والنتيجة المحسوبة هي 274,333.061476814e18. وبعد سلسلة من تحصيل الرسوم، استخدم المهاجم بنية خبيثة للتلاعب بالسعر دون تعديل الأسهم، وباع الأسهم وحقق ربحًا بنجاح.
لخص
يكمن جوهر هذا الهجوم في تحديث تبعية حساب السعر الناتج عن هجوم إعادة الدخول، والذي يؤدي بدوره إلى تلاعب ضار مماثل بالأسعار. يوصي فريق أمان SlowMist بأن يبذل طرف المشروع قصارى جهده للخضوع لعمليات تدقيق من قبل شركات أمنية متعددة قبل نشر العقد وإصداره؛ وفي الوقت نفسه، يجب استيفاء مواصفات ترميز Checks-Effects-Interactions قدر الإمكان عند البرمجة، وينبغي إضافة أقفال مضادة للعودة.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
Slow Mist: تحليل موجز لاختراق Stars Arena
خلفية
وفقًا للتحذير الأمني لنظام SlowMist MistEye، في 7 أكتوبر 2023، تعرض البروتوكول الاجتماعي لسلسلة Avalanche للهجوم على Stars Arena، مما تسبب في خسارة ما يقرب من 2.9 مليون دولار أمريكي. قام فريق أمان SlowMist بتحليل حادث الهجوم لفترة وجيزة وشارك النتائج على النحو التالي.
معلومات ذات صله
عنوان المهاجم:
عقد الهجوم:
معاملة الهجوم:
** قلب الهجوم **
يستغل المهاجم ثغرة إعادة الدخول للتلاعب بالسعر المقابل لحصة الإيداع الخاصة به. في وقت لاحق، عند البيع، حدث تلاعب مماثل في الأسعار بسبب اعتماد حساب السعر على التلاعب الضار. من خلال حساب سعر السهم المحدث بدقة عند إعادة الدخول، يسرق المهاجم الأموال من العقد.
تحليل المعاملات
يمكننا أن نجد أن هناك مكالمة إعادة دخول في معاملة الهجوم، ونقوم بتحليل طريقة الاتصال تدريجيًا عن طريق فك التعليمات البرمجية.
قام المهاجم أولاً بإنشاء عقود هجوم (0x7f283 و0xdd9af)، تسمى طريقة 0xe9ccf3a3 الخاصة بـ Stars Arena: عقد الأسهم من خلال عقد الهجوم، ثم قام بإيداع رمز AVAX واحد.
وفقًا لتتبع التعليمات البرمجية التي تم فك ترجمتها خطوة بخطوة، فإن طريقة 0xe9ccf3a3 التي استخدمها المهاجم لأول مرة هي وظيفة مشابهة للإيداع، والتي تستدعي الطريقتين 0x326c و0x2058. الطريقة 0x326c هي مجرد استدعاء يتم إرجاعه كمعلمة، بينما الطريقة 0x2058 تشبه وظيفة تتعامل مع شراء أو تبادل رمز معين، تستخدم هذه الطريقة مبلغ رمز AVAX والعنوان الذي تم تمريره في 0xe9ccf3a3 لتنفيذ العملية التالية والمشاركة والرسوم.احسب.
باتباع منطق الاتصال للسطر 92 من طريقة 0x2058، نجد أن طريقة 0x1a9b هي دالة حسابية، والنتيجة المحسوبة هي قيمة مشابهة للسعر، وقيمة الإرجاع الخاصة بها هي v24 / 0xde0b6b3a7640000 أو _initialPrice المحسوبة حديثًا.
توجد مكالمات اتصال منخفضة المستوى في طرق 0x307c و0x30ef في الأسطر 109 و110 و116، ولا يزال استدعاء 0x30ef بمثابة مكالمة خارجية لـ g1، وهو عنوان عقد الهجوم 0xdd9af الوارد. لا تحتوي الوظيفة على قيود قفل ضد إعادة الدخول، وبعد تنفيذ الاستدعاء الخارجي، ستنفذ هذه الطريقة حكم if اللاحق لتحديث معلمات field0.length وfield0. ليس هناك شك في أن إعادة الدخول تحدث هنا.
دعونا نلقي نظرة على البيانات التي أنشأها المهاجم في مكالمة إعادة الدخول.
الاستدعاء الخارجي لإعادة الدخول هو الأسلوب 0x5632b2e4، ويتم تمرير 4 معلمات أنشأها المهاجم. ويتم تحويل هذه المعلمات إلى 91000000000 من خلال التحويل الست عشري.
كما هو مذكور أعلاه، يتم تنفيذ الاستدعاء الخارجي للأسلوب 0x5632b2e4 قبل الحكم if (g0 == _getMyShares[address(g1)][msg.sender]). في الوقت الحالي، قيمة field0.lengt هي 0 ولم يتم تحديثها. استخدم المهاجم للتو هذه الطريقة لتجاوز الحكم في طريقة 0x5632b2e4 وقام بتغيير حالات المعلمات الأربعة التالية لـ msg.sender، وهو عقد الهجوم 0xdd9af، إلى البيانات التي تم إنشاؤها عند إجراء مكالمة خارجية.
بعد العمليات المذكورة أعلاه، اتصل المهاجم بـ SellShares لبيع حصته وحصل على 266,102.97278 AVAX.
بالتعمق في وظيفة SellShares، كانت الوظيفة تسمى أولاً طريقة 0x1a9b، وكان هناك استدعاء للطريقة السابقة 0x2058، وهي وظيفة تتولى شراء أو تبادل رموز معينة. يمكننا أن نجد أن الطريقة 0x2329 في الطريقة 0x1a9b ستقوم بتحديث المالك_9f [g0] ، وتم تعديل هذه المعلمة إلى 91000000000 التي أنشأها المهاجم أثناء إعادة الدخول.
ارجع إلى طريقة 0x1a9b وأعد الحساب بناءً على القيمة التي تم إنشاؤها مسبقًا بشكل ضار (راجع التعليقات الخاصة بمبلغ الحساب).
بعد الحساب أعلاه، تغير السعر المقابل للحصة المحسوبة حديثًا، والنتيجة المحسوبة هي 274,333.061476814e18. وبعد سلسلة من تحصيل الرسوم، استخدم المهاجم بنية خبيثة للتلاعب بالسعر دون تعديل الأسهم، وباع الأسهم وحقق ربحًا بنجاح.
لخص
يكمن جوهر هذا الهجوم في تحديث تبعية حساب السعر الناتج عن هجوم إعادة الدخول، والذي يؤدي بدوره إلى تلاعب ضار مماثل بالأسعار. يوصي فريق أمان SlowMist بأن يبذل طرف المشروع قصارى جهده للخضوع لعمليات تدقيق من قبل شركات أمنية متعددة قبل نشر العقد وإصداره؛ وفي الوقت نفسه، يجب استيفاء مواصفات ترميز Checks-Effects-Interactions قدر الإمكان عند البرمجة، وينبغي إضافة أقفال مضادة للعودة.