تحليل هجوم سوني فاينانس

متوسطJun 11, 2024
يكمن جوهر هذا الهجوم في إنشاء السوق (soToken) ، حيث أجرى المهاجم أول عملية السك جانبية بكمية صغيرة من الرمز المميز الأساسي ، مما أدى إلى قيمة "totalSupply" صغيرة جدا ل soToken.
تحليل هجوم سوني فاينانس

في 15 مايو 2024 ، عانت Sonne Finance من هجوم على سلسلة Optimism ، مما أدى إلى خسائر تصل إلى 20 مليون دولار. بعد الهجوم ، قام مستخدم Twitter @tonyke_bot بالتغريد بأنهم قاموا بحماية مبلغ 6.5 مليون دولار المتبقي في مجمع ضمانات Sonne Finance (المعروف أيضا باسم السوق ، على غرار cToken in Compound) بحوالي 100 دولار.


(https://twitter.com/tonyke_bot/status/1790547461611860182)

عند اكتشاف الهجوم ، سرعان ما أوقف فريق Sonne Finance جميع الأسواق على التفاؤل وذكر أن الأسواق في Base كانت آمنة.

(https://twitter.com/SonneFinance/status/1790535383005966554)

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

Sonne Finance هي بروتوكول إقراض لامركزية تتفرع من Compound V2 على التفاؤل ، وتوفر للأفراد والمؤسسات والبروتوكولات إمكانية الوصول إلى الخدمات المالية. يقوم Sonne Finance بروتوكول بتجميع الأصول الرمزية للمستخدمين لتشكيل مجمع السيولة إقراض ، مما يوفر للمستخدمين أعمال إقراض تشبه البنوك. مثل المجمع ، يمكن للمشاركين بروتوكول رهن الرموز الخاصة بهم في مجمع السيولة الإقراض الخاصة ب Sonne Finance والحصول على شهادة soToken (مثل cToken). SoToken هي شهادة أصول ذات فائدة ، والتي ستولد مبلغا معينا من الدخل مع تقدم الكتلة ، وستتلقى أيضا حوافز رمز SONE. يمكن للمشاركين أيضا استعارة رموز أخرى من مجمع أصول إقراض Sonne مع soToken في أيديهم. على سبيل المثال ، يمكن للمشاركين رهن مبلغ معين من USDC للحصول على شهادات soUSDC ، ثم إقراض WETH لمزيد من التداول. يمكن أن يكون إقراض الرهن العقاري في بروتوكول Sonne Finance علاقة أصول متعددة إلى متعددة. أثناء عملية إقراض الرهن العقاري ، سيقوم بروتوكول تلقائيا بحساب العامل الصحي (العامل الصحي) لعنوان المشارك. عندما يكون العامل الصحي أقل من 1 ، سيتم الدعم التصفية رهن منتجات العنوان ، ويمكن للمصفين أيضا الحصول على مكافآت التصفية معينة.

ترتبط العلاقة بين عدد الرموز المميزة الأساسية المودعة من قبل المستخدمين و soTokens المسكوكة بشكل أساسي بمتغير يسمى exchangeRate. يمكن استخدام هذا المتغير تقريبا للإشارة إلى مقدار الرمز المميز الأساسي الذي يستحقه كل رمز مميز. صيغة حساب سعر الصرف هي كما يلي:

في الصيغة أعلاه ، يشير totalCash إلى عدد الرموز الأساسية التي تحتفظ بها soToken ، ويشير totalBorrows إلى عدد الرموز الأساسية التي تم إقراضها في سوق معين ، ويشير totalReserves إلى إجمالي مبلغ الاحتياطي (بما في ذلك الفائدة التي يدفعها المقترض) ، ويشير totalSupply إلى عدد soToken التي تم سكها.

عند الاسترداد ، يمكن للمستخدمين تحديد عدد الرموز المميزة الأساسية التي يريدون استردادها ، redeemAmount ، لحساب عدد الرموز المميزة التي يجب إتلافها ، redeemTokens. طريقة الحساب هي تقريبا "redeemTokens = redeemAmount / exchangeRat". لاحظ أنه لا يوجد فقدان للدقة هنا. تعامل مع.

جوهر هذا الهجوم هو أنه عندما تم إنشاء السوق (soToken) ، أجرى المهاجم أول عملية صب الرهن العقاري وسك عدد قليل جدا من soTokens مع كمية صغيرة من الرموز الأساسية ، مما أدى إلى أن تكون قيمة "totalSupply" ل soToken صغيرة جدا. ثم استغل المهاجم ثغرة خسارة دقة عقد Solidity ، ثم أرسل الرمز المميز الأساسي مباشرة إلى عقد soToken (لن يتم سك soToken ، مما يعني أن "totalSupply" يظل دون تغيير ويصبح "totalCash" أكبر) بدلا من طريقة التخزين + الصب إيداع الرمز المميز الأساسي. مثل هذه العملية تجعل متغير "totalCash" في العقد أكبر ، لكن "totalSupply" لم يتغير ، مما يتسبب في زيادة سعر الصرف. في النهاية ، عندما يسترد المهاجم الرمز المميز الأساسي ، يكون soToken الذي يجب تدميره أقل من soToken الذي تم سكه أثناء الرهن العقاري. يستخدم المهاجم soToken المكتسب لإقراض الرمز المميز الأساسي WETH USDC إلى soTokens الأخرى (مثل soWETH و soUSDC) ، وأخيرا يحصل على أرباح تصل إلى 20 مليون دولار أمريكي.

العناوين الرئيسية المشاركة في الهجوم

معاملات التحضير للهجوم:

https://optimistic.etherscan.io/tx/0x45c0ccfd3ca1b4a937feebcb0f5a166c409c9e403070808835d41da40732db96

مهاجمة المعاملات المربحة:

https://optimistic.etherscan.io/tx/0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

مهاجمة العناوين ذات الصلة ب EOA:

0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb

0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

العنوان ذو الصلة بالمهاجم (العقد):

0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8

0x02fa2625825917e9b1f8346a465de1bbc150c5b9

الرمز الأساسي (VELO عملة V2):

0x9560e827af36c94d2ac33a39bce1fe78631088db

عقد الثغرات الأمنية (soVELO ، على غرار cToken الخاص بالمركب):

0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

@tonyke_bot معاملة إنقاذ المستخدم على X:

https://optimistic.etherscan.io/tx/0x816f9e289d8b9dee9a94086c200c0470c6456603c967f82ab559a5931fd181c2

تحليل عملية الهجوم

Recap

أقر فريق مشروع Sonne Finance مؤخرا اقتراحا لإضافة سوق VELO إلى Sonne Finance (https://twitter.com/SonneFinance/status/1786871066075206044)، ورتب خمس معاملات من خلال المحفظة متعددة التواقيع ليتم تنفيذها بعد يومين ( https://optimistic.etherscan.io/tx/0x18ebeb958b50579ce76528ed812025949dfcff8c2673eb0c8bc78b12ba6377b7) ، تستخدم هذه المعاملات الخمس لإنشاء سوق VELO (عقد soVELO) وتعيين بعض التكوينات الرئيسية للسوق ، مثل تحديد نموذج سعر الفائدة ، وتحديد سعر أوراكل ، وتحديد عوامل الرهن العقاري وما إلى ذلك. بعد إنشاء السوق VELO ، يمكن للمستخدمين إيداع VELO الرموز المميزة سك رموز soVELO ، والتي يمكن استخدامها بدورها لاستعارة soTokens الأخرى.

attack preparation

مرحلة التحضير للهجوم مخصصة بشكل أساسي للمهاجم لإنشاء سوق VELO (عقد soVELO) بناء على المعلومات الواردة في اقتراح مشروع Sonne Finance بعد انتهاء فترة قفل الاقتراح لمدة يومين ، وإعداد التكوينات الرئيسية ، والرموز المميزة سك VELO في عقد soVELO عن طريق رهنها. رموز soVELO ، ويرسل أيضا الرموز المميزة VELO التي يحتفظ بها مباشرة إلى عقد soVELO لزيادة سعر الصرف والتحضير للربح من الهجمات اللاحقة.

الخطوات المحددة هي كما يلي:

  1. بعد انتهاء فترة القفل لمدة يومين ، يقوم المهاجم أولا بحزم عمليات المعاملات الأربع الأولى المرتبة في الاقتراح في معاملة واحدة (المعاملة 0x45c0cc) ، والتي تستخدم لإنشاء سوق VELO (عقد soVELO) وتعيين تكوين المفتاح. عند تهيئة VELO السوق، يتم تعيين سعر الصرف على "200,000,000,000,000,000,000,000,000,000".

  2. يستدعي المهاجم الوظيفة "سك" لعقد soVELO إلى الرموز المميزة إيداع VELO ورموز soVELO سك. يحدد المهاجم "mintAmount" على أنه "400,000,001" (عدد الرموز المميزة VELO). كما يتضح من الوظيفة "exchangeRateStoredInternal" ، نظرا لأن "_totalSuppl" لرمز soVELO هو 0 في هذا الوقت ، فإن سعر الصرف هو القيمة المحددة في الخطوة 1. وفقا للصيغة " mintTokens = actualMintAmount / سعر الصرف "، فإن العدد المحسوب لرموز soVELO التي يجب سكها في هذا الوقت هو 2. في قصير ، في هذه الخطوة ، يقوم المهاجم بإيداع الرموز المميزة VELO بقيمة "400,000,001" في عقد soVELO ، ويحصل المهاجم على رموز soVELO بقيمة 2.

soVELO.سك:

  1. أرسل المهاجم الرموز VELO بقيمة "2,552,964,259,704,265,837,526" إلى عقد soVELO عن طريق إرسال الرموز المميزة VELO مباشرة إلى عقد soVELO. في هذا الوقت ، زاد عدد الرموز المميزة VELO التي يحتفظ بها عقد soVELO ، ولكن نظرا لعدم وجود رموز soVELO جديدة ، يتم سك عملة ، لذلك يظل إجمالي العرض دون تغيير ، مما يعني أن سعر الصرف المحسوب وفقا لصيغة حساب سعر الصرف سيصبح أكبر في هذا الوقت.

  2. قام المهاجم بنقل رموز soVELO التي تم الاحتفاظ بها عدة مرات ، وأخيرا نقلها إلى هجوم آخر 0xae4a EOA.

Attack for profit

تتضمن مرحلة ربح الهجوم بشكل أساسي قيام المهاجم بتنفيذ المعاملة الخامسة للاقتراح وإقراض الرموز VELO المميزة مباشرة إلى عقد soVELO من خلال قروض فلاش لزيادة سعر الصرف. ثم يستخدم المهاجم رمز soVELO بقيمة 2 في يده لاستعارة الرموز الأساسية مثل WETH و USDC من عقود soToken الأخرى (مثل soWETH و soUSDC وما إلى ذلك) ، وتصبح هذه الأجزاء ربح المهاجم. ثم ذهب المهاجم لاسترداد رمزه الأساسي في عقد soVELO. نظرا للزيادة في سعر الصرف وفقدان الدقة في حساب رموز soVELO التي يجب تدميرها للاسترداد ، استخدم المهاجم في النهاية رمز soVELO بقيمة 1 فقط. تم استرداد جميع الرموز المميزة VELO المودعة مسبقا تقريبا ، والتي يمكن فهمها على أنها المهاجم باستخدام رموز soVELO الإضافية بقيمة 1 لكسب الرموز الأساسية مثل WETH و USDC عن طريق الاقتراض من soTokens الأخرى. استخدم المهاجم نفس الأسلوب لتكرار الهجوم عدة مرات وحقق أرباحا ضخمة في النهاية.

الخطوات المحددة هي كما يلي:

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

  2. قروض فلاش المهاجم VELO الرموز بقيمة "35,469,150,965,253,049,864,450,449" من تجمع VolatileV2 AMM - USDC / VELO ، مما يؤدي إلى تشغيل وظيفة خطاف المهاجم. في وظيفة الخطاف ، يستمر المهاجم في تنفيذ عملية الهجوم.

  3. يرسل المهاجم الرموز المميزة VELO التي يحتفظ بها إلى عقد soVELO لزيادة سعر الصرف. يوجد حاليا ما مجموعه VELO رمزا بقيمة "35,471,703,929,512,754,530,287,976" في عقد soVELO (مجموع الرموز VELO التي تم تحويلها ثلاث مرات بواسطة المهاجم).

  4. يقوم المهاجم بإنشاء عقد جديد 0xa16388a6210545b27f669d5189648c1722300b8b. في المنشئ ، يقوم بنقل الرموز المميزة 2 soVELO التي يحتفظ بها إلى 0xa163 العقد الذي تم إنشاؤه حديثا (يشار إليه فيما يلي باسم 0xa163 المهاجم).

  5. استخدم المهاجم 0xa163 رموز soVELO التي احتفظ بها لاستعارة WETH بقيمة "265,842,857,910,985,546,929" من soWETH.

  6. يستدعي المهاجم 0xa163 وظيفة "redeemUnderlying" الخاصة ب soVELO ، مع تحديد قيمة الرموز المميزة VELO المستردة على أنها "35,471,603,929,512,754,530,287,976" (تقريبا عدد الرموز المميزة VELO التي قام المهاجم بنقلها أو رهنها مسبقا في عقد soVELO). في هذا الوقت ، من الضروري استخدام الصيغة "redeemTokens = redeemAmountIn / exchangeRate" لحساب عدد رموز soVELO التي يجب إتلافها للاسترداد.

كما يتضح من وظيفة "exchangeRateStoredInternal" ، نظرا لأن _totalSupply هو 2 بدلا من 0 ، يجب حساب قيمة سعر الصرف. وفقا للصيغة "سعر الصرف = (المجموعالنقدية + المجموعالقروض - إجمالي الاحتياطيات) / إجمالي العرض" ، فإن سعر الصرف الحالي هو "17,735,851,964,756,377,265,143,988,000,0 00,000,000,000,000 "، هذه القيمة أكبر بكثير من مجموعة سعر الصرف الأولية "200,000,000,000,000,000,000,000,000,000".

قيمة "redeemTokens" المحسوبة على أساس سعر الصرف الجديد هي "1.99". نظرا لخصائص التقريب الهبوطي للصلابة ، فإن قيمة " redeemTokens " ينتهي بها الأمر إلى 1. هذا يعني أن المهاجم 0xa163 استخدم رموز soVELO بقيمة 1 لاسترداد جميع الرموز المميزة VELO المودعة مسبقا تقريبا. في الوقت نفسه ، حصل المهاجم أيضا 0xa163 على WETH بقيمة "265,842,857,910,985,546,929" اقترضت من soWETH.

soVELO.redeemUnderlying:

soVELO.exchangeRateStoredInternal:

  1. 0xa163 نقل المهاجم جميع WETH المستعارة واسترداد الرموز المميزة VELO إلى مهاجم المستوى الأعلى ، ثم قام بالتدمير الذاتي.

  2. يستدعي المهاجم وظيفة "LiquidateBorrow" ل soWETH لتصفية بعض الأصول المقترضة من 0xa163 العقد الذي تم إنشاؤه حديثا في طلب لاستعادة رمز soVELO المقفل بقيمة 1. في الوقت الحالي ، يحتفظ المهاجم فقط برموز soVELO بقيمة 1.

  3. يستدعي المهاجم وظيفة "سك" ل soVELO ومرة أخرى يرهن ويسك رموز soVELO بغرض جمع ما يكفي من رموز soVELO بقيمة 2 ، ثم ينفذ الخطوات 3-8 أعلاه مرة أخرى للاستفادة من الرموز المميزة الأخرى.

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

How 100 $ يرفع 6.5 مليون

دولار بعد الهجوم ، قام المستخدم @tonyke_bot على X بسك 0.00000011 soVELO عن طريق تخزين 1144 رمز VELO في عقد soVELO في 0x0a284cd المعاملة. السبب في أن هذه العملية يمكن أن تمنع المهاجم من المزيد من الهجمات هو أن هذه المعاملة تغير حجم totalSupply في soVELO وعدد الرموز المميزة VELO totalCash المحتفظ بها ، وتأثير نمو totalSupply على حساب سعر الصرف أكبر من تأثير نمو totalCash. لذلك ، يصبح سعر الصرف أصغر ، مما يتسبب في عدم تمكن المهاجم أطول من استخدام فقدان الدقة لكسب soVELO عند شن هجوم ، مما يجعل الهجوم غير ممكن أطول.

Money tracking

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

1 ،0x4ab93fc50b82d4dc457db85888dfdae28d29b98d

قام المهاجم بتحويل 198 WETH إلى هذا العنوان ، ثم استخدم العنوان نفس طريقة الهجوم للحصول على مكاسب غير مشروعة في المعاملات التالية:

بعد الهجوم ، نقل العنوان المكاسب غير القانونية المذكورة أعلاه إلى 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb.

2 ،0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb

نقل المهاجم 724277 USDC و 2353 VELO إلى هذا العنوان ، وتبادل USDC مقابل ايثر. ثم تم تحويل بعض الأموال على الفور إلى Stargate عبر السلاسل الجسر. وتبقى معظم الأموال غير المشروعة في هذا العنوان:

3 ،0xbd18100a168321701955e348f03d0df4f517c13b

نقل المهاجم 33 WETH إلى هذا العنوان واستخدم سلسلة التقشير لمحاولة غسل الأموال. رابط غسيل الأموال هو كما يلي:

0xbd18100a168321701955e348f03d0df4f517c13b -> 0x7e97b74252b6df53caf386fb4c54d4fb59cb6928 -> 0xc521bde5e53f537ff208970152b75a003 093c2b4 -> 0x9f09ec563222fe52712dc413d0b7b66cb5c7c795。

4 ،0x4fac0651bcc837bf889f6a7d79c1908419fe1770

نقل المهاجم 563 WETH إلى هذا العنوان وبعد ذلك إلى 0x1915F77A116dcE7E9b8F4C4E43CDF81e2aCf9C68 ، دون اتخاذ أي إجراء آخر حتى الآن.

طريقة المهاجم في غسيل الأموال هذه المرة احترافية نسبيا ، وتظهر الأساليب اتجاها للتنوع. لذلك ، بالنسبة لنا نحن المشاركين في Web3 ، يجب أن نستمر في تحسين قدراتنا في مكافحة غسيل الأموال من حيث الأمان ، وتحسين أمان مشاريع Defi من خلال KYT و AML وغيرها من منتجات أمان معاملات blockchain ذات الصلة.

نصيحة أمنية

1、 ابق على اطلاع دائم بتدقيق العقود واختبارها. إجراء تدقيق شامل قبل نشر العقد الذكي ، مع إيلاء اهتمام خاص لجميع الأجزاء التي تنطوي على حسابات مالية. أولا ، استخدم الاختبار الآلي واستفد من التحديثات في الوقت الفعلي لمكتبات الثغرات الأمنية لإجراء عمليات مسح أمنية فعالة للعقود (قامت الصناعة أيضا بفتح بعض أدوات تدقيق الأمان الناضجة تدريجيا ، بما في ذلك ZAN الذكاء الاصطناعي SCAN) ، مع الجمع بين التدقيق اليدوي لاستكشاف المشكلات التي تتطلب معرفة متعمقة بالصناعة.

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

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

  2. عندما تكون هناك متغيرات رئيسية في العقد تعتمد على قيمة " this.balance " أو " token.balanceOf() " ، فأنت بحاجة إلى التفكير بعناية في شروط تغيير المتغير الرئيسي ، مثل ما إذا كان مسموحا بتحويل العملة الأصلية أو الرموز المميزة مباشرة إلى العقد. طريقة لتغيير قيمة المتغير ، أو يمكن تغيير قيمة المتغير فقط عن طريق استدعاء وظيفة معينة.

إخلاء المسؤولية:

  1. تمت إعادة طباعة هذه المقالة من [ZAN]. جميع حقوق الطبع والنشر تنتمي إلى المؤلف الأصلي [ZAN]. إذا كانت هناك اعتراضات على إعادة الطبع هذه ، فيرجى الاتصال بفريق Gate Learn ، وسيقومون بالتعامل معها على الفور.
  2. إخلاء المسؤولية: الآراء ووجهات النظر الواردة في هذه المقالة هي آراء المؤلف فقط ولا تشكل أي نصيحة استثمارية.
  3. تتم ترجمة المقالة إلى لغات أخرى من قبل فريق Gate Learn. يحظر نسخ المقالات المترجمة أو توزيعها أو سرقتها، ما لم يذكر ذلك.

تحليل هجوم سوني فاينانس

متوسطJun 11, 2024
يكمن جوهر هذا الهجوم في إنشاء السوق (soToken) ، حيث أجرى المهاجم أول عملية السك جانبية بكمية صغيرة من الرمز المميز الأساسي ، مما أدى إلى قيمة "totalSupply" صغيرة جدا ل soToken.
تحليل هجوم سوني فاينانس

في 15 مايو 2024 ، عانت Sonne Finance من هجوم على سلسلة Optimism ، مما أدى إلى خسائر تصل إلى 20 مليون دولار. بعد الهجوم ، قام مستخدم Twitter @tonyke_bot بالتغريد بأنهم قاموا بحماية مبلغ 6.5 مليون دولار المتبقي في مجمع ضمانات Sonne Finance (المعروف أيضا باسم السوق ، على غرار cToken in Compound) بحوالي 100 دولار.


(https://twitter.com/tonyke_bot/status/1790547461611860182)

عند اكتشاف الهجوم ، سرعان ما أوقف فريق Sonne Finance جميع الأسواق على التفاؤل وذكر أن الأسواق في Base كانت آمنة.

(https://twitter.com/SonneFinance/status/1790535383005966554)

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

Sonne Finance هي بروتوكول إقراض لامركزية تتفرع من Compound V2 على التفاؤل ، وتوفر للأفراد والمؤسسات والبروتوكولات إمكانية الوصول إلى الخدمات المالية. يقوم Sonne Finance بروتوكول بتجميع الأصول الرمزية للمستخدمين لتشكيل مجمع السيولة إقراض ، مما يوفر للمستخدمين أعمال إقراض تشبه البنوك. مثل المجمع ، يمكن للمشاركين بروتوكول رهن الرموز الخاصة بهم في مجمع السيولة الإقراض الخاصة ب Sonne Finance والحصول على شهادة soToken (مثل cToken). SoToken هي شهادة أصول ذات فائدة ، والتي ستولد مبلغا معينا من الدخل مع تقدم الكتلة ، وستتلقى أيضا حوافز رمز SONE. يمكن للمشاركين أيضا استعارة رموز أخرى من مجمع أصول إقراض Sonne مع soToken في أيديهم. على سبيل المثال ، يمكن للمشاركين رهن مبلغ معين من USDC للحصول على شهادات soUSDC ، ثم إقراض WETH لمزيد من التداول. يمكن أن يكون إقراض الرهن العقاري في بروتوكول Sonne Finance علاقة أصول متعددة إلى متعددة. أثناء عملية إقراض الرهن العقاري ، سيقوم بروتوكول تلقائيا بحساب العامل الصحي (العامل الصحي) لعنوان المشارك. عندما يكون العامل الصحي أقل من 1 ، سيتم الدعم التصفية رهن منتجات العنوان ، ويمكن للمصفين أيضا الحصول على مكافآت التصفية معينة.

ترتبط العلاقة بين عدد الرموز المميزة الأساسية المودعة من قبل المستخدمين و soTokens المسكوكة بشكل أساسي بمتغير يسمى exchangeRate. يمكن استخدام هذا المتغير تقريبا للإشارة إلى مقدار الرمز المميز الأساسي الذي يستحقه كل رمز مميز. صيغة حساب سعر الصرف هي كما يلي:

في الصيغة أعلاه ، يشير totalCash إلى عدد الرموز الأساسية التي تحتفظ بها soToken ، ويشير totalBorrows إلى عدد الرموز الأساسية التي تم إقراضها في سوق معين ، ويشير totalReserves إلى إجمالي مبلغ الاحتياطي (بما في ذلك الفائدة التي يدفعها المقترض) ، ويشير totalSupply إلى عدد soToken التي تم سكها.

عند الاسترداد ، يمكن للمستخدمين تحديد عدد الرموز المميزة الأساسية التي يريدون استردادها ، redeemAmount ، لحساب عدد الرموز المميزة التي يجب إتلافها ، redeemTokens. طريقة الحساب هي تقريبا "redeemTokens = redeemAmount / exchangeRat". لاحظ أنه لا يوجد فقدان للدقة هنا. تعامل مع.

جوهر هذا الهجوم هو أنه عندما تم إنشاء السوق (soToken) ، أجرى المهاجم أول عملية صب الرهن العقاري وسك عدد قليل جدا من soTokens مع كمية صغيرة من الرموز الأساسية ، مما أدى إلى أن تكون قيمة "totalSupply" ل soToken صغيرة جدا. ثم استغل المهاجم ثغرة خسارة دقة عقد Solidity ، ثم أرسل الرمز المميز الأساسي مباشرة إلى عقد soToken (لن يتم سك soToken ، مما يعني أن "totalSupply" يظل دون تغيير ويصبح "totalCash" أكبر) بدلا من طريقة التخزين + الصب إيداع الرمز المميز الأساسي. مثل هذه العملية تجعل متغير "totalCash" في العقد أكبر ، لكن "totalSupply" لم يتغير ، مما يتسبب في زيادة سعر الصرف. في النهاية ، عندما يسترد المهاجم الرمز المميز الأساسي ، يكون soToken الذي يجب تدميره أقل من soToken الذي تم سكه أثناء الرهن العقاري. يستخدم المهاجم soToken المكتسب لإقراض الرمز المميز الأساسي WETH USDC إلى soTokens الأخرى (مثل soWETH و soUSDC) ، وأخيرا يحصل على أرباح تصل إلى 20 مليون دولار أمريكي.

العناوين الرئيسية المشاركة في الهجوم

معاملات التحضير للهجوم:

https://optimistic.etherscan.io/tx/0x45c0ccfd3ca1b4a937feebcb0f5a166c409c9e403070808835d41da40732db96

مهاجمة المعاملات المربحة:

https://optimistic.etherscan.io/tx/0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

مهاجمة العناوين ذات الصلة ب EOA:

0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb

0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

العنوان ذو الصلة بالمهاجم (العقد):

0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8

0x02fa2625825917e9b1f8346a465de1bbc150c5b9

الرمز الأساسي (VELO عملة V2):

0x9560e827af36c94d2ac33a39bce1fe78631088db

عقد الثغرات الأمنية (soVELO ، على غرار cToken الخاص بالمركب):

0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

@tonyke_bot معاملة إنقاذ المستخدم على X:

https://optimistic.etherscan.io/tx/0x816f9e289d8b9dee9a94086c200c0470c6456603c967f82ab559a5931fd181c2

تحليل عملية الهجوم

Recap

أقر فريق مشروع Sonne Finance مؤخرا اقتراحا لإضافة سوق VELO إلى Sonne Finance (https://twitter.com/SonneFinance/status/1786871066075206044)، ورتب خمس معاملات من خلال المحفظة متعددة التواقيع ليتم تنفيذها بعد يومين ( https://optimistic.etherscan.io/tx/0x18ebeb958b50579ce76528ed812025949dfcff8c2673eb0c8bc78b12ba6377b7) ، تستخدم هذه المعاملات الخمس لإنشاء سوق VELO (عقد soVELO) وتعيين بعض التكوينات الرئيسية للسوق ، مثل تحديد نموذج سعر الفائدة ، وتحديد سعر أوراكل ، وتحديد عوامل الرهن العقاري وما إلى ذلك. بعد إنشاء السوق VELO ، يمكن للمستخدمين إيداع VELO الرموز المميزة سك رموز soVELO ، والتي يمكن استخدامها بدورها لاستعارة soTokens الأخرى.

attack preparation

مرحلة التحضير للهجوم مخصصة بشكل أساسي للمهاجم لإنشاء سوق VELO (عقد soVELO) بناء على المعلومات الواردة في اقتراح مشروع Sonne Finance بعد انتهاء فترة قفل الاقتراح لمدة يومين ، وإعداد التكوينات الرئيسية ، والرموز المميزة سك VELO في عقد soVELO عن طريق رهنها. رموز soVELO ، ويرسل أيضا الرموز المميزة VELO التي يحتفظ بها مباشرة إلى عقد soVELO لزيادة سعر الصرف والتحضير للربح من الهجمات اللاحقة.

الخطوات المحددة هي كما يلي:

  1. بعد انتهاء فترة القفل لمدة يومين ، يقوم المهاجم أولا بحزم عمليات المعاملات الأربع الأولى المرتبة في الاقتراح في معاملة واحدة (المعاملة 0x45c0cc) ، والتي تستخدم لإنشاء سوق VELO (عقد soVELO) وتعيين تكوين المفتاح. عند تهيئة VELO السوق، يتم تعيين سعر الصرف على "200,000,000,000,000,000,000,000,000,000".

  2. يستدعي المهاجم الوظيفة "سك" لعقد soVELO إلى الرموز المميزة إيداع VELO ورموز soVELO سك. يحدد المهاجم "mintAmount" على أنه "400,000,001" (عدد الرموز المميزة VELO). كما يتضح من الوظيفة "exchangeRateStoredInternal" ، نظرا لأن "_totalSuppl" لرمز soVELO هو 0 في هذا الوقت ، فإن سعر الصرف هو القيمة المحددة في الخطوة 1. وفقا للصيغة " mintTokens = actualMintAmount / سعر الصرف "، فإن العدد المحسوب لرموز soVELO التي يجب سكها في هذا الوقت هو 2. في قصير ، في هذه الخطوة ، يقوم المهاجم بإيداع الرموز المميزة VELO بقيمة "400,000,001" في عقد soVELO ، ويحصل المهاجم على رموز soVELO بقيمة 2.

soVELO.سك:

  1. أرسل المهاجم الرموز VELO بقيمة "2,552,964,259,704,265,837,526" إلى عقد soVELO عن طريق إرسال الرموز المميزة VELO مباشرة إلى عقد soVELO. في هذا الوقت ، زاد عدد الرموز المميزة VELO التي يحتفظ بها عقد soVELO ، ولكن نظرا لعدم وجود رموز soVELO جديدة ، يتم سك عملة ، لذلك يظل إجمالي العرض دون تغيير ، مما يعني أن سعر الصرف المحسوب وفقا لصيغة حساب سعر الصرف سيصبح أكبر في هذا الوقت.

  2. قام المهاجم بنقل رموز soVELO التي تم الاحتفاظ بها عدة مرات ، وأخيرا نقلها إلى هجوم آخر 0xae4a EOA.

Attack for profit

تتضمن مرحلة ربح الهجوم بشكل أساسي قيام المهاجم بتنفيذ المعاملة الخامسة للاقتراح وإقراض الرموز VELO المميزة مباشرة إلى عقد soVELO من خلال قروض فلاش لزيادة سعر الصرف. ثم يستخدم المهاجم رمز soVELO بقيمة 2 في يده لاستعارة الرموز الأساسية مثل WETH و USDC من عقود soToken الأخرى (مثل soWETH و soUSDC وما إلى ذلك) ، وتصبح هذه الأجزاء ربح المهاجم. ثم ذهب المهاجم لاسترداد رمزه الأساسي في عقد soVELO. نظرا للزيادة في سعر الصرف وفقدان الدقة في حساب رموز soVELO التي يجب تدميرها للاسترداد ، استخدم المهاجم في النهاية رمز soVELO بقيمة 1 فقط. تم استرداد جميع الرموز المميزة VELO المودعة مسبقا تقريبا ، والتي يمكن فهمها على أنها المهاجم باستخدام رموز soVELO الإضافية بقيمة 1 لكسب الرموز الأساسية مثل WETH و USDC عن طريق الاقتراض من soTokens الأخرى. استخدم المهاجم نفس الأسلوب لتكرار الهجوم عدة مرات وحقق أرباحا ضخمة في النهاية.

الخطوات المحددة هي كما يلي:

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

  2. قروض فلاش المهاجم VELO الرموز بقيمة "35,469,150,965,253,049,864,450,449" من تجمع VolatileV2 AMM - USDC / VELO ، مما يؤدي إلى تشغيل وظيفة خطاف المهاجم. في وظيفة الخطاف ، يستمر المهاجم في تنفيذ عملية الهجوم.

  3. يرسل المهاجم الرموز المميزة VELO التي يحتفظ بها إلى عقد soVELO لزيادة سعر الصرف. يوجد حاليا ما مجموعه VELO رمزا بقيمة "35,471,703,929,512,754,530,287,976" في عقد soVELO (مجموع الرموز VELO التي تم تحويلها ثلاث مرات بواسطة المهاجم).

  4. يقوم المهاجم بإنشاء عقد جديد 0xa16388a6210545b27f669d5189648c1722300b8b. في المنشئ ، يقوم بنقل الرموز المميزة 2 soVELO التي يحتفظ بها إلى 0xa163 العقد الذي تم إنشاؤه حديثا (يشار إليه فيما يلي باسم 0xa163 المهاجم).

  5. استخدم المهاجم 0xa163 رموز soVELO التي احتفظ بها لاستعارة WETH بقيمة "265,842,857,910,985,546,929" من soWETH.

  6. يستدعي المهاجم 0xa163 وظيفة "redeemUnderlying" الخاصة ب soVELO ، مع تحديد قيمة الرموز المميزة VELO المستردة على أنها "35,471,603,929,512,754,530,287,976" (تقريبا عدد الرموز المميزة VELO التي قام المهاجم بنقلها أو رهنها مسبقا في عقد soVELO). في هذا الوقت ، من الضروري استخدام الصيغة "redeemTokens = redeemAmountIn / exchangeRate" لحساب عدد رموز soVELO التي يجب إتلافها للاسترداد.

كما يتضح من وظيفة "exchangeRateStoredInternal" ، نظرا لأن _totalSupply هو 2 بدلا من 0 ، يجب حساب قيمة سعر الصرف. وفقا للصيغة "سعر الصرف = (المجموعالنقدية + المجموعالقروض - إجمالي الاحتياطيات) / إجمالي العرض" ، فإن سعر الصرف الحالي هو "17,735,851,964,756,377,265,143,988,000,0 00,000,000,000,000 "، هذه القيمة أكبر بكثير من مجموعة سعر الصرف الأولية "200,000,000,000,000,000,000,000,000,000".

قيمة "redeemTokens" المحسوبة على أساس سعر الصرف الجديد هي "1.99". نظرا لخصائص التقريب الهبوطي للصلابة ، فإن قيمة " redeemTokens " ينتهي بها الأمر إلى 1. هذا يعني أن المهاجم 0xa163 استخدم رموز soVELO بقيمة 1 لاسترداد جميع الرموز المميزة VELO المودعة مسبقا تقريبا. في الوقت نفسه ، حصل المهاجم أيضا 0xa163 على WETH بقيمة "265,842,857,910,985,546,929" اقترضت من soWETH.

soVELO.redeemUnderlying:

soVELO.exchangeRateStoredInternal:

  1. 0xa163 نقل المهاجم جميع WETH المستعارة واسترداد الرموز المميزة VELO إلى مهاجم المستوى الأعلى ، ثم قام بالتدمير الذاتي.

  2. يستدعي المهاجم وظيفة "LiquidateBorrow" ل soWETH لتصفية بعض الأصول المقترضة من 0xa163 العقد الذي تم إنشاؤه حديثا في طلب لاستعادة رمز soVELO المقفل بقيمة 1. في الوقت الحالي ، يحتفظ المهاجم فقط برموز soVELO بقيمة 1.

  3. يستدعي المهاجم وظيفة "سك" ل soVELO ومرة أخرى يرهن ويسك رموز soVELO بغرض جمع ما يكفي من رموز soVELO بقيمة 2 ، ثم ينفذ الخطوات 3-8 أعلاه مرة أخرى للاستفادة من الرموز المميزة الأخرى.

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

How 100 $ يرفع 6.5 مليون

دولار بعد الهجوم ، قام المستخدم @tonyke_bot على X بسك 0.00000011 soVELO عن طريق تخزين 1144 رمز VELO في عقد soVELO في 0x0a284cd المعاملة. السبب في أن هذه العملية يمكن أن تمنع المهاجم من المزيد من الهجمات هو أن هذه المعاملة تغير حجم totalSupply في soVELO وعدد الرموز المميزة VELO totalCash المحتفظ بها ، وتأثير نمو totalSupply على حساب سعر الصرف أكبر من تأثير نمو totalCash. لذلك ، يصبح سعر الصرف أصغر ، مما يتسبب في عدم تمكن المهاجم أطول من استخدام فقدان الدقة لكسب soVELO عند شن هجوم ، مما يجعل الهجوم غير ممكن أطول.

Money tracking

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

1 ،0x4ab93fc50b82d4dc457db85888dfdae28d29b98d

قام المهاجم بتحويل 198 WETH إلى هذا العنوان ، ثم استخدم العنوان نفس طريقة الهجوم للحصول على مكاسب غير مشروعة في المعاملات التالية:

بعد الهجوم ، نقل العنوان المكاسب غير القانونية المذكورة أعلاه إلى 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb.

2 ،0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb

نقل المهاجم 724277 USDC و 2353 VELO إلى هذا العنوان ، وتبادل USDC مقابل ايثر. ثم تم تحويل بعض الأموال على الفور إلى Stargate عبر السلاسل الجسر. وتبقى معظم الأموال غير المشروعة في هذا العنوان:

3 ،0xbd18100a168321701955e348f03d0df4f517c13b

نقل المهاجم 33 WETH إلى هذا العنوان واستخدم سلسلة التقشير لمحاولة غسل الأموال. رابط غسيل الأموال هو كما يلي:

0xbd18100a168321701955e348f03d0df4f517c13b -> 0x7e97b74252b6df53caf386fb4c54d4fb59cb6928 -> 0xc521bde5e53f537ff208970152b75a003 093c2b4 -> 0x9f09ec563222fe52712dc413d0b7b66cb5c7c795。

4 ،0x4fac0651bcc837bf889f6a7d79c1908419fe1770

نقل المهاجم 563 WETH إلى هذا العنوان وبعد ذلك إلى 0x1915F77A116dcE7E9b8F4C4E43CDF81e2aCf9C68 ، دون اتخاذ أي إجراء آخر حتى الآن.

طريقة المهاجم في غسيل الأموال هذه المرة احترافية نسبيا ، وتظهر الأساليب اتجاها للتنوع. لذلك ، بالنسبة لنا نحن المشاركين في Web3 ، يجب أن نستمر في تحسين قدراتنا في مكافحة غسيل الأموال من حيث الأمان ، وتحسين أمان مشاريع Defi من خلال KYT و AML وغيرها من منتجات أمان معاملات blockchain ذات الصلة.

نصيحة أمنية

1、 ابق على اطلاع دائم بتدقيق العقود واختبارها. إجراء تدقيق شامل قبل نشر العقد الذكي ، مع إيلاء اهتمام خاص لجميع الأجزاء التي تنطوي على حسابات مالية. أولا ، استخدم الاختبار الآلي واستفد من التحديثات في الوقت الفعلي لمكتبات الثغرات الأمنية لإجراء عمليات مسح أمنية فعالة للعقود (قامت الصناعة أيضا بفتح بعض أدوات تدقيق الأمان الناضجة تدريجيا ، بما في ذلك ZAN الذكاء الاصطناعي SCAN) ، مع الجمع بين التدقيق اليدوي لاستكشاف المشكلات التي تتطلب معرفة متعمقة بالصناعة.

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

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

  2. عندما تكون هناك متغيرات رئيسية في العقد تعتمد على قيمة " this.balance " أو " token.balanceOf() " ، فأنت بحاجة إلى التفكير بعناية في شروط تغيير المتغير الرئيسي ، مثل ما إذا كان مسموحا بتحويل العملة الأصلية أو الرموز المميزة مباشرة إلى العقد. طريقة لتغيير قيمة المتغير ، أو يمكن تغيير قيمة المتغير فقط عن طريق استدعاء وظيفة معينة.

إخلاء المسؤولية:

  1. تمت إعادة طباعة هذه المقالة من [ZAN]. جميع حقوق الطبع والنشر تنتمي إلى المؤلف الأصلي [ZAN]. إذا كانت هناك اعتراضات على إعادة الطبع هذه ، فيرجى الاتصال بفريق Gate Learn ، وسيقومون بالتعامل معها على الفور.
  2. إخلاء المسؤولية: الآراء ووجهات النظر الواردة في هذه المقالة هي آراء المؤلف فقط ولا تشكل أي نصيحة استثمارية.
  3. تتم ترجمة المقالة إلى لغات أخرى من قبل فريق Gate Learn. يحظر نسخ المقالات المترجمة أو توزيعها أو سرقتها، ما لم يذكر ذلك.
ابدأ التداول الآن
اشترك وتداول لتحصل على جوائز ذهبية بقيمة
100 دولار أمريكي
و
5500 دولارًا أمريكيًا
لتجربة الإدارة المالية الذهبية!