أجرى SharkTeam تحليلًا تقنيًا لهذه الحادثة لأول مرة ، ولخص الاحتياطات الأمنية ، على أمل أن تتعلم مشاريع المتابعة منه ، وأن يبني بشكل مشترك خط دفاع أمني لصناعة blockchain.
السبب الجذري لهذا الهجوم هو: هناك مشكلة في آلية حساب المكافأة ومنطق التفاعل لوظيفة السحب الطارئ في العقد المهاجم (0xdCA50344) ، مما يتسبب في حصول المستخدم على رمز مكافأة إضافي بعد سحب المبلغ الأساسي.
يوفر العقد وظيفة EmergencyWithdraw لسحب الرموز في حالات الطوارئ ، ويمسح إجمالي الرهن العقاري والمكافأة للديون للمهاجم ، ولكنه لا يمسح متغير nftAddition الخاص بالمهاجم ، ويتم أيضًا حساب متغير nftAddition من خلال متغير allstake.
في وظيفة unstakeNft ، سيستمر احتساب المكافأة الحالية للمستخدم ، وإذا لم تتم إعادة تعيين متغير nftAddition إلى الصفر ، فستظل الدالة انتظارًا تعيد قيمة إضافية لمكافأة BNO ، مما يتسبب في حصول المهاجم على رموز BNO إضافية.
ردًا على هذا الهجوم ، يجب اتباع الاحتياطات التالية أثناء عملية التطوير:
(1) عند حساب المكافآت ، تحقق مما إذا كان المستخدم قد سحب رأس المال.
(2) قبل بدء المشروع عبر الإنترنت ، من الضروري طلب المساعدة الفنية من فريق تدقيق محترف تابع لجهة خارجية.
شاهد النسخة الأصلية
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
تحليل المبدأ لحدث هجوم BNO
في 18 يوليو 2023 ، بتوقيت بكين ، عانت شركة Ocean BNO من هجوم قرض سريع ، وحقق المهاجم ربحًا بنحو 500 ألف دولار أمريكي.
! [20230718161919783image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-38970f9230-dd1a6f-7649e1)
أجرى SharkTeam تحليلًا تقنيًا لهذه الحادثة لأول مرة ، ولخص الاحتياطات الأمنية ، على أمل أن تتعلم مشاريع المتابعة منه ، وأن يبني بشكل مشترك خط دفاع أمني لصناعة blockchain.
** 1. تحليل الأحداث **
عنوان المهاجم:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
عقد الهجوم:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
العقد المهاجم:
0xdCA503449899d5649D32175a255A8835A03E4006
هجوم المعاملات:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
عملية الهجوم:
(1) اقترض المهاجم (0xa6566574) 286449 عملة BNO من خلال قرض فلاش pancakeSwap.
! [20230718161449018image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-f469426182-dd1a6f-7649e1)
(2) ثم قم باستدعاء وظيفة ال stockNft للعقد المهاجم (0xdCA50344) لتعهد اثنين من nft.
! [20230718161457306image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-04edd0e58c-dd1a6f-7649e1)
(3) ثم اتصل بوظيفة التعهد للعقد المهاجم (0xdCA50344) لتعهد عملات 277856 BNO.
! [20230718161633397image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-869690e6f1-dd1a6f-7649e1)
(4) استدعاء وظيفة سحب الطوارئ من العقد المهاجم (0xdCA50344) لاستخراج جميع BNO
! [20230718161641122image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-f71a2770dd-dd1a6f-7649e1)
(5) ثم قم باستدعاء وظيفة unstakeNft للعقد المهاجم (0xdCA50344) ، واسترجع الرقمين المتعهد بهما واحصل على رموز BNO الإضافية.
! [20230718161732948image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-029563c095-dd1a6f-7649e1)
(6) كرر العملية المذكورة أعلاه للحصول باستمرار على رموز BNO إضافية
! [20230718161752651image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-97713b8e2d-dd1a6f-7649e1)
(7) بعد سداد القرض السريع ، استبدل جميع رموز BNO بـ 50.5W BUSD واترك السوق مع الربح.
! [20230718161800166image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-32ec4d3c8e-dd1a6f-7649e1)
** ثانيًا ، تحليل الضعف **
السبب الجذري لهذا الهجوم هو: هناك مشكلة في آلية حساب المكافأة ومنطق التفاعل لوظيفة السحب الطارئ في العقد المهاجم (0xdCA50344) ، مما يتسبب في حصول المستخدم على رمز مكافأة إضافي بعد سحب المبلغ الأساسي.
! [20230718161812689image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-0a81429476-dd1a6f-7649e1)
! [20230718161820027image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-924ee76fca-dd1a6f-7649e1)
يوفر العقد وظيفة EmergencyWithdraw لسحب الرموز في حالات الطوارئ ، ويمسح إجمالي الرهن العقاري والمكافأة للديون للمهاجم ، ولكنه لا يمسح متغير nftAddition الخاص بالمهاجم ، ويتم أيضًا حساب متغير nftAddition من خلال متغير allstake.
! [20230718161834850image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-5a2de1b17c-dd1a6f-7649e1)
في وظيفة unstakeNft ، سيستمر احتساب المكافأة الحالية للمستخدم ، وإذا لم تتم إعادة تعيين متغير nftAddition إلى الصفر ، فستظل الدالة انتظارًا تعيد قيمة إضافية لمكافأة BNO ، مما يتسبب في حصول المهاجم على رموز BNO إضافية.
! [20230718161842539image.png] (https://img-cdn.gateio.im/resized-social/moments-40baef27dd-a4c8cc20c9-dd1a6f-7649e1)
** ثالثًا ، التوصيات الأمنية **
ردًا على هذا الهجوم ، يجب اتباع الاحتياطات التالية أثناء عملية التطوير:
(1) عند حساب المكافآت ، تحقق مما إذا كان المستخدم قد سحب رأس المال.
(2) قبل بدء المشروع عبر الإنترنت ، من الضروري طلب المساعدة الفنية من فريق تدقيق محترف تابع لجهة خارجية.