Prólogo
Según información de SlowMist, la plataforma Ethereum DeFi Lendf.Me sufrió un ataque de vulnerabilidad de reentrada. Después de recibir la inteligencia, el equipo de seguridad de SlowMist analizó inmediatamente el ataque y localizó rápidamente el problema.
De acuerdo con el análisis estadístico preliminar del sistema contra el lavado de dinero (AML) de SlowMist Technology, la pérdida acumulada de Lendf.Me atacado es de aproximadamente 24,696,616 dólares de EE. UU. La moneda robada específica y la cantidad son:
Después de eso, los atacantes continuaron intercambiando las monedas robadas por ETH y otros tokens a través de plataformas DEX como 1inch.exchange, ParaSwap y Tokenlon.
El siguiente es el proceso de análisis detallado.
Detalles del ataque
La dirección del atacante que atacó a Lendf.Me esta vez es 0xa9bf70a420d364e923c74448d9d817d3f2a77822. El atacante atacó a Lendf.Me implementando el contrato 0x538359785a8d5ab1a741a0ba94f26a800759d91d.
V God: No tiene mucho sentido llevar a cabo la supervisión KYC en la parte delantera de DeFi, y propuso tres reglas regulatorias que pueden ser útiles: el 30 de octubre, V God expresó sus puntos de vista sobre los problemas de supervisión de DeFi en su plataforma social, diciendo que La supervisión de KYC debe llevarse a cabo en la parte delantera de DeFi. Realmente no tiene sentido, ya que es inútil para los piratas informáticos. V God señaló que la supervisión de front-end de DeFi que puede ser más útil incluye: 1. Restricciones de apalancamiento, 2. Auditorías, FV u otros controles de seguridad en códigos de contrato requieren un cierto grado de transparencia, 3. Activos netos que pasan pruebas cognitivas en lugar de que la riqueza Reglas mínimas para controlar el uso del usuario.
Además, V God dijo que la comunidad de cifrado no debería perseguir demasiado el gran capital institucional. De hecho, está feliz de que se hayan pospuesto muchos ETF. El ecosistema necesita tiempo para madurar antes de que las criptomonedas reciban más atención. [2022/10/30 11:57:34]
Al ver una de las transacciones del atacante en Etherscan: https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b
La plataforma de negociación cifrada Defy completa una ronda inicial de financiación de 5,5 millones de dólares: el 18 de noviembre, la plataforma de negociación de cifrado social india Defy completó una ronda inicial de financiación de 5,5 millones de dólares, con la participación de Y Combination, Goat VC, JAM Fund y Goodwater Capital. Defy está construyendo un intercambio de criptomonedas social y basado en la comunidad. La plataforma permite a los usuarios crear perfiles y compartir carteras de transacciones criptográficas, interactuando con amigos y seguidores. La nueva financiación se utilizará para expandir el equipo en ingeniería, producto y otras verticales. (inc42) [2021/11/18 22:01:39]
Descubrimos que el atacante primero depositó 0.00021593 imBTC, pero retiró con éxito 0.00043188 imBTC de Lendf.Me, y la cantidad retirada fue casi el doble de la cantidad depositada. Entonces, ¿cómo obtuvo el atacante el doble del saldo de una transacción corta? Esto requiere que analicemos profundamente cada acción en la transacción para ver qué sucedió.
La escala de los acuerdos de préstamo DeFi superó los US$15 mil millones, un récord: Jinse Finance informó que, según los datos de Debank, a partir de las 10:00 de hoy, la escala de los acuerdos de préstamo DeFi alcanzó un récord, superando los US$15 mil millones, alcanzando los US$15.16 mil millones. Entre ellos: Compound representó el 42,72 % y ocupó el primer lugar, alcanzando los 6470 millones de USD; Venus representó el 25,45 % y ocupó el segundo lugar, alcanzando los 3850 millones de USD; Maker representó el 21,09 % y ocupó el tercer lugar, alcanzando los 3190 millones de USD.
Nota: El mercado de préstamos descentralizados es un sistema de red basado en contratos inteligentes, donde los titulares de criptomonedas pueden prestar sus activos/tokens en cadena a otros para obtener ganancias. [2021/4/6 19:49:21]
Al ver la transacción en bloxy.info, podemos conocer el proceso completo de la transacción.
Al analizar el proceso de transacción, no es difícil encontrar que el atacante realizó dos llamadas a la función de suministro () en Lendf.Me, pero estas dos llamadas son independientes, no llamando al suministro nuevamente en la función de suministro anterior () función () .
Análisis del mercado de contratos financieros de Jinse | Los precios de las monedas principales se repiten, y el sector DeFi generalmente está aumentando: según el mercado de contratos perpetuos de Huobi BTC, a partir de las 18:00 de hoy (GMT+8), el precio de BTC se informa temporalmente en 11.587 dólares estadounidenses (+0,95%), 20:00 (GMT+8) La tasa de financiación de liquidación es 0,010000%.
BTC alcanzó un máximo de $ 11,600 hoy, y el precio ha fluctuado. Según los datos del contrato de entrega de Huobi, la rotación de contratos de BTC en el trimestre se redujo drásticamente, el interés abierto continuó disminuyendo, la proporción de posiciones largas de élite disminuyó ligeramente y la prima positiva de los contratos en el trimestre continuó disminuyendo. Durante la turbulencia de las monedas principales, el sector DEFI experimentó un aumento general en el valor de mercado, LINK aumentó en valor de mercado y superó a BCH, y otras monedas mostraron su propio desempeño.
El precio del USDT en Huobi Global OTC es de 6,91 yuanes, con una prima del -0,44%. [2020/8/13]
Inmediatamente después, durante la segunda llamada de la función suministro(), el atacante inicia una llamada a la función retirar() de Lendf.Me en su propio contrato, y finalmente retira
Noticias | El equipo detrás de LoanScan y Bloqboard lanza la aplicación bancaria Linen con backend DeFi: El equipo detrás de la firma de préstamos criptográficos Bloqboard y el proveedor de datos de criptomonedas LoanScan está lanzando una aplicación bancaria llamada Linen. La aplicación integra funciones DeFi y el objetivo es reducir las barreras para la popularización del cifrado al reducir la necesidad de múltiples DApps en el proceso de préstamo, lo que facilita el acceso de los usuarios que no utilizan criptomonedas. Linen también completó recientemente una ronda de financiación no revelada, con participantes como Polychain, Coinbase, Wyre y Hashkey, de los cuales Hashkey es una inversión estratégica. Cabe señalar que Linen no está abierto a los residentes de Nueva York. (El Bloque)[2019/9/21]
Aquí, no es difícil analizar que la llamada de retiro () del atacante se produce en la función transferFrom, es decir, cuando Lendf.Me llama a la función de enlace tokensToSend () del usuario a través de transferFrom. Obviamente, el atacante volvió a ingresar al contrato de Lendf.Me a través de la función de suministro (), lo que provocó un ataque de reingreso, entonces, ¿cuáles son los detalles específicos del ataque? Sigamos con el código de contrato de Lendf.Me a continuación.
Análisis de código
Después de una serie de procesamientos, la función supply() de Lendf.Me llamará a una función doTransferIn para depositar la moneda provista por el usuario en el contrato y luego asignar cierta información de la variable de mercado. Mirando hacia atrás en el proceso de ataque que acabamos de mencionar, el atacante llamó a la función de retiro() para retirar efectivo a través de la reentrada en la segunda función de suministro(), es decir, en la segunda función de suministro(), después de la línea 1590 La operación no se ejecutará antes de retirar (), y el código después de la línea 1590 continuará ejecutándose después de que se ejecute retirar (). Las operaciones aquí conducen a un aumento en el saldo disponible del atacante.
Analicemos en profundidad la función supply()
De acuerdo con la figura anterior, podemos ver que al final de la función suministro(), se actualizará el saldo del mercado y del usuario, antes de eso, el saldo del usuario será preadquirido al comienzo de la función y guardado en localResults.userSupplyCurrent, de la siguiente manera:
Al asignar un valor a la variable localResults, la información de transferencia del usuario se almacenará temporalmente en esta variable primero, y luego el atacante ejecuta la función retirar () en este momento. Veamos el código de la función retirar ():
Hay dos puntos clave aquí:
1. Al inicio de la función, el contrato obtiene primero las variables de mercado y oferta Saldo de almacenamiento.
2. Al final de la función de retiro (), existe la misma lógica para actualizar la información del saldo del usuario del mercado (supplyBalance), y el valor actualizado es el saldo después de deducir el monto del retiro del usuario.
De acuerdo con la lógica de retiro normal, cuando el retiro() se ejecuta solo, el saldo del usuario se deducirá y actualizará normalmente, pero debido a que el atacante incrusta el retiro() en suministro(), el saldo del usuario se actualiza en la función retirar() Después el saldo (supplyBalance), el siguiente código que se ejecutará en la función supply(), es decir, después de la línea 1590, el saldo del usuario se actualizará nuevamente y el valor utilizado para la actualización se guardará al comienzo de la anterior función supply() El depósito original del usuario en localResults más el valor de la primera llamada del atacante al depósito de la función supply().
Bajo tal operación, aunque el saldo del usuario se haya deducido después del retiro, la lógica de la siguiente función de suministro () sobrescribirá el valor cuando el usuario no haya deducido el monto del retiro nuevamente, haciendo que el atacante realice la operación de retiro, pero en lugar de deducir el saldo, hizo que el saldo aumentara. De esta forma, el atacante puede retirar efectivo en una cantidad exponencial hasta que se retira Lendf.Me.
Consejos de defensa
En respuesta a este ataque, el equipo de seguridad de SlowMist recomienda:
1. Agregue un mecanismo de bloqueo a los métodos clave de operación comercial, como: ReentrancyGuard de OpenZeppelin
2. Al desarrollar un contrato, use el estilo de escritura de cambiar primero las variables de este contrato y luego hacer llamadas externas
3. Antes de que el proyecto entre en línea, se invita a un excelente equipo de seguridad externo a realizar una auditoría de seguridad integral para descubrir posibles problemas de seguridad tanto como sea posible.
4. Cuando se conectan múltiples contratos, también es necesario verificar la seguridad del código y la seguridad comercial de los contratos de múltiples partes, y considerar completamente los problemas de seguridad bajo la combinación de varios escenarios comerciales.
5. El contrato debe configurar el interruptor de pausa tanto como sea posible, de modo que cuando ocurra un evento de "cisne negro", se pueda detectar a tiempo y detener la pérdida.
6. La seguridad es dinámica, y cada parte del proyecto también necesita capturar inteligencia de amenazas que pueda estar relacionada con su propio proyecto de manera oportuna, e investigar oportunamente los posibles riesgos de seguridad.
Adjunto OpenZeppelin ReentrancyGuard:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
Tags:
El artículo es una contribución del análisis de blockchain de Niu Qi.
Recientemente, USDT ha seguido emitiendo tokens adicionales. En solo medio mes.
1. Prueba interna DC/EP, las acciones del concepto de moneda digital desencadenaron una tendencia de límite diario, ¿qué empresas son?El 16 de abril de 2020.
Prólogo Según información de SlowMist, la plataforma Ethereum DeFi Lendf.Me sufrió un ataque de vulnerabilidad de reentrada. Después de recibir la inteligencia.
Demasiado largo para leer: Kusama y Polkadot son redes separadas construidas sobre bases de código similares.
Heifer International, una organización sin fines de lucro centrada en el hambre y la pobreza en el mundo.
Un nuevo estudio publicado en el blog de la Facultad de Derecho de la Universidad de Oxford pide la regulación del criptomercado en tiempos de crisis. Según los investigadores.