Back to Blog

Verificação de Segurança: As Redes Compatíveis com EVM São Confiáveis?

Code Auditing
January 4, 2024
6 min read

Em novembro de 2023, o Professor Zhou Yajin, CEO da BlockSec, foi convidado a participar do primeiro Web3 Scholars Summit organizado pelo DRK Lab. Durante a conferência, o Professor Zhou compartilhou o trabalho e as conquistas da BlockSec na detecção de vulnerabilidades na EVM (Ethereum Virtual Machine). Ele também apresentou a ferramenta de fuzzing diferencial automatizado da BlockSec, desenvolvida especificamente para garantir a segurança de cadeias compatíveis com a EVM. Este artigo resume o conteúdo da palestra.

Introdução

De acordo com os dados estatísticos da Defillama, existem atualmente 238 redes públicas L1 e L2, sendo 144 delas compatíveis com a EVM. No entanto, surge a seguinte questão: essas cadeias compatíveis com a EVM apresentam algum problema de segurança em sua implementação? Após a realização de nossas pesquisas, a resposta é afirmativa. Em resposta a essa preocupação, a BlockSec lançou uma ferramenta de segurança de fuzzing diferencial automatizado. Junte-se a nós nessa jornada para explorar a verdade por trás dessas cadeias compatíveis com a EVM.

Vulnerabilidades em Máquinas Virtuais

Figura 1: Diagrama do fluxo de trabalho da Ethereum Virtual Machine (EVM)
Figura 1: Diagrama do fluxo de trabalho da Ethereum Virtual Machine (EVM)

Tomando a Ethereum Virtual Machine (EVM) como exemplo, ela adota uma arquitetura baseada em pilha, incluindo ROM Virtual, Contador de Programa, Pilha, Memória e Estado Mundial (persistente).

Uma máquina virtual atua como o mecanismo que interpreta e executa o código binário compilado dos contratos inteligentes. O componente central de muitas plataformas blockchain é a máquina virtual, sendo a Ethereum Virtual Machine (EVM) particularmente notável. Portanto, a máquina virtual desempenha um papel fundamental na execução de contratos inteligentes, no processamento de transações e na garantia da integridade do blockchain.

Sabemos que a própria EVM é também um programa de software escrito por programadores. No entanto, como podemos garantir que a EVM esteja livre de problemas? Afinal, bugs são possíveis em qualquer código escrito por humanos.

E uma vez que um bug apareça na EVM, ele terá consequências catastróficas para o ecossistema do blockchain. Na verdade, a EVM já enfrentou diversas vulnerabilidades graves no passado.

Por exemplo, em 2020, houve um incidente de vulnerabilidade causado por um contrato pré-compilado (ou seja, CVE-2020-26241) [1]. O contrato pré-compilado dataCopy no Geth (localizado em 0x00...04) realizava uma cópia superficial durante a invocação, onde copiar uma grande quantidade de dados copiava apenas os ponteiros em vez dos dados completos. Isso permitia que contratos inteligentes maliciosos modificassem dados que não deveriam ter sido modificados, resultando em inconsistência de dados quando diferentes versões da máquina virtual executavam o mesmo contrato inteligente. Outro exemplo ocorreu em 2021, quando certas cadeias compatíveis com a EVM não fizeram a atualização junto com o Ethereum. Em versões antigas do Geth, havia uma vulnerabilidade (CVE-2021-39137) [2] onde as regiões de memória para dados de entrada e saída em chamadas de contratos pré-compilados se sobrepunham. Atacantes exploraram essa vulnerabilidade, resultando em um fork da cadeia.

Contramedidas da BlockSec

Como descobrir vulnerabilidades na EVM em tempo hábil? Quais são os desafios?

  1. Em primeiro lugar, devido ao design intrincado da máquina virtual, é desafiador encontrar ferramentas que possam compreender plenamente sua lógica operacional. Cada área de especialização requer especialização, e muitos desenvolvedores podem não conseguir dedicar esforço suficiente para entender sua lógica operacional e tomar precauções eficazes.

  2. Além disso, muitas novas redes públicas L1/L2 personalizam a máquina virtual EVM, o que pode introduzir novos problemas de segurança.

Claramente, depender exclusivamente de auditorias manuais para identificar esses problemas na máquina virtual EVM é difícil.

Adapte-se e responda de acordo! Diante desses desafios, a BlockSec desenvolveu um sistema automatizado para enfrentar esses problemas de frente!

Fuzzing Diferencial

Na BlockSec, nossa equipe de especialistas empregou uma abordagem inteligente conhecida como fuzzing diferencial. Ao executar os mesmos casos de teste em diferentes versões da máquina virtual e comparar os resultados de saída, podemos descobrir vulnerabilidades e inconsistências em potencial. Esse método nos permite identificar efetivamente diferenças sutis que os métodos de teste convencionais podem ignorar, aumentando assim a segurança geral do sistema.

Figura 2: Fluxo de trabalho do Fuzzing Diferencial
Figura 2: Fluxo de trabalho do Fuzzing Diferencial

Princípio Básico de Funcionamento:

Para realizar o fuzzing diferencial, precisamos preparar entradas idênticas como casos de teste. Esses casos de teste são então alimentados no mecanismo de fuzzing diferencial. Ao comparar as saídas da execução dos mesmos casos de teste em diferentes versões da máquina virtual, podemos identificar problemas potenciais.

Etapas Específicas de Implementação:

O caso de teste para fuzzing diferencial precisa consistir em duas partes: metadados de transação e pré-estado. Mas como geramos essas transações? Temos duas abordagens para enfrentar esse desafio.

  1. Reutilizar transações históricas: Podemos recuperar as transações históricas que ocorreram no blockchain e executá-las em diferentes versões da máquina virtual no mecanismo de fuzzing diferencial. No entanto, depender exclusivamente desse método tem suas limitações. As transações históricas tendem a ser "normais" demais, enquanto os testes de segurança exigem a descoberta de casos extremos — os cenários excepcionais. É por isso que elaboramos uma segunda abordagem.
  2. Fuzzing guiado por cobertura: Geramos bytecode incomum e transações historicamente inéditas do zero, depois mutamos as transações e o código de contratos inteligentes e os inserimos na máquina virtual. Garantimos a validade e a abrangência dos casos de teste em várias dimensões.

Uma vez que essas transações são geradas, elas são alimentadas no mecanismo de fuzzing diferencial e os resultados são então comparados.

A comparação de resultados não é meramente uma comparação numérica simples, mas também considera de forma abrangente a consistência dos dados tanto no armazenamento persistente quanto no não persistente da máquina virtual. Este artigo não elaborará mais sobre isso.

Estudo de Caso

Figura 3: Um exemplo do problema do contrato pré-compilado *ModExp* na Aurora VM
Figura 3: Um exemplo do problema do contrato pré-compilado ModExp na Aurora VM

Gostaria de compartilhar um caso de vulnerabilidade de máquina virtual que descobrimos na Aurora VM por meio do fuzzing diferencial. Especificamente, ele está relacionado a um problema com o contrato inteligente pré-compilado ModExp.

Ao calcular a exponenciação modular de um número x elevado à potência y, sabemos que essa operação requer recursos computacionais. Em uma implementação correta, o cálculo do gás leva em conta o número de iterações, pois a exponenciação modular envolve múltiplas iterações. No entanto, existe um cenário específico em que o cálculo do gás pode encontrar um problema: quando o expoente y é igual a 0, indicando uma operação de potência de ordem zero. Nesse caso, o número de iterações torna-se zero, resultando em um valor de gás extremamente pequeno. Mas, na verdade, o cálculo ainda requer recursos.

Conclusão

Atualmente, a ferramenta de fuzzing diferencial lançada pela BlockSec suporta execução nos ambientes de diversas máquinas virtuais de blockchain, incluindo rbpf, ubpf, Aurora-engine, neon-evm, Moonbeam, revm, EvmOS, fevm e Polygon-zkevm, com expansão contínua.

Com essa ferramenta, descobrimos 14 novas vulnerabilidades, solicitamos 2 CVEs: CVE-2021–46102 e CVE-2022–23066, e recebemos mais de US$ 1,3 milhão em recompensas por bugs.

Atualmente, a solução abrangente de segurança para cadeias EVM fornecida pela BlockSec (serviços de auditoria + ferramentas de fuzzing diferencial) foi reconhecida e adotada pela EOS e pela FileCoin, e contribuirá para a segurança e o desenvolvimento saudável de seus ecossistemas.

Referências

[1] Cópia superficial no precompilado 0x4 pode levar à corrupção de memória da EVM

[2] Corrupção de RETURNDATA via datacopy

Sobre a BlockSec

BlockSec é uma empresa pioneira em segurança blockchain estabelecida em 2021 por um grupo de especialistas em segurança de renome mundial. A empresa está comprometida em aprimorar a segurança e a usabilidade para o emergente mundo Web3, a fim de facilitar sua adoção em massa. Para isso, a BlockSec fornece serviços de auditoria de segurança de contratos inteligentes e cadeias EVM, a plataforma Phalcon para desenvolvimento de segurança e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaDock para construtores web3 que navegam com eficiência no mundo cripto.

Até o momento, a empresa atendeu mais de 300 clientes renomados, como MetaMask, Uniswap Foundation, Compound, Forta e PancakeSwap, e recebeu dezenas de milhões de dólares americanos em duas rodadas de financiamento de investidores proeminentes, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.

✉️Consultoria comercial:[email protected]

Conta no Twitter da BlockSec: https://twitter.com/BlockSecTeam

Conta no Twitter do Phalcon: https://twitter.com/Phalcon_xyz

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit