La forma en que pensamos sobre un intercambio seguro de fondos e información se ha visto alterada por la tecnología blockchain.
Este artículo se centra en la vulnerabilidad de desbordamiento por lotes ERC20 recientemente identificada, los errores cometidos durante el desarrollo que llevaron a la creación de vulnerabilidades susceptibles. Desarrollo de tokens ERC20 y los pasos que debes seguir para evitar volver a cometer los mismos errores.
En abril de 2018 se produjo un incidente que posteriormente se identificó como el exploit BatchOverflow. En el exploit se utilizaron contratos ERC20 vulnerables de monedas ERC como BeautyChain (BEC) y MeshBox (MESH) para crear una cantidad irrazonable de tokens de la nada.
Poco después del descubrimiento del problema de BatchOverflow, PeckShield, una empresa de seguridad, descubrió muchas vulnerabilidades en varias monedas Ethereum. Entre las monedas en la lista impactada se encuentran:
- Aurora Dao (AURA)
- Cadena de belleza (BEC)
- Token UG (UGT)
- Miles de millones inteligentes (Intelligent)
- Primera moneda (FRST)
- Ficha GG (GG)
- Ficha CNY (CNY)
- CNYTokenPlus (CNYt+)
- Token Ethereum inútil (UET)
- Hexágono (HXG)
- Educación (EDU)
- Malla inteligente (SMT)
- MTC
- SCA
Estos fallos se encontraron poco después de que se utilizara el ataque BatchOverflow. Los investigadores examinaron las transacciones cuestionables dejadas por los atacantes para localizarlas.
El principal indicador de transacciones cuestionables era una tasa de transferencia anormalmente alta, que en ocasiones excedía el suministro complete de un token. Varios intercambios importantes han dejado de aceptar depósitos y retiros de tokens ERC20 para detener la especulación. Estas conversaciones fueron:
- OKEx
- Poloniex
- cambiador
- Huobi Professional
Los investigadores encontraron múltiples ataques y le dieron a cada uno un nombre distinto mientras buscaban vulnerabilidades en los tokens ERC20. En realidad, sin embargo, sólo hay dos problemas principales con todos estos tokens:
- Vulnerabilidades de desbordamiento
- Funciones desprotegidas
Echemos un vistazo más de cerca a cada uno de estos problemas.
La explotación del desbordamiento o desbordamiento de enteros, una falla en el estándar de token ERC20, es la foundation de las vulnerabilidades de desbordamiento. Cuando el resultado de una operación matemática queda fuera del rango que una variable puede representar, surge este problema.
Al restar algo de cero en el contexto de los contratos inteligentes de Ethereum, el resultado es un valor muy grande. El resultado de sumar dos valores enormes será cercano a cero y se estabilizará.
En este caso, la línea 206 tiene el código vulnerable. La adición de esta línea no se verifica correctamente para detectar desbordamiento. Se pueden configurar valores grandes para _value y _feeSmart para causar que su suma se desborde, lo que resulta en un valor menor que el saldo de la cuenta y pasa la condición, agregando valores absurdamente grandes al saldo de las cuentas establecidas.
Las funciones desprotegidas son la segunda categoría de problemas de seguridad del token ERC20. Este tipo de vulnerabilidad ERC20 solo aparece cuando un desarrollador no incluye el modificador necesario que limita el acceso a la función. Esto significa que cualquier usuario arbitrario puede acceder libremente a ciertas funciones básicas esenciales.
Por ejemplo, es un procedimiento estándar al crear contratos inteligentes de Ethereum restringir el acceso a funciones particulares a una sola cuenta. Por lo general, a esa cuenta se la denomina propietario.
Y el token AURA experimentó precisamente esto. La función que establece el propietario no está restringida por una modificación de OwnerOnly, aunque las funciones dentro del contrato sí lo están. En consecuencia, cualquiera puede utilizar la función setOwner para seleccionar un propietario aleatorio llamando al contrato. Afortunadamente, en este punto la cuenta del propietario no puede hacer nada más que un usuario standard, por lo que este problema no se soluciona de forma segura.
Como puede ver, estas vulnerabilidades de funcionalidad ERC20 suelen ser el resultado de errores de código no intencionados. Además, todavía existen contratos susceptibles en la crimson Ethereum a pesar de que estos errores son bien reconocidos y fáciles de prevenir.
¿Hay alguna manera de evitar aumentar la pila? ¿Puedes, cuando trabajas con crear token ERC20 ¿Evita escribir código que sea susceptible? Por supuesto que se puede y, por supuesto, es factible. Proporcionamos los siguientes consejos para ayudarle a garantizar un alto grado de seguridad del código:
1. Para evitar que nada quede expuesto, indicar claramente la visibilidad en funciones y variables de estado.
2. Utilice bibliotecas como SafeMath de OpenZeppelin para detener desbordamientos y desbordamientos.
3. Tenga cuidado al dividir números enteros redondeando. Debido al constante redondeo hacia abajo, 5/2 es igual a 2, no a 2,5.
4. Para reducir el uso de gasoline y evitar ataques de denegación de servicio, permita a los usuarios retirar tokens (en bonos, juegos, lanzamientos aéreos, and so on.) en lugar de presionarlos.
Utilice las construcciones de Solidity más recientes: * Haga un uso apropiado de demand y afirmar para que un analizador automatizado pueda verificar oficialmente su código.
- Utilice keccak256 en lugar de sha3 y autodestrucción en lugar de suicidio.
- Cree un contrato de prueba utilizando Ropsten, una pink de prueba pública. Establezca un programa de recompensas por errores y permita que la comunidad pruebe sus contratos.
- Obtenga una auditoría oficial de la seguridad de su contrato.
Puede aumentar la seguridad de su código y evitar escribir código vulnerable siguiendo estos sencillos pasos.
El reciente hackeo de BatchOverflow demostró cómo un solo error de codificación puede resultar en un problema de seguridad importante. Aunque los tokens ERC-20 son susceptibles a desbordamientos, los desarrolladores sólo necesitan verificar su código y tomar precauciones adicionales para evitar tanto desbordamientos como insuficiencias.