Auditorías de seguridad de contratos inteligentes: 7 mejores prácticas
Los contratos inteligentes se han convertido en una parte integral del floreciente mercado de las criptomonedas. Bajo el capó, automatizan la ejecución de contratos codificados y almacenados en la cadena de bloques, proporcionando la base para crear una variedad de capacidades, incluida la creación de aplicaciones descentralizadas (dApps), la creación de tokens ERC-20 y la acuñación de tokens no fungibles (NFT). .
Todos los contratos inteligentes en Ethereum son de código abierto, lo que significa que su código fuente es público y cualquiera puede verlo y auditarlo (aunque a veces se descompila primero). Si bien esto proporciona un nivel de transparencia, también expone vulnerabilidades en el código del contrato inteligente, lo que podría permitir que los piratas informáticos y los usuarios malintencionados los comprometan.
Debido a la creciente complejidad de los contratos inteligentes, los problemas de seguridad y los errores son bastante comunes, especialmente en aplicaciones de última generación. Por lo tanto, es fundamental realizar auditorías periódicas para identificar y abordar cualquier vulnerabilidad. También es importante comprender los matices de la seguridad de los contratos inteligentes e implementar las mejores prácticas para mitigar los riesgos potenciales.
Este artículo describe las auditorías de contratos inteligentes y cómo pueden ayudar a mejorar la seguridad de los contratos inteligentes.
¿Qué es un contrato inteligente?
Los contratos inteligentes son contratos autoejecutables en los que los términos del acuerdo se escriben directamente en líneas de código. Estos contratos realizan automáticamente acciones predefinidas una vez que se cumplen ciertas condiciones.
El código se ejecuta en tecnología de contabilidad distribuida, como blockchain. Esto proporciona varios beneficios, que incluyen:
- transparencia;
- Eliminar la necesidad de intermediarios;
- Costos reducidos en comparación con los procesos de contratación tradicionales.
Cada parte no necesita confiar en la otra. Todo lo que necesitan hacer es verificar que el código haga lo que se supone que debe hacer.
¿Qué es una auditoría de seguridad de contrato inteligente?
Una auditoría de seguridad de contrato inteligente es un proceso de revisión integral para evaluar la seguridad del código de contrato inteligente e identificar posibles vulnerabilidades dentro de él. Estas auditorías también a menudo verifican las ineficiencias y simplemente el código con errores, incluso si no representan una amenaza de seguridad inmediata.
Las auditorías son realizadas por profesionales de seguridad experimentados que se especializan en tecnología blockchain. Su objetivo principal es identificar posibles fallas de seguridad o errores de codificación que podrían conducir a posibles vulnerabilidades o exploits.
Por qué son importantes las auditorías de seguridad de contratos inteligentes
Los contratos inteligentes tampoco son inmunes a las fallas de seguridad. De hecho, la naturaleza incipiente de la tecnología los hace especialmente vulnerables. Además, cualquier error de codificación o vulnerabilidad puede tener consecuencias graves, como pérdidas financieras o divulgación de información confidencial.
Vale la pena señalar que si se viola la seguridad de un contrato inteligente y se roban los fondos, puede ser muy difícil restaurarlos debido a la irreversibilidad de las transacciones de la cadena de bloques. Esto enfatiza aún más la importancia de realizar auditorías de contratos inteligentes.
Esencialmente, realizar una auditoría de seguridad puede asegurar a los usuarios que los contratos implementados han sido examinados a fondo y no contienen ninguna vulnerabilidad explotable (suponiendo que los auditores no pasen por alto ninguna vulnerabilidad importante). Ayuda a prevenir posibles ataques y garantiza la integridad del ecosistema de contratos inteligentes.
Otros beneficios de las auditorías de seguridad de contratos inteligentes incluyen:
- Las revisiones tempranas en el ciclo de vida del desarrollo evitan errores costosos después de la implementación;
- Los auditores de seguridad verifican manualmente el código del contrato inteligente, lo que ayuda a evitar consecuencias negativas;
- La auditoría proporciona garantía de seguridad de activos para todos los propietarios en una aplicación descentralizada;
- Comprehensive Audit genera informes de análisis con detalles de vulnerabilidad y recomendaciones de mitigación;
- La eficiencia y la funcionalidad pueden aumentar si los auditores notan un código imperfecto.
Las 7 formas más populares de ataques de contratos inteligentes y cómo mitigarlos
Una de las formas más importantes de evitar las vulnerabilidades de los contratos inteligentes es comprender los problemas más comunes y cómo prevenirlos.
Muchas de las vulnerabilidades de seguridad más comunes existen en los contratos inteligentes. Aquí hay siete de las formas más populares de ataques de contratos inteligentes y algunas estrategias efectivas de mitigación:
ataque de reentrada
Los vectores de ataque de reentrada existen debido a la ejecución imperativa de los contratos inteligentes de Solidity. Cuando un contrato realiza una llamada externa a otro contrato, la ejecución del contrato de llamada se suspende hasta que la llamada regrese.
Esto abre la posibilidad de bucles infinitos, lo que permite que los contratos maliciosos retiren recursos sin actualizar los saldos. Hay varios tipos de ataques de reentrada, incluidos los ataques de reentrada de una sola función, de funciones cruzadas, de contratos cruzados y de solo lectura.
Para mitigar esta vulnerabilidad, los desarrolladores deben diseñar cuidadosamente las llamadas externas y asegurarse de que el estado del contrato se verifique y actualice adecuadamente. Agregar protección de reentrada evita que se ejecuten múltiples funciones al mismo tiempo. Las herramientas de auditoría como Slither, Mythril y Securify pueden ayudar a identificar diferentes tipos de vulnerabilidades de reingreso.
manipulación del oráculo
Los contratos inteligentes se basan en oráculos para acceder y utilizar datos externos de sistemas fuera de la cadena. Los datos de Oracle manipulados o incorrectos podrían desencadenar falsamente la ejecución de un contrato inteligente, lo que llevaría a una posible explotación.
Los atacantes a veces distorsionan los precios del oráculo y luego usan contratos inteligentes complejos llamados préstamos flash para aumentar drásticamente su capital, aumentando la cantidad de fondos que pueden robar.
Para aliviar este problema, los desarrolladores pueden usar oráculos descentralizados como Chainlink o Tellor, o incluso varios oráculos, que pueden proporcionar datos precisos y evitar que los atacantes interfieran con los datos.
tristeza por gases
La corrupción de gas ocurre cuando un usuario envía el gas necesario para ejecutar un contrato inteligente pero no lo suficiente para ejecutar una subllamada. Si el contrato no verifica la disponibilidad del gas requerido para las subconvocatorias, puede afectar seriamente la lógica de la aplicación.
Desafortunadamente, no existe una tecnología efectiva para prevenir por completo el daño por gas. Los desarrolladores pueden codificar el contrato para establecer la cantidad de gas que se enviará, lo que reduce la probabilidad de este ataque. Sin embargo, el aumento del costo del gas natural podría hacer que el acuerdo fracase.
Ataque de dependencia de orden comercial (pre-frontal)
Los contratos inteligentes son visibles públicamente como transacciones pendientes, lo que permite a los mineros elegir la transacción con la tarifa de gas más alta. Esto crea una oportunidad para que un atacante realice una transacción al enviar la misma transacción pero con una tarifa de gas más alta. Estos ataques casi siempre los llevan a cabo bots y se complementan con información sobre los mineros que procesan las transacciones.
Por ejemplo, cuando un usuario intenta realizar una operación grande en un intercambio descentralizado (DEX) sin establecer un límite de deslizamiento (la cantidad que un operador está dispuesto a perder debido al impacto en el precio), un bot puede intervenir y adelantar la operación. . El bot envía una transacción de compra a granel con una tarifa de gas alta para validarla antes de que el comerciante la negocie, lo que hace que el precio del activo suba. A continuación, los comerciantes comercian a precios inflados. Finalmente, el bot vende todos los tokens que compró para obtener una ganancia, lo que hace que el precio vuelva a bajar.
Para evitar ataques frontales, los desarrolladores pueden optar por aceptar transacciones en las que el precio del gas está por debajo de un umbral predeterminado. Alternativamente, se podría implementar una solución de envío y revelación, donde el usuario envía primero el hash de la solución en lugar de la solución de texto sin formato, para evitar la interferencia del líder.
En el lado del usuario, la marcha frontal se evita más fácilmente estableciendo un deslizamiento bajo. Una simple advertencia que aparece explicando el deslizamiento antes de que un usuario realice una operación a menudo ayuda a evitar la ejecución anticipada.
ataque de alimentación forzada
Los desarrolladores no pueden evitar que los contratos inteligentes reciban el token nativo de Ethereum, ether (ETH). Esto permite ataques de alimentación forzada, en los que un atacante intenta manipular el saldo de éter de un contrato para cambiar el saldo esperado en el que se basa el código interno del contrato.
Para mitigar los ataques de alimentación forzada, los desarrolladores deben evitar usar el saldo de un contrato como control o protección dentro de una función.
Dependiente de la marca de tiempo
Esta vulnerabilidad ocurre cuando los contratos inteligentes se basan en valores de marca de tiempo de bloque para realizar operaciones. Debido a la naturaleza distribuida de la plataforma Ethereum, es posible que los valores de marca de tiempo utilizados en los contratos inteligentes no siempre estén sincronizados en todos los nodos.
Para evitar esta vulnerabilidad, los desarrolladores deben evitar el uso de «block.timestamp» como control o verificación lógica o fuente de aleatoriedad.
Ataque de denegación de servicio (DoS)
Los contratos inteligentes son vulnerables a los ataques de denegación de servicio (DoS), donde un atacante sobrecarga el sistema para evitar que otros contratos ejecuten o manipulen valores para beneficio personal. Eso podría interrumpir los resultados de la subasta o los acuerdos financieros.
Para evitar los ataques DoS, los desarrolladores simplemente pueden hacer que los atacantes paguen un alto precio. La implementación de acertijos de bloqueo de tiempo y el aumento de las tarifas de gas pueden aumentar el costo del atacante y evitar que realice ataques DoS.
Conclusión: no ignore la auditoría de contratos inteligentes
En el mundo acelerado basado en contratos inteligentes y tecnología blockchain, garantizar la seguridad de estos contratos autoejecutables es de suma importancia. Las auditorías de seguridad de contratos inteligentes juegan un papel vital en la protección de los activos de los usuarios y el mantenimiento de la integridad del ecosistema.
Al identificar vulnerabilidades a través de un riguroso análisis de código e implementar las mejores prácticas y técnicas de mitigación, los desarrolladores pueden reducir significativamente los riesgos asociados con las implementaciones de contratos inteligentes.
En última instancia, al priorizar la seguridad de los contratos inteligentes, las personas y las empresas pueden aprovechar al máximo el potencial de esta tecnología transformadora sin comprometer su seguridad.