Простіше кажучи, цей користувач хотів обміняти стейблкоїни USDC на суму $220 800 на еквівалент USDT у торговому пулі Uniswap v3, але отримав лише 5 272 USDT, і активи миттєво випарувалися на 215 700 всього за кілька секунд, як показано на малюнку нижче.
На зображенні вище показано знімок екрана запису цієї угоди в ланцюзі. Основною причиною цієї трагічної події стало зіткнення з відомою в світі блокчейн "сендвіч-атака" (Sandwich Attack).
Першим, хто розкрив цю атаку MEV, був Майкл (див. малюнок вище), який пояснив:
Бот MEV керував передаванням, обмінюючи всю ліквідність USDC. Після того, як транзакція виконана, вони повертають ліквідність. Зловмисник передав конструктору блоків (bobTheBuilder) $200 тисяч і отримав $8 тисяч від цієї транзакції.
Переклад: MEV-робот виводить всю ліквідність USDC, щоб випередити tx. Після виконання угоди вони повертають ліквідність. Зловмисник передав будівельнику блоку (bobTheBuilder) 200 000 доларів США та отримав прибуток у 8000 доларів США з цієї угоди.
У наведеному вище тексті є помилка: 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 існує тому, що колишні майнери, а тепер валідатори, мають право сортувати транзакції в мемпулі (mempool). Це сортування відбувається в межах блоку, і зараз в Ethereum приблизно кожні 11 секунд з'являється новий блок, що означає, що кожні 11 секунд буде відбуватися таке використання повноважень. Так само, ця атака MEV була реалізована через сортування валідаторів.
Натисніть на це посилання, ви побачите вміст транзакцій блоку з номером 22029771, пов'язаного з цією атакою, як показано на малюнку нижче.
Зверніть увагу, що угоди на малюнках 1, 2, 3 — це той самий MEV-атак, про який йдеться на початку цієї статті, цей порядок був упорядкований валідатором (bobTheBuilder). Чому це можливо?
2. Принцип 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.
3. Повний аналіз атаки типу «сендвіч»
Термін "сандвіч-атака" (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, 220 000 USDC отримали лише 5272 USDT, внаслідок чого жертва непомітно втратила 170 000 USDT. Чому це називається непомітно? Тому що, якщо жертва здійснювала транзакцію через Uniswap, то під час подання транзакції вона бачила б таку інтерфейс.
За допомогою вище наведеного зображення ви побачите, що жертва, принаймні, повинна отримати 220 тисяч, що повинно бути гарантовано. Жертва в кінцевому підсумку отримала лише понад 5000 USDT через величезний сліп, що досягнув понад 90%. Однак Uniswap має стандартне обмеження на максимальний сліп 5.5%, див. нижче.
Тобто, якщо жертва здійснювала операцію через фронтальну частину Uniswap, то вона повинна була б отримати щонайменше 208381 USDT (= 220510 * 94.5%). Ви, напевно, запитаєте, чому в наведених вище записах блокчейну ця операція відображається як така, що була проведена в «Uniswap V3»?
Тому що фронт і бекенд блокчейн-транзакцій відокремлені. Зазначений вище «Uniswap V3» стосується пулу ліквідності USDC-USDT Uniswap, цей пул є відкритим, і будь-який фронт транзакції може здійснювати торгівлю через цей пул.
Також саме з цієї причини деякі сумніваються, що жертва є не простим випадком, а не звичайною людиною, інакше б не виникло такої великої сліпоти, можливо, це використання атаки MEV для відмивання грошей. Про це ми поговоримо пізніше.
Натисніть на посилання, щоб переглянути деталі угоди 3, як показано на малюнку. Давайте окремо розглянемо три угоди A, B, C.
Торгівля A, відновила нормальну ліквідність у пулі, обмінявши 1732 тисячі USDT на 1860 тисяч USDC;
Торгівля B, підготовка до розподілу, обмін частини прибутку — 204 тисячі USDC на 105 ETH;
Торгівля C, розподіл, сплатити 100.558 ETH валідатору bob-The-Builder.eth.
Отже, атака сендвіча завершена.
Зараз відповімо на одне дуже важливе запитання, згадане вище: як зловмисник зміг реалізувати атаку на 18 мільйонів, використавши 1,09 мільйона USDC.
4. Як нападник реалізував атаку на пул в 18 мільйонів USDC
Причина, чому зловмисник зміг здійснити атаку на рівні 18 мільйонів доларів, використовуючи лише 1,09 мільйона USDC основи, полягає в тому, що у світі блокчейну існує дивовижний і особливий механізм — Flash Swap Uniswap V3.
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, тому що тут достатня ліквідність: 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 тисяч.
K1 атакуючий вивів 1860 тисяч USDC через Flash Swap в Uniswap;
K2 атакуючий, обміняв частину 1730 тисяч USDC, яку тільки що вилучили з Uniswap, на 1732 тисячі USDT;
K1 зловмисник повернув 1732 тисячі USDT, які він отримав від Curve, назад до Uniswap. Швидкий обмін завершено. Вам слід звернути увагу, що зловмисник витратив лише 1730 тисяч USDC через K2, щоб отримати 1732 тисячі USDT. Залишок у 130 (= 1860-1730) тисяч USDC складається з 109 тисяч власних коштів, а решта 21 тисяча USDC є прибутком від цього нападу.
K3 атакуючий повернув основний капітал AAVE, забравши 701 WETH, одночасно обмінявши 200000 USDC на 105 ETH, і відправивши 100.558 ETH валідатору в якості чайових (приблизно 200000 доларів США), залишивши собі менше ніж 10000 доларів США прибутку.
Ви, можливо, будете здивовані, чому нападники готові безкоштовно віддати верифікаторам прибуток до 200 тисяч доларів?
4.3 Чому потрібно дати «чайові» у 200 тисяч доларів?
Насправді, це не щедрість, а необхідна умова успіху атаки MEV у вигляді сандвіч-атаки:
Основний аспект успішної атаки - це точний контроль порядку транзакцій, а контроль за порядком транзакцій здійснює валідатор (bobTheBuilder).
Верифікатори не лише допомагають нападникам забезпечити, щоб транзакції жертви були між атаками, але що ще важливіше, верифікатори можуть гарантувати, що інші конкурентні роботи MEV не можуть втручатися або перешкоджати успішному завершенню атаки.
Отже, зловмисник готовий пожертвувати більшістю прибутку, щоб забезпечити успіх атаки, і залишити певний прибуток для себе.
Потрібно особливо зазначити, що атаки MEV також мають витрати. У Uniswap швидкі обміни є витратними, у Curve також є витрати, просто через те, що ставки досить низькі, приблизно 0,01~0,05%, тому в порівнянні з прибутком від атак це можна не враховувати.
Наостанок нагадаю, що захист від MEV-атак насправді дуже простий, вам потрібно лише: встановити допустиме значення слippage, не перевищуючи 1%; великі угоди виконувати частинами. Тому вам зовсім не варто відмовлятися від торгівлі на DEX (децентралізованій біржі) через це.
Висновок: Попередження та уроки з темного лісу
Ця атака MEV на суму 215 тисяч доларів безсумнівно є ще одним жорстоким проявом закону "темного лісу" у світі блокчейну. Вона яскраво демонструє складну гру, що ховається в децентралізованому, бездозвільному середовищі, де можна скористатися механічними вразливостями для отримання вигоди.
З більш високої точки зору, поява MEV є проявом подвійного ефекту прозорості та програмованості блокчейну.
З одного боку, всі торгові записи є відкритими і можуть бути перевіреними, що дозволяє відстежувати та аналізувати атаки;
З іншого боку, складна логіка смарт-контрактів і визначеність виконання угод також надають розумним учасникам можливість скористатися цим.
Це не просто хакерська діяльність, а глибоке розуміння та використання основних механізмів блокчейну, що ставить під сумнів надійність дизайну протоколу і викликає виклики для свідомості учасників щодо ризиків.
Розуміння MEV, усвідомлення його ризиків дозволяє краще орієнтуватися в цьому світі цифрових можливостей, який також приховує небезпеки. Пам'ятайте, що в "темному лісі" блокчейну лише шануючи правила та підвищуючи обізнаність, можна уникнути того, щоб стати наступною жертвою.
Контент має виключно довідковий характер і не є запрошенням до участі або пропозицією. Інвестиційні, податкові чи юридичні консультації не надаються. Перегляньте Відмову від відповідальності , щоб дізнатися більше про ризики.
Повний аналіз MEV-сендвіч-атаки: від сортування до миттєвого обміну фатальний ланцюг
Автор: Daii Джерело: mirror
Минулої середи (12 березня) один криптотрейдер зазнав MEV-атаки, внаслідок якої він втратив 215 тисяч доларів.
! d40IzkNmiRRIQY5uP5wMz1zpFo0cMqNwhmogZmhk.png
Простіше кажучи, цей користувач хотів обміняти стейблкоїни USDC на суму $220 800 на еквівалент USDT у торговому пулі Uniswap v3, але отримав лише 5 272 USDT, і активи миттєво випарувалися на 215 700 всього за кілька секунд, як показано на малюнку нижче.
! yDgyTJBzWhnGWbbjWdCfwzNHy2RWfixeFPAhUl16.png
На зображенні вище показано знімок екрана запису цієї угоди в ланцюзі. Основною причиною цієї трагічної події стало зіткнення з відомою в світі блокчейн "сендвіч-атака" (Sandwich Attack).
! kf5CcjkRVjOcv2Tj5LM63tYSNd150MXNqxzlLXgj.png
Першим, хто розкрив цю атаку MEV, був Майкл (див. малюнок вище), який пояснив:
У наведеному вище тексті є помилка: 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 існує тому, що колишні майнери, а тепер валідатори, мають право сортувати транзакції в мемпулі (mempool). Це сортування відбувається в межах блоку, і зараз в Ethereum приблизно кожні 11 секунд з'являється новий блок, що означає, що кожні 11 секунд буде відбуватися таке використання повноважень. Так само, ця атака MEV була реалізована через сортування валідаторів.
Натисніть на це посилання, ви побачите вміст транзакцій блоку з номером 22029771, пов'язаного з цією атакою, як показано на малюнку нижче.
! gOBtJtdKthPSTi4uxT3qT8ZxgrXMXxlFAbOEp7RC.png
Зверніть увагу, що угоди на малюнках 1, 2, 3 — це той самий MEV-атак, про який йдеться на початку цієї статті, цей порядок був упорядкований валідатором (bobTheBuilder). Чому це можливо?
2. Принцип MEV
Щоб зрозуміти, як працює MEV, нам потрібно спочатку зрозуміти, як блокчейн записує та оновлює інформацію.
2.1 Механізм оновлення стану блокчейну
Блокчейн можна розглядати як постійно зростаючу бухгалтерську книгу, яка реєструє всі проведені транзакції. Стан цієї книги, наприклад, залишки на кожному рахунку, обсяги резервів різних токенів у торговому пулі Uniswap тощо, визначається попередніми транзакціями.
Коли новий блок додається до блокчейну, всі транзакції, що містяться в цьому блоці, виконуються по черзі відповідно до їх порядку в блоці. При виконанні кожної транзакції глобальний стан блокчейну відповідно змінюється.
Це означає, що важливий не тільки порядок блоків, але й порядок транзакцій у блоці. Як же визначається порядок транзакцій у блоці?
2.2 Вирішення валідатора про порядок транзакцій
Коли користувач ініціює транзакцію в блокчейн-мережі, наприклад, цю транзакцію, що перетворює USDC на USDT через Uniswap, спочатку вона буде оголошена вузлам мережі. Після первинної верифікації ця транзакція потрапить до зони, що називається "мемпул" (mempool). Мемпул схожий на зону очікування, де транзакції ще не підтверджені і не додані до наступного блоку блокчейну.
Колишні майнери (в системах PoW), теперішні валідатори (в системах PoS) мають право обирати транзакції з пам'яті та визначати порядок розміщення цих транзакцій у наступному блоці.
Порядок транзакцій у блоці має вирішальне значення. Перед остаточним підтвердженням блоку та його додаванням до блокчейну, транзакції в цьому блоці виконуються у порядку, встановленому валідатором (наприклад, bobTheBuilder). Це означає, що якщо в блоці міститься кілька транзакцій, які взаємодіють з одним і тим же пулом транзакцій, то порядок виконання цих транзакцій безпосередньо вплине на результат кожної з них.
Ця здатність дозволяє валідаторам надавати пріоритет певним транзакціям, затримувати або виключати інші транзакції, навіть вставляти свої власні транзакції для максимізації прибутку.
Сортування цієї транзакції також є важливим, будь-яка помилка може призвести до того, що атака не буде успішною.
2.3 Упорядкування транзакцій атаки MEV
Давайте спочатку коротко розглянемо три транзакції, пов'язані з цією атакою MEV:
! dOFw7Sh0V9EIVxqeuCZIDFbCHSXZ7Sl9JXeXJUue.png
Цього разу валідатором MEV атаки є bob-The-Builder.eth, який відповідає за те, щоб упорядкувати транзакції в такому порядку: 1, 2, 3. Звичайно, bobTheBuilder не працював даремно, він отримав понад 100 ETH за участь у цьому упорядкуванні, натомість ініціатор MEV атаки отримав лише 8000 доларів доходу. Їхній дохід походить саме з другої транзакції жертви.
Одним реченням, зловмисники (MEV-роботи) змовилися з валідатором (bobTheBuilder), в результаті чого жертва другої транзакції втратила 215 тисяч доларів, з яких зловмисник отримав 8000 доларів, а валідатор - 200 тисяч доларів (понад 100 ETH).
Вони використовують метод атаки, який має образну назву — сандвіч-атака. Далі, давайте пояснимо це крок за кроком, щоб ви повністю зрозуміли, що таке досить складна сандвіч-атака MEV.
3. Повний аналіз атаки типу «сендвіч»
Термін "сандвіч-атака" (Sandwich Attack) використовується, оскільки дві транзакції атакуючого (транзакція 1 і транзакція 3) розміщуються перед і після транзакції жертви (транзакція 2), що робить всю послідовність транзакцій схожою на структуру сандвічу (див. малюнок вище).
Торговля 1 і торгівля 3 виконують різні функції. Простими словами, торгівля 1 відповідає за виконання злочину, а торгівля 3 відповідає за розподіл здобичі. Конкретно процес виглядає так:
3.1 Торгівля 1, відповідальний за підвищення ціни USDT
Натисніть на посилання торгівлі номер 1 на зображенні вище, ви побачите деталі торгівлі номер 1. Зловмисник підвищив ціну USDT дуже просто: він обміняв 17,58 мільйонів USDT, використовуючи 18,65 мільйона USDC, див. нижче.
! vi4i8ramCtgyZuTSNZLLVLsqry8MONxhGPRUVOsC.png
На цей момент у ліквідному пулі залишилося багато 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 на зображенні вище, ви побачите зображення нижче.
! x3kBJKcYVyM44HJSUHuIxVQ1ScIutWsoZ6JuRvM7.png
Як показано на малюнку, транзакція 2 жертви зазнала впливу транзакції 1, 220 000 USDC отримали лише 5272 USDT, внаслідок чого жертва непомітно втратила 170 000 USDT. Чому це називається непомітно? Тому що, якщо жертва здійснювала транзакцію через Uniswap, то під час подання транзакції вона бачила б таку інтерфейс.
! rqLjmsxfcI06dN56OvKVyTctzoiWpvUPvCyEWYom.png
За допомогою вище наведеного зображення ви побачите, що жертва, принаймні, повинна отримати 220 тисяч, що повинно бути гарантовано. Жертва в кінцевому підсумку отримала лише понад 5000 USDT через величезний сліп, що досягнув понад 90%. Однак Uniswap має стандартне обмеження на максимальний сліп 5.5%, див. нижче.
! Qlpu7GNLheCyBJtsy2LEgpo0vVP2oENI4sGcSiiW.png
Тобто, якщо жертва здійснювала операцію через фронтальну частину Uniswap, то вона повинна була б отримати щонайменше 208381 USDT (= 220510 * 94.5%). Ви, напевно, запитаєте, чому в наведених вище записах блокчейну ця операція відображається як така, що була проведена в «Uniswap V3»?
Тому що фронт і бекенд блокчейн-транзакцій відокремлені. Зазначений вище «Uniswap V3» стосується пулу ліквідності USDC-USDT Uniswap, цей пул є відкритим, і будь-який фронт транзакції може здійснювати торгівлю через цей пул.
Також саме з цієї причини деякі сумніваються, що жертва є не простим випадком, а не звичайною людиною, інакше б не виникло такої великої сліпоти, можливо, це використання атаки MEV для відмивання грошей. Про це ми поговоримо пізніше.
3.3 торгівля 3, збір + розподіл
! hco4wljEJ9HngbaT8S3asZcEGGNpt9HjUPoAA1ka.png
Натисніть на посилання, щоб переглянути деталі угоди 3, як показано на малюнку. Давайте окремо розглянемо три угоди A, B, C.
Торгівля A, відновила нормальну ліквідність у пулі, обмінявши 1732 тисячі USDT на 1860 тисяч USDC;
Торгівля B, підготовка до розподілу, обмін частини прибутку — 204 тисячі USDC на 105 ETH;
Торгівля C, розподіл, сплатити 100.558 ETH валідатору bob-The-Builder.eth.
Отже, атака сендвіча завершена.
Зараз відповімо на одне дуже важливе запитання, згадане вище: як зловмисник зміг реалізувати атаку на 18 мільйонів, використавши 1,09 мільйона USDC.
4. Як нападник реалізував атаку на пул в 18 мільйонів USDC
Причина, чому зловмисник зміг здійснити атаку на рівні 18 мільйонів доларів, використовуючи лише 1,09 мільйона USDC основи, полягає в тому, що у світі блокчейну існує дивовижний і особливий механізм — Flash Swap Uniswap V3.
4.1 Що таке миттєвий обмін (Flash Swap)?
Простими словами:
Uniswap дозволяє таку поведінку "спочатку отримати, потім заплатити", якщо вся операція завершена в межах однієї транзакції. Зверніть увагу, що це має бути завершено в межах однієї транзакції. Таке проектування спрямоване на забезпечення безпеки самої платформи Uniswap:
Дизайн блискавичного обміну спочатку був задуманий для більш ефективного проведення арбітражу в ланцюгу, але, на жаль, його використали атаки MEV, перетворивши його на інструмент маніпуляцій на ринку.
4.2 Як допомагає миттєвий обмін?
Далі ми розглянемо малюнок і пояснимо, крок за кроком, як було реалізовано блискавичний обмін під час цієї атаки, дивіться на малюнок нижче.
! S6eRIwZXTXtWBU7tUaAjr9bvAm2RIPpdoyjiHnhn.png
! o1LnGSaUlzRjt7vqs5YOy0wqTRznOxzRkjVHSdEw.png
Після цієї транзакції (транзакція 1) баланс рахунку зловмисника зменшився на 1,09 мільйона USDC, оскільки з 18,64 мільйона USDC, повернутого в Uniswap, лише 17,55 мільйона USDC було обміняно через Curve, а решта 1,09 мільйона USDC - це власні кошти зловмисника.
Ви, напевно, звернули увагу, що ця угода насправді призвела до втрат для зловмисника в розмірі 1,09 мільйона. Однак у наступній угоді 3, яка також була здійснена за допомогою блискавичного обміну, не лише було повернуто 1,09 мільйона USDC, але й зароблено понад 200 тисяч.
! oKE3vvGoW8lIISTane5LmOrh3BrDYyLV5PxHLXkM.png
Далі ми поетапно проаналізуємо дані торгівлі 3.
Ви, можливо, будете здивовані, чому нападники готові безкоштовно віддати верифікаторам прибуток до 200 тисяч доларів?
4.3 Чому потрібно дати «чайові» у 200 тисяч доларів?
Насправді, це не щедрість, а необхідна умова успіху атаки MEV у вигляді сандвіч-атаки:
Отже, зловмисник готовий пожертвувати більшістю прибутку, щоб забезпечити успіх атаки, і залишити певний прибуток для себе.
Потрібно особливо зазначити, що атаки MEV також мають витрати. У Uniswap швидкі обміни є витратними, у Curve також є витрати, просто через те, що ставки досить низькі, приблизно 0,01~0,05%, тому в порівнянні з прибутком від атак це можна не враховувати.
Наостанок нагадаю, що захист від MEV-атак насправді дуже простий, вам потрібно лише: встановити допустиме значення слippage, не перевищуючи 1%; великі угоди виконувати частинами. Тому вам зовсім не варто відмовлятися від торгівлі на DEX (децентралізованій біржі) через це.
Висновок: Попередження та уроки з темного лісу
Ця атака MEV на суму 215 тисяч доларів безсумнівно є ще одним жорстоким проявом закону "темного лісу" у світі блокчейну. Вона яскраво демонструє складну гру, що ховається в децентралізованому, бездозвільному середовищі, де можна скористатися механічними вразливостями для отримання вигоди.
З більш високої точки зору, поява MEV є проявом подвійного ефекту прозорості та програмованості блокчейну.
Це не просто хакерська діяльність, а глибоке розуміння та використання основних механізмів блокчейну, що ставить під сумнів надійність дизайну протоколу і викликає виклики для свідомості учасників щодо ризиків.
Розуміння MEV, усвідомлення його ризиків дозволяє краще орієнтуватися в цьому світі цифрових можливостей, який також приховує небезпеки. Пам'ятайте, що в "темному лісі" блокчейну лише шануючи правила та підвищуючи обізнаність, можна уникнути того, щоб стати наступною жертвою.
Це також те, що я хочу досягти через цю статтю.