📢 تحدي وسم Gate.io: #MyFavoriteToken# انشر واربح 100 دولار!
هل لديك رمز مفضل تشعر بالحماس تجاهه؟ سواء كان ذلك بسبب الابتكار التقني أو الدعم المجتمعي أو الإمكانات السوقية، انضم إلى حدث #MyFavoriteToken# وشارك رؤيتك معنا!
💡 كيفية المشاركة:
1️⃣ متابعة gate_Post
2️⃣ انشر مع وسم #MyFavoriteToken# ، بما
تحليل حادثة الهجوم على Sonne Finance: خسائر تصل إلى 20 مليون دولار - تحذير أمني حول Web3
في 15 مايو 2024 ، عانت Sonne Finance من هجوم على Optimism داخل السلسلة ، مع خسائر تصل إلى 2 k 0000 دولار.
بعد وقوع الهجوم ، قام مستخدم @tonyke_bot على X بتغريدة ، مدعيا أنه قام بحماية حوالي 6.5 مليون دولار من حوض رهن عملات Sonne Finance (المعروف أيضًا بالسوق ، مشابه ل cToken في Compound) بمبلغ حوالي 100 دولار.
(_bot/status/1790547461611860182)
بعد اكتشاف الهجوم ، سرعان ما علق فريق مشروع Sonne Finance جميع الأسواق على Optimism وقال إن الأسواق في Base كانت آمنة.
(**)
إحاطة الهجوم
Sonne Finance هو بروتوكول الاقتراض والاقتراض المركزي الذي يشبه البنوك على Optimism ، وهو نسخة من Compound V2 ، ويوفر خدمات مالية للأفراد والمؤسسات والبروتوكول. يقوم بروتوكول Sonne Finance بتجميع أصول رموز المستخدم وتشكيل بركة سيولة الاقتراض ، ويوفر للمستخدمين خدمة الاقتراض مشابهة للبنوك. مثل Compound ، يمكن للمشاركين في البروتوكول رهن الرموز التي يمتلكونها في بركة سيولة الاقتراض في Sonne Finance وفي الوقت نفسه الحصول على إيصالات soToken (مثل cToken). وهذا هو إثبات الأصول المستحقة للعائد ، وسوف تنتج أرباحًا بتقدم البلوكات ، وستحصل أيضًا على مكافآت SONNE token. وباستخدام soToken الموجود في يديهم ، يمكن للمشاركين في الاستدانة من بركة أصول الاقتراض في Sonne رهن الرموز الأخرى ، على سبيل المثال ، يمكن للمشاركين رهن كمية معينة من USDC للحصول على إيصال soUSDC ، ثم استدانة WETH للتداول الأكثر تداولًا. يمكن أن يكون الرهن والاقتراض في بروتوكول Sonne Finance علاقة متعددة إلى متعدد من الأصول ، وخلال عملية الرهن والاقتراض ، سيقوم البروتوكول تلقائيًا بحساب صحة عنوان المشارك ، وعندما تكون الصحة أقل من 1 ، ستتم دعم ضمانة عنوانه للتصفية ، وسيحصل الشخص الذي يقوم بالتصفية أيضًا على مكافأة تصفية معينة.
ترتبط العلاقة بين الرمز المميز الأساسي الذي أودعه المستخدم وعدد الرموز السك بشكل أساسي بمتغير يسمى exchangeRate ، والذي يمكن استخدامه تقريبا لتمثيل قيمة كل رمز مميز أساسي أطول أو أقل. يتم احتساب سعر الصرف على النحو التالي:
في الصيغة أعلاه ، يشير totalCash إلى عدد الرموز المميزة الأساسية التي تحتفظ بها soToken ، ويشير totalBorrows إلى مقدار الرموز الأساسية المقرضة في السوق ، ويشير totalReserves إلى المبلغ الإجمالي للاحتياطيات (بما في ذلك الفوائد التي يدفعها المقترضون) ، ويشير totalSupply إلى عدد الرموز السك soTokens.
عند الاسترداد ، يمكن للمستخدم تحديد مقدار الرموز المميزة الأساسية المراد استردادها ، redeemAmount ، لحساب عدد الرموز المميزة التي يجب نسخها ، redeemTokens ، طريقة الحساب هي تقريبا "redeemTokens = redeemAmount / exchangeRat" ، ** لاحظ أنه لا توجد معالجة لفقدان الدقة هنا **.
الطبيعة الأساسية لهذا الهجوم هي أنه عند إنشاء السوق (soToken)، قام المهاجم بإجراء عملية الإرجاع الأولى من الجهاز الأصلي لتزييت الجهاز، وصب بعض القليل من الرمز الأساسي لتزييت الجهاز، مما أدى إلى قيمة "totalSupply" الخاصة بالجهاز الأصلي لتزييت الجهاز صغيرة جدًا. بعد ذلك، استغل المهاجم الثغرة في دقة العقد الثابتة، بالإضافة إلى إرسال رمز الأصل المباشر إلى عقد تزييت الجهاز (وهو لن يقوم بتزييت الجهاز، مما يعني أن "totalSupply" لن يتغير، و"totalCash" سيزيد)، بدلاً من طريقة الرهن + التزييت لإيداع الرمز الأصلي. هذا الإجراء يؤدي إلى زيادة قيمة المتغير "totalCash" في العقد، ولكن "totalSupply" يظل ثابتًا، مما يؤدي في النهاية إلى زيادة exchangeRate. في النهاية، عند استرداد الرمز الأصلي، يحتاج المهاجم إلى تدمير كمية أقل من الجهاز الأصلي المصبوب عند الرهن، ويستخدم المهاجم الجهاز الأصلي الذي تم كسبه في الجهاز الأصلي الآخر (مثل soWETH و soUSDC) لاقتراض الرمز الأصلي WETH و USDC، مما يؤدي في النهاية إلى ربح يصل إلى 20 مليون دولار.
**العنوان حرجة متورطة في الهجوم
التداول الجاهز للهجوم:
\u003e
مهاجمة الصفقات المربحة:
\u003e \u003e > ** > ٪ > إرسال
هجوم العنوان المتعلقة ب EOA:
\u003e \u003e \u003e 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb > > ٪
> \u003e \u003e 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43
العنوان المرتبط بالمهاجم (العقد):
\u003e
\u003e 0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8
\u003e
الرمز المميز الأساسي (VELO عملة V2):
> Translated text
العقد الذكي المُسرب (soVELO، مشابه لـ cToken في Compound):
\u003e > Translated text in Arabic: >
X 上 @tonyke_bot المستخدمين للتعامل في حالات الطوارئ:
\u003e \u003e **
\u003e
تحليل عملية الهجوم
ملخص السابقة
Sonne Finance سجلت مؤخرًا اقتراحًا () لإضافة سوق VELO إلى Sonne Finance وقامت بترتيب خمس صفقات () التي ستُنفَذ بعد يومين باستخدام محفظة متعددة التواقيع. تستخدم هذه الصفقات لإنشاء سوق VELO (عقد soVELO) وتعيين بعض الإعدادات الرئيسية لهذا السوق مثل نموذج معدل الفائدة وجهاز أوراكل الأسعار وعامل الرهن الخ. بعد إنشاء سوق VELO ، يمكن للمستخدمين إيداع رمز VELO لصياغة رمز soVELO ، ويمكن استخدام رمز soVELO لاستدانة أخرى soToken.
التحضير للهجوم
المرحلة التحضيرية للهجوم تتمثل أساسًا في قيام المهاجم بإنشاء سوق VELO (عقد soVELO) وإعداد التكوينات الحاسمة وصياغة رمز soVELO عن طريق رهن رمز VELO وإرساله مباشرة إلى عقد soVELO وذلك لزيادة exchangeRate والاستعداد للحصول على أرباح في الهجوم اللاحق.
الخطوات المحددة على النحو التالي:
soVELO.mint: سوفيلو.مينت
3. القاتل يرسل عملة VELO مباشرة إلى عقد soVELO بقيمة "2,552,964,259,704,265,837,526" عملة VELO. في هذه الحالة، يزيد العقد soVELO من عدد العملات VELO التي يحتوي عليها، ولكن نظرًا لعدم وجود عملات soVELO جديدة للصك، يظل إجمالي العرض ثابتًا، مما يعني أن سعر الصرف المحسوب وفقًا للصيغة الحسابية لسعر الصرف سيزيد. 4. يقوم المهاجم بنقل عملة soVELO التي يمتلكها عدة مرات ، وفي النهاية ينقلها إلى حساب EOA 0xae4a المهاجم الآخر.
الهجوم من أجل الربح
المرحلة الرئيسية للربح من الهجوم هي تنفيذ المقترح الخامس من قبل المهاجم وإعادة إرسال عملة VELO المستعارة مباشرة إلى عقد soVELO من خلال قرض الومضة لزيادة معدل الصرف بشكل أكبر. ثم يستخدم المهاجم العملة VELO بقيمة 2 لديه لاقتراض عملة واحدة مستعارة مثل WETH و USDC من عقود soToken الأخرى، ويكون هذا الجزء هو الربح للمهاجم. ثم يقوم المهاجم بتجديد العملة الأساسية الخاصة به في عقد soVELO، وبسبب زيادة معدل الصرف ومشكلة فقدان الدقة عند حساب العملة الأساسية المستردة، يستعيد المهاجم بالفعل معظم عملة VELO التي تم إيداعها سابقًا فقط باستخدام عملة soVELO بقيمة 1. يمكن فهم أن المهاجم يستخدم عملة soVELO بقيمة 1 المستعارة لكسب عملة الواجهة مثل WETH و USDC من الاقتراض من soToken الأخرى. يكرر المهاجم هذه الطريقة مرارًا وتكرارًا بنفس الطريقة للحصول على أرباح ضخمة.
الخطوات الدقيقة كما يلي:
من الدالة "exchangeRateStoredInternal" يمكننا أن نرى أنه نظرًا لوجود "_totalSupply" المساوي لـ 2 وليس 0 في الوقت الحالي ، فإنه من الضروري حساب قيمة "exchangeRate" باستخدام الصيغة "exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply" ، وقيمة "exchangeRate" الحالية هي "17,735,851,964,756,377,265,143,988,000,000,000,000,000,000" ، وهذه القيمة تفوق قيمة "exchangeRate" الأولية المحددة والتي هي "200,000,000,000,000,000,000,000,00".
بناءً على سعر الصرف الجديد، قيمة "redeemTokens" المحسوبة هي "1.99". بسبب خاصية تقريب الأرقام في Solidity إلى الأقل، تكون القيمة النهائية لـ "redeemTokens" هي 1. وهذا يعني أن المهاجم برقم المرسل 0xa163 استرد تقريبًا كل رمز VELO المودع سابقًا باستخدام رمز soVELO بقيمة 1. في الوقت نفسه، حصل المهاجم 0xa163 أيضًا على WETH بقيمة "265,842,857,910,985,546,929" من soWETH المستعار.
soVELO.redeemUnderlying:
soVELO.exchangeRateStoredInternal: 7. يقوم المهاجم 0xa163 بنقل جميع WETH المستعارة واستردادها VELO عملة إلى المهاجم العلوي ، ثم يقوم بالتدمير الذاتي. 8. الهاجم يستدعي وظيفة "liquidateBorrow" في soWETH لتصفية جزء من الأصول المقترضة من العقد الذي تم إنشاؤه مسبقًا بعنوان 0xa163 ، بهدف استعادة الرمز المميز soVELO المقفل بقيمة 1. حاليًا ، يمتلك الهاجم فقط رمزًا واحدًا لـ soVELO بقيمة 1. 9. يقوم المهاجم بإستدعاء وظيفة "الصك الجديد" في soVELO، وإعادة رهن تشكيلة عملة soVELO مرة أخرى، بهدف جمع 2 وحدة من عملة soVELO، ثم تنفيذ الخطوات 3-8 المذكورة أعلاه مرة أخرى لتحقيق ربح من العملات الأساسية الأخرى. 10. يقوم المهاجم بتنفيذ الخطوة 9 عدة مرات ، ويسدد القروض السريعة ، ويخرج من السوق بربح.
كيفية استغلال 100 دولار للحصول على 6.5 مليون دولار
بعد وقوع الهجوم ، قام مستخدمو X على @tonyke_bot بإيداع 1144 رمز VELO كضمان في عقد soVELO من خلال المعاملة 0x0a284cd ، وأتاحوا إصدار 0.00000011 رمز soVELO. يعمل هذا الإجراء على منع المهاجم من مواصلة الهجوم ، لأن هذه المعاملة تغير حجم totalSupply في soVELO وعدد الرموز VELO المملوكة totalCash ، وزيادة totalSupply له تأثير أكبر على حساب exchangeRate مقارنة بزيادة totalCash ، وبالتالي يصغر exchangeRate مما يمنع المهاجم من الاستفادة من فقدان الدقة لكسب soVELO ، وبالتالي يتعذر على المهاجم مواصلة الهجوم.
تتبع الأموال
قام المهاجمون بتحويل الأموال بعد وقت قصير من الاستيلاء على العائدات غير القانونية ، والتي تم تحويل معظمها إلى عناوين 4 التالية ، بعضها لمواصلة الهجوم في العنوان أخرى ، والبعض الآخر إلى غسيل الأموال:
قام المهاجم بتحويل 198 WETH إلى العنوان ، ثم استخدم العنوان نفس تكتيكات الهجوم للحصول على عائدات غير قانونية في المعاملات التالية:
بعد الهجوم ، حولت العنوان العائدات إلى * 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb *.
المهاجم نقل 724277 USDC و 2353 VELO إلى هذا العنوان وحول USDC إلى Ether. ثم نقل جزءًا من الأموال على الفور إلى جسر السلسلة Stargate، بينما ظلت الأموال غير القانونية الباقية في هذا العنوان:
نقل المهاجم 33 WETH إلى العنوان واستخدم سلسلة التقشير لمحاولة غسيل الأموال ، الرابط غسيل الأموال هو كما يلي:
0xbd18100a168321701955e348f03d0df4f517c13b -> 0x7e97b74252b6df53caf386fb4c54d4fb59cb6928 -> 0xc521bde5e53f537ff208970152b75a003093c2b4 -> * 0x9f09ec563222fe52712dc413d0b7b66cb5c7c795*。
تم نقل 563 WETH إلى هذا العنوان من قبل المهاجم ، ثم تم تحويلها إلى 0x1915F77A116dcE7E9b8F4C4E43CDF81e2aCf9C68 ، ولا توجد حاليًا أي أنشطة إضافية.
الهجمات المستخدمة في عملية غسيل الأموال هذه نسبياً متقنة وتتنوع في الأساليب. لذا فإننا كمشاركين في Web3 يجب أن نستمر في تحسين قدراتنا في مجال مكافحة غسيل الأموال وذلك من خلال استخدام منتجات أمان تداول البلوكشين ذات الصلة مثل KYT وAML لزيادة أمان مشاريع Defi.
نصائح الأمان
بتصرف فريق ZAN، قامت كارا (بالحساب @Cara6289) و شيغ (بالحساب @SHXiGi) بكتابة هذه المقالة بشكل مشترك.