WEB3DEV Español

Cover image for Asegura tu Contrato Inteligente con Diligence Fuzzing
Hector
Hector

Posted on

Asegura tu Contrato Inteligente con Diligence Fuzzing

Image description

Mientras el ecosistema Ethereum crece, también lo hace la necesidad de tener contratos inteligentes seguros. Con millardos de dólares bloqueados en protocolos DeFi y otras aplicaciones descentralizadas, las apuestas son altas para asegurar que su código esté libre de vulnerabilidades. Las auditorías manuales de los contratos inteligentes son el estándar común, pero la demanda es alta y es raro tener buenos auditores. Los resultados son altos períodos de espera y los precios pueden ir, rápidamente, a los seis dígitos. Una auditoría es usualmente hecha cuando el proyecto está casi terminado, y una deuda potencial de seguridad se ha acumulado.

Además de esto, el ojo humano no es perfecto y puede que no se percate de bugs críticos; necesitas más que auditorías, antes del lanzamiento, para asegurar adecuadamente tus fondos bloqueados. Aquí es donde entran en juego las herramientas de seguridad.

Las mejores prácticas de seguridad indican usar las herramientas de análisis de seguridad en las primeras etapas de tu proceso de desarrollo. El “enfoque a la izquierda” apunta a probar de forma temprana y evitar, sistemáticamente, construir deuda de seguridad. Añadir capas de seguridad puede reducir de forma significativa, el riesgo de terminar en la clasificación de Rekt.

Muchos proyectos ya han mejorado la conciencia de la seguridad, y algunas herramientas que debes tener están en los toolkits de los desarrolladores, auditores y cazadores de recompensas como Mythril, Slither, VSCode con solidity visual developer y Semgrep. Aún hay potencial para nuevas técnicas y herramientas para hacer que la vida sea más fácil.

Fuzzing y el poder del ejército de monos

Un acercamiento cada vez más popular es fuzzing, ya que ofrece el poder del “ejército de monos” (monkey army) para arrojar miles de entradas aleatorias contra tu código para provocar casos de punta que nunca se te hubiesen ocurrido probar. De manera más formal: fuzzing es una técnica automatizada de detecciones de bugs que envuelve inyectar millones de puntos de datos válidos/inválidos, inesperados o (semi) aleatorios para causar comportamientos inesperados.

El acercamiento más básico es el Fuzzing Black Box (de caja negra), donde las entradas son creadas y mutan aleatoriamente. Este es el ejército de monos proverbiales, como lo pensamos prejuiciosamente. Pero como todos sabemos, nuestros familiares son más inteligentes que eso. Si sólo pudiésemos enseñarles la diferencia entre una entrada no interesante y entradas que llevan más cobertura en el codebase. O, ¿podríamos enseñarle a memorizar un corpus de entradas interesantes y mutar lo siguiente basado en eso? ¿Qué pasaría si pudiéramos enseñarle a predecir entradas que lleven a otro camino cubierto? ¿Esto no haría que la forma más fuzzer sea más acertada y cubra más código en menos tiempo?

Image description

Aquí entra la Caja Gris de Fuzzing

Con técnicas como la predicción de entradas , la cobertura del fuzzing guiado, la simulación de transacciones y más, el equipo de Consensys Diligence, especialmente Valentin Wüstholz, empuja las fronteras de la caja fris de fuzzing para que incremente la performance múltiples veces, haciendo que sea uno de los acercamientos más prometedores en el escenario. Con Harvey, el motor de fuzzing, el ejército de monos es, repentinamente, excepcionalmente bien entrenado y se parecen más a un equipo táctico de squat que a un montón de brutos.

Image description

Fuzzing basado en la propiedad

El fuzzing basado en la propiedad es otro acercamiento que se ha vuelto popular. Esto conlleva definir un conjunto de propiedades que un contrato inteligente debería mantener y usar para generar casos de pruebas. El fuzzing basado en la propiedad puede descubrir un alto rango de vulnerabilidades, enfocándose en las propiedades en vez de inputs específicos. Para hacer que la escritura de la propiedad sea más accesible, el equipo de ConsenSys Diligence creó Scribble, una herramienta runtime de verificación y un lenguaje de especificación para escribir propiedades en Solidity. Con simples comentarios inline, Scribble automáticamente extiende tu codebase con aserciones y revisa que un fuzzer pueda encontrar inconsistencias en tus propiedades. En combinación con la caja gris de fuzzing, Scribble se vuelve una herramienta poderosa que te permite revisar bugs técnicos y aprovecha las vulnerabilidades en la lógica de los negocios. Aquí es donde muchos hackeos interesantes suceden.

Hay algunos contratos inteligentes fuzzers muy populares en el mercado como: Trail of Bits’ Echidna y Foundry’s Forge fuzzer que utilizan el fuzzing basado en la propiedad y hacemos un gran trabajo en encontrar muchos bugs. Sin embargo, no cualquier fuzzer es creado igualmente.

Diligence Fuzzing, una herramienta de fuzzing poderosa ahora accesible para ti

Harvey, combinado con Scribble, te trae Diligence Fuzzing, el contrato inteligente más poderoso del servicio de fuzzing.

Ya que no habían parámetros estandarizados para los contratos inteligentes fuzzers en el mercado, nos arriesgamos y construimos uno. Introduciendo Daedaluzz , un parámetro de framework para comparar tantos fuzzers como sea posible a pesar de sus diferentes acercamientos. Por favor lee el blog post completo para tener información en la configuración de prueba y en las especificaciones del sistema.

Image description

Durante una ejecución fuzz de 4 horas (es decir, una campaña de fuzzing), Harvey detectó más de 28% de violaciones que el fuzzer de Foundry Forge y 52% más que Trail of Bits Echidna. Cuando se compara con el fuzzer de Foundry, es remarcable que Harvey supera el número de violaciones encontradas en tan solo 15 minutos. Esto nos hace creer que te divertirás con Harvey.

Comienza en 3 pasos

Mejorar la seguridad de la postura de tu contrato inteligente sólo toma tres pasos.

Paso 1: Define las especificaciones de Scribble

Añade las propiedades de Scribble sobre cómo tu contrato inteligente debería funcionar. Scribble, automáticamente, crea aserciones en tu código el cual Harvey usará para revisar inconsistencias. ¡Harvey también ejecutará en tus pruebas! Sólo necesitarás desplegar tu sistema y escribir una o más propiedades Scribble. Si tienes las pruebas de Foundry, puedes saltarte las propiedades de Scribble para comenzar.

Paso 2: Sube tu código

Sube tu código a la plataforma de Fuzzing para comenzar tu primera campaña. Harvey analizará los sistemas complejos de múltiples contratos inteligentes para detectar violaciones de tus propiedades personalizadas.

Intenta el Fuzzing gratuitamente

Paso 3: Recibe los resultados

Recibe los resultados de la campaña a través del reporte del dashboard de Fuzzing y corrige las violaciones en tu código.

No tomes nuestra palabra por sentado. Convéncete.

Accessa a Diligence Fuzzing hoy

Este artículo es una traducción de Tobias Vogel, hecha por Héctor Botero. Puedes encontrar el artículo original aquí.
Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_es en Twitter.

Discussion (0)