Runtime Protection realiza proteção de controle de risco na cadeia DeFi

Autor: Artela Blog chinês, médio# Resumo

Os ataques de reentrada ainda são um desafio. Os métodos de defesa existentes concentram-se principalmente no nível do código-fonte do protocolo, que só entram em vigor antes de o contrato entrar no estado de tempo de execução

"Proteção em tempo de execução" é um complemento importante para a segurança DeFi. Tem como objetivo "proteger os resultados da execução" e garantir que a execução do protocolo seja consistente com o projeto esperado

O design do EVM não suporta "proteção em tempo de execução", porque o contrato inteligente não pode acessar todas as informações de contexto do estado do tempo de execução

Artela explora um paradigma de camada de execução EVM+Extension, aprimora a camada de execução para eliminar ataques de reentrada

Artela implementa extensões de "proteção de tempo de execução" on-chain por meio da programação de aspectos

Mostramos passo a passo como prevenir ataques de reentrância no contrato Curve através do Aspect

Por que os ataques de reentrância ainda são um desafio, apesar dos controles de risco existentes

Embora os ataques de reentrância sejam um problema bem conhecido e muitos controles de risco tenham sido implementados, os incidentes de segurança envolvendo esses ataques continuaram a ocorrer nos últimos dois anos:

Curve Finance Attack (julho de 2023) - $ 60 milhões Curve sofreu um ataque de reentrância devido a uma falha de compilação em sua linguagem de programação de contrato Vyper.

Origin Protocol Attack (novembro de 2022) — projeto de Stablecoin de US$ 7 milhões Origin Dollar (OUSD) sofreu um ataque de reentrância.

Ataque do protocolo Siren (setembro de 2021) - $ 3,5 milhões, pool AMM sofre ataque de reentrância.

Ataque Cream Finance (agosto de 2021) - $ 18,8 milhões, os invasores exploraram uma vulnerabilidade de reentrada para empréstimos secundários.

Atualmente, o foco da prevenção de ataques de reentrância está no nível do código-fonte dos contratos inteligentes.As medidas incluem a integração do ReentrancyGuard do OpenZeppelin e a realização de auditorias de segurança nos códigos lógicos do contrato para evitar riscos de segurança predefinidos.

Essa abordagem, conhecida como solução de "caixa branca", visa evitar vulnerabilidades no nível do código-fonte para minimizar erros de lógica. No entanto, seu principal desafio é a incapacidade de se defender contra perigos ocultos desconhecidos.

"Traduzir" um contrato do código-fonte para o tempo de execução real é um processo desafiador. Cada etapa pode trazer problemas imprevistos para os desenvolvedores, e o próprio código-fonte do contrato pode não cobrir totalmente todas as situações potenciais. No caso do Curve, mesmo que o código-fonte do protocolo esteja correto, ainda pode haver discrepâncias entre a execução final e o design pretendido do protocolo devido a problemas do compilador.

Não basta confiar na segurança do protocolo no nível do código-fonte e da compilação. Mesmo que o código-fonte pareça impecável, as vulnerabilidades ainda podem aparecer inesperadamente devido a problemas do compilador.

Precisamos de proteção em tempo de execução

Ao contrário das medidas de controle de risco existentes que estão concentradas no nível do código-fonte do protocolo e entram em vigor antes da execução, a proteção de tempo de execução envolve desenvolvedores de protocolo escrevendo regras e operações de proteção de tempo de execução para lidar com circunstâncias imprevistas de tempo de execução. Isso facilita a avaliação em tempo real e a resposta aos resultados da execução em tempo de execução.

A proteção de tempo de execução é fundamental para aprimorar a segurança DeFi e é uma adição importante às medidas de segurança existentes. Ao proteger o protocolo de maneira "caixa preta", ele aumenta a segurança ao garantir que o resultado final da operação seja consistente com o projeto pretendido do protocolo, sem interferir diretamente na execução do código do contrato.

Desafios da implementação da proteção em tempo de execução

Infelizmente, o design do EVM não oferece suporte à proteção de tempo de execução on-chain porque os contratos inteligentes não têm acesso ao contexto de tempo de execução completo.

Como superar esse desafio? Acreditamos que os seguintes pré-requisitos são necessários:

Um módulo dedicado que fornece acesso a todas as informações em contratos inteligentes, incluindo todo o contexto da transação.

A autorização necessária é obtida do contrato inteligente, dando ao módulo o direito de reverter as transações conforme necessário.

Certifique-se de que a funcionalidade do módulo entre em vigor após a execução do contrato inteligente e antes do envio do estado.

Atualmente, o EVM enfrenta limitações para enfrentar os desafios acima e não pode acomodar mais inovações. Sob o paradigma do blockchain modular, a camada de execução precisa explorar o avanço de ir além do EVM.

A ideia da Artela é EVM + extensão nativa, construindo a camada de extensão nativa WASM do EVM para ir além do EVM.

Introdução à Programação de Aspectos

Lançamos o Aspect Programming, uma estrutura de programação para o blockchain Artela que suporta escala nativa no blockchain.

Aspect é um módulo de extensão nativa programável, que é usado para integrar dinamicamente funções personalizadas no blockchain em tempo de execução, como um suplemento modular para contratos inteligentes e aprimorar a funcionalidade na cadeia.

O recurso do Aspect é que ele pode acessar a API no nível do sistema da camada base do blockchain e adicionar lógica de extensão em cada ponto de junção do ciclo de vida da transação. Os contratos inteligentes podem vincular aspectos específicos para acionar funções estendidas. Quando uma transação invoca um contrato inteligente, a transação também é processada pelo aspecto associado ao contrato.

Como a programação de aspectos implementa proteção em tempo de execução

Aspect pode registrar o estado de execução de cada chamada de função e impedir a reentrância durante a execução da função de retorno de chamada. Quando ocorre uma chamada reentrante durante a execução da função de retorno de chamada, o Aspect detecta e reverte a transação imediatamente, evitando que invasores explorem vulnerabilidades de reentrância. Com essa abordagem, a Aspect elimina com eficácia os ataques de reentrância, garantindo a segurança e a estabilidade dos contratos inteligentes.

Aspect implementa as principais propriedades para proteção em tempo de execução:

Pode ser acionado após a execução do contrato inteligente e antes do envio do estado: os módulos Aspect podem ser configurados para serem ativados após a execução do contrato inteligente, mas antes do envio do estado.

Acesso completo ao contexto da transação: o Aspect pode acessar o contexto completo da transação, incluindo todas as informações da transação (métodos, parâmetros, etc.), pilha de chamadas (todas as chamadas internas do contrato durante a execução), mudanças de contexto de estado e todos os eventos acionados pela transação.

Capacidade de chamada do sistema: A Aspect pode fazer chamadas do sistema e iniciar retrações de transação quando necessário.

Vinculação e autorização com contratos inteligentes: os contratos inteligentes podem ser vinculados à Aspect e conceder permissão à Aspect para participar do processamento de transações.

Implementar Aspecto para proteção de reentrada

Neste capítulo, discutimos como implementar a proteção de tempo de execução de Aspect na cadeia.

Um aspecto real de "intenção de proteção de contrato" pode ser implantado no ponto de junção de "preContractCall" e "postContractCall" para evitar ataques de reentrada.

preContractCall: Disparado antes da execução da chamada de contrato cruzado

postContractCall: disparado após a execução da chamada cruzada

Para proteção de reentrada, nosso objetivo é impedir a reentrada do contrato até que a chamada seja concluída. Com Aspect, podemos conseguir isso adicionando lógica específica em pontos no ciclo de vida da transação.

No pointcut "preContractCall", Aspect monitora a pilha de chamada do contrato. Se houver chamadas duplicadas na pilha de chamadas (o que significa uma reentrada inesperada em nossa chamada bloqueada), o aspecto reverterá a chamada.

Implante o contrato Curve e evite ataques de reentrada

Escrevemos um contrato simulado do Curve e forjamos um ataque de reentrância para reproduzir esse processo de maneira mais compreensível. O código do contrato é o seguinte:

Pode-se ver que tanto add_liquidity quanto remove_liquidity do contrato acima são protegidos pelo mesmo bloqueio de reentrada, o que significa que se a proteção de reentrada funcionar normalmente, a função protegida não pode ser reinserida alterando o bloqueio (por exemplo, em remove _liquidity chama add_liquidity).

Compile o contrato acima com o compilador vyper 0.2.15, 0.2.16 ou 0.3.0 (essas versões têm problemas conhecidos de proteção de reentrância).

Em seguida, implantamos o contrato de vítima acima e o atacamos com o seguinte contrato:

Para simular um ataque real, o método de ataque deste contrato tenta inserir novamente add_liquidity do método remove_liquidity por meio de sua função de fallback. Se a reentrada realmente ocorrer, pode-se observar no recebimento que um evento AddLiquidity é registrado antes do evento RemoveLiquidity.

Agora vamos usar Aspect para proteger o contrato sob ataque. Antes de fazer o seguinte, conclua as seguintes etapas:

  1. Implantar Aspecto

  2. Vincule o contrato da vítima com a Aspect

Se você não estiver familiarizado com as operações do Aspect, verifique primeiro nosso guia do desenvolvedor.

Feito o exposto, vamos agora tentar chamar o método de ataque novamente para verificar se a operação será bem-sucedida.

A partir da imagem em movimento (você pode ver o link original no final do artigo), podemos ver que a transação reentrante foi revertida, o que significa que nosso Aspecto está protegendo com sucesso o contrato da vítima contra ataques de reentrada.

para concluir

O recente ataque ao Curve demonstra mais uma vez que nenhum protocolo é 100% totalmente seguro. Não basta focar na segurança nos níveis de origem e compilação do protocolo. Mesmo que o código-fonte pareça perfeito, as vulnerabilidades ainda podem aparecer inesperadamente devido a problemas do compilador.

Para aumentar a segurança do DeFi, a proteção do tempo de execução torna-se crítica. Ao proteger o protocolo de maneira "caixa preta", garantindo que a execução do protocolo seja consistente com seu design pretendido, ele pode efetivamente impedir ataques de reentrada em tempo de execução.

Bifurcamos o contrato Curve e simulamos totalmente seu recente ataque de reentrância e reproduzimos todo o processo de uma maneira mais compreensível. Usando a programação de aspectos como uma nova abordagem para proteção de tempo de execução on-chain, mostramos passo a passo como proteger contratos de vítimas com aspectos. Nosso objetivo é ajudar a erradicar os ataques de reentrada que os protocolos DeFi, como o Curve, podem sofrer, aumentando assim a segurança em todo o espaço DeFi.

Com o Aspect Programming, os desenvolvedores podem não apenas obter proteção de tempo de execução on-chain no espaço de segurança, mas também permitir casos de uso inovadores sem precedentes, como intenções, JIT e automação on-chain. Além disso, esta estrutura geral baseada no SDK do Cosmos não apenas suportará o blockchain Artela, mas também suportará outros blockchains para construir extensões nativas com base em suas próprias camadas de execução.

Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • Comentário
  • Compartilhar
Comentário
0/400
Sem comentários
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)