WEB3DEV

Cover image for Escondendo o Código Malicioso | Hack Solidity #9
Dimitris Carvalho Calixto
Dimitris Carvalho Calixto

Posted on • Atualizado em

Escondendo o Código Malicioso | Hack Solidity #9

Esse artigo foi escrito por: Zuhaib Mohammed e traduzido por Dimitris Calixto, artigo original disponível aqui

O espaço web3 é bastante novo e em evolução, e a maioria dos usuários são muito negligentes. Não investigam o projeto e apenas mergulham com o seu capital, na esperança de um retorno de 10x-100x.

Neste exemplo, tentaremos compreender a importância de auditar o código antes de interagir com o seu contrato. Todos sabemos que o código do contrato pode ser verificado através do portal etherscan.io.

etherscanprint

Os invasores são inteligentes

Os criadores de um dApp publicam o seu código e endereço contratual no etherscan.io para que todos o vejam e auditem. Isto cria algum tipo de confiança para o projeto mas, existe uma forma de usar o desenvolvedor para esconder o código malicioso.

No exemplo dado abaixo, há dois contratos chamados Foo e Bar. Qualquer pessoa que olhe para o código pode facilmente dizer que o Foo recebe a entrada do endereço de contrato de Bar e depois chama a função de registro através da função callBar.

codeinjs

Mas, o invasor malicioso escreve uma função log separada no contrato Mal e passa o endereço do contrato destacado do contrato Mal em vez de Bar durante a implementação efetiva. Assim, uma vez que o dApp esteja em funcionamento, qualquer utilizador que interaja com o contrato Foo acaba por chamar a função log do contrato Mal, e o código malicioso é executado, o que geralmente acaba por roubar os fundos do usuário.

A Cadeia de Eventos

  1. Eve implementa Mal
  2. Eve implementa Foo com o endereço de Mal
  3. Alice chama a função Foo.callBar() depois de ler o código
  4. Alice esperava que Bar.log() fosse executado, mas Mal.log() foi executado.

A solução

Este tipo de ataque pode enganar muitos dos auditores que andam por aí. Portanto, uma boa solução é rever o código para qualquer endereço externo não verificado chamado através do construtor.

Uma menção ao SmartContractProgrammer para a maravilhosa série sobre hacking Solidity.

Espero que você tenha gostado de ler.

Ciao!

Oldest comments (0)