Попередній аналіз інциденту атаки на Balancer V2

3 листопада протокол Balancer V2 та його проекти-форки зазнали атаки на кількох ланцюгах, що призвело до серйозних втрат понад $120M. BlockSec своєчасно попередив [1] та надав первісний аналіз [2]. Це складна атака. Наш первісний аналіз показує, що корінна причина полягає в тому, що зловмисник маніпулював інваріантом, що призвело до спотворення розрахунку ціни BPT (Balancer Pool Token ) – тобто LP токену оулу) та дозволило отримати прибуток через одну операцію batchSwap у певному стабільному пулі.

Фонові знання

1. Масштабування (scaling) та округлення (rounding)

Щоб уніфікувати кількість десяткових знаків різних токенів, контракт Balancer буде:

  • upscale:збільшити баланс та суму до єдиної внутрішньої точності перед виконанням розрахунків;
  • зменшення масштабу: повернення результату до початкової точності та виконання направленого округлення (наприклад, на вхідному боці зазвичай округлюють вгору, щоб забезпечити, що резервуар не втрачає; вихідний шлях часто має округлення вниз).

Висновок: у межах однієї транзакції асиметричний напрямок округлення на різних етапах, при повторному виконанні на дуже малих кроках, може призвести до систематичного незначного відхилення.

2. D та ціна BPT

На Balancer V2 протокол вплинула атака на Composable Stable Pool [3] та на форк протоколу. Stable Pool призначений для активів, які, як очікується, можуть підтримувати співвідношення обміну близько 1:1 (або обмінюватися за відомим курсом), дозволяючи здійснювати великі обміни без значних цінових коливань, тим самим значно підвищуючи ефективність використання капіталу між подібними або пов'язаними активами.

  • Цей пул використовує Stable Math (модель StableSwap на основі Curve), де інваріант D представляє “віртуальну загальну вартість” пулу.
  • BPT (Pool LP Token) ціна приблизно становить:

!

З наведеного виразу видно, що якщо D на рахунку зменшиться (навіть якщо фактичні кошти не зникли), то ціна BPT стане дешевшою. BTP представляє частку Pool, яка використовується для розрахунку того, скільки резерву в Pool можна отримати під час виведення ліквідності, тому якщо нападник зможе отримати більше BPT, в кінці він зможе отримати прибуток під час виведення ліквідності.

Аналіз атаки

Візьмемо за приклад атакуючу транзакцію на Arbitrum, операцію batchSwap можна розділити на три етапи:

Перший етап: Зловмисник обмінює BPT на базовий актив, щоб точно налаштувати баланс одного з токенів (cbETH) до критичної точки округлення (кількість = 9). Цей етап створює умови для втрати точності на наступному етапі.

Другий етап: зловмисник використовує ретельно збудовану кількість (= 8), щоб обміняти інший базовий актив (wstETH) на cbETH. Оскільки при масштабуванні кількості токенів було проведено округлення вниз, обчислене Δx трохи менше (з 8.918 стало 8), що призводить до недооцінки Δy та зменшення інваріанти D (взятої з моделі StableSwap Curve). Оскільки ціна BPT = D / totalSupply, ціна BPT штучно занижується.

!

Третя стадія: Зловмисник обмінює базові активи назад на BP, отримуючи прибуток від знижених цін на BP, одночасно відновлюючи баланс у пулі — отримує більше токенів BP.

Нарешті, зловмисник використовує ще одну вигідну угоду для виведення ліквідності, отримуючи додаткові BPT, щоб отримати інші основні активи в пулі (cbETH та wstETH), таким чином отримуючи прибуток.

Атакуюча транзакція:

Отримання прибутку від торгівлі:

Посилання:

[1]

[2]

[3]

BPT-5.05%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Репост
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити