En resumen, estos ataques son "hermosos". En cada ataque, el atacante inmediatamente tomó prestados cientos de miles de dólares en ETH sin gastar un centavo, y luego obtuvo cientos de miles de fondos robados a través de una serie de frágiles protocolos de cadena, y finalmente pagó sumas enormes. Devuelva el préstamo de ETH que pidió prestado. Todo sucedió en una fracción de segundo. Es decir, dentro de una única transacción de Ethereum.
Portada de Infantino, Camai.
No sabemos quiénes son estos atacantes ni de dónde vienen. Llegaron con las manos vacías y se llevaron cientos de miles de cosas sin dejar rastro.
A raíz de estos ataques, he estado pensando en los préstamos flash y su impacto en la seguridad de DeFi. Creo que merece una reflexión honesta. En resumen, creo que los préstamos flash son una gran amenaza para la seguridad de DeFi. Sin embargo, los préstamos flash no van a desaparecer y debemos considerar cuidadosamente su impacto en la seguridad futura de DeFi.
¿Qué es un préstamo flash?
El concepto de préstamos flash fue propuesto por primera vez por Max Wolff, fundador de Marble Agreement, en 2018. Marble se autodenomina el “banco de contratos inteligentes” del mercado. Su producto es simple pero innovador en DeFi: préstamos sin riesgo a través de contratos inteligentes. (Nota de Blue Fox: para saber qué es un préstamo rápido, consulte los artículos anteriores "Préstamo criptográfico flash: la nueva invención mágica del dinero de Internet" y "Estrategia de préstamo rápido: ¿puede un atacante tomar los $700 millones en garantía del fabricante? bZx Enlightenment del siniestro")
¿Cómo puede haber un préstamo sin riesgo?
Los prestamistas tradicionales asumen dos formas de riesgo. En primer lugar, el riesgo de impago: sería terrible que el prestatario huyera. El segundo riesgo para los prestamistas es el riesgo de iliquidez: si un prestamista presta demasiado en el momento equivocado o no cobra los pagos a tiempo, inesperadamente puede carecer de liquidez y no poder cumplir con sus obligaciones.
Los préstamos rápidos mitigan ambos riesgos. Básicamente, así es como funciona un préstamo flash: te presto la cantidad de dinero que quieras en una sola transacción. Sin embargo, antes de que finalice este trato, al menos deberías devolverme el dinero que te presté. Si no puede hacer esto, revertiré automáticamente su transacción. Sí, los contratos inteligentes pueden hacer esto.
En resumen, su préstamo flash es atómico: si no paga el préstamo, todo se revierte como si el préstamo nunca hubiera existido. Este tipo de cosas sólo pueden suceder en blockchain. Por ejemplo, no puede pagar rápidamente su préstamo en BitMEX. Esto se debe a que la plataforma de contrato inteligente solo puede procesar una única transacción a la vez, por lo que todo lo que sucede en una sola transacción se ejecuta secuencialmente como un proceso por lotes. Puede considerarlo como "tiempo de congelación" durante la ejecución de la transacción. Por otro lado, los intercambios centralizados pueden tener competencia que impida que se cumpla su pedido. En blockchain, puedes asegurarte de que todo tu código se ejecute en orden.
Entonces pensemos en la economía. Los prestamistas tradicionales son compensados de dos maneras: los riesgos que asumen (riesgo de incumplimiento y riesgo de liquidez) y el costo de oportunidad del dinero que prestan (por ejemplo, si puedo obtener 2 en intereses en otro lugar, entonces el prestatario debe pagarme más de 2). tarifa libre de riesgo).
Los préstamos flash son diferentes. Literalmente no hay riesgo ni costo de oportunidad con los préstamos rápidos. Esto se debe a que el prestatario “congela el tiempo” durante el préstamo rápido. Por lo tanto, a los ojos de los demás, el capital dentro del sistema nunca tiene riesgos ni cargas y no puede ganar intereses en otros lugares (es decir, no hay costo de oportunidad).
En cierto sentido, esto significa que no hay ningún costo para los prestamistas que otorgan préstamos rápidos. Esto es muy contradictorio. Entonces, en equilibrio, ¿cuál debería ser el costo de un préstamo rápido? (Nota de Blue Fox: el saldo mencionado aquí se refiere a cuando seamos completamente competitivos, maduros y estables)
Básicamente, los préstamos rápidos deberían ser gratuitos.
O, más apropiadamente, pagar una pequeña tarifa para compartir el costo de incluir tres líneas adicionales de código para que el activo esté disponible para préstamos rápidos.
Rem Kobler Mann
Los préstamos flash no pueden cobrar intereses en el sentido tradicional porque el período de validez de dichos préstamos es cero (APR arbitrario*0=0). Por supuesto, si un prestamista de préstamos rápidos cobra tarifas más altas, otros grupos de préstamos rápidos que cobran tasas de interés más bajas pueden fácilmente superarlo.
Los préstamos rápidos hacen del capital una verdadera mercancía. Esta competencia conducirá inevitablemente a tarifas nulas o tarifas nominales insignificantes. Actualmente, DYdX no tiene tarifas de gestión de préstamos flash. AAVE, por otro lado, cobra 0,09 del principal por los préstamos rápidos. Dudo que esto sea sostenible. De hecho, algunos en su comunidad han pedido que el coste se reduzca a cero. (Tenga en cuenta que ninguno de los ataques utilizó AAVE como su grupo de préstamos rápidos).
¿Para qué se utilizan los préstamos?
La promoción inicial de los préstamos flash fue básicamente para arbitraje. El anuncio de Marble afirma:
“A través de préstamos rápidos, los comerciantes pueden pedir prestado dinero a Marble Bank, luego comprar tokens en un DEX, vender los tokens a un precio más alto en otro DEX y luego devolver el dinero al banco. y obtener ganancias de arbitraje en una sola transacción atómica”.
De hecho, a juzgar por el volumen de transacciones, la mayoría de los préstamos flash hasta ahora se utilizan para este tipo de arbitraje.
La aplicación de préstamo rápido en AAVE. Punto de partida: AAVE
Sin embargo, el volumen de transacciones es pequeño. Desde el lanzamiento del negocio de préstamos rápidos de AAVE, el monto de su préstamo ha sido de sólo 6,543,8 millones de dólares. Esto es minúsculo en comparación con los mercados de arbitraje y liquidación de DeFi.
Esto se debe a que la mayor parte del arbitraje lo realizan arbitrajistas competitivos que ejecutan robots sofisticados. Participan en subastas de gas en cadena y utilizan tokens de gas para optimizar los costos de transacción. Este es un mercado muy competitivo y estas personas están más que felices de mantener algunos tokens en su balance para optimizar sus retornos.
Por otro lado, pedir dinero prestado a AAVE cuesta 80 kg de gas y cobra 0,09 de principal, lo que es un precio elevado para los arbitrajistas que compiten por pequeñas diferencias de precios. De hecho, en la mayoría de las operaciones de arbitraje de AAVE, los prestatarios terminan pagando más al grupo de préstamos de lo que reciben del arbitraje.
A largo plazo, es poco probable que los arbitrajistas utilicen préstamos rápidos para el arbitraje a menos que existan circunstancias especiales. Pero hay otros casos de uso más atractivos para los préstamos flash en DeFi. Un ejemplo es la refinanciación de préstamos. Por ejemplo, digamos que tengo la bóveda de un fabricante.
Posición comercial), que bloqueó $65,438,000 en ETH, y tomé un préstamo de 40 Dai de ETH, lo que significa que además de la deuda, todavía tengo una posición neta de $60. Ahora, digamos que quiero refinanciar con interés compuesto para obtener una tasa de interés más alta. Normalmente necesito recomprar 40 Dai para cerrar mi posición en CDP, lo que requiere algo de capital inicial. La alternativa ahora es que podría prestar 40 Dai mediante un préstamo flash, cerrar el CDP por $65,438,000, luego depositar los $60 de ETH desbloqueados en el compuesto, cambiar los $40 de ETH restantes por Dai a través de Uniswap y luego usarlos para pagar el flash. préstamo. ¡Auge! Refinanciación de capital atómico cero.
Esto es asombroso. Este es un gran ejemplo de cómo funciona el dinero LEGO. 1x.ag en realidad creó un agregador de operaciones de margen y utilizó préstamos flash para completar todo esto automáticamente. Pero los préstamos flash pueden ser interesantes y los atacantes de bZx nos muestran que son más que diversión y juegos.
Los ataques de préstamos flash tienen un impacto significativo en la seguridad.
Estoy cada vez más convencido de que lo que realmente desbloquean los préstamos flash son los ataques de préstamos flash, un ataque que requiere mucho capital y se financia con préstamos flash. Vimos este fenómeno por primera vez en el reciente ataque bZx y sospecho que esto es sólo la punta del iceberg.
Los préstamos flash son particularmente atractivos para los atacantes por dos razones principales:
Muchos ataques requieren grandes cantidades de capital inicial (como los ataques controlados por computadora). Si obtiene un rendimiento positivo de una inversión por valor de 100.000 ETH, probablemente eso no sea arbitraje; se podría decir que es una tontería.
Puede que no le guste que las listas negras de intercambios sean parte del modelo de seguridad blockchain actual. Esto es muy pegajoso y concentrado. Pero es una realidad importante que proporciona información computacional para estos ataques.
En el libro blanco de Bitcoin, Satoshi Nakamoto afirmaba que Bitcoin era inmune a los ataques porque: "A un atacante debería resultarle más rentable seguir las reglas... que socavar la eficacia del sistema y su riqueza. Figura. ”
Con los préstamos flash, los atacantes ya no necesitan tener una participación para participar. (Nota de Blue Fox: en otras palabras, destruir el sistema no afectará los propios intereses del atacante, porque el atacante no tiene intereses). Los préstamos flash esencialmente cambian el riesgo para los atacantes. Recuerde, ¡los préstamos rápidos se acumulan! Sujeto a los límites de gas, en realidad puede agrupar todos los fondos de préstamos rápidos (hasta $50 millones) en una sola transacción, agrupando todos los fondos en un contrato frágil. Es un ariete de 50 millones de dólares que ahora permite a cualquiera golpear cualquier piñata con una cadena. Esto es realmente terrible.
Por supuesto, no puedes atacar el protocolo sólo porque tienes dinero. Si la pila DeFi fuera tan segura como dice, nada de esto sería un problema: ¿qué tipo de protocolos no son seguros para las ballenas? Se podría decir que sería un error no considerar esto.
Sin embargo, admitimos que el propio Ethereum puede ser atacado por 565,438 0, y el costo actual del ataque es inferior a $200,000 por hora. No es mucho dinero. Si el propio modelo de seguridad de Ethereum se basa básicamente en restricciones de capital, entonces ¿por qué nos burlamos del uso de DeFi, donde un ataque de 654,38 millones de dólares tuvo éxito tan rápidamente? (Para ser claros, no creo que estos números (ignoran convenientemente el deslizamiento y el aprovisionamiento insuficiente) además de la seguridad de la capa de consenso y la seguridad de la capa de uso sean dos cosas diferentes. Pero ya sabes lo que eso significa).
Entonces, ¿cómo mitigar los ataques de préstamos flash?
Supongamos que soy un protocolo DeFi y quiero evitar ser atacado por préstamos flash. Una posible pregunta natural es: ¿puedo detectar si el usuario con el que estoy interactuando está utilizando un préstamo flash?
La respuesta corta es: no.
EVM no permite leer el almacenamiento de ningún otro contrato. Entonces, si quieres saber qué pasó con otros contratos, este te lo dirá. Entonces, si desea saber si el contrato de préstamo rápido está en uso, debe consultar el contrato directamente. Muchos acuerdos de préstamo ahora no responden a esta pregunta (y, en general, no hay forma de imponer el comportamiento de los prestamistas flash). Además, incluso si intenta comprobarlo, es fácil utilizar contratos de agencia o grupos de préstamos rápidos en cascada para engañar a dichas consultas. En resumen, a menudo es difícil saber si un usuario de almacenamiento está utilizando un préstamo rápido.
En resumen, si alguien llama a tu puerta con 654,38 millones de dólares, no puedes saber si es su propio dinero. Entonces, ¿qué opciones reales tenemos para prevenir ataques de préstamos flash? Se pueden considerar los siguientes métodos.
Persuadir a los grupos de préstamos rápidos para que dejen de brindar servicios.
Ja, es broma. Este es el mundo del cifrado, ¡lo sabes!
En serio, intentar impedir que los consorcios de préstamos ofrezcan préstamos rápidos es como intentar detener la contaminación acústica, una tragedia clásica de los bienes comunes. A todos los protocolos les interesa ofrecer préstamos rápidos y existen razones legítimas por las que sus usuarios querrían utilizar esta función. Entonces, puedes intentar ignorar este. Los préstamos flash no van a desaparecer.
Fuerza que las transacciones clave abarquen dos bloques.
Tenga en cuenta que los préstamos flash le permiten pedir dinero prestado durante una sola transacción. Si necesita una transacción intensiva en capital que abarque dos bloques, el usuario debe obtener un préstamo de al menos dos bloques, derrotando así cualquier ataque de préstamo rápido. (Nota: para hacer esto, el usuario debe bloquear el activo entre dos bloques para evitar que pague el préstamo. Si el diseño no se piensa correctamente, el usuario puede simplemente implementar un ataque de préstamo rápido en estos dos bloques)
Obviamente, esto conlleva un enorme costo de UX: significa que las transacciones ya no están sincronizadas. Para los usuarios comunes, es extremadamente malo y difícil decidirse a tomar medidas. (Nota de Blue Fox: para evitar ataques de préstamos rápidos y provocar una mala experiencia del usuario, esta es obviamente la mejor política.
)
Muchos desarrolladores están preocupados por las operaciones de contratos inteligentes asincrónicas, como la interacción con la segunda capa y la comunicación entre fragmentos en Ethereum 2.0. Irónicamente, cuando se trata de préstamos flash, async en realidad hace que estos sistemas sean más seguros porque no se pueden cruzar fragmentos o capa 2 en una sola transacción atómica. Esto significa que no habrá ataques de préstamos flash contra DEX en todo el fragmento ETH2.0 o la capa 2.
Se requiere certificación en línea para demostrar que el saldo anterior del usuario no ha cambiado debido a los préstamos flash.
Si hubiera una manera de detectar el saldo real de un usuario (es decir, su saldo antes de obtener el préstamo), los ataques de préstamos rápidos podrían derrotarse.
Esta operación no se puede realizar localmente en el EVM, pero puedes hacer algunas cosas similares a las de un hacker. Esto es lo que debe hacer:
Antes de que un usuario interactúe con su protocolo, debe proporcionar a Merkle evidencia de que tiene un saldo suficiente para contabilizar los fondos que está utilizando actualmente. Debe realizar un seguimiento de esto para cada usuario en cada bloque. (Ari Juels me describió este método)
Este método puede tener algún efecto. Por supuesto, también tiene un problema espinoso: verificar estos certificados en cadena es muy costoso y ningún usuario querrá generar estos certificados y pagar tarifas de gas por ello. Además, el usuario puede haber modificado anteriormente el saldo en el mismo bloque, por motivos perfectamente legítimos. Tiene algunas ventajas teóricas, pero no es una solución práctica.
Ninguna de las tres opciones mencionadas anteriormente es especialmente prometedora. En mi opinión, no existe una defensa integral contra los ataques de préstamos flash. Sin embargo, hay dos usos específicos que realmente pueden mitigar los ataques de préstamos flash: oráculos basados en precios de mercado y tokens de gobernanza.
Para las máquinas de predicción de precios basadas en el mercado como Uniswap u OasisDEX, los ataques de préstamos flash hacen imposible, bajo ninguna circunstancia, utilizar el precio medio actual del mercado como máquina de predicción. Es fácil para un atacante mover el precio medio del mercado en una sola transacción y crear una caída repentina e interrumpir las máquinas de predicción de precios.
La mejor solución aquí es utilizar un promedio ponderado de los últimos x bloques a través de TWAP o VWAP. Uniswap v2 proporcionará esta funcionalidad de forma nativa. También existe Polaris, un método general que proporciona promedios móviles para protocolos DeFi. Irónicamente, Polaris también fue construida por el fundador de Marble, Max Wolff. (Polaris ahora ha sido abandonada, pero Max merece crédito por ver algo a la vuelta de la esquina).
Chainji en sí es un gusano en su propia lata. La gobernanza en cadena generalmente se determina mediante la gestión de la votación ponderada por tokens entre los poseedores de tokens. Sin embargo, si estos tokens de gobernanza aparecen en el grupo de préstamos flash, cualquier atacante puede obtener una gran cantidad de tokens de gobernanza y lograr los resultados deseados.
Por supuesto, la mayoría de los protocolos de gobernanza requieren que estos tokens estén bloqueados durante la votación para evitar ataques de préstamos flash. Sin embargo, algunas formas de votación no lo requieren, como la votación sobre carbono o los contratos de cumplimiento de los fabricantes. Ahora, con el surgimiento de los ataques a los préstamos urgentes, estas formas de votación deberían ser completamente destruidas.
Lo ideal sería que los tokens de gobernanza no pudieran usarse para préstamos rápidos. Sin embargo, esto no depende del emisor del token, sino del mercado. Por lo tanto, todas las operaciones de gobernanza deberían requerir bloqueo para evitar ataques de préstamos flash. El nuevo token de compensación de Compound va un paso más allá. Requiere una ponderación temporal de todos los votos del protocolo, lo que debilita incluso los ataques de préstamos tradicionales contra sus tokens de gobernanza.
En términos más generales, todos los tokens de gobernanza deben tener bloqueos de tiempo. Los bloqueos de tiempo requieren que todas las decisiones de gobernanza esperen un período de tiempo antes de que puedan surtir efecto (el bloqueo de tiempo de Compound es de dos días). Esto permite que el sistema se recupere de cualquier ataque de gobernanza inesperado. Si bien MKR no ha podido prestarse en grandes cantidades, recientemente se ha pedido a Markle Road que tome medidas ya que es vulnerable a tal ataque. Recientemente implementó un bloqueo de 24 horas para cerrar dichos vectores de ataque.
¿Qué significa todo esto a largo plazo?
Creo que el ataque bZx cambió todo eso.
Este no será el último ataque de préstamos urgentes. El segundo ataque de bZx es una copia del primero y sospecho que habrá otra ola de ataques en los próximos meses. Ahora, miles de adolescentes inteligentes de los rincones más lejanos del mundo se ríen de todos estos Legos DeFi. Están mirando bajo el microscopio, tratando de descubrir cómo llevar a cabo ataques de préstamos flash. Si explotaran con éxito estas vulnerabilidades, podrían ganar cientos de miles de dólares, lo que aparentemente podría cambiar sus vidas en gran parte del mundo.
Algunos dicen que los préstamos rápidos no cambiarán nada porque estos ataques siempre son posibles si el atacante tiene suficiente dinero. Esto es a la vez correcto y bastante incorrecto. La mayoría de las ballenas no saben cómo piratear contratos inteligentes y la mayoría de los atacantes inteligentes no tienen millones de dólares en activos. (Nota de Blue Fox: Esto significa que los dos casi no tienen intersección. El atacante que puede hacer ambas cosas es el más aterrador. Ahora, cualquiera puede alquilar una bola destructora valorada en 50 millones de dólares por solo unos pocos centavos. De ahora en adelante, esto cambiará. la forma en que se construyen todos los edificios
Ser atacado por un préstamo rápido después de un ataque bZx es tan vergonzoso como ser atacado por un ataque Tao: no obtendrás la simpatía de la gente.
p>Finalmente, estos eventos me recuerdan un viejo concepto de las criptomonedas: el valor que los mineros pueden extraer es el valor que los mineros pueden extraer del sistema blockchain. Esto incluye incentivos en bloque y tarifas de transacciones. de extracción de valor, como reordenar transacciones o insertar transacciones fraudulentas en bloques.
Básicamente, debes pensar en todos estos ataques de préstamos flash como una sola transacción que puede generar una gran cantidad de dinero en el mempool. Por ejemplo, el segundo ataque bZx generó una ganancia de $645,000 en ETH. Si eres un minero y planeas comenzar a extraer un nuevo bloque, imagina esto mirando grandes operaciones anteriores y diciéndome: “Espera, ¿qué fue eso? ” ¿Por qué planearía extraer un nuevo bloque para obtener una ganancia de alrededor de $ 500 cuando el último bloque contenía una ganancia de $ 645 000? “¿No elegirías expandir la cadena de bloques, sino retroceder en el tiempo e intentar reescribir la historia y hacerte tú mismo? un atacante de préstamos flash Piénselo: esta transacción por sí sola es más cara que las cuatro que honestamente extrajeron Ethereum ¡Muchas más horas!
¡Esto es isomorfo a un superbloque especial que contiene 1000 veces la recompensa del bloque normal! Como se podría esperar, el resultado racional de un superbloque de este tipo debería ser que los mineros compitan entre sí por las recompensas. eventualmente deberían ser extraídos por los mineros (tenga en cuenta que eventualmente también deberían robar todo en la cadena. Arbitraje y liquidación). Irónicamente, esto evitaría los ataques de préstamos flash porque evitaría que los atacantes exploten estas vulnerabilidades para sacar provecho de ellas. recopilar el código de ataque a través de canales privados y pagar a los posibles atacantes una tarifa de descubrimiento. Es técnicamente posible demostrar que esta operación se puede realizar sin confianza.
Pero esto sigue siendo ciencia ficción, y aparentemente los mineros no lo hacen. hacer esto hoy. ¿Por qué no?
Es difícil, requiere mucho trabajo, es riesgoso, puede tener errores o bloques huérfanos y puede enfrentarse a relaciones públicas por grupos de minería no autorizados, tildados de "enemigos de Ethereum". Es posible que los mineros estén haciendo negocios actualmente, y las pérdidas de I+D y de bloques huérfanos serán mayores.
Es posible que este no sea siempre el caso en el futuro.
Esto proporciona otro impulso para que Ethereum. acelerar la transición a ETH2.0 Aunque DeFi en Ethereum siempre será interesante, es absoluto e irreversible en la cadena PoW porque todas las transacciones de alto valor están sujetas a la redistribución por parte de los mineros (también conocidos como ataques de bandidos del tiempo).
Para que estos sistemas funcionen a escala, se necesita finalidad, para que los mineros no puedan reescribir los bloques confirmados. Esto evitará que las transacciones del bloque anterior sean reasignadas.
Además, los protocolos DeFi no son vulnerables a ataques de préstamos flash si existen en fragmentos ETH2.0 separados.
En mi opinión, el ataque de los préstamos urgentes nos dio un pequeño pero útil recordatorio de que aún es pronto. Estamos lejos de una arquitectura sostenible, una que pueda construirse para el sistema financiero del futuro.
En la actualidad, los préstamos flash serán la nueva normalidad. Quizás a largo plazo, todos los activos en Ethereum puedan usarse para préstamos rápidos: todas las garantías mantenidas en los intercambios, todas las garantías en Uniswap y quizás todos los tokens ERC-20.
¿Quién sabe? Son sólo unas pocas líneas de código.
Preguntas y respuestas relacionadas: