في يوم 3 نوفمبر، تعرض بروتوكول Balancer V2 ومشاريع الشوكة الخاصة به للهجوم على سلاسل متعددة، مما أدى إلى خسارة فادحة تجاوزت 120 مليون دولار. أصدرت BlockSec تحذيرًا مبكرًا في أول فرصة [1] وأعطت استنتاجًا أوليًا للتحليل [2]. كان هذا هجومًا معقدًا للغاية. أظهر تحليلنا الأولي أن السبب الجذري هو أن المهاجم تلاعب بالثابت، وبالتالي تشويه حساب سعر BPT (رمز مجموعة Balancer) - أي رمز LP الخاص بـ
ool، بحيث يمكنه الاستفادة من مجموعة مستقرة من خلال عملية batchSwap. المعرفة الأساسية 1. التوسع والتقريب لتوحيد الأماكن العشرية للرموز المختلفة، سيقوم عقد Balancer بما يلي: الترقية: تكبير الرصيد وقياسه إلى دقة داخلية موحدة قبل الحساب؛ downscale: تقليص النتيجة إلى الدقة الأصلية وإجراء تقريب اتجاهي (على سبيل المثال، يتم تقريب المدخلات عادةً لأعلى لضمان عدم تلقي المجمع أقل؛ غالبًا ما يتم اقتطاع مسار الإخراج لأسفل). الاستنتاج: داخل نفس المعاملة، يكون اتجاه التقريب المستخدم في المراحل المختلفة غير متماثل، مما سيؤدي إلى انحراف طفيف منهجي عند تنفيذ الخطوات الصغيرة جدًا بشكل متكرر. 2. تتأثر أسعار D وBPT [3] وبروتوكول الشوكة بهذا الهجوم. يتم استخدام Composable Stable Pool لبروتوكول Balancer V2 للأصول التي من المتوقع أن تحافظ على نسبة تبادل قريبة 1: 1 (أو التبادل بسعر صرف معروف)، مما يسمح بالتبادلات واسعة النطاق دون صدمات سعرية كبيرة، وبالتالي تحسين كفاءة استخدام رأس المال بشكل كبير بين الأصول المتشابهة أو ذات الصلة. يستخدم هذا المجمع نموذج Stable Math (نموذج StableSwap قائم على Curve)، ويمثل الثابت D القيمة الإجمالية الافتراضية للمجمع. سعر BPT (رمز LP الخاص بالمجمع) هو تقريبًا: [صورة لسعر BPT]. من الصيغة أعلاه، يتضح أنه إذا أمكن تصغير D نظريًا (حتى في حال عدم خسارة أي أموال)، فسيكون سعر BPT أقل. يمثل BTP حصة المجمع، ويُستخدم لحساب احتياطيات المجمع التي يمكن للمهاجم الحصول عليها عند سحب السيولة. لذلك، إذا تمكن المهاجم من الحصول على المزيد من BPT، فسيحقق ربحًا عند سحب السيولة. تحليل الهجوم: بأخذ معاملة هجوم على Arbitrum كمثال، يمكن تقسيم عملية batchSwap إلى ثلاث مراحل: المرحلة 1: يتبادل المهاجم BPT مقابل الأصل الأساسي لضبط رصيد أحد الرموز (cbETH) بدقة إلى حد التقريب (الكمية = 9). تمهد هذه الخطوة الطريق لفقدان الدقة في المرحلة التالية. المرحلة الثانية: استخدم المهاجمون كمية مصممة بعناية (= 8) للتبديل بين أصل أساسي آخر (wstETH) و cbETH. بسبب التقريب للأسفل عند قياس كمية الرمز، كانت Δx المحسوبة أصغر قليلاً (من 8.918 إلى 8)، مما أدى إلى التقليل من تقدير Δy وثبات أصغر D (مشتق من نموذج StableSwap الخاص بـ Curve). نظرًا لأن سعر BPT = D / totalSupply، فقد تم قمع سعر BPT بشكل مصطنع. المرحلة الثالثة: يعيد المهاجم الأصول الأساسية إلى BPT، مُعيدًا التوازن في المجمع مستفيدًا من انخفاض سعر BPT، مكتسبًا المزيد من رموز BPT. وأخيرًا، يستخدم المهاجم معاملة جني أرباح أخرى لسحب السيولة، مستخدمًا بذلك BPT الإضافي للاستحواذ على أصول أساسية أخرى (cbETH وwstETH) في المجمع محققًا الربح. معاملة الهجوم: leaf="">https://app.blocksec.com/explorer/tx/arbitrum/0x7da32ebc615d0f29a24cacf9d18254bea3a2c730084c690ee40238b1d8b55773
صفقات مربحة:
https://app.blocksec.com/explorer/tx/arbitrum/0x4e5be713d986bcf4afb2ba7362525622acf9c95310bd77cd5911e7ef12d871a9
المرجع:
[1] https://x.com/Phalcon_xyz/status/1985262010347696312
[2] https://x.com/Phalcon_xyz/status/1985302779263643915
[3] https://docs-v2.balancer.fi/concepts/pools/composable-stable.html