Автор: 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 керував передаванням, обмінюючи всю ліквідність 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.
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). Чому це можливо?
Щоб зрозуміти, як працює MEV, нам потрібно спочатку зрозуміти, як блокчейн записує та оновлює інформацію.
Блокчейн можна розглядати як постійно зростаючу бухгалтерську книгу, яка реєструє всі проведені транзакції. Стан цієї книги, наприклад, залишки на кожному рахунку, обсяги резервів різних токенів у торговому пулі Uniswap тощо, визначається попередніми транзакціями.
Коли новий блок додається до блокчейну, всі транзакції, що містяться в цьому блоці, виконуються по черзі відповідно до їх порядку в блоці. При виконанні кожної транзакції глобальний стан блокчейну відповідно змінюється.
Це означає, що важливий не тільки порядок блоків, але й порядок транзакцій у блоці. Як же визначається порядок транзакцій у блоці?
Коли користувач ініціює транзакцію в блокчейн-мережі, наприклад, цю транзакцію, що перетворює USDC на USDT через Uniswap, спочатку вона буде оголошена вузлам мережі. Після первинної верифікації ця транзакція потрапить до зони, що називається “мемпул” (mempool). Мемпул схожий на зону очікування, де транзакції ще не підтверджені і не додані до наступного блоку блокчейну.
Колишні майнери (в системах PoW), теперішні валідатори (в системах PoS) мають право обирати транзакції з пам’яті та визначати порядок розміщення цих транзакцій у наступному блоці.
Порядок транзакцій у блоці має вирішальне значення. Перед остаточним підтвердженням блоку та його додаванням до блокчейну, транзакції в цьому блоці виконуються у порядку, встановленому валідатором (наприклад, bobTheBuilder). Це означає, що якщо в блоці міститься кілька транзакцій, які взаємодіють з одним і тим же пулом транзакцій, то порядок виконання цих транзакцій безпосередньо вплине на результат кожної з них.
Ця здатність дозволяє валідаторам надавати пріоритет певним транзакціям, затримувати або виключати інші транзакції, навіть вставляти свої власні транзакції для максимізації прибутку.
Сортування цієї транзакції також є важливим, будь-яка помилка може призвести до того, що атака не буде успішною.
Давайте спочатку коротко розглянемо три транзакції, пов’язані з цією атакою MEV:
! dOFw7Sh0V9EIVxqeuCZIDFbCHSXZ7Sl9JXeXJUue.png
Цього разу валідатором MEV атаки є bob-The-Builder.eth, який відповідає за те, щоб упорядкувати транзакції в такому порядку: 1, 2, 3. Звичайно, bobTheBuilder не працював даремно, він отримав понад 100 ETH за участь у цьому упорядкуванні, натомість ініціатор MEV атаки отримав лише 8000 доларів доходу. Їхній дохід походить саме з другої транзакції жертви.
Одним реченням, зловмисники (MEV-роботи) змовилися з валідатором (bobTheBuilder), в результаті чого жертва другої транзакції втратила 215 тисяч доларів, з яких зловмисник отримав 8000 доларів, а валідатор - 200 тисяч доларів (понад 100 ETH).
Вони використовують метод атаки, який має образну назву — сандвіч-атака. Далі, давайте пояснимо це крок за кроком, щоб ви повністю зрозуміли, що таке досить складна сандвіч-атака MEV.
Термін “сандвіч-атака” (Sandwich Attack) використовується, оскільки дві транзакції атакуючого (транзакція 1 і транзакція 3) розміщуються перед і після транзакції жертви (транзакція 2), що робить всю послідовність транзакцій схожою на структуру сандвічу (див. малюнок вище).
Торговля 1 і торгівля 3 виконують різні функції. Простими словами, торгівля 1 відповідає за виконання злочину, а торгівля 3 відповідає за розподіл здобичі. Конкретно процес виглядає так:
Натисніть на посилання торгівлі номер 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%. Як він це зробив? Коли ми закінчимо розповідь про атаку, ми детальніше про це поговоримо.
Натиснувши на посилання для торгівлі 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 для відмивання грошей. Про це ми поговоримо пізніше.
! 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.
Причина, чому зловмисник зміг здійснити атаку на рівні 18 мільйонів доларів, використовуючи лише 1,09 мільйона USDC основи, полягає в тому, що у світі блокчейну існує дивовижний і особливий механізм — Flash Swap Uniswap V3.
Простими словами:
Швидкий обмін дозволяє користувачам спочатку вивести активи з пулу Uniswap у межах однієї транзакції, а потім повернути інший актив (або той самий актив з комісією).
Uniswap дозволяє таку поведінку “спочатку отримати, потім заплатити”, якщо вся операція завершена в межах однієї транзакції. Зверніть увагу, що це має бути завершено в межах однієї транзакції. Таке проектування спрямоване на забезпечення безпеки самої платформи Uniswap:
Дизайн блискавичного обміну спочатку був задуманий для більш ефективного проведення арбітражу в ланцюгу, але, на жаль, його використали атаки MEV, перетворивши його на інструмент маніпуляцій на ринку.
Далі ми розглянемо малюнок і пояснимо, крок за кроком, як було реалізовано блискавичний обмін під час цієї атаки, дивіться на малюнок нижче.
! 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 тисяч доларів?
Насправді, це не щедрість, а необхідна умова успіху атаки MEV у вигляді сандвіч-атаки:
Отже, зловмисник готовий пожертвувати більшістю прибутку, щоб забезпечити успіх атаки, і залишити певний прибуток для себе.
Потрібно особливо зазначити, що атаки MEV також мають витрати. У Uniswap швидкі обміни є витратними, у Curve також є витрати, просто через те, що ставки досить низькі, приблизно 0,01~0,05%, тому в порівнянні з прибутком від атак це можна не враховувати.
Наостанок нагадаю, що захист від MEV-атак насправді дуже простий, вам потрібно лише: встановити допустиме значення слippage, не перевищуючи 1%; великі угоди виконувати частинами. Тому вам зовсім не варто відмовлятися від торгівлі на DEX (децентралізованій біржі) через це.
Ця атака MEV на суму 215 тисяч доларів безсумнівно є ще одним жорстоким проявом закону “темного лісу” у світі блокчейну. Вона яскраво демонструє складну гру, що ховається в децентралізованому, бездозвільному середовищі, де можна скористатися механічними вразливостями для отримання вигоди.
З більш високої точки зору, поява MEV є проявом подвійного ефекту прозорості та програмованості блокчейну.
Це не просто хакерська діяльність, а глибоке розуміння та використання основних механізмів блокчейну, що ставить під сумнів надійність дизайну протоколу і викликає виклики для свідомості учасників щодо ризиків.
Розуміння MEV, усвідомлення його ризиків дозволяє краще орієнтуватися в цьому світі цифрових можливостей, який також приховує небезпеки. Пам’ятайте, що в “темному лісі” блокчейну лише шануючи правила та підвищуючи обізнаність, можна уникнути того, щоб стати наступною жертвою.
Це також те, що я хочу досягти через цю статтю.