En noviembre de 2023, el Profesor Zhou Yajin, CEO de BlockSec, fue invitado a participar en la primera Cumbre de Académicos Web3 organizada por DRK Lab. Durante la conferencia, el Profesor Zhou compartió el trabajo y los logros de BlockSec en la detección de vulnerabilidades en la EVM (Máquina Virtual de Ethereum). También presentó la herramienta automatizada de fuzzing diferencial de BlockSec, diseñada específicamente para garantizar la seguridad de las cadenas compatibles con EVM. Este artículo resume el contenido del discurso.
Introducción
Según las estadísticas de datos de Defillama, actualmente existen 238 cadenas públicas L1 y L2, de las cuales 144 son compatibles con EVM. Sin embargo, surge la pregunta: ¿Tienen estas cadenas compatibles con EVM algún problema de seguridad durante su implementación? Tras realizar nuestra investigación, la respuesta es afirmativa. En respuesta a esta preocupación, BlockSec ha lanzado una herramienta de seguridad automatizada de fuzzing diferencial. Únase a nosotros mientras nos embarcamos en un viaje para explorar la verdad detrás de estas cadenas compatibles con EVM.
Vulnerabilidades en las Máquinas Virtuales

Tomando la Máquina Virtual de Ethereum (EVM) como ejemplo, adopta una arquitectura basada en pila que incluye ROM Virtual, Contador de Programa, Pila, Memoria y Estado Mundial (persistente).
Una máquina virtual actúa como el motor que interpreta y ejecuta el código binario compilado de los contratos inteligentes. El componente central de muchas plataformas blockchain es la máquina virtual, siendo la Máquina Virtual de Ethereum (EVM) particularmente notable. Por lo tanto, la máquina virtual desempeña un papel clave en la ejecución de contratos inteligentes, el procesamiento de transacciones y la garantía de la integridad de la blockchain.
Sabemos que la EVM en sí misma es también un programa de software escrito por programadores. Sin embargo, ¿cómo podemos garantizar que la EVM esté libre de problemas? Al fin y al cabo, los errores son posibles en cualquier código escrito por humanos.
Y una vez que aparece un error en la EVM, tendrá consecuencias catastróficas para el ecosistema de la blockchain. De hecho, la EVM ha encontrado muchas vulnerabilidades graves en el pasado.
Por ejemplo, en 2020, hubo un incidente de vulnerabilidad causado por un contrato precompilado (es decir, CVE-2020-26241) [1]. El contrato precompilado dataCopy en Geth (ubicado en 0x00...04) realizaba una copia superficial durante la invocación, donde copiar una gran cantidad de datos solo copiaba los punteros en lugar de los datos completos. Esto permitía que contratos inteligentes maliciosos modificaran datos que no deberían haber sido modificados, resultando en inconsistencia de datos cuando diferentes versiones de la máquina virtual ejecutaban el mismo contrato inteligente. Otro ejemplo ocurrió en 2021 cuando ciertas cadenas compatibles con EVM no se actualizaron junto con Ethereum. En versiones anteriores de Geth, había una vulnerabilidad (CVE-2021-39137) [2] donde las regiones de memoria para los datos de entrada y salida en las llamadas a contratos precompilados se superponían. Los atacantes explotaron esta vulnerabilidad, provocando una bifurcación de la cadena.
Contramedidas de BlockSec
¿Cómo descubrir oportunamente las vulnerabilidades en la EVM? ¿Cuáles son los desafíos?
-
En primer lugar, debido al intrincado diseño de la máquina virtual, es difícil encontrar herramientas que puedan comprender completamente su lógica operativa. Cada campo de especialización requiere especialización, y muchos desarrolladores pueden no ser capaces de invertir suficiente esfuerzo para comprender su lógica operativa y tomar precauciones efectivas.
-
Además, muchas nuevas cadenas públicas L1/L2 personalizan la máquina virtual EVM, lo que puede introducir potencialmente nuevos problemas de seguridad.
Claramente, confiar únicamente en auditorías manuales para identificar estos problemas en la máquina virtual EVM es difícil.
¡Adaptarse y responder en consecuencia! Ante estos desafíos, ¡BlockSec ha desarrollado un sistema automatizado para abordar estos problemas de frente!
Fuzzing Diferencial
En BlockSec, nuestro equipo de expertos ha empleado un enfoque inteligente conocido como fuzzing diferencial. Al ejecutar los mismos casos de prueba en diferentes versiones de la máquina virtual y comparar los resultados de salida, podemos descubrir vulnerabilidades e inconsistencias potenciales. Este método nos permite identificar eficazmente diferencias sutiles que los métodos de prueba convencionales podrían pasar por alto, mejorando así la seguridad general del sistema.

Principio de Funcionamiento Básico:
Para realizar el fuzzing diferencial, necesitamos preparar entradas idénticas como casos de prueba. Estos casos de prueba se introducen luego en el motor de fuzzing diferencial. Al comparar los resultados de la ejecución de los mismos casos de prueba en diferentes versiones de la máquina virtual, podemos identificar problemas potenciales.
Pasos Específicos de Implementación:
El caso de prueba para el fuzzing diferencial debe constar de dos partes: metadatos de transacción y estado previo. ¿Pero cómo generamos estas transacciones? Tenemos dos enfoques para abordar este desafío.
- Reutilizar transacciones históricas: Podemos recuperar las transacciones históricas que han ocurrido en la blockchain y ejecutarlas a través de diferentes versiones de la máquina virtual en el motor de fuzzing diferencial. Sin embargo, depender únicamente de este método tiene sus limitaciones. Las transacciones históricas tienden a ser demasiado "normales", mientras que las pruebas de seguridad requieren descubrir casos extremos: los escenarios excepcionales. Por eso ideamos un segundo enfoque.
- Fuzzing guiado por cobertura: Generamos bytecode poco común y transacciones históricamente no vistas desde cero, luego mutamos las transacciones y el código de contratos inteligentes y los introducimos en la máquina virtual. Garantizamos la validez y exhaustividad de los casos de prueba desde varias dimensiones.
Una vez que se generan estas transacciones, se introducen en el motor de fuzzing diferencial y luego se comparan los resultados.
La comparación de resultados no es simplemente una comparación numérica, sino que también considera de manera integral la consistencia de datos tanto en el almacenamiento persistente como en el no persistente de la máquina virtual. Este artículo no elaborará más al respecto.
Caso de Estudio

Me gustaría compartir un caso de vulnerabilidad de máquina virtual que descubrimos en la Aurora VM mediante fuzzing diferencial. Específicamente, se relaciona con un problema con el contrato inteligente precompilado ModExp.
Al calcular la exponenciación modular de un número x elevado a la potencia y, somos conscientes de que esta operación requiere recursos computacionales. En una implementación correcta, el cálculo del gas tiene en cuenta el número de iteraciones, ya que la exponenciación modular implica múltiples iteraciones. Sin embargo, existe un escenario específico donde el cálculo del gas puede encontrar un problema: cuando el exponente y es igual a 0, lo que indica una operación de potencia de orden cero. En este caso, el número de iteraciones se vuelve cero, lo que resulta en un valor de gas extremadamente pequeño. Pero en realidad, el cálculo todavía requiere recursos.
Conclusión
Actualmente, la herramienta de fuzzing diferencial lanzada por BlockSec admite la ejecución en los entornos de varias máquinas virtuales de blockchain, incluyendo rbpf, ubpf, Aurora-engine, neon-evm, Moonbeam, revm, EvmOS, fevm, y Polygon-zkevm, con expansión continua.
Con esta herramienta, hemos descubierto 14 nuevas vulnerabilidades, solicitado 2 CVEs: CVE-2021–46102 y CVE-2022–23066, y recibido más de $1.3 millones en recompensas por errores.
En la actualidad, la solución integral de seguridad para cadenas EVM proporcionada por BlockSec (servicios de auditoría + herramientas de fuzzing diferencial) ha sido reconocida y adoptada por EOS y FileCoin, y contribuirá a la seguridad y el desarrollo saludable de sus ecosistemas.
Referencias
[1] La copia superficial en el precompilado 0x4 podría provocar corrupción de memoria en la EVM
[2] Corrupción de RETURNDATA a través de datacopy
Acerca de BlockSec
BlockSec es una empresa pionera en seguridad blockchain establecida en 2021 por un grupo de expertos en seguridad de renombre mundial. La empresa está comprometida con mejorar la seguridad y la usabilidad del emergente mundo Web3 para facilitar su adopción masiva. Con este fin, BlockSec proporciona servicios de auditoría de seguridad para contratos inteligentes y cadenas EVM, la plataforma Phalcon para el desarrollo de seguridad y el bloqueo proactivo de amenazas, la plataforma MetaSleuth para el seguimiento e investigación de fondos, y la extensión MetaDock para que los constructores de web3 naveguen de manera eficiente en el mundo cripto.
Hasta la fecha, la empresa ha atendido a más de 300 clientes de prestigio, como MetaMask, Uniswap Foundation, Compound, Forta y PancakeSwap, y ha recibido decenas de millones de dólares estadounidenses en dos rondas de financiación de inversores destacados, incluidos Matrix Partners, Vitalbridge Capital y Fenbushi Capital.
✉️Consultas comerciales:[email protected]
Cuenta de Twitter de BlockSec: https://twitter.com/BlockSecTeam
Cuenta de Twitter de Phalcon: https://twitter.com/Phalcon_xyz



