🔥Gate.io Bots estrategia comerciante plan de incentivos se lanza con fuerza!
🤖¡Crea estrategias de Bots de inmediato y comparte 10,900 USDT!
💰Más exposición oficial de tráfico, ayuda en la promoción de estrategias, ¡aumenta los ingresos!
🔗Detalles: https://www.gate.io/announcements/article/43944
Análisis completo del ataque de sándwich MEV: de la ordenación a la cadena mortal de intercambios instantáneos
Escrito por: Daii
El miércoles pasado (12 de marzo), un comerciante de criptomonedas fue víctima de un ataque MEV y perdió 215,000 dólares de una sola vez.
En pocas palabras, este usuario quería intercambiar 220,800 dólares en monedas estables USDC por un equivalente en USDT en la piscina de operaciones de Uniswap v3, pero solo recibió 5,272 USDT, lo que resultó en una evaporación instantánea de 215,700 dólares en cuestión de segundos, como se muestra en la imagen a continuación.
La imagen de arriba es una captura de pantalla del registro en la cadena de esta transacción. La causa fundamental de esta tragedia es que se sufrió un infame "ataque de sándwich" (Sandwich Attack) en el mundo de la blockchain.
El primero en revelar el ataque MEV fue Michael (en la foto de arriba), explicando:
Un bot MEV adelantó la transacción intercambiando toda la liquidez de USDC. Después de que se ejecutó la transacción, devolvieron la liquidez. El atacante dio una propina a un constructor de bloques (bobTheBuilder) de 200 mil dólares y obtuvo una ganancia de 8 mil dólares de esta transacción.
El contenido anterior contiene un error tipográfico; el robot de ataque MEV intercambia una gran cantidad de USDT, en lugar de USDC.
Sin embargo, después de leer su explicación y los informes de noticias, es posible que todavía estés confundido, porque hay demasiados términos nuevos, como ataque de sándwich (Sandwich Attack), adelantarse (front-ran the tx), devolver la liquidez (put back the liquidity), dar propina a un constructor de bloques (tipped a block builder), etc.
Hoy, tomaremos este ataque MEV como ejemplo para desglosar todo el proceso y llevarte a explorar este oscuro mundo del MEV.
Primero, necesitamos explicar qué es MEV.
MEV se llamó originalmente Miner Extractable Value, que se refiere a la ganancia adicional que los mineros pueden obtener al reordenar, insertar o excluir transacciones en bloques de blockchain. Esto puede resultar en costos más altos para el usuario promedio o un precio de transacción más desfavorable.
A medida que redes de blockchain como Ethereum pasan del mecanismo de consenso de Prueba de Trabajo (Proof-of-Work, PoW) al mecanismo de consenso de Prueba de Participación (Proof-of-Stake, PoS), el poder de controlar el orden de las transacciones se ha trasladado de los mineros a los validadores. Por lo tanto, el término también ha evolucionado de "Valor Extraíble por Mineros" (Miner Extractable Value) a "Valor Máximo Extraíble" (Maximal Extractable Value).
A pesar de que el nombre ha cambiado, el concepto fundamental de extraer valor manipulando el orden de las transacciones sigue siendo el mismo.
Lo anterior sigue siendo un poco técnico, pero solo hay que recordar que MEV existe porque los antiguos mineros, y ahora los validadores, tienen derecho a ordenar las transacciones en el mempool. Este orden tiene lugar en un bloque, y ahora Ethereum produce un bloque en unos 11 segundos, lo que significa que habrá un ejercicio de poder de este tipo cada 11 segundos. Una vez más, esta vez el ataque MEV se implementó a través de pedidos de validadores.
Haz clic en este enlace y verás el contenido de las transacciones del bloque con el número 22029771 relacionado con este ataque, como se muestra en la imagen a continuación.
Por favor, note que las transacciones en las imágenes 1, 2 y 3 son el ataque MEV mencionado al principio de este artículo, y este orden ha sido organizado por el validador (bobTheBuilder). ¿Por qué se puede hacer esto?
Para entender cómo funciona MEV, primero necesitamos comprender cómo la blockchain registra y actualiza la información.
2.1 Mecanismo de actualización del estado de la blockchain
La blockchain puede considerarse como un libro de contabilidad en constante crecimiento que registra todas las transacciones realizadas. El estado de este libro, como el saldo de cada cuenta y las reservas de varios tokens en el pool de transacciones de Uniswap, se determina por transacciones anteriores.
Cuando se añade un nuevo bloque a la cadena de bloques, todas las transacciones contenidas en ese bloque se ejecutan secuencialmente según su orden de disposición en el bloque. Cada vez que se ejecuta una transacción, el estado global de la cadena de bloques cambia en consecuencia.
Es decir, no solo es importante el orden de los bloques, sino que también es importante el orden de las transacciones dentro de los bloques. ¿Cómo se determina entonces el orden de las transacciones en un bloque?
2.2 Los validadores deciden el orden de las transacciones
Cuando un usuario inicia una transacción en la red de blockchain, como esta transacción que convierte USDC a USDT a través de Uniswap, primero se transmite a los nodos en la red. Después de una verificación inicial, la transacción entra en un área llamada "mempool". El mempool es como una zona de espera, donde las transacciones aún no han sido confirmadas y añadidas al próximo bloque de la blockchain.
Los mineros anteriores (en el sistema PoW), ahora los validadores (en el sistema PoS) tienen el derecho de seleccionar transacciones del pool de memoria y decidir el orden en que estas transacciones aparecerán en el próximo bloque.
El orden de las transacciones en un bloque es crucial. Antes de que un bloque sea confirmado de manera definitiva y agregado a la cadena de bloques, las transacciones dentro de ese bloque se ejecutarán en el orden determinado por el validador (como bobTheBuilder). Esto significa que, si un bloque contiene múltiples transacciones que interactúan con el mismo conjunto de transacciones, el orden de ejecución de estas transacciones afectará directamente el resultado de cada transacción.
Esta capacidad permite a los validadores priorizar ciertas transacciones, retrasar o excluir otras transacciones, e incluso insertar sus propias transacciones para maximizar las ganancias.
El orden de esta transacción es igualmente importante, cualquier descuido puede hacer que el ataque no tenga éxito.
2.3 Orden de transacciones del ataque MEV
Primero, entendamos brevemente las 3 transacciones relacionadas con este ataque MEV:
Transacción 1 (la primera transacción del atacante): ejecutada antes de la transacción de la víctima. El propósito de esta transacción suele ser aumentar el precio del token que la víctima quiere negociar.
Transacción 2 (Transacción de la víctima): Se ejecuta después de la primera transacción del atacante. Debido a las acciones previas del atacante, en este momento el precio en el pool de transacciones es desfavorable para la víctima, quien necesita pagar más USDC para obtener un valor equivalente en USDT, o solo puede intercambiar por menos USDT.
Transacción 3 (la segunda transacción del atacante): Se ejecuta después de la transacción de la víctima. El propósito de esta transacción suele ser aprovechar los nuevos cambios de precio causados por la transacción de la víctima para obtener ganancias.
El validador del ataque MEV esta vez es bob-The-Builder.eth, quien se encarga de ordenar las transacciones en la secuencia 1, 2, 3. Por supuesto, bobTheBuilder no lo hace gratis, ya que participó en este ordenamiento y ganó más de 100 ETH, mientras que el iniciador del ataque MEV solo obtuvo 8000 dólares. Sus ingresos provienen de la segunda transacción de la víctima.
En una frase, el atacante (robot MEV) y el validador (bobTheBuilder) conspiraron, causando que la víctima de la segunda transacción perdiera 215,000 dólares, de los cuales el atacante obtuvo 8,000 dólares y el validador 200,000 dólares (más de 100 ETH).
El tipo de ataque que utilizan tiene un nombre ilustrativo: ataque sándwich. A continuación, explicaremos transacción por transacción para que entiendas completamente qué es exactamente el ataque sándwich, que es bastante complejo en el contexto de MEV.
La razón por la cual se llama ataque sándwich (Sandwich Attack) es porque las dos transacciones del atacante (transacción 1 y transacción 3) se colocan antes y después de la transacción de la víctima (transacción 2), haciendo que todo el orden de las transacciones tenga una estructura similar a un sándwich (ver imagen arriba).
Las transacciones 1 y 3 tienen funciones diferentes. En resumen, la transacción 1 se encarga de cometer el delito, mientras que la transacción 3 se encarga de recoger el botín. En concreto, el proceso completo es el siguiente:
3.1 Transacción 1, responsable de aumentar el precio de USDT
Haz clic en el enlace de la transacción número 1 en la imagen de arriba, verás los detalles de la transacción número 1. El atacante aumentó el precio de USDT de manera muy directa, es decir, cambió todos los 17,58 millones de USDT dentro usando 18,65 millones de USDC, como se muestra en la imagen de abajo.
En este momento, lo que queda en el fondo de liquidez es una gran cantidad de USDC y una pequeña cantidad de USDT. Si según los informes de noticias, antes del ataque, la liquidez de Uniswap tenía aproximadamente 19.8 millones de USDC y USDT, después de ejecutar la transacción 1, solo quedarán 2.22 millones de USDT (=1980-1758), mientras que el saldo de USDC aumentará a aproximadamente 38.45 millones (=1980+1865).
En este momento, la tasa de cambio entre USDC y USDT en este pool ya no es 1:1, sino 1:17, es decir, se necesitan 17 USDC para canjear 1 USDT. Sin embargo, esta proporción es solo aproximada, ya que este pool es V3 y la liquidez dentro de él no está distribuida de manera uniforme.
Hay una cosa más que quiero decirte. En realidad, el atacante no utilizó de una sola vez 18.65 millones de USDC, el USDC utilizado fue de 1.09 millones, ni siquiera el 6%. ¿Cómo lo hizo? Lo explicaremos en detalle cuando terminemos de hablar del ataque.
3.2 Transacción 2, ejecutar 220,000 USDC para intercambiar por USDT
Haga clic en el enlace de la transacción 2 en la imagen de arriba para ver la siguiente imagen.
Como se muestra en la imagen, la transacción 2 de la víctima, debido a la influencia de la transacción 1, solo recibió 5272 USDT de 220000 USDC, perdiendo sin darse cuenta 170000 USDT. ¿Por qué se dice que fue sin darse cuenta? Porque, si la víctima realizó la transacción a través de Uniswap, vería la siguiente interfaz al enviar la transacción.
A través de la imagen anterior, te darás cuenta de que las víctimas deberían haber recibido al menos 220,000 como garantía. La razón por la que las víctimas solo recibieron poco más de 5,000 USDT al final es debido a un deslizamiento enorme, alcanzando más del 90%. Sin embargo, Uniswap tiene un límite de deslizamiento máximo predeterminado del 5.5%, como se muestra en la imagen siguiente.
Es decir, si la víctima realizó la transacción a través de la interfaz de Uniswap, debería recibir al menos 208381 USDT (= 220510 * 94.5%). Puede que te estés preguntando, ¿por qué en el registro de la blockchain anterior se muestra que esta transacción se realizó en "Uniswap V3"?
Porque la parte frontal y la parte posterior de las transacciones en blockchain están separadas. Lo que se menciona arriba como «Uniswap V3» se refiere al fondo de liquidez USDC-USDT de Uniswap, este fondo es público, cualquier parte frontal de la transacción puede operar a través de este fondo.
También por esta razón, hay quienes sospechan que la víctima no es simple, no es una persona común, de lo contrario no habría un deslizamiento tan grande, podría estar utilizando un ataque MEV para lavar dinero. Esto lo hablaremos más adelante.
3.3 Transacción 3, cosecha + reparto
Haz clic en el enlace para ver los detalles de la transacción 3, como se muestra en la imagen de arriba. Hablemos de las tres transacciones A, B y C.
En la transacción A, se restauró la liquidez en la piscina a la normalidad, intercambiando 17.32 millones de USDT por 18.60 millones de USDC;
Transacción B, preparación para la repartición, convertir parte de las ganancias — 204,000 USDC en 105 ETH;
Transacción C, reparto, pagar 100.558 ETH al validador bob-The-Builder.eth.
Hasta aquí, termina el ataque de sándwich.
Ahora para responder a una pregunta importante mencionada anteriormente: ¿cómo logró el atacante lograr un ataque de 18 millones con 1,09 millones de USDC?
La razón por la cual el atacante pudo llevar a cabo un ataque de nivel de 18 millones de dólares con solo 1,09 millones de USDC de capital, es debido a un mecanismo mágico y especial que existe en el mundo de blockchain: el intercambio relámpago (Flash Swap) de Uniswap V3.
4.1 ¿Qué es el intercambio relámpago (Flash Swap)?
En pocas palabras:
El intercambio relámpago permite a los usuarios retirar activos de un grupo de Uniswap en una sola transacción y luego reembolsar con otro activo (o el mismo activo más una tarifa).
Uniswap permite este comportamiento de "recoger primero, pagar después" siempre que toda la operación se complete en una misma transacción. Tenga en cuenta que debe completarse en la misma transacción. Este diseño se realiza para garantizar la seguridad de la plataforma Uniswap.
Préstamos sin riesgo: Uniswap permite a los usuarios retirar fondos temporalmente del pool sin colateral (similar a un préstamo), pero deben reembolsarlos inmediatamente al final de la transacción.
Atomicidad: La operación completa debe ser atómica, es decir, o se completa con éxito (los fondos son devueltos) o falla completamente (la transacción se revierte).
El diseño del intercambio relámpago fue concebido para realizar arbitraje en cadena de manera más efectiva, pero desafortunadamente ha sido explotado por atacantes de MEV, convirtiéndose en una herramienta de manipulación del mercado.
4.2 ¿Cómo ayuda el intercambio relámpago?
A continuación, veamos la imagen y expliquemos paso a paso cómo se realizó el intercambio relámpago en este ataque, como se muestra en la imagen a continuación.
F1 atacante pidió prestados 1.09 millones de USDC de AAVE a través de su propio 701 WETH;
El atacante F2 inicia una solicitud de intercambio relámpago, primero retira 17.58 millones de USDT del fondo de Uniswap (en este momento no es necesario pagar primero) la cuenta del atacante aumenta temporalmente en 17.58 millones de USDT;
El atacante F3 rápidamente depositó 17.58 millones de USDT en el pool de Curve, intercambiando de vuelta a 17.55 millones de USDC. La cuenta del atacante vio una disminución de 17.58 millones de USDT y un aumento de 17.55 millones de USDC. A través de la imagen a continuación, verás que el atacante eligió Curve porque aquí la liquidez es muy abundante, con más de 70.54 millones de USDT y 50.71 millones de USDC, lo que resulta en una deslizamiento relativamente bajo.
F4 los atacantes luego devolverán los 17.55 millones de USDC obtenidos a través de Curve, más los 1.09 millones de USDC que habían preparado originalmente (obtenidos a través de préstamos de Aave), un total de 18.64 millones de USDC, y devolverán a Uniswap de una sola vez, completando el intercambio relámpago;
Después de esta transacción (transacción 1), el saldo de la cuenta del atacante se redujo en 1,09 millones de USDC, ya que de los 18,64 millones de USDC devueltos a Uniswap, solo 17,55 millones de USDC provenían de Curve, y el resto, 1,09 millones de USDC, era capital propio del atacante.
Deberías haber notado que esta transacción en realidad hizo que el atacante perdiera 1.09 millones. Sin embargo, en la transacción 3 posterior, que también utilizó el método de intercambio relámpago, no solo recuperó 1.09 millones de USDC, sino que además ganó más de 200 mil.
A continuación, analizaremos paso a paso los datos de la transacción 3.
K1 atacante, retiró 1860 mil USDC en Uniswap usando intercambio relámpago;
El atacante K2 utilizó una parte de los 17.3 millones de USDC que acababa de retirar de Uniswap para intercambiarlo por 17.32 millones de USDT;
El atacante K1 devolvió 17,32 millones de USDT a Uniswap, tras intercambiarlos de Curve. El intercambio relámpago se completó. Debes tener en cuenta que el atacante obtuvo 17,32 millones de USDT gastando solo 17,30 millones de USDC a través de K2. De los restantes 1,30 millones (= 1.860 - 1.730) de USDC, 1,09 millones son fondos propios, y los restantes 210.000 USDC son las ganancias de este ataque.
El atacante K3 devolvió el capital a AAVE, se llevó 701 WETH, al mismo tiempo que cambió 200,000 USDC por 105 ETH, y envió 100.558 ETH a los validadores como propina (aproximadamente 200,000 dólares), quedándose con menos de 10,000 dólares de ganancia.
Puede que te sorprenda por qué los atacantes están dispuestos a ceder hasta 200,000 dólares de ganancia a los validadores.
4.3 ¿Por qué dar una "propina" de 200,000 dólares?
En realidad, esto no es generosidad, sino una condición necesaria para un ataque MEV exitoso como un ataque sándwich:
El núcleo del ataque exitoso es el control preciso del orden de las transacciones, y los que controlan el orden de las transacciones son los validadores (bobTheBuilder).
Los validadores no solo ayudan a los atacantes a garantizar que las transacciones de las víctimas estén entre las transacciones de ataque, sino que lo más importante es que los validadores pueden asegurar que otros bots de MEV competidores no puedan colarse o interferir en la finalización exitosa del ataque.
Por lo tanto, el atacante prefiere sacrificar la mayor parte de las ganancias para asegurar el éxito del ataque y reservar una parte de las ganancias para sí mismo.
Es necesario señalar que los ataques MEV también tienen un costo. Hay costos en el intercambio relámpago de Uniswap y en las transacciones de Curve; sin embargo, debido a que la tarifa es relativamente baja, aproximadamente del 0.01 al 0.05%, en comparación con las ganancias obtenidas por el ataque, se puede considerar insignificante.
Por último, recordemos que la defensa contra los ataques MEV es en realidad muy sencilla. Solo necesitas: establecer un tolerancia al deslizamiento y no exceder el 1%; realizar transacciones grandes en varias partes. Así que no hay necesidad de dejar de operar en DEX (intercambios descentralizados) por miedo a problemas.
Conclusión: advertencias y lecciones del bosque oscuro
Este ataque MEV de 215,000 dólares es, sin duda, una cruel manifestación de la ley del "bosque oscuro" en el mundo blockchain. Revela vívidamente el complejo juego de aprovechar las vulnerabilidades del mecanismo para obtener beneficios en un entorno descentralizado y sin permisos.
Desde una perspectiva más alta, la aparición de MEV es una manifestación del efecto de espada de doble filo de la transparencia y programabilidad de la blockchain.
Por un lado, todos los registros de transacciones son públicos y se pueden consultar, lo que permite rastrear y analizar los comportamientos de ataque;
Por otro lado, la lógica compleja de los contratos inteligentes y la determinación en la ejecución de transacciones también brindan oportunidades a los participantes astutos.
Esto no es simplemente un acto de hacking, sino una comprensión y utilización profundas de los mecanismos subyacentes de la blockchain, que pone a prueba la robustez del diseño del protocolo y desafía la conciencia de riesgo de los participantes.
Entender el MEV y reconocer sus riesgos es fundamental para navegar mejor en este mundo digital lleno de oportunidades pero también de crisis ocultas. Recuerda que en el "bosque oscuro" de la blockchain, solo al respetar las reglas y mejorar la cognición se puede evitar convertirse en la próxima presa devorada.
Este es también el efecto que quiero lograr a través de este artículo.