Seguridad de contratos inteligentes: un enfoque SDLC ágil PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Seguridad de contrato inteligente: un enfoque SDLC ágil 

Tiempo de lectura: 10 minutos

Blockchain se cita como un libro mayor descentralizado y a prueba de manipulaciones. Pero este libro mayor a prueba de manipulaciones es vulnerable a ataques y exploits. La descentralización, que es una de las mayores ventajas de Blockchain, es una de las desventajas. 

Bueno, eso está bien, pero ¿qué pasa con SDLC? 

El enfoque del ciclo de vida del software que estamos a punto de discutir se basa en la clasificación de las vulnerabilidades de seguridad en los contratos inteligentes en múltiples fases. 

En la primera sección, hemos expuesto los problemas de seguridad en los contratos inteligentes. Y en la siguiente sección, discutimos sus soluciones divididas en cuatro fases; Diseño de Seguridad, Implementación de Seguridad, Pruebas antes del Despliegue, y por último, Monitoreo y Análisis. 

ANÁLISIS DE PROBLEMAS DE SEGURIDAD EN CONTRATOS INTELIGENTES 

Los contratos inteligentes son vulnerables a varios hacks y exploits. Estos contratos, que son sinónimo de acuerdos legales del mundo real, se ejecutan de forma independiente según los términos de las cadenas de bloques nativas. 

Pero, ¿ha pensado que incluso esas cadenas de bloques nativas también pueden ser responsables de posibles amenazas de seguridad en los contratos inteligentes? A continuación, presentamos algunas de las características de Blockchains para el mismo:

Descentralización: Se considera una de las ventajas de los protocolos basados ​​en blockchain. Pero los atacantes han ideado una forma de convertir esta característica positiva en negativa. 

Los actores maliciosos pueden crear una identidad falsa para desarrollar e implementar un contrato inteligente. A veces, se vuelve difícil identificar un contrato vulnerable ya que solo la dirección pública (o) las claves públicas están disponibles en las cadenas de bloques públicas. 

Código de código abierto: Esto puede sorprenderte, pero sí, en general, la mayoría de los códigos de contratos inteligentes son algo de código abierto. 

Digamos, en el caso de Ethereum Virtual Machine (EVM), su código de bytes siempre es público. Y algunos descompiladores de Solidity pueden ayudarlo a obtener una dirección de contrato inteligente y el código de Solidity. La exposición del código fuente hace que esta característica sea una ventaja para los atacantes. 

Plataformas blockchain no evolucionadas: Para un desarrollador, es un requisito principal familiarizarse con la plataforma de desarrollo. Hay muchas plataformas de cadena de bloques nuevas o subdesarrolladas, por lo que los desarrolladores no pueden desarrollar un conocimiento profundo de las operaciones en la cadena de bloques. 

Esta inconsistencia afecta a los contratos inteligentes debido a la falta de sincronización. Las fallas en la plataforma blockchain pasan desapercibidas debido a su continua evolución. 

Transacciones desconocidas: En el primer punto, hemos discutido la identidad anónima; Del mismo modo, las transacciones en blockchain no se revelan. Es imposible rastrear las transacciones, lo que lleva a muchas actividades ilegales. Como se trata de transacciones financieras, cualquier problema de seguridad puede resultar en una gran pérdida financiera. 

SOLUCIONES DE SEGURIDAD PARA CONTRATOS INTELIGENTES

Ahora, avanzando en la seguridad de los contratos inteligentes, podemos comparar todos los pasos necesarios para asegurar un contrato inteligente con su evolución. Como en el desarrollo de software tradicional, tendemos a seguir un ciclo de vida de desarrollo; De manera similar, podemos clasificar el ciclo de vida del desarrollo del contrato. 

El ciclo de vida del desarrollo de contratos inteligentes se puede dividir en cuatro fases: diseño de seguridad, implementación de seguridad, prueba antes de la implementación y monitoreo y análisis.

visión general de los temas de seguridad desde la perspectiva del ciclo de vida de un contrato inteligente
descripción general de los temas de seguridad desde la perspectiva del ciclo de vida de un contrato inteligente

1. DISEÑO DE SEGURIDAD 

Esta primera fase encapsula tres temas; principio de diseño, patrón de diseño y modelado de seguridad (como se muestra en la figura anterior). El enfoque principal de estos temas está en el diseño del contrato y cómo se pueden evitar las amenazas a la seguridad. 

PRINCIPIO DE DISEÑO

Los principios de diseño son ideas fundamentales para diseñar contratos inteligentes seguros en la cadena de bloques. Hay cinco principios de diseño esenciales para los contratos: prepararse para fallas, implementar con cuidado, mantener los contratos simples, mantenerse actualizado y debe saber sobre las propiedades de la cadena de bloques. 

Ahora, puede pensar, ¿cómo ayudarán a crear un contrato inteligente seguro? 

Tomemos cualquiera de los principios anteriores, por ejemplo, "Prepárese para fallas", esto significa que en ausencia de esquemas de parches, el contrato debería poder responder a los errores. Y si se produce algún ataque, el contrato debería poder pausarse para evitar más pérdidas. 

PATRÓN DE DISEÑO

En el diseño de software, los patrones de diseño son las soluciones que se pueden reutilizar para resolver un problema. 

Si tomamos un ejemplo de Ethereum, existen seis patrones de seguridad; Interacción de efectos de verificación, parada de emergencia, mutex, badén, límite de velocidad y límite de saldo.  

Podemos usar estos patrones de seguridad para abordar problemas de seguridad en la cadena de bloques, como la vulnerabilidad de reingreso que puede ser manejada por el patrón Mutex. 

Al mismo tiempo, el patrón de parada de emergencia puede ayudarnos a terminar la ejecución de un contrato si se ve afectado por una vulnerabilidad. 

MODELADO DE SEGURIDAD

Puede haber una diferencia entre el código desarrollado y el código requerido para los contratos, ya que Solidity se usa para crear contratos; este lenguaje satisface la completitud de Turing, pero es propenso a errores. 

La figura anterior muestra que esta subfase cubre dos fases; diseño e implementación de seguridad. 

El modelado de seguridad está directamente relacionado con la lógica empresarial; como las especificaciones se derivan del negocio, la lógica se puede clasificar por semántica libre de errores. Esto ayuda más adelante durante el proceso de verificación formal realizado para mitigar las vulnerabilidades. 

2. IMPLEMENTACIÓN DE SEGURIDAD

En esta sección, cubriremos dos de los tres temas; seguridad

Plantilla de desarrollo y seguridad, como ya hemos cubierto el modelado de seguridad en la última fase.

DESARROLLO DE LA SEGURIDAD

Esta sección verá cómo se pueden evitar las vulnerabilidades durante el proceso de implementación del contrato. 

En la plataforma Ethereum, tenemos EIP de seguridad (propuestas de mejora de Ethereum): recomendaciones para combatir los problemas de seguridad en el Ethereum plataforma. Por lo tanto, estos EIP se destacan por implementar contratos inteligentes de manera segura. 

PLANTILLA DE SEGURIDAD

Las plantillas sirven como origen para nuevos documentos. Las plantillas de contratos inteligentes con parámetros operativos conectan un acuerdo legal con un código ejecutable. 

En el contexto de la seguridad de contratos inteligentes, es posible extraer las plantillas de contrato estándar con parámetros de seguridad actualizados, como patrones de seguridad y bibliotecas de seguridad. Esto reducirá la posibilidad de errores en la codificación manual. 

3. PRUEBAS ANTES DE LA IMPLEMENTACIÓN

Nuevamente, el requisito de esta fase surge de una de las ventajas de los contratos inteligentes: la "inmutabilidad". 

Una vez que se crean los contratos inteligentes, no hay forma de modificarlos. Por lo tanto, es obligatorio realizar pruebas suficientes para garantizar la seguridad de los contratos inteligentes antes del despliegue.

Esta fase cubre tres parámetros de seguridad que se deben seguir antes de implementar un contrato inteligente; Verificación formal rigurosa, herramientas de análisis de código y auditoría de seguridad. 

VERIFICACIÓN FORMAL RIGUROSA

La verificación formal es un proceso bien definido que aprovecha el razonamiento matemático y las pruebas matemáticas para verificar las propiedades deseadas del sistema. 

Podemos realizar una verificación formal de los contratos inteligentes, ya que el programa del contrato es corto y está limitado en el tiempo. Existen múltiples formas de formalizar y verificar contratos inteligentes de forma rígida; algunos se basan en código de contrato y otros en la semántica de la máquina virtual Ethereum (EVM). 

HERRAMIENTAS DE ANÁLISIS DE CÓDIGO

El análisis del código se realiza sin ejecutar los programas. Para ello, utilizamos unas herramientas denominadas Static Application Security Testing (SAST) Tools. Estas herramientas ayudan en el descubrimiento de fallas de seguridad en el código fuente. 

El análisis realizado por estas herramientas puede incluir uno o todos los siguientes pasos:

(I) Cree una representación intermedia (IR), como un árbol de sintaxis abstracta (AST), para un análisis detallado. 

(Ii) Complementar el IR con suficiente información obtenida del control estático o análisis de flujo de datos y técnicas de verificación formal; estas técnicas incluyen: ejecución simbólica, interpretación abstracta y verificación de modelos simbólicos. 

Pero, ¿cuáles son las herramientas que se pueden utilizar para realizar análisis de código en Smart Contract? 

Aunque hay muchas herramientas que se pueden utilizar para realizar el análisis de seguridad, Oyente es la más popular. 

Oyente se puede utilizar para realizar análisis de seguridad para los contratos inteligentes de EVM. Utiliza la "ejecución simbólica" para descubrir cuatro errores comunes; dependencia de orden de transacción, dependencia de marca de tiempo, excepciones mal manejadas y reingreso. 

La Arquitectura de Oyente
La Arquitectura de Oyente

La arquitectura de Oyente muestra que toma bytecode y presenta el estado global de Ethereum como entrada. 

Una de las ventajas de Oyente es que solo detecta vulnerabilidades de seguridad. La técnica de ejecución simbólica utilizada por Oyente no explora todos los caminos posibles. Surge así la necesidad de otras herramientas como Seguridad y auditorías manuales. 

AUDITORIA DE SEGURIDAD

Comenzaremos esta sección donde dejamos la última; las auditorías manuales. 

Pero primero, comprendamos la necesidad de una auditoría de seguridad; ya sea el hack de Ronin Network o el de Poly Network, el código no auditado es el más vulnerable a hacks y exploits. 

Conducen a enormes pérdidas financieras. De hecho, no solo es auditar su proyecto Web3, sino que también es importante que lo auditen profesionales expertos, ya que depende de la capacidad profesional de los auditores para realizar auditorías de seguridad. 

Nuevamente, ¿dónde encontrar a esos expertos profesionales? No necesita ir a ninguna parte en busca de auditores confiables; hacer clic https://t.me/quillhash para ponerse en contacto con uno de ellos! 

Una auditoría de contrato inteligente ideal es una combinación de análisis de código manual y automatizado; Como hemos comentado en el punto anterior, si bien se persigue el análisis de código automatizado de herramientas como Oyente, existe la posibilidad de vulnerabilidades no identificadas en el contrato. 

Por lo tanto, para superar eso, los auditores de seguridad pueden analizar manualmente cada línea de código y probarlas contra posibles vulnerabilidades. 

4. SEGUIMIENTO Y ANÁLISIS

¿Recuerda el principio en constante evolución de Blockchain que discutimos inicialmente? 

Esta fase se basa en el mismo tema; Una vez implementado y ejecutado el contrato, pueden ocurrir algunas vulnerabilidades que pasaron desapercibidas en las etapas anteriores debido a nuevos lanzamientos y actualizaciones frecuentes que luego hacen que los contratos sean menos eficientes. 

Podemos llevar a cabo; recompensas por errores, monitoreo de seguridad y análisis post hoc para superar estas barreras. 

RECOMPENSA DE ERRORES

Como estamos considerando los problemas de seguridad posteriores a la implementación con los contratos, Bug Bounties puede ser útil. La técnica de verificación formal discutida previamente es una técnica de análisis estático. La recompensa de errores, por otro lado, es una técnica de análisis dinámico. 

El concepto detrás de Bug Bounty es simple; los piratas informáticos descubren errores y, a cambio, se les paga con algunas recompensas financieras. Parece una situación de ganar-ganar, ¿verdad? ¡Pero no lo es!

El truco aquí es; que el valor de los errores puede ser mayor que la recompensa en los mercados grises, y la posibilidad es que los piratas informáticos exploten o vendan los errores para obtener un precio alto. 

A veces, los propietarios del proyecto se niegan a pagar la recompensa a menos que se confirmen los errores; los piratas informáticos también se preocupan por la incertidumbre de los pagos posteriores a la revelación de errores. 

Para superar esto, se propuso un marco de recompensas por errores, conocido como "Hydra". 

Hydra utiliza una tecnología de brecha de explotación llamada programación N-of-N-version (NNVP) como un sistema de recompensas por errores en la cadena de bloques. 

El marco Hydra con cabezas
El marco Hydra con cabezas

MONITOREO DE SEGURIDAD

Podemos usar el análisis de código estático para descubrir las vulnerabilidades de seguridad, pero este método se usa antes de implementar los contratos inteligentes. 

Pero para encontrar errores y vulnerabilidades potenciales en tiempo real, debemos monitorear y analizar los datos de transacciones en la cadena de bloques. 

Estas vulnerabilidades descubiertas mediante el análisis de contratos inteligentes pueden denominarse vulnerabilidades de seguimiento. Tres tipos de contratos se encuentran en el centro de estas vulnerabilidades de seguimiento; 

(I) Contratos codiciosos (contratos que permanecen vivos y bloquean Ether indefinidamente).

(Ii) Contratos pródigos (contratos que filtran fondos sin cuidado a usuarios arbitrarios) y,

(iii) Contratos suicidas (contratos que cualquier usuario arbitrario puede matar). 

Incluso se propuso una noción de objetos Efectivamente Callback Free (ECF) para identificar vulnerabilidades mediante el monitoreo de objetos ECF. 

En contexto a esto, también se presentó un algoritmo en línea; ayudó a descubrir vulnerabilidades desconocidas. En la misma propuesta, se sugirió ejecutar contratos inteligentes en Testnet antes de implementar en Mainnet. 

Monitoring UI es una plataforma de monitoreo de Blockchain que utiliza React.js. Esta plataforma se puede utilizar para realizar transacciones, controlar los activos y consultar el estado de Blockchain. 

No podemos confiar en esta plataforma para el monitoreo seguro de los contratos inteligentes, pero como se pueden encontrar la mayoría de los datos de transacciones relacionados con los contratos inteligentes, podemos detectar exploits en tiempo real mediante el seguimiento de la transferencia de activos. 

ANÁLISIS POST HOC

El análisis post hoc utiliza datos de transacciones de la cadena de bloques para analizar, descubrir o rastrear amenazas potenciales en la cadena de bloques en términos sencillos. 

Si discutimos el análisis gráfico, fue diseñado como un enfoque para recopilar todos los datos de transacciones (esto incluía transacciones internas de contratos inteligentes). 

Con la ayuda de estos datos, prepararon tres gráficos; 

(I) Un gráfico de flujo de dinero (MFG)

(Ii) Gráfico de creación de contrato (CCG) y,

(iii) Gráfico de invocación de contrato (CIG)

Con base en el análisis de los gráficos mencionados anteriormente, se propusieron muchos hallazgos nuevos, como soluciones a problemas de seguridad entre múltiples contratos que interactúan entre sí. 

Una descripción general del análisis gráfico
Una descripción general del análisis gráfico

El esquema Ponzi es uno de los esquemas de fraude clásicos a través del cual se puede adquirir una gran cantidad de fondos y afectar la cadena de bloques nativa. Para combatir este fraude, se propuso un mecanismo clasificador para detectar esquemas Ponzi en Ethereum. 

Este mecanismo utiliza minería de datos y aprendizaje automático para detectar contratos Ponzi. Este proceso funciona incluso si el código fuente de los contratos inteligentes no está disponible. 

El marco de detección inteligente del esquema Ponzi
El marco de detección inteligente del esquema Ponzi

Conclusión clave

¡Eso es todo, sí, eso es todo por ahora!

Si has estado con nosotros hasta ahora, te lo agradeceríamos. Sin extendernos más, en una nota final, solo diríamos que el ecosistema de contratos inteligentes está descentralizado y es difícil corregir errores. 

Hemos tratado de romper la seguridad de los contratos inteligentes desde la perspectiva del ciclo de vida del software. 

Primero discutimos las características clave de la cadena de bloques responsables de problemas de seguridad en los contratos inteligentes. Clasificamos las soluciones de seguridad para los contratos inteligentes en cuatro fases. Esperamos traer más publicaciones para mantenerlo a la vanguardia de los desafíos en el creciente ecosistema Web3. 

¿Qué opina de este enfoque SDLC ágil para la seguridad de los contratos inteligentes? ¡Comparte tus pensamientos en los comentarios a continuación!

46 Vistas

El puesto Seguridad de contrato inteligente: un enfoque SDLC ágil  apareció por primera vez en Blog.quillhash.

Sello de tiempo:

Mas de hachís