Los contratos inteligentes son contratos autoejecutables en blockchain. Eliminan la necesidad de intermediarios como abogados o bancos al automatizar el proceso de ejecución y cumplimiento de las disposiciones de un contrato. Los contratos inteligentes pueden ejecutarse automáticamente sin intervención humana, son seguros y resistentes a la manipulación. Son atractivos para personas, empresas y gobiernos que buscan automatizar procedimientos y reducir los costos de transacción gracias a esta capacidad.
La capacidad de los contratos inteligentes para eliminar la necesidad de intermediarios puede reducir los costos de transacción, acelerar las transacciones y aumentar la transparencia, que es una de sus principales ventajas. Dado que los datos se registran en un libro de contabilidad descentralizado e impenetrable, los contratos inteligentes también pueden ofrecer mayor seguridad y privacidad que los contratos convencionales.
Este artículo profundiza en los contratos inteligentes y explica más sobre cómo funcionan y cómo pueden piratearse. Los lectores pueden esperar aprender lo siguiente:
Cómo funcionan los contratos inteligentes
Cómo se pueden piratear los contratos inteligentes
Ataques de reentrada
Desbordamiento/Subdesbordamiento
Dependencia de las marcas de tiempo
Fichas de acuñación y listas negras
Cálculos incorrectos
Bibliotecas y dependencias maliciosas
Frente corriendo
Ejemplos de trucos del mundo real
Estrategias de prevención y mitigación
¡Vamos a sumergirnos de lleno!
Cómo funcionan los contratos inteligentes
Los contratos inteligentes funcionan mediante el uso de codificación para hacer cumplir los términos de un acuerdo. El contrato se ejecutará automáticamente cuando se cumplan las circunstancias preestablecidas una vez que el código se haya publicado en la cadena de bloques. No se puede modificar más allá de ese punto.
Por ejemplo, si dos partes acuerdan un contrato inteligente para la venta de una casa, una vez que se realiza el pago y la cadena de bloques lo verifica, el contrato transferirá inmediatamente la propiedad de la casa al comprador.
Numerosas industrias, incluidas las financieras, la gestión de la cadena de suministro, el sector inmobiliario y otras, podrían utilizar contratos inteligentes. La tecnología tiene la capacidad de cambiar la forma en que hacemos negocios y nos comunicamos entre nosotros a medida que se desarrolla y se utiliza más comúnmente.
Cómo se pueden piratear los contratos inteligentes
Debido a que pueden automatizar acuerdos contractuales sin el uso de intermediarios, los contratos inteligentes han sido anunciados como una tecnología que cambia de paradigma. Como cualquier tecnología, no son inmunes a los fallos y los piratas informáticos buscan continuamente nuevos métodos para aprovecharlos. Los siguientes son algunos de los trucos de contratos inteligentes más típicos:
1. Ataques de reentrada
Los ataques de reentrada pueden ser difíciles de detectar porque el código parece funcionar correctamente, lo que permite al atacante explotar repetidamente la vulnerabilidad hasta lograrlo. La violación de DAO, en la que un atacante robó 50 millones de dólares en éter tomando repetidamente dinero del contrato DAO, es un ejemplo bien conocido de ataque de reentrada.
Los desarrolladores pueden emplear una variedad de técnicas para reducir el peligro de ataques de reentrada. Por ejemplo, pueden crear bloqueos mutex para prohibir la ejecución simultánea del mismo contrato o establecer límites de consumo de gas para detener funciones recursivas prolongadas.
2. Desbordamiento/Desbordamiento insuficiente
Cuando el resultado de una operación matemática excede los límites de un tipo de datos, se produce un desbordamiento y un desbordamiento de enteros.
Las consecuencias del desbordamiento y subdesbordamiento de enteros pueden ser desastrosas. Por ejemplo, un usuario podría retirar dinero y terminar con un saldo negativo. Un atacante también puede crear un valor extraordinariamente grande para sortear una restricción o lanzar un ataque de denegación de servicio.
Los desarrolladores pueden evitar el desbordamiento y el subdesbordamiento de enteros utilizando tipos de datos como BigInt o uint256 que pueden manejar números enteros enormes. Para garantizar que los valores de entrada estén dentro del rango permitido, pueden incorporar además comprobaciones de las condiciones límite.
3. Dependencia de las marcas de tiempo
La dependencia de la marca de tiempo es otro problema que puede dar lugar a un comportamiento inesperado. Los contratos inteligentes pueden emplear marcas de tiempo para validar circunstancias urgentes, incluido si un usuario tiene derecho a un pago. Los atacantes pueden aprovechar esta debilidad cambiando la marca de tiempo o iniciando una transacción en un momento específico para provocar que ocurra una condición antes de lo debido.
Los desarrolladores pueden confirmar la validez de circunstancias específicas sin depender de marcas de tiempo utilizando números de bloque. También pueden establecer límites de tiempo para impedir la ejecución del contrato más allá de un cierto período de tiempo. Los desarrolladores también pueden obtener marcas de tiempo precisas de fuentes de tiempo externas confiables.
4. Acuñación y puesta en lista negra de tokens
Los piratas informáticos pueden utilizar funciones de acuñación y listas negras en contratos inteligentes para agregar, eliminar o restringir el acceso de los usuarios a los tokens. Por ejemplo, un hacker puede producir una cantidad infinita de tokens utilizando una función de acuñación, que luego podría vender para obtener ganancias.
Alternativamente, un atacante puede utilizar una función de lista negra para denegar el acceso a los tokens de determinados usuarios, lo que erosionaría la confianza del usuario. Para detener este tipo de ataques, los desarrolladores de contratos inteligentes deben construir correctamente mecanismos de acuñación y listas negras y probarlos rigurosamente.
5. Cálculos incorrectos
Para funcionar correctamente, los contratos inteligentes dependen de cálculos precisos. Las estimaciones inexactas pueden tener resultados inesperados. Por ejemplo, el propietario del contrato podría perder dinero si un contrato inteligente contiene un error de cálculo que permite a un atacante eludir ciertas restricciones o acceder a efectivo al que no está autorizado. Además, los consumidores pueden confundirse y perder la confianza en un contrato inteligente si un error de cálculo produce saldos de tokens inexactos.
6. Bibliotecas y dependencias maliciosas
Los contratos inteligentes suelen utilizar bibliotecas y dependencias de otras fuentes. Estas dependencias o bibliotecas podrían brindarle a un atacante acceso al contrato o sus fondos si son maliciosos o están comprometidos. Un atacante podría aprovechar el uso de una biblioteca con una puerta trasera por parte de un contrato inteligente, por ejemplo, para hacerse cargo del contrato. Además, si una biblioteca es vulnerable, el atacante puede aprovechar el contrato inteligente a su favor.
7. Correr hacia adelante
El acto de avanzar en la cola de ejecución de una transacción para canjearla antes de que se lleve a cabo una transacción futura conocida se conoce en el ámbito de blockchain y las criptomonedas como front-running. Para extraer posibles ganancias y recortar efectivo, esto se hace frecuentemente examinando instrucciones y funciones de contratos inteligentes que nunca antes se han utilizado en un contrato inteligente.
Cuando un atacante observa una transacción de intercambio después de haber sido transmitida pero antes de que haya finalizado, está cometiendo un ataque frontal. Luego reordenan las transacciones para su propio beneficio. Esto frecuentemente se logra cuando un minero o un bot agrega su nueva transacción delante de la existente de inmediato. La transacción maliciosa se ejecuta antes de que finalice la transacción existente.
Ejemplos de trucos de contratos inteligentes del mundo real
Aunque los contratos inteligentes están diseñados para ser seguros, en ocasiones han sido violados o utilizados con fines maliciosos. Los siguientes son algunos ejemplos de hacks de contratos inteligentes reales:
Truco KingDice
Basada en la cadena de bloques Ethereum, KingDice es una red de juegos de azar descentralizada. En agosto de 2017, un hacker se apoderó de Ether por valor de casi 300.000 dólares aprovechando una falla en el código del contrato inteligente.
Explotación de Uniswap V2
En noviembre de 2020, un hacker aprovechó una falla en el contrato inteligente Uniswap V2 para robar casi $300,000 en Bitcoin. Para manipular el precio de un token y aprovechar la oportunidad de arbitraje, el atacante utilizó un préstamo rápido.
El ataque DAO
Desarrollado sobre la cadena de bloques Ethereum, el DAO (Organización Autónoma Descentralizada) era un fondo de inversión basado en contratos inteligentes. En junio de 2016, un hacker robó casi 50 millones de dólares en Ethereum del DAO aprovechando una falla en la programación. El hack provocó que la cadena de bloques Ethereum se bifurcara, dando lugar a Ethereum Classic.
Hack de billetera de paridad
En julio de 2017, un hacker se apoderó de Ethereum por valor de casi 30 millones de dólares aprovechando una falla en la billetera multifirma de Parity. Debido a un error en la programación del contrato inteligente, el hacker pudo tomar el control de la billetera y mover todo el dinero a otra cuenta.
Estrategias de prevención y mitigación
Los desarrolladores pueden utilizar las siguientes prácticas recomendadas para crear contratos inteligentes seguros:
Utilizar bibliotecas y dependencias bien establecidas y auditadas. El uso de bibliotecas y dependencias bien establecidas y auditadas puede ayudar a reducir el riesgo de introducir vulnerabilidades en un contrato inteligente. Se debe evitar el uso de código no probado o que no sea de confianza, y los desarrolladores deben verificar cuidadosamente la seguridad de cualquier código de terceros que utilicen.
Implementar controles de condiciones de contorno. Los contratos inteligentes deben implementar controles de las condiciones límite, incluidos los valores máximos y mínimos de los parámetros de entrada. Al hacer esto, se pueden reducir los ataques de desbordamiento y desbordamiento de enteros. La eficacia y el uso generalizado de las tecnologías de contratos inteligentes dependen de la prevención y mitigación de los ataques a contratos inteligentes.
El uso de bibliotecas y dependencias bien establecidas y auditadas puede ayudar a reducir el riesgo de introducir vulnerabilidades en un contrato inteligente. Se debe evitar el uso de código no probado o que no sea de confianza, y los desarrolladores deben verificar cuidadosamente la seguridad de cualquier código de terceros que utilicen.
Evitar dependencias de marcas de tiempo. Para reducir la posibilidad de manipulación de las marcas de tiempo, los desarrolladores deben abstenerse de utilizarlas como única base para llevar a cabo la lógica de contrato inteligente. Cuando se cumplen requisitos específicos, pueden emplear técnicas alternativas como números de bloque o hashes de bloque.
Pruebas integrales. Encontrar y reparar las vulnerabilidades de los contratos inteligentes depende de pruebas exhaustivas. Los desarrolladores deben ejecutar pruebas unitarias y de integración para confirmar que el contrato funciona según lo previsto e identificar cualquier problema potencial desde el principio.
Implementar correctamente las funciones de acuñación y listas negras. Los desarrolladores deben tener cuidado al implementar funciones de creación de cuentas y listas negras para evitar el acceso y la manipulación no deseados.
Garantizar cálculos precisos. El correcto funcionamiento de los contratos inteligentes depende de cálculos precisos. Al realizar operaciones matemáticas difíciles, los desarrolladores deben utilizar bibliotecas probadas y asegurarse de que sus cálculos sean precisos.
Auditorías de seguridad. Las auditorías de seguridad son una técnica útil para localizar debilidades en los contratos inteligentes. Antes de implementar sus contratos inteligentes, los desarrolladores pueden contratar empresas de auditoría de contratos inteligentes para que los auditen. Estas auditorías pueden ayudar a los equipos a encontrar y solucionar cualquier problema potencial antes de que el código entre en producción.
Verificación formal. Es una técnica matemática para confirmar la precisión de un contrato inteligente. Este método puede ayudar a garantizar que un contrato inteligente funcione según lo planeado y sea seguro.
Recompensas por errores. Se anima a los investigadores de seguridad a descubrir e informar fallas en los contratos inteligentes ofreciendo recompensas por errores. Para encontrar y solucionar problemas potenciales, los desarrolladores pueden acceder a un amplio grupo de expertos en seguridad pagándoles para que encuentren vulnerabilidades.
Conclusión
En conclusión, si bien los contratos inteligentes ofrecen una forma revolucionaria de automatizar transacciones en blockchain, son vulnerables a la piratería y las violaciones de seguridad. Los desarrolladores deben cumplir con las prácticas recomendadas, como auditorías de contratos inteligentes y pruebas de seguridad, para evitar la piratería de contratos inteligentes.
Los desarrolladores pueden garantizar la salud a largo plazo de la tecnología blockchain y crear un ecosistema confiable para todos los usuarios, libre de los peligros de la piratería de contratos inteligentes. Pueden lograr ese resultado implementando procedimientos como recompensas por errores, verificación formal y auditorías de seguridad. Al final, priorizar la seguridad es fundamental para el desarrollo de los contratos inteligentes y del sector blockchain.
La publicación ¿Cómo se puede piratear un contrato inteligente? apareció por primera vez en Coinfomania.
