Los préstamos flash han estado en el centro de atención últimamente a medida que ocurren más incidentes de robo de dinero de los protocolos DeFi...
Los préstamos flash han estado en el centro de atención últimamente a medida que se han producido más incidentes de robo de protocolo DeFi, desde el pirateo de Harvest Finance por más de $ 33 millones hasta el incidente más reciente de OUSD. Minería de 7 millones de dólares.
Desde el punto de vista del hacker, este ataque parece una gran oportunidad para tomar prestados instantáneamente cientos de miles de dólares de una persona sin un centavo en el valor de ETH. Luego páselo a través de protocolos vulnerables en cadena y extraiga cientos de dólares de su bolsillo y pague su préstamo. Todo esto sucedió en un abrir y cerrar de ojos en una transacción de Ethereum.
No sabemos quiénes son estos atacantes ni de dónde vienen. Todos comenzaron sin nada y se fueron con cientos de miles de dólares en dinero y no dejaron rastro para identificar.
¿Qué son los préstamos flash?
El concepto de préstamos rápidos fue presentado por primera vez por Max Wolff, el creador de Marble Protocol, en 2018.
Los préstamos flash comúnmente utilizados para Ethereum o ERC20 se toman prestados solo por el tiempo necesario para completar un bloque de transacciones en la cadena de bloques. Siempre que el préstamo se pague antes de que comience el siguiente bloque de transacciones, el prestatario no incurrirá en cargos por intereses.
Si los prestamistas tradicionales soportan dos formas de riesgo: riesgo de impago o riesgo de liquidez, Flash Loans resuelve estos dos problemas. Básicamente, los préstamos flash funcionan así:
Te presto la cantidad que quieras en una sola transacción. Pero al final de esta transacción debes devolverme al menos la cantidad que te presté. Si no paga, restauraré automáticamente su transacción, lo que significa que nunca comenzó.
Esto solo existe en Blockchain. No puede hacer préstamos flash en BitMex. Dado que el contrato inteligente puede procesar cada transacción, todo lo que sucede en la transacción se ejecuta secuencialmente. Puede considerar esto como su transacción "tiempo de congelación" mientras la transacción está en curso.
Los prestamistas tradicionales son compensados por dos cosas: el riesgo que están tomando (riesgos de impago y falta de liquidez) y el costo de oportunidad del capital que prestan.
Los préstamos flash son diferentes. ¡Los préstamos flash realmente no tienen riesgo ni costo de oportunidad! Esto se debe a que los prestatarios tienen “tiempo congelado” durante la duración de sus préstamos relámpago, por lo que el capital del sistema nunca está en riesgo y nunca se frustra, por lo que no puede generar intereses en otros lugares (es decir, no tiene costo de oportunidad).
Esto significa que no hay ningún costo para convertirse en un prestamista flash. Dicho esto, ¿cuánto cuestan los préstamos flash en equilibrio?
Básicamente, los préstamos flash son gratuitos. O más bien, una tarifa que es lo suficientemente pequeña como para amortizar el costo incluye 3 líneas de código adicionales para que la propiedad pueda prestarse rápidamente.
Los préstamos flash no se pueden cobrar intereses de la manera tradicional, ya que el préstamo es válido por tiempo cero (cualquier APR * 0 = 0). Y, por supuesto, si las instituciones que ofrecen préstamos flash cobran tasas de interés más altas, otros grupos de préstamos flash les cobrarán rápidamente tasas de interés más bajas.
Algunos proyectos actualmente aplican préstamos flash sin comisión como dYdX o AAVE que cobran el 0,09% del principal por préstamos flash.
¿Para qué sirven los préstamos flash?
Los préstamos flash se conocían originalmente principalmente por el comercio de arbitraje. Marble, el creador de la fuente de definición de préstamos Flash, dice:
Con los préstamos flash, los comerciantes pueden pedir prestado a Marble Bank, comprar tokens en un DEX, vender tokens en otro DEX a un precio más alto, pagar préstamos bancarios y embolsarse ganancias de arbitraje en una sola transacción" . .
De hecho, la mayoría de los préstamos se utilizan para este fin.
Pero el volumen es muy pequeño. AAVE tiene un poco más de $ 10k en préstamos desde su creación. Esto es minúsculo en comparación con el mercado de arbitraje y liquidación en DeFi.
También porque la mayoría de las operaciones de arbitraje las realizan arbitrajistas competitivos que ejecutan programas complejos. Participan en subastas de gas preferidas en cadena y usan tokens de gas para optimizar las tarifas de transacción. Es un mercado muy competitivo: estas personas están perfectamente felices de mantener algunos tokens en su balance general para optimizar las ganancias.
Por otro lado, endeudarse en AAVE cuesta alrededor de 80K de gasolina y cobra el 0,09% del capital, un precio demasiado caro para pagar por un arbitrajista competitivo con un margen pequeño. De hecho, en la mayoría de los comerciantes de arbitraje de AAVE, el prestatario termina pagando más tarifas al grupo de préstamos de lo que recibe.
A largo plazo, es poco probable que los arbitrajistas utilicen préstamos flash, excepto en circunstancias excepcionales.
Pero los préstamos flash tienen otros casos de uso más convincentes en DeFi. Un ejemplo es la refinanciación de préstamos.
Ejemplo: Supongamos que tiene una bóveda Maker (CDP) con $100 ETH bloqueados y tomó prestados 40 DAI de ella. Así que tienes una posición neta de $60 menos la deuda. Ahora desea refinanciar en Compound para obtener una mejor tasa de interés.
Por lo general, es necesario recomprar 40 DAI externamente, tal vez en ese intercambio para recargar el CDP, ya que requiere algo de capital inicial. En su lugar, puede obtener un préstamo rápido de 40 DAI, cerrar $ 100 CDP, depositar $ 60 ETH desbloqueado en Compound, convertir otros $ 40 ETH nuevamente en DAI a través de Uniswap y usarlos para pagar préstamos flash.
Los ataques de préstamos flash tienen grandes implicaciones de seguridad
Los primeros incidentes surgieron del hackeo de bZx y quizás esta fue la antorcha que provocó más ataques.
Hay dos razones principales por las que los préstamos flash son particularmente atractivos para los atacantes.
Muchos ataques requieren una gran cantidad de capital inicial (como los ataques de manipulación de oráculos).
Los préstamos rápidos reducen el riesgo de exposición a los atacantes. Si tengo una idea sobre cómo manipular el oráculo con 10 millones de dólares de Ether, incluso si poseo tanto Ether, es posible que no quiera arriesgar mi capital. Mi ETH se verá afectado, los intercambios pueden rechazar mi depósito y será más difícil que fluya el dinero. ¡Todo un riesgo! Pero si obtengo un préstamo rápido de $10 millones, ¿a quién le importa? Todos son opuestos. No es como si el conjunto de hipotecas de dYdX se considerara afectado negativamente porque de ahí provienen sus préstamos.
Puede que no le guste que la lista negra de intercambio sea parte del paradigma de seguridad de blockchain de hoy. Es bastante reservado y centrado. Pero la realidad es bastante importante dado el cálculo detrás de estos ataques.
En el documento técnico de Bitcoin, Satoshi afirmó que Bitcoin está a salvo de los ataques porque:
“[El atacante] debería encontrar más rentable seguir las reglas […] que destruir el sistema y el valor de sus propios activos”.
Con los préstamos rápidos, los atacantes ya no necesitan gastar mucho dinero en el juego. Los préstamos rápidos cambian drásticamente el riesgo para los atacantes.
Y recuerde, ¡los préstamos rápidos pueden acumularse! Bajo el límite de gasolina, puede agregar cualquier fondo prestable rápidamente en una sola transacción (hasta $ 50 millones) y reducir todo ese capital a un contrato vulnerable. Es una memoria masiva de $ 50 millones a la que cualquiera puede unirse ahora, siempre que haya dinero. ¡Es tan horrible!
Eso sí, ahora no podrás atacar un protocolo si solo tienes mucho dinero. Si DeFi es tan seguro como se dice, todo esto no importará, ¿qué tipo de protocolo no es seguro contra las ballenas? No excepto que fue solo negligencia.
Sin embargo, podríamos ver a Ethereum sujeto a un ataque del 51% por menos de $200k/hora. Si el propio modelo de seguridad de Ethereum se basa básicamente en restricciones de capital, ¿por qué nos apresuramos a suponer que las aplicaciones DeFi se pueden piratear con éxito por tan solo $ 10 millones?
¿Cómo mitigar los ataques de préstamos flash?
Digamos que soy un protocolo DeFi y quiero evitar ser atacado por préstamos flash. La primera pregunta es, ¿puedo detectar si los usuarios que interactúan conmigo están utilizando préstamos flash?
¡La respuesta simple es no!
EVM no permite que los hermanos lean la memoria de ningún otro contrato. Entonces, si quiere saber qué está pasando en otro contrato, ese contrato se lo dirá.
Por lo tanto, si desea saber si se están utilizando préstamos flash, debe preguntar directamente al contrato. Hoy en día, muchos protocolos de préstamos no responden a tales consultas (y no hay forma de hacer cumplir lo que hace un prestamista express).
Además, incluso si ha intentado probar cualquier consulta de este tipo, puede ser fácil que lo desvíen utilizando un contrato de autorización o vinculando grupos de préstamos rápidos. En general, no es posible decir en general si los depositantes están usando préstamos flash o no.
Al igual que alguien llama a tu puerta y se para frente a ti con una maleta que contiene 10 millones de dólares, no puedes saber si es su dinero o no. ¿Derecha?
¿Cómo protegerse de los ataques de préstamos flash?
Deje de proporcionar el servicio de Préstamos Flash
En serio, tratar de que los prestamistas dejen de ofrecer préstamos rápidos es como tratar de detener la contaminación acústica.
La provisión de préstamos rápidos está sujeta a los intereses personales de cada protocolo, y existen buenas razones por las que sus usuarios desean esta funcionalidad. Entonces podemos eliminar esto de manera segura.
Obligar a transacciones importantes a durar dos bloques
Recuerde, los préstamos rápidos le permiten pedir dinero prestado por la duración de una sola transacción. Si solicita una transacción intensiva en capital que abarca dos bloques, los usuarios deben pedir prestados al menos dos bloques, derrotando cualquier ataque de préstamo rápido. (Nota: para que esto funcione, los usuarios deben bloquear su valor entre los dos bloques, lo que les impide pagar el préstamo).
Obviamente, esto conduce a una compensación de UX: significa que las transacciones ya no estarán sincronizadas. Es atractivo para los usuarios y también parece bastante seguro.
Muchos desarrolladores se quejan de las operaciones asincrónicas de contratos inteligentes, como la interacción con la comunicación de capa 2 o la fragmentación cruzada en Ethereum 2.0.
Irónicamente, la asincronía en realidad hace que estos sistemas estén a salvo de los ataques de préstamos rápidos, ya que no se puede pasar por un fragmento o una capa 2 en una sola transacción pequeña. Esto significa que no hay un ataque de préstamo flash en fragmentos ETH 2.0 o contra DEX de capa 2.
Solicitar prueba en línea del saldo anterior del usuario
Podríamos derrotar los ataques de préstamos instantáneos si hubiera alguna forma de detectar cuál era el saldo neto de un usuario, es decir, cuál era su saldo antes de solicitar un préstamo.
Antes de que un usuario interactúe con el protocolo de una plataforma, la plataforma requiere una prueba de Merkle que demuestre que al final del bloque anterior tiene suficiente saldo para contabilizar el capital que está utilizando actualmente. La plataforma necesita rastrear esto para cada usuario en cada bloque.
Esta solución tiene algunas complicaciones: verificar estas pruebas en cadena es extremadamente costoso en cadena, y ningún usuario bien intencionado quiere generarlas y pagar tarifas de gas por todo el proceso. . Alternativamente, los usuarios pueden haber cambiado sus saldos anteriormente en el mismo bloque por razones perfectamente legítimas. Así que teóricamente tiene algo de mérito, pero no es una solución práctica..
No existe una solución única que pueda prevenir por completo los ataques de préstamos instantáneos, pero dos aplicaciones específicas que pueden mitigar estos ataques son: el oráculo de precios basado en el mercado y los tokens de gobernanza.
Para Oracle de fijación de precios basados en el mercado como Uniswap u OasisDEX, los ataques de préstamos rápidos le impiden utilizar las tasas actuales del mercado medio como Oracle.
El plan del atacante era mover el precio promedio del mercado en una sola transacción y crear un colapso repentino, dañando el oráculo en términos de precio.
La mejor solución aquí es usar un promedio ponderado de los últimos X bloques a través de TWAP o VWAP. Uniswap v2 proporcionará esta solución. También existe Polaris, un enfoque generalizado para proporcionar promedios móviles para los protocolos DeFi, pero Polaris se suspendió durante muchos años.
El gobierno en cadena generalmente se determina mediante la votación ponderada por monedas entre los titulares de tokens de gobierno. Pero si esos tokens de gobernanza están en un grupo de préstamos rápidos, entonces cualquier atacante puede tomar una gran cantidad de monedas y confiar en el resultado que quiera.
Por supuesto, la mayoría de los protocolos de gobernanza requieren el bloqueo de tokens durante la votación, lo que ayuda a vencer los ataques de préstamos rápidos. Pero algunas formas de votación no requieren esto, como la votación de carbono o el contrato operativo de Maker. Con los ataques de préstamos rápidos de hoy, estos formularios de votación deben considerarse completamente rotos.
Lo más lógico es que el token de gobernanza sea completamente no crediticio pero depende del mercado. Por lo tanto, todas las acciones administrativas deben requerir un bloqueo para evitar ataques de préstamos rápidos. El nuevo token COMP de Compound va un paso más allá al cronometrar todos los votos del protocolo, lo que debilita instantáneamente incluso el ataque de préstamo ocasional contra el token de gobernanza.
En términos generales, todos los tokens de gobernanza deben tener tiempo. El bloqueo de tiempo que ejecuta todas las decisiones administrativas debe esperar un período de tiempo antes de que surtan efecto (para el bloqueo de tiempo compuesto es de 2 días). Esto permite que el sistema se recupere de cualquier ataque administrativo imprevisto.
Significado a largo plazo
Creo que los ataques bZx lo cambiaron todo.
Este no será el último ataque de préstamos rápidos. El segundo ataque bZx es el primer clon y dudo que cause una ola de ataques en los próximos meses.
Y eso sucedió por completo, en una fila de ataques de préstamos rápidos como Harvest Finance ($ 33,8 millones), Value DeFi ($ 7 millones), Akro ($ 2 millones), Cheese Bank ($ 3,3 millones). USD) y más recientemente OUSD (7 millones de dólares).
Epílogo
Esa es probablemente una de las motivaciones para que Ethereum cambie rápidamente a Ethereum 2.0. DeFi no es estable en la cadena PoW, si los protocolos DeFi existieran en fragmentos separados en Ethereum 2.0 , no serían vulnerables a los préstamos flash.
El ataque de préstamos rápidos nos brinda un pequeño pero útil recordatorio de que todas las plataformas recién comienzan, se necesita mucho tiempo para obtener una arquitectura sostenible para construir el sistema financiero del futuro.
El artículo está traducido y editado del artículo original publicado por Dragonfly Research.