
Autor: Jagjit Singh, cointelegraph;
1. Vulnerabilidades potenciales en contratos inteligentes
Aunque los contratos inteligentes son innovadores, no son inmunes a los defectos que las partes maliciosas pueden explotar.
La verificación inadecuada de entrada es una debilidad común, lo que permite que un atacante influya en la ejecución de un contrato al proporcionar información inesperada.Además, la aplicación inadecuada de la lógica empresarial puede crear un comportamiento inesperado o brechas lógicas en el contrato, lo que resulta en vulnerabilidades.Además, las llamadas externas inseguras (como las llamadas que involucran interfaces con fuentes de datos externas u otros contratos) pueden crear vulnerabilidades si se maneja de manera incorrecta.
Un ataque de reingreso es una debilidad que ocurre cuando un contrato llama a otro contrato desde afuera antes de completar su propio cambio estatal.Esto permite que el contrato llamado vuelva a ingresar el contrato de llamadas y puede realizar algunas de sus operaciones nuevamente.Esto puede conducir a un comportamiento inesperado y permitir que un atacante cambie el estado del contrato, que puede drenar los fondos o tener otros efectos negativos.
Dada la posibilidad de tales ataques, los desarrolladores también deben tener precaución al usar contratos externos o fuentes de datos para garantizar que las llamadas externas se procesen adecuadamente para evitar comportamientos y vulnerabilidades inesperados.Pueden ayudar a proteger los contratos inteligentes de las amenazas en constante cambio al vigilar de cerca los programas de seguridad, como las pruebas de contratos inteligentes.
2. ¿Qué es un ataque de reingreso en un contrato inteligente?
En un contrato inteligente, se produce un ataque de reingreso cuando un contrato llama a otro contrato o función desde afuera antes de completar su propio cambio estatal.
Esto permite que el contrato llamado vuelva a ingresar el contrato de llamadas y puede realizar una parte de sus operaciones nuevamente, lo que puede conducir a un comportamiento malicioso imprevisto y frecuente.Por ejemplo, el contrato A llama al contrato B para enviar fondos y luego modificar su propio estado.
El Código de Contrato B puede contener una función de devolución de llamada que le permite volver a ingresar el Contrato A y puede volver a ejecutar la función de transferencia antes de que el Contrato A complete su cambio de estado.Esto permitirá al atacante obtener fondos del contrato varias veces antes de completar la transacción inicial.
La piratería de la organización autónoma descentralizada (DAO) de 2016 en la cadena de bloques Ethereum es otro ejemplo bien conocido.El atacante aprovechó las fallas de reingreso en el código de contrato inteligente para eliminar recursivamente los fondos del DAO, lo que finalmente llevó a los millones de dólares robados en Ethereum (ETH).
Además, los protocolos de finanzas descentralizadas (DEFI) múltiples, incluidos UNISWAP, Lendf.ME, Burgerswap, SurgebnB, Cream Finance y Siren Protocol, sufrieron pérdidas financieras significativas debido a las vulnerabilidades de reentabilidad.Estas violaciones causaron pérdidas de $ 3.5 millones a $ 25 millones, destacando la amenaza continua que representa las vulnerabilidades reentrantes en el sector Defi.
3. Cómo reingresar el trabajo de los ataques
Los ataques de reingreso utilizan la ejecución secuencial de las funciones de contrato inteligentes y las llamadas externas para formar un bucle donde un atacante puede ejecutar funciones específicas varias veces antes de completar, lo que puede conducir a un comportamiento malicioso y retiro de fondos no autorizados.
El contrato del atacante «estafra» la devolución de llamada del contrato de la víctima al contrato del atacante antes de que la víctima complete la modificación del estado.Esta acción puede conducir a retiros repetidos u otra negligencia.
La imagen de arriba demuestra un ataque de reingreso contra contratos inteligentes.El contrato del atacante llama a la función «retirar ()» de la víctima, que envía a Ethereum antes de actualizar el saldo.Luego se dispara la función de retroceso del atacante, y nuevamente llama recursivamente a retirar () para agotar los fondos del contrato de víctima.Este ataque explota la situación en la que la víctima no pudo actualizar el saldo antes de enviar los fondos.
Usemos un ejemplo simplificado para desglosar cómo funcionan los ataques de reingreso:
Contrato inteligente con la función de «retiro»
Supongamos que hay un contrato inteligente de billetera digital que permite a los usuarios retirar fondos.Además de rastrear los saldos de los usuarios, el contrato también tiene una función de retiro para facilitar el retiro de fondos.La función de retiro generalmente permite a los usuarios retirar sus tokens o Ethereum de contratos inteligentes a su billetera personal.
Interacción de usuario y ejecución de funciones
El usuario solicita el retiro de la billetera por su cuenta.Utilizan la función de retiro para ingresar el monto de retiro requerido.
La función de retiro verificará cuando se le llame si el usuario tiene suficientes fondos para retirarse.Si se cumplen los requisitos, transfiere los fondos requeridos a la dirección seleccionada por el usuario.
Llamada externa
Aquí es donde aparecen debilidades.El contrato realiza una llamada externa a otro contrato o cuenta antes de que el retiro se refleje en el saldo del usuario.
Llamada recursiva
Si el código del contrato externo contiene una función que puede volver a llamar al contrato original (como otra función de retiro), se crea un bucle recursivo.Esto permite que el método de retiro se vuelva a llamar antes de finalizarlo.
Reingreso y utilización
El atacante luego usa un contrato malicioso para explotar este bucle.El contrato del atacante rápidamente llama a la función de retiro de la billetera nuevamente antes de que el saldo se actualice durante el contrato de billetera llama al contrato externo.
Función de retroceso
En algunos casos, el atacante puede utilizar la característica de retroceso de un contrato inteligente (una característica única que se inicia cuando un contrato recibe una llamada sin datos o Ethereum).Los ataques de reingreso se pueden realizar llamando repetidamente a la función de retroceso mientras los fondos aún se están procesando.
Manipulación y retiros recurrentes
El contrato del atacante puede reutilizar la función de retiro en la misma transacción, porque el contrato de billetera retrasa la actualización del saldo hasta que se recibe una llamada externa.Por lo tanto, esto facilita que los fondos se retiren sin autorización, lo que permite a los atacantes robar fondos más allá de sus derechos legales.Luego causó enormes pérdidas económicas a los usuarios del contrato de billetera.
4. Las consecuencias de los ataques reingresores
Los ataques de reingreso pueden tener un grave impacto en los usuarios de contratos inteligentes porque tienen el potencial de causar pérdidas financieras significativas.
Una de las consecuencias más directas de un ataque de reingreso es el retiro o manipulación no autorizado del efectivo ahorrado en un contrato inteligente susceptible.El atacante explotó la vulnerabilidad para retirar repetidamente los fondos del contrato, agotar el saldo del contrato y potencialmente causando pérdidas financieras significativas a los usuarios que invierten o almacenan activos en el contrato afectado.
Además, los ataques de reingreso pueden debilitar la confianza de los usuarios en la seguridad y la integridad de los contratos inteligentes y las tecnologías de blockchain.Las vulnerabilidades de reingreso pueden tener efectos catastróficos, como lo demuestran eventos de alto perfil como el incidente de piratería DAO en la cadena de bloques Ethereum en 2016, que causó grandes pérdidas económicas y dañó la reputación de la comunidad.
Además de las consecuencias financieras a corto plazo, los ataques de reingreso pueden tener efectos a largo plazo, como preocupaciones regulatorias y legales, disminución de la confianza de los inversores y daños a la reputación de plataformas y proyectos blockchain.La percepción de la vulnerabilidad puede llevar a los usuarios a ser cautelosos al interactuar con contratos inteligentes o invertir en aplicaciones descentralizadas (DAPP), lo que obstaculiza la adopción y expansión de la tecnología blockchain.
5. Cómo mitigar los ataques de reingreso
La implementación de las mejores prácticas en la creación y auditoría de contratos inteligentes es necesaria para mitigar la amenaza de reingreso.
Esto incluye el uso de una base de código bien conocida con un registro seguro, que es una forma de lograrlo.Estas bibliotecas han sido ampliamente probadas y revisadas por pares, lo que reduce las posibilidades de introducir vulnerabilidades.
Los desarrolladores también deben usar verificaciones de seguridad como diseños de «interacción con efecto de verificación» para minimizar la posibilidad de ataques de reingreso asegurando que las modificaciones estatales ocurran atómicamente.Si está disponible, puede usar un marco de desarrollo de contratos inteligente reentrante y seguro para agregar defensa adicional contra tales vulnerabilidades.
Es poco probable que los desarrolladores agregen protección de seguridad manualmente, ya que estos marcos a menudo incluyen métodos incorporados y protecciones diseñadas específicamente para evitar ataques de reingreso.Sin embargo, a medida que la seguridad de Blockchain sigue evolucionando, los desarrolladores deben continuar buscando nuevas amenazas y debilidades.