Предварительный анализ инцидента атаки на Balancer V2

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

Фоновая информация

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

Для унификации дробных знаков различных токенов, контракт Balancer будет:

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

Заключение: в одной и той же транзакции несоответствие направлений округления на разных этапах может привести к систематическим незначительным отклонениям при многократном выполнении с минимальными шагами.

2. D и цена BPT

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

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

!

Из вышеуказанной формулы видно, что если D на балансе уменьшится (даже если средства фактически не потеряны), то цена BPT станет дешевле. BTP представляет собой долю в пуле, используемую для расчета того, сколько резервов из пула можно получить при выводе ликвидности. Поэтому, если злоумышленник сможет получить больше BPT, в конечном итоге он сможет получить прибыль при выводе ликвидности.

Анализ атак

В качестве примера атакующей транзакции на Arbitrum, операция batchSwap может быть разделена на три этапа:

Первый этап: Атакующий обменивает BPT на базовый актив, чтобы точно отрегулировать баланс одного из токенов (cbETH) до критической точки округления (количество = 9). Этот шаг создает условия для потери точности на следующем этапе.

Этап 2: Атакующий использует тщательно подобранное количество (= 8) для обмена между активом нижнего уровня (wstETH) и cbETH. Поскольку при масштабировании количества токенов произошло округление вниз, вычисленное Δx стало немного меньше (с 8.918 стало 8), что привело к недооценке Δy и уменьшению инварианта D (основанного на модели StableSwap от Curve). Поскольку цена BPT = D / totalSupply, цена BPT была искусственно занижена.

!

Третья стадия: Атакующий будет обратно обменивать базовые активы на BP, извлекая выгоду из низкой цены BP и восстанавливая баланс в пуле – получая больше токенов BP.

В конце концов, атакующий использует другую выгодную сделку для вывода ликвидности, тем самым получая дополнительные BPT, чтобы извлечь прибыль из других базовых активов в пуле (cbETH и wstETH).

Атакующая транзакция:

Прибыльная торговля:

Ссылка:

[1]

[2]

[3]

BPT1.57%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить