Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Criptografía y seguridad# Ingeniería del software

Mejorando las Pruebas de Contratos Inteligentes con Fuzzing Basado en Instantáneas

Un nuevo método mejora la prueba de seguridad de contratos inteligentes a través de una gestión eficiente de instantáneas.

― 6 minilectura


Fuzzing de InstantáneasFuzzing de Instantáneaspara ContratosInteligentesinteligentes más rápido.vulnerabilidades en contratosUn nuevo método para detectar
Tabla de contenidos

Los contratos inteligentes son un tipo de programa de computadora que funciona en blockchains, como Ethereum. Ayudan a automatizar transacciones financieras y acuerdos sin necesidad de un intermediario. Sin embargo, es esencial garantizar que estos contratos estén libres de Vulnerabilidades, ya que su seguridad es clave para prevenir pérdidas financieras.

Los métodos de prueba actuales para contratos inteligentes a menudo tienen problemas debido a la naturaleza compleja de los estados de blockchain que cambian continuamente con cada transacción. Este documento presenta un nuevo método llamado fuzzing basado en instantáneas, que busca mejorar cómo probamos estos contratos inteligentes en busca de errores.

El Problema con las Pruebas Tradicionales

El fuzzing tradicional genera entradas aleatorias para encontrar errores en el software. Aunque este método es útil para muchas aplicaciones, no funciona bien para contratos inteligentes. La razón es que los contratos inteligentes mantienen un estado que puede cambiar con cada transacción. El estado de un contrato inteligente es como su memoria, donde lleva un registro de saldos y otra información importante.

Cuando los testers utilizan fuzzers tradicionales en contratos inteligentes, normalmente comienzan desde un estado limpio y envían una secuencia de transacciones. Si quieren comprobar cómo se comporta el contrato en un estado pasado, tienen que volver a ejecutar todas las transacciones anteriores. Esta re-ejecución lleva mucho tiempo, especialmente cuando el estado debe construirse a partir de transacciones complejas. Como resultado, las herramientas existentes que dependen de este método a menudo experimentan un rendimiento lento.

Fuzzing Basado en Instantáneas: Un Nuevo Enfoque

El fuzzing basado en instantáneas aborda estas limitaciones. En lugar de volver a ejecutar toda la secuencia de transacciones para alcanzar un estado específico, toma instantáneas del estado del contrato inteligente en varios puntos durante la ejecución. De esta manera, los testers pueden regresar rápidamente a estas instantáneas siempre que lo necesiten, acelerando significativamente el proceso de prueba.

Cómo Funciona el Fuzzing Basado en Instantáneas

En este método, se toman instantáneas después de ejecutar ciertas transacciones. Estas instantáneas actúan como marcadores, permitiendo que el fuzzer salte de vuelta a estados interesantes sin re-ejecutar todas las transacciones anteriores. El fuzzer puede entonces experimentar con estos estados y ver cómo responde el contrato inteligente a diferentes entradas.

Estados Más Interesantes

El objetivo no es solo recopilar todas las instantáneas, sino enfocarse en las más interesantes. Para determinar qué estados son interesantes, el fuzzer usa dos técnicas especiales llamadas puntos de referencia de flujo de datos y puntos de referencia de comparación.

  • Puntos de Referencia de Flujo de Datos: Esta técnica rastrea cómo cambia la información durante la ejecución del programa. Ayuda a identificar ubicaciones de memoria que probablemente sean importantes para futuras operaciones. Si el fuzzer descubre que una ubicación de memoria se accede con frecuencia, considera que ese estado es interesante y vale la pena explorarlo más.

  • Puntos de Referencia de Comparación: Se utilizan para monitorear qué tan cerca están diferentes valores durante la ejecución. El fuzzer registra estados donde ciertos valores se acercan a un objetivo específico. Esta información ayuda a entender qué caminos explorar a continuación y asegura que los estados menos significativos no saturen la memoria del fuzzer.

Acelerando las Pruebas On-Chain

Dado que el fuzzing basado en instantáneas puede regresar a estados anteriores sin largas re-ejecuciones, es ideal para pruebas on-chain. Las pruebas on-chain significan revisar contratos inteligentes directamente en la blockchain en lugar de en un entorno local o simulado. Este método tiene varias ventajas:

  1. Entorno Real: Las pruebas on-chain capturan las condiciones reales en las que opera el contrato inteligente. Esto puede revelar vulnerabilidades que pueden no aparecer en un entorno simulado.

  2. Respuesta Rápida: El método puede identificar problemas rápidamente y responder antes de que un posible atacante pueda explotarlos. Por ejemplo, si se encuentra una vulnerabilidad, el contrato inteligente puede pausarse de inmediato, previniendo pérdidas.

La Importancia de la Seguridad de los Contratos Inteligentes

A medida que más negocios e individuos utilizan contratos inteligentes, su seguridad se vuelve cada vez más importante. Una sola vulnerabilidad puede llevar a graves pérdidas financieras, como lo han demostrado numerosos incidentes de hackeo en plataformas de finanzas descentralizadas (DeFi). Los métodos de prueba tradicionales a menudo pasan por alto estas vulnerabilidades, haciendo que soluciones innovadoras como el fuzzing basado en instantáneas sean cruciales para mantener la seguridad en contratos inteligentes.

Evaluando el Nuevo Método

Para probar qué tan efectivo es el fuzzing basado en instantáneas, se aplicó a una variedad de contratos inteligentes del mundo real. Los resultados mostraron que podía superar las herramientas existentes en términos de cobertura de instrucciones y velocidad de detección de vulnerabilidades.

Aplicación en el Mundo Real

El nuevo método fue probado en contratos inteligentes que habían sido explotados previamente para medir qué tan bien podía identificar vulnerabilidades. Los resultados fueron prometedores, con la herramienta encontrando exploits concretos en muchos contratos en cuestión de segundos, mientras que las herramientas existentes tardaron horas o fallaron por completo.

Gestión de Memoria

Un desafío en el fuzzing es gestionar el uso de la memoria. Con muchas instantáneas, la memoria puede llenarse rápidamente. Sin embargo, el uso de puntos de referencia ayuda a gestionar esto priorizando qué instantáneas se mantienen. Las instantáneas que no son interesantes o menos útiles pueden eliminarse, manteniendo un uso eficiente de la memoria.

Conclusión

El fuzzing basado en instantáneas ofrece un enfoque nuevo para probar contratos inteligentes, abordando las deficiencias de los métodos de prueba tradicionales. Al enfocarse en tomar instantáneas de estados interesantes y utilizar mecanismos de retroalimentación eficientes, este método puede mejorar significativamente la velocidad y precisión de las pruebas. A medida que los contratos inteligentes continúan desempeñando un papel esencial en las finanzas modernas, herramientas como esta serán vitales para asegurar su seguridad.

En resumen, este nuevo método de prueba no solo mejora la capacidad de identificar vulnerabilidades, sino que también lo hace de manera oportuna, convirtiéndose en un paso prometedor para la auditoría y seguridad de contratos inteligentes.

Fuente original

Título: ItyFuzz: Snapshot-Based Fuzzer for Smart Contract

Resumen: Smart contracts are critical financial instruments, and their security is of utmost importance. However, smart contract programs are difficult to fuzz due to the persistent blockchain state behind all transactions. Mutating sequences of transactions are complex and often lead to a suboptimal exploration for both input and program spaces. In this paper, we introduce a novel snapshot-based fuzzer ItyFuzz for testing smart contracts. In ItyFuzz, instead of storing sequences of transactions and mutating from them, we snapshot states and singleton transactions. To explore interesting states, ItyFuzz introduces a dataflow waypoint mechanism to identify states with more potential momentum. ItyFuzz also incorporates comparison waypoints to prune the space of states. By maintaining snapshots of the states, ItyFuzz can synthesize concrete exploits like reentrancy attacks quickly. Because ItyFuzz has second-level response time to test a smart contract, it can be used for on-chain testing, which has many benefits compared to local development testing. Finally, we evaluate ItyFuzz on real-world smart contracts and some hacked on-chain DeFi projects. ItyFuzz outperforms existing fuzzers in terms of instructional coverage and can find and generate realistic exploits for on-chain projects quickly.

Autores: Chaofan Shou, Shangyin Tan, Koushik Sen

Última actualización: 2023-06-29 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2306.17135

Fuente PDF: https://arxiv.org/pdf/2306.17135

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Más de autores

Artículos similares