В прошлую среду (12 марта) один криптотрейдер потерял 215 000 долларов из-за атаки MEV, что стало вирусным.
Проще говоря, этот пользователь хотел обменять стабильную монету USDC на сумму 220,800 долларов в пуле ликвидности Uniswap v3 на эквивалентную USDT, но в итоге получил всего 5,272 USDT, за считанные секунды активы мгновенно испарились на 215,700 долларов, см. рисунок ниже.
На изображении показан скриншот записи этой транзакции в блокчейне. Основная причина этой трагедии заключается в том, что произошла встреча с печально известной в мире блокчейна «сандвич-атакой» (Sandwich Attack).
Первым, кто раскрыл эту атаку MEV, был Майкл (см. изображение выше), который объяснил:
MEV бот совершил фронт-ран по транзакции, заменив всю ликвидность USDC. После выполнения транзакции они вернули ликвидность. Нападающий заплатил строителю блока (bobTheBuilder) 200 тыс. долларов и получил прибыль в 8 тыс. долларов от этой транзакции.
В приведённом выше содержании есть опечатка, робот-атакующий MEV выводит большое количество USDT, а не USDC.
Однако, после того как вы прочитали его объяснения и новостные отчеты, вы, возможно, все еще в недоумении, потому что в них слишком много новых терминов, таких как сэндвич-атака (Sandwich Attack), фронт-ран (front-ran the tx), вернуть ликвидность (put back the liquidity), дать чаевые строителю блока (tipped a block builder) и т.д.
Сегодня мы возьмем этот случай MEV-атаки в качестве примера, разберем весь процесс и проведем вас в темный мир MEV.
Во-первых, нам нужно объяснить, что такое MEV.
Что такое MEV?
MEV изначально назывался извлекаемой ценностью майнеров (Miner Extractable Value), что означает дополнительную прибыль, которую майнеры могут получить, переупорядочивая, вставляя или исключая транзакции в блоках блокчейна. Эти действия могут привести к тому, что обычные пользователи будут нести более высокие затраты или получать менее выгодные цены на транзакции.
С переходом блокчейн-сетей, таких как Эфириум, от механизма консенсуса Proof-of-Work (PoW) к механизму консенсуса Proof-of-Stake (PoS), власть контроля над порядком транзакций перешла от майнеров к валидаторам. Таким образом, термин также соответствующим образом изменился с «Извлекаемая ценность майнера» (Miner Extractable Value) на «Максимально извлекаемая ценность» (Maximal Extractable Value).
Несмотря на то, что название изменилось, основная концепция извлечения ценности путем манипулирования порядком сделок остается прежней.
Содержимое выше все еще немного профессионально, вам нужно только запомнить: MEV существует, потому что у предыдущих майнеров и текущих валидаторов есть право сортировать транзакции в памяти (mempool). Эта сортировка происходит в блоке, и сейчас в Ethereum примерно раз в 11 секунд создается новый блок, это означает, что каждые 11 секунд осуществляется такая власть. Аналогично, эта MEV-атака также была реализована через сортировку валидаторов.
Нажмите на эту ссылку, и вы увидите содержание транзакций блока с номером 22029771, связанным с этой атакой, как показано на рисунке ниже.
Обратите внимание, что сделки на рисунках 1, 2 и 3 — это атака MEV, о которой упоминалось в начале этой статьи, и этот порядок был установлен валидатором (bobTheBuilder). Почему это возможно?
Принцип MEV
Чтобы понять, как работает MEV, нам нужно сначала разобраться, как блокчейн записывает и обновляет информацию.
2.1 Механизм обновления состояния блокчейна
Блокчейн можно рассматривать как постоянно растущий реестр, который фиксирует все произошедшие транзакции. Состояние этого реестра, такое как баланс каждого счета, объем резервов различных токенов в торговом пуле Uniswap и т.д., определяется предыдущими транзакциями.
Когда новый блок добавляется в блокчейн, все транзакции, содержащиеся в этом блоке, будут выполняться поочередно в соответствии с их порядком в блоке. С каждой выполненной транзакцией глобальное состояние блокчейна будет изменяться соответственно.
То есть, важен не только порядок блоков, но и порядок транзакций внутри блоков. Так как же определяется порядок транзакций внутри блока?
2.2 Валидатор определяет порядок транзакций
Когда пользователь инициирует транзакцию в блокчейн-сети, например, транзакцию по обмену USDC на USDT через Uniswap, она сначала передается узлам сети. После предварительной проверки эта транзакция попадает в область, называемую «пулом памяти» (mempool). Пул памяти похож на зону ожидания, где транзакции еще не подтверждены и не добавлены в следующий блок блокчейна.
Ранее шахтеры (в системе PoW), теперь валидаторы (в системе PoS) имеют право выбирать транзакции из пула памяти и решать порядок их расположения в следующем блоке.
Порядок транзакций в блоке имеет решающее значение. Перед тем как блок будет окончательно подтвержден и добавлен в блокчейн, транзакции в этом блоке выполняются в порядке, установленном валидатором (например, bobTheBuilder). Это означает, что если блок содержит несколько транзакций, взаимодействующих с одним и тем же пулом транзакций, то порядок их выполнения напрямую повлияет на результат каждой транзакции.
Эта способность позволяет валидатору приоритизировать определенные транзакции, задерживать или исключать другие транзакции, а также вставлять свои собственные транзакции для максимизации прибыли.
Сортировка этой сделки также важна, и при малейшей ошибке невозможно будет успешно атаковать.
2.3 Сортировка транзакций в результате MEV-атаки
Давайте сначала кратко ознакомимся с тремя сделками, связанными с этой атакой MEV:
Торговля 1 (первая сделка злоумышленника): выполняется до сделки жертвы. Цель этой сделки, как правило, заключается в том, чтобы увеличить цену токенов, которые жертва хочет обменять.
Торговля 2 (сделка жертвы): выполняется после первой сделки злоумышленника. Из-за предыдущих действий злоумышленника цена в пуле сделок в данный момент неблагоприятна для жертвы, и ей нужно заплатить больше USDC, чтобы обменять их на эквивалентный USDT, или она может обменять только на меньшее количество USDT.
Торговля 3 (вторая сделка атакующего): выполняется после сделки жертвы. Цель этой сделки обычно заключается в том, чтобы извлечь выгоду из новых ценовых колебаний, вызванных сделкой жертвы.
В этот раз валидатором MEV-атаки стал bob-The-Builder.eth, он отвечал за упорядочивание транзакций в таком порядке: 1, 2, 3. Конечно, bobTheBuilder тоже не работал бесплатно, он получил более 100 ETH за участие в этой сортировке, в то время как инициатор MEV-атаки заработал всего 8000 долларов. Их доход поступал именно от второй транзакции жертвы.
Одним словом, злоумышленник (MEV-робот) сговорился с валидатором (bobTheBuilder), в результате чего жертва второй транзакции потеряла 215 000 долларов, из которых злоумышленник получил 8 000 долларов, а валидатор - 200 000 долларов (более 100 ETH).
У атаки, которую они используют, есть образное название — сэндвич-атака. Давайте разберем это по шагам, чтобы вы полностью поняли, как работает довольно сложная сэндвич-атака MEV.
Полный анализ сэндвич-атаки
Термин "сэндвич-атака" (Sandwich Attack) используется потому, что две сделки злоумышленника (сделка 1 и сделка 3) располагаются до и после сделки жертвы (сделка 2), таким образом вся последовательность сделок напоминает структуру сэндвича (см. выше).
Торговля 1 и торговля 3 выполняют разные функции. Проще говоря, торговля 1 отвечает за совершение преступления, а торговля 3 отвечает за распределение награбленного. Конкретно весь процесс выглядит так:
3.1 Торговля 1, ответственная за повышение цены USDT
Нажмите на ссылку сделки номер 1 на изображении выше, и вы увидите подробное содержание сделки номер 1. Атакующий очень прямо повысил цену USDT, просто обменяв все 17,58 миллиона USDT на 18,65 миллиона USDC, см. рисунок ниже.
В это время в ликвидном пуле осталось много USDC и немного USDT. Если верить новостным отчетам, до атаки в ликвидности Uniswap было около 19,8 миллиона USDC и USDT, то после выполнения сделки 1 в пуле останется лишь 2,22 миллиона USDT (=1980-1758), а баланс USDC увеличится до примерно 38,45 миллиона (=1980+1865).
На данный момент обменный курс между USDC и USDT в этом пуле уже далеко не 1:1, а составляет 1:17, что означает, что сейчас нужно 17 USDC, чтобы обменять на 1 USDT. Однако этот курс лишь ориентировочный, поскольку этот пул является V3, и ликвидность в нем распределена неравномерно.
Еще одно, что я хочу вам сказать. На самом деле, злоумышленник не использовал 1865 миллионов USDC за один раз, фактически использованный USDC составил 1,09 миллиона, даже не 6%. Как он это сделал? Мы подробнее расскажем об этом, когда закончим рассказ о нападении.
3.2 Сделка 2, выполнение 22 тысяч USDC обмен на USDT
Нажмите на ссылку для обмена 2 на изображении выше, чтобы увидеть рисунок ниже.
Как показано на рисунке, транзакция 2 жертвы из-за влияния транзакции 1 получила только 5272 USDT из 220000 USDC, в результате чего она незаметно потеряла 170000 USDT. Почему говорится, что это произошло незаметно? Потому что, если жертва совершала сделку через Uniswap, то при подаче транзакции она увидела бы следующий интерфейс.
На приведённой выше иллюстрации вы увидите, что жертва минимально должна была получить 220000, что должно быть гарантировано. Причина, по которой жертва в конечном итоге получила всего 5000 USDT, заключается в том, что произошёл колоссальный проскальзывание, превышающее 90%. Однако у Uniswap есть предельное значение максимального проскальзывания 5.5%, как показано на следующем изображении.
То есть, если жертва совершала сделку через фронтэнд Uniswap, то она должна была получить как минимум 208381 USDT (= 220510 * 94.5%). Вы, возможно, задаетесь вопросом, почему в записи блокчейна выше указано, что эта сделка была осуществлена в «Uniswap V3»?
Поскольку фронт-энд и бэк-энд блокчейн-транзакций разделены. Упомянутая «Uniswap V3» относится к пулу ликвидности USDC-USDT Uniswap, который является общедоступным, и любой фронт-энд транзакции может использовать этот пул для торговли.
Также из-за этого некоторые сомневаются, что жертва проста, что это не обычный человек, иначе бы не возникло такого большого проскальзывания, возможно, это использование атак MEV для отмывания денег. Об этом мы поговорим позже.
3.3 Торговля 3, сбор урожая + дележка
Нажмите на ссылку, чтобы увидеть детали сделки 3, как показано на изображении выше. Давайте по очереди обсудим три сделки: A, B и C.
Торговля A, восстановила ликвидность в пуле, обменяв 17,32 миллиона USDT на 18,60 миллиона USDC;
Торговля B, подготовка к дележу, обменять часть прибыли — 204000 USDC на 105 ETH;
Торговля C, дележка, выплатить 100.558 ETH валидатору bob-The-Builder.eth.
На этом атака сэндвича завершена.
Теперь давайте ответим на один очень важный вопрос, упомянутый выше: как злоумышленник с помощью 1,09 миллиона USDC осуществил атаку на 18 миллионов.
Как злоумышленник осуществил атаку на пул на 18 миллионов USDC
Атакующий смог осуществить атаку на уровне 18 миллионов долларов, используя лишь 1,09 миллиона USDC капитала, благодаря чудесному и уникальному механизму в мире блокчейна — мгновенному обмену Uniswap V3 (Flash Swap).
4.1 Что такое Мгновенный Обмен (Flash Swap)?
Простыми словами:
Мгновенный обмен позволяет пользователям сначала извлекать активы из пула Uniswap в одной и той же сделке, а затем погашать их другой активом (или тем же активом плюс комиссия).
Uniswap позволяет такое поведение «сначала забрать, потом заплатить», если вся операция завершена в рамках одной транзакции. Обратите внимание, что это должно быть выполнено в одной транзакции. Этот дизайн создан для обеспечения безопасности самой платформы Uniswap:
Безрисковое кредитование: Uniswap позволяет пользователям временно выводить средства из пула без залога (аналогично заимствованию), но должен погасить их немедленно по окончании транзакции.
Атомарность (Atomicity): Операция должна быть атомарной, она должна либо полностью завершиться успешно (возврат средств), либо полностью провалиться (откат транзакции).
Дизайн молниеносного обмена изначально был предназначен для более эффективного арбитража в сети, но, к сожалению, был использован злоумышленниками MEV и стал инструментом манипуляции рынком.
4.2 Как работает молниеносный обмен?
Теперь давайте посмотрим на рисунок и шаг за шагом разберемся, как была осуществлена молниеносная обмена в этой атаке, см. рисунок ниже.
F1 атакующий занял 1,09 миллиона USDC из AAVE, используя свои 701 WETH;
Атакующий F2 инициирует запрос на молниеносный обмен, сначала выводя 17,58 миллиона USDT из пула Uniswap (на этом этапе не требуется предварительная оплата); временно увеличив свой баланс на 17,58 миллиона USDT.
Атакующий быстро вложил 17,58 миллиона USDT в пул Curve, обменяв на 17,55 миллиона USDC. На счету атакующего USDT уменьшилось на 17,58 миллиона, а USDC увеличилось на 17,55 миллиона. Из приведенной ниже схемы вы увидите, что атакующий выбрал Curve, потому что здесь высокая ликвидность: более 70,54 миллиона USDT и 50,71 миллиона USDC, а проскальзывание относительно низкое.
Атакующий F4 возвращает 17,55 миллиона USDC, полученных через Curve, плюс свои изначально подготовленные 1,09 миллиона USDC (полученные от займа Aave), всего 18,64 миллиона USDC, одним платежом возвращает Uniswap, завершив обмен за мгновение.
После этой сделки (сделка 1) баланс счета злоумышленника уменьшился на 1,09 миллиона USDC, потому что из 18,64 миллиона USDC, возвращенных в Uniswap, только 17,55 миллиона USDC были обменены на Curve, а оставшиеся 1,09 миллиона USDC - это собственные средства злоумышленника.
Вы, должно быть, заметили, что эта сделка на самом деле привела к убыткам для атакующего в 1,09 миллиона. Однако в следующей сделке 3, также используя метод молниеносного обмена, он не только вернул 1,09 миллиона USDC, но и заработал более 200 тысяч.
Далее мы шаг за шагом проанализируем данные по торговле 3.
злоумышленник K1 с молниеносным свопом для вывода 18,6 млн USDC на Uniswap;
Атакующий K2 обменял 17,3 миллиона USDC, только что выведенных из Uniswap, на 17,32 миллиона USDT.
K1 атакующий вернул 17,32 миллиона USDT, полученные от обмена на Curve, обратно в Uniswap. Мгновенный обмен завершен. Вам следует обратить внимание на то, что атакующий получил 17,32 миллиона USDT, потратив всего 17,30 миллиона USDC через K2. Из оставшихся 1,3 миллиона (= 1,86-1,73) миллиона USDC, 1,09 миллиона составляют собственные средства, а оставшиеся 210 тысяч USDC — это прибыль от этой атаки.
K3 атакующий вернул основной капитал в AAVE, забрал свои 701 WETH, одновременно обменяв 200000 USDC на 105 ETH, и отправил 100.558 ETH валидатору в качестве чаевых (примерно 200000 долларов), оставив себе менее 10000 долларов прибыли.
Вы, возможно, удивитесь, почему злоумышленники готовы отдать до 200000 долларов прибыли валидаторам?
4.3 Почему нужно давать 200000 долларов «чаевых»?
На самом деле, это не щедрость, а необходимое условие для успешной атаки MEV в виде сэндвич-атаки:
Ключом к успешной атаке является точное управление порядком транзакций, а контролировать порядок транзакций как раз и является валидатор (bobTheBuilder).
Валидация помогает злоумышленникам не только гарантировать, что транзакции жертвы находятся между атакующими транзакциями, но и, что более важно, валидация может гарантировать, что другие конкурирующие MEV роботы не смогут встать в очередь или помешать успешному завершению атаки.
Таким образом, злоумышленник предпочтет пожертвовать подавляющей частью прибыли, чтобы обеспечить успешность атаки, и оставить определенную прибыль для себя.
Следует особенно отметить, что атаки MEV также имеют свои затраты. В Uniswap при молниеносном обмене есть затраты, в Curve при торговле тоже есть затраты, но из-за низких ставок, примерно 0,01–0,05%, они незначительны по сравнению с доходами от атак.
В конце концов, напомню, что защита от атак MEV на самом деле очень проста, вам нужно только: установить допустимый уровень проскальзывания, не превышающий 1%; большие сделки выполнять частями. Так что вам не нужно отказываться от торговли на DEX (децентрализованной бирже) из-за страха.
Заключение: Предостережение и启示 в темном лесу
Это нападение MEV на сумму 215 тысяч долларов США, безусловно, является еще одним жестоким проявлением закона «темного леса» в мире блокчейна. Оно ярко демонстрирует сложные игры, которые скрываются в децентрализованной и безразрешительной среде, где скрываются механизмы для извлечения выгоды.
С более высокой точки зрения, появление MEV является отражением двустороннего эффекта прозрачности и программируемости блокчейна.
С одной стороны, все записи о транзакциях являются открытыми и доступными для проверки, что позволяет отслеживать и анализировать атаки.
С другой стороны, сложная логика смарт-контрактов и определенность выполнения сделок также предоставляют умным участникам возможности для маневра.
Это не простое хакерство, а глубокое понимание и использование базовых механизмов блокчейна, которое испытывает надежность проектирования протокола и бросает вызов осознанию рисков участников.
Понимание MEV и осознание его рисков помогут лучше навигировать в этом цифровом мире, полном возможностей, но также скрывающем опасности. Помните, что в «темном лесу» блокчейна только уважение к правилам и повышение осознания могут помочь избежать того, чтобы стать следующей жертвой.
Это также тот эффект, которого я хочу достичь с помощью этой статьи.
Содержание носит исключительно справочный характер и не является предложением или офертой. Консультации по инвестициям, налогообложению или юридическим вопросам не предоставляются. Более подробную информацию о рисках см. в разделе «Дисклеймер».
Полный анализ атак MEV-сэндвичей: от сортировки до смертельной цепи обменов
Автор: Daii
В прошлую среду (12 марта) один криптотрейдер потерял 215 000 долларов из-за атаки MEV, что стало вирусным.
Проще говоря, этот пользователь хотел обменять стабильную монету USDC на сумму 220,800 долларов в пуле ликвидности Uniswap v3 на эквивалентную USDT, но в итоге получил всего 5,272 USDT, за считанные секунды активы мгновенно испарились на 215,700 долларов, см. рисунок ниже.
На изображении показан скриншот записи этой транзакции в блокчейне. Основная причина этой трагедии заключается в том, что произошла встреча с печально известной в мире блокчейна «сандвич-атакой» (Sandwich Attack).
Первым, кто раскрыл эту атаку MEV, был Майкл (см. изображение выше), который объяснил:
MEV бот совершил фронт-ран по транзакции, заменив всю ликвидность USDC. После выполнения транзакции они вернули ликвидность. Нападающий заплатил строителю блока (bobTheBuilder) 200 тыс. долларов и получил прибыль в 8 тыс. долларов от этой транзакции.
В приведённом выше содержании есть опечатка, робот-атакующий MEV выводит большое количество USDT, а не USDC.
Однако, после того как вы прочитали его объяснения и новостные отчеты, вы, возможно, все еще в недоумении, потому что в них слишком много новых терминов, таких как сэндвич-атака (Sandwich Attack), фронт-ран (front-ran the tx), вернуть ликвидность (put back the liquidity), дать чаевые строителю блока (tipped a block builder) и т.д.
Сегодня мы возьмем этот случай MEV-атаки в качестве примера, разберем весь процесс и проведем вас в темный мир MEV.
Во-первых, нам нужно объяснить, что такое MEV.
MEV изначально назывался извлекаемой ценностью майнеров (Miner Extractable Value), что означает дополнительную прибыль, которую майнеры могут получить, переупорядочивая, вставляя или исключая транзакции в блоках блокчейна. Эти действия могут привести к тому, что обычные пользователи будут нести более высокие затраты или получать менее выгодные цены на транзакции.
С переходом блокчейн-сетей, таких как Эфириум, от механизма консенсуса Proof-of-Work (PoW) к механизму консенсуса Proof-of-Stake (PoS), власть контроля над порядком транзакций перешла от майнеров к валидаторам. Таким образом, термин также соответствующим образом изменился с «Извлекаемая ценность майнера» (Miner Extractable Value) на «Максимально извлекаемая ценность» (Maximal Extractable Value).
Несмотря на то, что название изменилось, основная концепция извлечения ценности путем манипулирования порядком сделок остается прежней.
Содержимое выше все еще немного профессионально, вам нужно только запомнить: MEV существует, потому что у предыдущих майнеров и текущих валидаторов есть право сортировать транзакции в памяти (mempool). Эта сортировка происходит в блоке, и сейчас в Ethereum примерно раз в 11 секунд создается новый блок, это означает, что каждые 11 секунд осуществляется такая власть. Аналогично, эта MEV-атака также была реализована через сортировку валидаторов.
Нажмите на эту ссылку, и вы увидите содержание транзакций блока с номером 22029771, связанным с этой атакой, как показано на рисунке ниже.
Обратите внимание, что сделки на рисунках 1, 2 и 3 — это атака MEV, о которой упоминалось в начале этой статьи, и этот порядок был установлен валидатором (bobTheBuilder). Почему это возможно?
Чтобы понять, как работает MEV, нам нужно сначала разобраться, как блокчейн записывает и обновляет информацию.
2.1 Механизм обновления состояния блокчейна
Блокчейн можно рассматривать как постоянно растущий реестр, который фиксирует все произошедшие транзакции. Состояние этого реестра, такое как баланс каждого счета, объем резервов различных токенов в торговом пуле Uniswap и т.д., определяется предыдущими транзакциями.
Когда новый блок добавляется в блокчейн, все транзакции, содержащиеся в этом блоке, будут выполняться поочередно в соответствии с их порядком в блоке. С каждой выполненной транзакцией глобальное состояние блокчейна будет изменяться соответственно.
То есть, важен не только порядок блоков, но и порядок транзакций внутри блоков. Так как же определяется порядок транзакций внутри блока?
2.2 Валидатор определяет порядок транзакций
Когда пользователь инициирует транзакцию в блокчейн-сети, например, транзакцию по обмену USDC на USDT через Uniswap, она сначала передается узлам сети. После предварительной проверки эта транзакция попадает в область, называемую «пулом памяти» (mempool). Пул памяти похож на зону ожидания, где транзакции еще не подтверждены и не добавлены в следующий блок блокчейна.
Ранее шахтеры (в системе PoW), теперь валидаторы (в системе PoS) имеют право выбирать транзакции из пула памяти и решать порядок их расположения в следующем блоке.
Порядок транзакций в блоке имеет решающее значение. Перед тем как блок будет окончательно подтвержден и добавлен в блокчейн, транзакции в этом блоке выполняются в порядке, установленном валидатором (например, bobTheBuilder). Это означает, что если блок содержит несколько транзакций, взаимодействующих с одним и тем же пулом транзакций, то порядок их выполнения напрямую повлияет на результат каждой транзакции.
Эта способность позволяет валидатору приоритизировать определенные транзакции, задерживать или исключать другие транзакции, а также вставлять свои собственные транзакции для максимизации прибыли.
Сортировка этой сделки также важна, и при малейшей ошибке невозможно будет успешно атаковать.
2.3 Сортировка транзакций в результате MEV-атаки
Давайте сначала кратко ознакомимся с тремя сделками, связанными с этой атакой MEV:
Торговля 1 (первая сделка злоумышленника): выполняется до сделки жертвы. Цель этой сделки, как правило, заключается в том, чтобы увеличить цену токенов, которые жертва хочет обменять.
Торговля 2 (сделка жертвы): выполняется после первой сделки злоумышленника. Из-за предыдущих действий злоумышленника цена в пуле сделок в данный момент неблагоприятна для жертвы, и ей нужно заплатить больше USDC, чтобы обменять их на эквивалентный USDT, или она может обменять только на меньшее количество USDT.
Торговля 3 (вторая сделка атакующего): выполняется после сделки жертвы. Цель этой сделки обычно заключается в том, чтобы извлечь выгоду из новых ценовых колебаний, вызванных сделкой жертвы.
В этот раз валидатором MEV-атаки стал bob-The-Builder.eth, он отвечал за упорядочивание транзакций в таком порядке: 1, 2, 3. Конечно, bobTheBuilder тоже не работал бесплатно, он получил более 100 ETH за участие в этой сортировке, в то время как инициатор MEV-атаки заработал всего 8000 долларов. Их доход поступал именно от второй транзакции жертвы.
Одним словом, злоумышленник (MEV-робот) сговорился с валидатором (bobTheBuilder), в результате чего жертва второй транзакции потеряла 215 000 долларов, из которых злоумышленник получил 8 000 долларов, а валидатор - 200 000 долларов (более 100 ETH).
У атаки, которую они используют, есть образное название — сэндвич-атака. Давайте разберем это по шагам, чтобы вы полностью поняли, как работает довольно сложная сэндвич-атака MEV.
Термин "сэндвич-атака" (Sandwich Attack) используется потому, что две сделки злоумышленника (сделка 1 и сделка 3) располагаются до и после сделки жертвы (сделка 2), таким образом вся последовательность сделок напоминает структуру сэндвича (см. выше).
Торговля 1 и торговля 3 выполняют разные функции. Проще говоря, торговля 1 отвечает за совершение преступления, а торговля 3 отвечает за распределение награбленного. Конкретно весь процесс выглядит так:
3.1 Торговля 1, ответственная за повышение цены USDT
Нажмите на ссылку сделки номер 1 на изображении выше, и вы увидите подробное содержание сделки номер 1. Атакующий очень прямо повысил цену USDT, просто обменяв все 17,58 миллиона USDT на 18,65 миллиона USDC, см. рисунок ниже.
В это время в ликвидном пуле осталось много USDC и немного USDT. Если верить новостным отчетам, до атаки в ликвидности Uniswap было около 19,8 миллиона USDC и USDT, то после выполнения сделки 1 в пуле останется лишь 2,22 миллиона USDT (=1980-1758), а баланс USDC увеличится до примерно 38,45 миллиона (=1980+1865).
На данный момент обменный курс между USDC и USDT в этом пуле уже далеко не 1:1, а составляет 1:17, что означает, что сейчас нужно 17 USDC, чтобы обменять на 1 USDT. Однако этот курс лишь ориентировочный, поскольку этот пул является V3, и ликвидность в нем распределена неравномерно.
Еще одно, что я хочу вам сказать. На самом деле, злоумышленник не использовал 1865 миллионов USDC за один раз, фактически использованный USDC составил 1,09 миллиона, даже не 6%. Как он это сделал? Мы подробнее расскажем об этом, когда закончим рассказ о нападении.
3.2 Сделка 2, выполнение 22 тысяч USDC обмен на USDT
Нажмите на ссылку для обмена 2 на изображении выше, чтобы увидеть рисунок ниже.
Как показано на рисунке, транзакция 2 жертвы из-за влияния транзакции 1 получила только 5272 USDT из 220000 USDC, в результате чего она незаметно потеряла 170000 USDT. Почему говорится, что это произошло незаметно? Потому что, если жертва совершала сделку через Uniswap, то при подаче транзакции она увидела бы следующий интерфейс.
На приведённой выше иллюстрации вы увидите, что жертва минимально должна была получить 220000, что должно быть гарантировано. Причина, по которой жертва в конечном итоге получила всего 5000 USDT, заключается в том, что произошёл колоссальный проскальзывание, превышающее 90%. Однако у Uniswap есть предельное значение максимального проскальзывания 5.5%, как показано на следующем изображении.
То есть, если жертва совершала сделку через фронтэнд Uniswap, то она должна была получить как минимум 208381 USDT (= 220510 * 94.5%). Вы, возможно, задаетесь вопросом, почему в записи блокчейна выше указано, что эта сделка была осуществлена в «Uniswap V3»?
Поскольку фронт-энд и бэк-энд блокчейн-транзакций разделены. Упомянутая «Uniswap V3» относится к пулу ликвидности USDC-USDT Uniswap, который является общедоступным, и любой фронт-энд транзакции может использовать этот пул для торговли.
Также из-за этого некоторые сомневаются, что жертва проста, что это не обычный человек, иначе бы не возникло такого большого проскальзывания, возможно, это использование атак MEV для отмывания денег. Об этом мы поговорим позже.
3.3 Торговля 3, сбор урожая + дележка
Нажмите на ссылку, чтобы увидеть детали сделки 3, как показано на изображении выше. Давайте по очереди обсудим три сделки: A, B и C.
Торговля A, восстановила ликвидность в пуле, обменяв 17,32 миллиона USDT на 18,60 миллиона USDC;
Торговля B, подготовка к дележу, обменять часть прибыли — 204000 USDC на 105 ETH;
Торговля C, дележка, выплатить 100.558 ETH валидатору bob-The-Builder.eth.
На этом атака сэндвича завершена.
Теперь давайте ответим на один очень важный вопрос, упомянутый выше: как злоумышленник с помощью 1,09 миллиона USDC осуществил атаку на 18 миллионов.
Атакующий смог осуществить атаку на уровне 18 миллионов долларов, используя лишь 1,09 миллиона USDC капитала, благодаря чудесному и уникальному механизму в мире блокчейна — мгновенному обмену Uniswap V3 (Flash Swap).
4.1 Что такое Мгновенный Обмен (Flash Swap)?
Простыми словами:
Мгновенный обмен позволяет пользователям сначала извлекать активы из пула Uniswap в одной и той же сделке, а затем погашать их другой активом (или тем же активом плюс комиссия).
Uniswap позволяет такое поведение «сначала забрать, потом заплатить», если вся операция завершена в рамках одной транзакции. Обратите внимание, что это должно быть выполнено в одной транзакции. Этот дизайн создан для обеспечения безопасности самой платформы Uniswap:
Безрисковое кредитование: Uniswap позволяет пользователям временно выводить средства из пула без залога (аналогично заимствованию), но должен погасить их немедленно по окончании транзакции.
Атомарность (Atomicity): Операция должна быть атомарной, она должна либо полностью завершиться успешно (возврат средств), либо полностью провалиться (откат транзакции).
Дизайн молниеносного обмена изначально был предназначен для более эффективного арбитража в сети, но, к сожалению, был использован злоумышленниками MEV и стал инструментом манипуляции рынком.
4.2 Как работает молниеносный обмен?
Теперь давайте посмотрим на рисунок и шаг за шагом разберемся, как была осуществлена молниеносная обмена в этой атаке, см. рисунок ниже.
F1 атакующий занял 1,09 миллиона USDC из AAVE, используя свои 701 WETH;
Атакующий F2 инициирует запрос на молниеносный обмен, сначала выводя 17,58 миллиона USDT из пула Uniswap (на этом этапе не требуется предварительная оплата); временно увеличив свой баланс на 17,58 миллиона USDT.
Атакующий быстро вложил 17,58 миллиона USDT в пул Curve, обменяв на 17,55 миллиона USDC. На счету атакующего USDT уменьшилось на 17,58 миллиона, а USDC увеличилось на 17,55 миллиона. Из приведенной ниже схемы вы увидите, что атакующий выбрал Curve, потому что здесь высокая ликвидность: более 70,54 миллиона USDT и 50,71 миллиона USDC, а проскальзывание относительно низкое.
Атакующий F4 возвращает 17,55 миллиона USDC, полученных через Curve, плюс свои изначально подготовленные 1,09 миллиона USDC (полученные от займа Aave), всего 18,64 миллиона USDC, одним платежом возвращает Uniswap, завершив обмен за мгновение.
После этой сделки (сделка 1) баланс счета злоумышленника уменьшился на 1,09 миллиона USDC, потому что из 18,64 миллиона USDC, возвращенных в Uniswap, только 17,55 миллиона USDC были обменены на Curve, а оставшиеся 1,09 миллиона USDC - это собственные средства злоумышленника.
Вы, должно быть, заметили, что эта сделка на самом деле привела к убыткам для атакующего в 1,09 миллиона. Однако в следующей сделке 3, также используя метод молниеносного обмена, он не только вернул 1,09 миллиона USDC, но и заработал более 200 тысяч.
Далее мы шаг за шагом проанализируем данные по торговле 3.
злоумышленник K1 с молниеносным свопом для вывода 18,6 млн USDC на Uniswap;
Атакующий K2 обменял 17,3 миллиона USDC, только что выведенных из Uniswap, на 17,32 миллиона USDT.
K1 атакующий вернул 17,32 миллиона USDT, полученные от обмена на Curve, обратно в Uniswap. Мгновенный обмен завершен. Вам следует обратить внимание на то, что атакующий получил 17,32 миллиона USDT, потратив всего 17,30 миллиона USDC через K2. Из оставшихся 1,3 миллиона (= 1,86-1,73) миллиона USDC, 1,09 миллиона составляют собственные средства, а оставшиеся 210 тысяч USDC — это прибыль от этой атаки.
K3 атакующий вернул основной капитал в AAVE, забрал свои 701 WETH, одновременно обменяв 200000 USDC на 105 ETH, и отправил 100.558 ETH валидатору в качестве чаевых (примерно 200000 долларов), оставив себе менее 10000 долларов прибыли.
Вы, возможно, удивитесь, почему злоумышленники готовы отдать до 200000 долларов прибыли валидаторам?
4.3 Почему нужно давать 200000 долларов «чаевых»?
На самом деле, это не щедрость, а необходимое условие для успешной атаки MEV в виде сэндвич-атаки:
Ключом к успешной атаке является точное управление порядком транзакций, а контролировать порядок транзакций как раз и является валидатор (bobTheBuilder).
Валидация помогает злоумышленникам не только гарантировать, что транзакции жертвы находятся между атакующими транзакциями, но и, что более важно, валидация может гарантировать, что другие конкурирующие MEV роботы не смогут встать в очередь или помешать успешному завершению атаки.
Таким образом, злоумышленник предпочтет пожертвовать подавляющей частью прибыли, чтобы обеспечить успешность атаки, и оставить определенную прибыль для себя.
Следует особенно отметить, что атаки MEV также имеют свои затраты. В Uniswap при молниеносном обмене есть затраты, в Curve при торговле тоже есть затраты, но из-за низких ставок, примерно 0,01–0,05%, они незначительны по сравнению с доходами от атак.
В конце концов, напомню, что защита от атак MEV на самом деле очень проста, вам нужно только: установить допустимый уровень проскальзывания, не превышающий 1%; большие сделки выполнять частями. Так что вам не нужно отказываться от торговли на DEX (децентрализованной бирже) из-за страха.
Заключение: Предостережение и启示 в темном лесу
Это нападение MEV на сумму 215 тысяч долларов США, безусловно, является еще одним жестоким проявлением закона «темного леса» в мире блокчейна. Оно ярко демонстрирует сложные игры, которые скрываются в децентрализованной и безразрешительной среде, где скрываются механизмы для извлечения выгоды.
С более высокой точки зрения, появление MEV является отражением двустороннего эффекта прозрачности и программируемости блокчейна.
С одной стороны, все записи о транзакциях являются открытыми и доступными для проверки, что позволяет отслеживать и анализировать атаки.
С другой стороны, сложная логика смарт-контрактов и определенность выполнения сделок также предоставляют умным участникам возможности для маневра.
Это не простое хакерство, а глубокое понимание и использование базовых механизмов блокчейна, которое испытывает надежность проектирования протокола и бросает вызов осознанию рисков участников.
Понимание MEV и осознание его рисков помогут лучше навигировать в этом цифровом мире, полном возможностей, но также скрывающем опасности. Помните, что в «темном лесу» блокчейна только уважение к правилам и повышение осознания могут помочь избежать того, чтобы стать следующей жертвой.
Это также тот эффект, которого я хочу достичь с помощью этой статьи.