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).
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Предварительный анализ инцидента атаки на Balancer V2
3 ноября протокол Balancer V2 и его форк-проекты подверглись атакам на нескольких цепочках, что привело к серьезным потерям более $120M. BlockSec своевременно предупредила [1] и предоставила предварительный анализ [2]. Это высококомплексное событие атаки. Наш предварительный анализ показывает, что основная причина заключается в том, что злоумышленник манипулировал инвариантом, искажающим расчет цены BPT (Balancer Pool Token ) – то есть LP токен пула) и позволяющим ему получить прибыль через операцию batchSwap в одном из стабильных пулов.
Фоновая информация
1. Масштабирование (scaling) и округление (rounding)
Для унификации дробных знаков различных токенов, контракт Balancer будет:
Заключение: в одной и той же транзакции несоответствие направлений округления на разных этапах может привести к систематическим незначительным отклонениям при многократном выполнении с минимальными шагами.
2. D и цена BPT
Под атакой оказался Протокол Composable Stable Pool [3] на базе Balancer V2, а также форк этого протокола. Stable Pool предназначен для активов, которые, как ожидается, могут поддерживать соотношение обмена близким к 1:1 (или обмениваться по известному курсу), что позволяет осуществлять крупные обмены без значительного ценового шока, тем самым значительно повышая эффективность использования капитала между схожими или связанными активами.
!
Из вышеуказанной формулы видно, что если 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]