Повний аналіз MEV-сендвіч-атаки: від сортування до миттєвого обміну смертоносний ланцюг

Автор: Daii

Минулої середи (12 березня) один крипто-трейдер став жертвою MEV-атаки та втратив 215 тисяч доларів.

Простими словами, цей користувач хотів обміняти стабільну монету USDC вартістю 220,800 доларів США на еквівалентний USDT у торговому пулі Uniswap v3, але в результаті отримав лише 5,272 USDT, всього за кілька секунд активи миттєво зникли на 215,700, дивіться малюнок нижче.

На зображенні вище зображено скріншот запису транзакції в ланцюзі. Основна причина цієї трагедії полягає в тому, що ми зіткнулися з ганебною в світі блокчейну "сандвіч-атакою" (Sandwich Attack).

Першим, хто розкрив цю атаку MEV, був Майкл (див. вище), який пояснив, що:

MEV бот випередив tx, обмінявши всю ліквідність USDC. Після виконання транзакції вони повернули ліквідність. Зловмисник дав будівельнику блоку (bobTheBuilder) 200 тисяч доларів і отримав 8 тисяч доларів прибутку з цієї транзакції.

В наведеному вище матеріалі є помилка, роботи-атаки MEV обмінюють велику кількість USDT, а не USDC.

Однак, після того як ви прочитаєте його пояснення та новинні репортажі, ви, можливо, все ще будете в розгубленості, оскільки там є занадто багато нових термінів, таких як атака-сендвіч (Sandwich Attack), попередній запуск (front-ran the tx), повернення ліквідності (put back the liquidity), винагорода для будівельника блоку (tipped a block builder) тощо.

Сьогодні ми розглянемо цю атаку MEV як приклад, розберемо весь процес і зануримо вас у цю темну сферу MEV.

По-перше, нам потрібно пояснити, що таке MEV.

  1. Що таке MEV?

MEV спочатку називався видобувним значенням, яке може бути видобуто (Miner Extractable Value), і стосується додаткового прибутку, який майнери можуть отримувати шляхом перерозподілу, вставки або виключення транзакцій у блоках блокчейну. Ця операція може призвести до того, що звичайні користувачі платять вищу вартість або отримують менш вигідні ціни на транзакції.

З переходом таких блокчейн-мереж, як Ethereum, від механізму консенсусу з доказом роботи (Proof-of-Work, PoW) до механізму консенсусу з доказом частки (Proof-of-Stake, PoS), повноваження контролю за порядком транзакцій перейшли від майнерів до валідаторів. Таким чином, термін відповідно еволюціонував від «вартість, яку можуть витягти майнери» (Miner Extractable Value) до «максимально витягувана вартість» (Maximal Extractable Value).

Хоча назва змінилася, проте основна концепція вилучення вартості шляхом маніпулювання порядком угод залишається такою ж.

Зміст вище все ще досить професійний, вам потрібно лише запам'ятати: MEV існує, тому що колишні майнери, а тепер валідатори мають право сортувати транзакції в мемпулі. Це сортування відбувається в межах одного блоку, зараз в Ethereum блоку приблизно кожні 11 секунд, тобто кожні 11 секунд відбувається здійснення такого права. Аналогічно, ця атака MEV також реалізована через сортування валідаторів.

Натисніть це посилання, і ви побачите вміст транзакцій блоку з номером 22029771, пов'язаного з цією атакою, як показано на малюнку нижче.

Зверніть увагу, що торгівлі на малюнках 1, 2, 3 є тим самим MEV-атака, про яку йдеться на початку цієї статті, і цей порядок був підготовлений валідатором (bobTheBuilder). Чому це можливо?

  1. Принцип 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 тисяч доларів, з яких зловмисник отримав 8000 доларів, а валідатор - 200 тисяч доларів (понад 100 ETH).

Вони використовують атаки з образливою назвою — «сандвіч-атака». Далі ми розглянемо це поетапно, щоб ви повністю зрозуміли, як працює досить складна сандвіч-атака MEV.

  1. Повний аналіз атак типу "сендвіч"

Назва "сандвіч-атака" (Sandwich Attack) походить від того, що дві транзакції нападника (транзакція 1 та транзакція 3) розміщуються перед і після транзакції жертви (транзакція 2), внаслідок чого весь порядок транзакцій нагадує структуру сандвічу (див. вище).

Торгівля 1 і торгівля 3 виконують різні функції. Простими словами, торгівля 1 відповідає за злочин, а торгівля 3 відповідає за розподіл здобичі. Конкретно, весь процес виглядає так:

3.1 Торгівля 1, відповідальна за підвищення ціни USDT

Натисніть на посилання торгівлі номер 1 на зображенні вище, і ви побачите деталі торгівлі номер 1. Зловмисник підвищив ціну USDT дуже просто, обмінявши 1865 мільйонів USDC на всі 1758 мільйонів USDT, які були в ньому, див. нижче.

У цей момент у ліквіднісному пулі залишилося велика кількість USDC та невелика кількість USDT. Якщо вірити новинним повідомленням, перед атакою в ліквідності Uniswap було близько 19,8 мільйона USDC та USDT, тоді після виконання угоди 1 в пулі залишиться лише 2,22 мільйона USDT (=1980-1758), а залишок USDC збільшиться до приблизно 38,45 мільйона (=1980+1865).

У цей час обмінний курс між USDC і USDT у цьому пулі вже далеко не 1:1, а становить 1:17, тобто для обміну на 1 USDT потрібно 17 USDC. Однак цей коефіцієнт є приблизним, оскільки цей пул є V3, і ліквідність у ньому не рівномірно розподілена.

Є ще один момент, який я хочу вам сказати. Насправді зловмисник не використав одноразово 1865 тисяч USDC, фактично використані USDC становлять 109 тисяч, навіть не 6%. Як він це зробив? Коли ми закінчимо розповідь про атаку, ми розповімо про це детальніше.

3.2 Транзакція 2, виконано 220000 USDC обміну на USDT

Натисніть на посилання для торгівлі 2 на зображенні вище, щоб побачити зображення нижче.

Як показано на малюнку, транзакція 2 жертви постраждала через вплив транзакції 1, і 220 000 USDC перетворилися лише на 5272 USDT, внаслідок чого жертва непомітно втратила 170 000 USDT. Чому кажуть, що це сталося непомітно? Тому що, якщо жертва здійснювала транзакцію через Uniswap, то під час подачі транзакції вона побачила б наступний інтерфейс.

Ви можете помітити на малюнку вище, що жертви повинні були мінімум отримати 220 000, що, безумовно, було б гарантовано. Жертви в кінцевому підсумку отримали лише трохи більше 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, підготовка до розподілу, обмін частини прибутку — 20,4 тис. USDC на 105 ETH;

Торгівля C, розподіл, виплатити 100.558 ETH валідаційнику bob-The-Builder.eth.

На цьому закінчується атака сендвічем.

Тепер давайте відповімо на дуже важливе питання, яке було згадано вище: як зловмисник здійснив атаку на 18 мільйонів, використовуючи 1,09 мільйона USDC.

  1. Як зловмисники здійснили атаку на пул на 18 мільйонів USDC

Те, що нападник зміг реалізувати атаку на рівні 18 мільйонів доларів, використавши лише 1,09 мільйона USDC, пов'язано з наявністю в світі блокчейну одного дивного та особливого механізму — миттєвого обміну (Flash Swap) Uniswap V3.

4.1 Що таке блискавичний обмін (Flash Swap)?

Простими словами:

Швидкий обмін дозволяє користувачам спочатку вивести активи з пулу Uniswap у одній угоді, а потім погасити їх іншими активами (або такими ж активами з комісією).

Uniswap дозволяє цю поведінку «спочатку отримати товар, потім заплатити», якщо вся операція завершена в межах однієї транзакції. Зверніть увагу, що вона має бути виконана в межах однієї транзакції. Таке проектування покликане забезпечити безпеку самої платформи Uniswap:

Нульовий ризик позики: Uniswap дозволяє користувачам без застави тимчасово виводити кошти з пулу (схоже на позику), але їх потрібно відразу погасити після закінчення угоди.

Атомарність (Atomicity): Уся операція повинна бути атомарною, або повністю успішною (повернення коштів), або повністю невдалою (відкат транзакції).

Дизайн блискавичного обміну був створений для більш ефективного проведення арбітражу в мережі (Arbitrage), але, на жаль, був використаний атакувальниками 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 через те, що тут є достатня ліквідність: USDT більше ніж 70,54 мільйона, а USDC також має 50,71 мільйона, а сліпий відсоток відносно низький.

Зловмисник 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 000 юанів.

Далі ми крок за кроком проаналізуємо дані торгівлі 3.

K1 атакуючий, вивів 18600000 USDC через Lightning Swap на Uniswap;

Атакуючий K2 обміняв частину 17,3 мільйона USDC, яку щойно отримав з Uniswap, на 17,32 мільйона USDT;

Атакуюча особа K1 повернула 1732 тисячі USDT, які були обміняні з Curve, назад у Uniswap. Швидкий обмін завершено. Вам потрібно звернути увагу на те, що атакуюча особа витратила лише 1730 тисяч USDC, щоб отримати 1732 тисячі USDT через K2. Залишок у 130 тисяч (= 1860-1730) USDC складається з 109 тисяч власних коштів, а решта 21 тисяча USDC є прибутком від цієї атаки.

Атакуюча K3 повернула основний капітал в AAVE, забрала свої 701 WETH, одночасно обмінявши 200 тисяч USDC на 105 ETH, з яких 100.558 ETH відправила валідатору в якості чайових (приблизно 200 тисяч доларів), залишивши собі менше ніж 10 тисяч доларів прибутку.

Ви, можливо, здивуєтеся, чому зловмисники готові віддати до 200 тисяч доларів прибутку валідаторам?

4.3 Чому потрібно дати 200 тисяч доларів "на чай"?

Насправді, це не щедрість, а необхідна умова успіху атаки MEV у вигляді сандвіч-атаки:

Основним аспектом успішної атаки є точний контроль за порядком транзакцій, а саме контролює порядок транзакцій валідаор (bobTheBuilder).

Валідатори не лише допомагають атакувальникам забезпечити, щоб транзакції жертви були між атакуючими транзакціями, але що ще важливіше, валідатори можуть забезпечити, щоб інші конкуренти MEV-роботи не могли встати в чергу чи перешкодити успішному завершенню атаки.

Отже, зловмисник готовий пожертвувати більшістю прибутку, щоб забезпечити успіх атаки, залишаючи певну частину прибутку для себе.

Потрібно особливо зазначити, що атаки MEV також мають витрати, при миттєвому обміні на Uniswap є витрати, при торгівлі на Curve також є витрати, просто через те, що ставки досить низькі, приблизно 0,01–0,05%, тому в порівнянні з прибутком від атаки це можна не згадувати.

Наостанок нагадаю, що захист від MEV-атак насправді дуже простий: просто налаштуйте допустимий рівень слippage, не перевищуючи 1%; великі угоди розділіть на декілька транзакцій. Тож вам не варто відмовлятися від торгівлі на DEX (децентралізованих біржах) через побоювання.

Заключення: Попередження та уроки з темного лісу

Ця атака MEV на суму 215 000 доларів США безсумнівно є ще одним жорстоким проявом закону «темного лісу» в світі блокчейну. Вона яскраво демонструє складні ігри, що приховані в децентралізованому, бездозвільному середовищі, де існують можливості для отримання вигоди через експлуатацію механічних вразливостей.

З більш високої точки зору, поява MEV є проявом подвійного ефекту прозорості та програмованості блокчейну.

З одного боку, всі торгові записи є відкритими та доступними для перевірки, що дозволяє відслідковувати та аналізувати атаки;

З іншого боку, складна логіка смарт-контрактів та визначеність виконання транзакцій також надають можливість розумним учасникам.

Це не просто хакерська дія, а глибоке розуміння та використання основних механізмів блокчейну, що перевіряє стійкість дизайну протоколів і кидає виклик свідомості учасників щодо ризику.

Розуміння MEV, усвідомлення його ризиків дозволяє краще орієнтуватися у цьому цифровому світі, сповненому можливостей, але й прихованих небезпек. Пам'ятайте, в «темному лісі» блокчейну тільки шануючи правила та підвищуючи обізнаність, можна уникнути того, щоб стати наступною жертвою.

Це також те, до чого я хочу прагнути через цю статтю.

Переглянути оригінал
Контент має виключно довідковий характер і не є запрошенням до участі або пропозицією. Інвестиційні, податкові чи юридичні консультації не надаються. Перегляньте Відмову від відповідальності , щоб дізнатися більше про ризики.
  • Нагородити
  • Прокоментувати
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити