Ataques de reentrada em contratos inteligentes, explicados

Vulnerabilidades potenciais em contratos inteligentes


Oi pessoal! Você já cansou de viver na pobreza enquanto as criptomoedas estão curtindo uma vida de luxo? Então junte-se ao nosso canal @Crypnoticias no Telegram, onde compartilhamos notícias sobre criptomoedas em português - porque quem precisa de dinheiro de verdade quando você pode nadar em Dogecoins? Venha para o lado selvagem da especulação financeira, onde o único risco é perder tudo... ou ganhar um foguete para a lua! 😂💰🚀

Junte-se ao Telegram


Como pesquisador que estuda o mundo inovador dos contratos inteligentes, não posso enfatizar o suficiente o seu potencial revolucionário. No entanto, é crucial reconhecer que estes acordos autoexecutáveis ​​não são invulneráveis ​​à manipulação por parte de intervenientes nefastos.

A verificação ineficaz de entradas é um problema comum que permite que invasores influenciem a execução de contratos por meio de entradas imprevistas. Além disso, a aplicação incorreta da lógica de negócios pode levar a vulnerabilidades, produzindo resultados inesperados ou lacunas lógicas no contrato. Por último, as chamadas externas mal tratadas, incluindo as ligadas a fontes de dados externas ou a outros contratos, podem representar riscos potenciais.

Os ataques de reentrada representam uma vulnerabilidade em contratos inteligentes onde o contrato faz uma chamada externa para outro contrato antes de finalizar as suas próprias transições de estado. Isto cria uma oportunidade para o contrato chamado interferir no chamador inicial e potencialmente executar algumas operações mais de uma vez. As consequências podem ser ações não intencionais ou até mesmo permitir que invasores manipulem o estado do contrato, levando ao esgotamento dos fundos ou a outros efeitos adversos.

Os desenvolvedores precisam estar atentos ao lidar com contratos externos ou fontes de dados devido a riscos potenciais. Para evitar ações indesejadas e brechas de segurança, eles devem gerenciar cuidadosamente as chamadas externas. Prestar atenção meticulosa às medidas de segurança de contratos inteligentes, como testes completos, é essencial para proteger os contratos contra ameaças emergentes.

O que são ataques de reentrada em contratos inteligentes? “Os ataques de reentrada ocorrem em contratos inteligentes quando o contrato faz chamadas externas para outros contratos ou funções antes de completar suas próprias modificações de estado.”A chamada do contrato A ao contrato B permite que o contrato B retome a sua interação com o contrato A, potencialmente repetindo certas funções e levando a resultados inesperados e muitas vezes prejudiciais. Um exemplo seria quando o contrato A inicia uma transação com o contrato B para transferir fundos, mas posteriormente altera o seu próprio estado durante a interação.A função de retorno de chamada no código do Contrato B poderia dar a um invasor a capacidade de interferir nas transições de estado do Contrato A, acionando repetidamente a função de transferência antes que ela seja totalmente concluída. Essa ação maliciosa pode fazer com que o invasor desvie com êxito os fundos do Contrato A diversas vezes durante uma única transação.Em 2016, houve um incidente notório envolvendo uma Organização Autônoma Descentralizada (DAO) na blockchain Ethereum. Um hacker explorou uma vulnerabilidade no código do contrato inteligente chamada ataque de reentrada, permitindo-lhes drenar repetidamente fundos do DAO. O resultado foi a perda de milhões de dólares em Ether (ETH).Além disso, várias plataformas de finanças descentralizadas (DeFi), como Uniswap, Lendf.Me, BurgerSwap, SURGEBNB, Cream Finance e Siren Protocol, sofreram reveses financeiros substanciais devido a ataques de reentrada. Os danos causados ​​por essas invasões variaram de US$ 3,5 milhões a US$ 25 milhões, enfatizando o risco contínuo de fraquezas de reentrada no setor DeFi.

Como funcionam os ataques de reentrada

Os ataques de reentrada exploram a interação entre sucessivas chamadas de função em contratos inteligentes e transações externas. Ao manipular essas sequências, os invasores podem acionar repetidamente determinadas funções antes de serem concluídas, levando a ações indesejadas, como transferências injustificadas de fundos.

Antes que o contrato alvo termine de processar suas alterações, um contrato intruso consegue enganar o primeiro, fazendo-o executar chamadas de volta para si mesmo. Tais ações podem levar a desistências repetidas ou a comportamentos descuidados.

Um invasor inicia uma transação acionando a função “retirada” no contrato alvo, que envia Ether antes de atualizar o saldo. Simultaneamente, o contrato do invasor inclui uma função de fallback que chama a função “retirada” novamente recursivamente, drenando mais fundos do contrato da vítima antes que o saldo seja atualizado, aproveitando a supervisão do contrato da vítima na atualização dos saldos antes de enviar os fundos.

Vamos detalhar como funcionam os ataques de reentrada usando um exemplo simplificado:

Contrato inteligente com função de “retirada”

Existe um contrato inteligente de carteira digital, gerenciando os saldos dos usuários e apresentando uma função de retirada para processar retiradas de fundos. Os usuários podem utilizar esta função para transferir seus tokens ou Ether do contrato inteligente para suas carteiras individuais.

Interação do usuário e execução de funções

Um usuário inicia um saque de sua carteira digital de forma independente. Ao utilizar a função de retirada, eles inserem a quantia especificada que desejam sacar.

Como pesquisador que estuda a funcionalidade das transações financeiras, posso explicar que quando a função “saque” é iniciada, ela verifica se o usuário possui fundos suficientes para o saque proposto. Se esta condição for atendida, o valor necessário será então transferido para o endereço especificado do usuário.

Chamada externa

Nesta fase, a vulnerabilidade do contrato torna-se evidente. A chamada externa para outro contrato ou conta ocorre antes do saque ser descontado do saldo do usuário.

Chamada recursiva

Se o código de um contrato externo contém uma função que permite invocar o contrato inicial mais uma vez, como uma função de “retirada” redefinida, essa configuração resulta em um loop recursivo. Consequentemente, o método de “retirada” pode ser acionado repetidamente antes de ser concluído.

Exploração de reentrada

Como pesquisador que estuda contratos inteligentes, me deparei com uma vulnerabilidade potencial em algumas implementações de carteiras. Um adversário poderia explorar isso criando um contrato malicioso e aproveitando um loop na funcionalidade da carteira. Veja como isso pode acontecer:

Função de reserva

Em cenários específicos, um invasor pode explorar a função de fallback de um contrato inteligente – um recurso distinto que é acionado quando o contrato é chamado sem quaisquer dados ou Ethereum – para fins maliciosos. Ao ativar continuamente esta função durante o processamento de fundos, ataques de reentrada podem ser executados.

Manipulação estatal e retiradas repetidas

Um invasor pode usar repetidamente a função “retirar” várias vezes em uma única transação porque o contrato de carteira direcionado não atualiza os saldos das contas até depois de processar chamadas externas. Consequentemente, esta vulnerabilidade permite saques não autorizados de fundos, permitindo ao invasor roubar fundos excedentes e infligir perdas financeiras significativas aos usuários do contrato de carteira.

Consequências dos ataques de reentrada Os usuários de contratos inteligentes enfrentam riscos significativos de ataques de reentrada devido ao potencial de perdas monetárias substanciais.Os ataques de reentrada podem resultar em transações não autorizadas, como saques injustificados de dinheiro ou manipulação de fundos, em contratos inteligentes vulneráveis. Os intervenientes maliciosos exploram esta fraqueza ao aceder e drenar repetidamente os recursos do contrato, levando a danos financeiros substanciais para os utilizadores que depositaram ou detiveram activos no âmbito do contrato comprometido.A confiança na segurança e confiabilidade dos contratos inteligentes e da tecnologia blockchain pode ser prejudicada por ataques de reentrada. Estas fraquezas podem levar a danos significativos, como demonstrado por incidentes notáveis ​​como a violação do DAO na rede Ethereum em 2016, que resultou em perdas financeiras substanciais e danos à reputação da comunidade.Como pesquisador que estuda os impactos dos ataques de reentrada em plataformas e projetos de blockchain, descobri que esses ataques podem ter consequências de longo alcance, além das implicações financeiras de curto prazo. Por exemplo, pode ocorrer um escrutínio regulamentar e legal, minando a confiança dos investidores e potencialmente prejudicando a reputação dos ecossistemas de blockchain afetados. Esta percepção de vulnerabilidade pode levar os utilizadores a terem cautela ao envolverem-se com contratos inteligentes ou investirem em aplicações descentralizadas (DApps), atrasando, em última análise, a adopção e expansão da tecnologia blockchain como um todo.

Como mitigar ataques de reentrada

Como analista de contratos, recomendo fortemente a adesão aos procedimentos ideais ao elaborar e examinar contratos inteligentes para minimizar os riscos associados a ataques de reentrada.

Uma abordagem é utilizar bibliotecas de codificação estabelecidas que possuem uma forte reputação de segurança. A razão é que essas bibliotecas foram submetidas a testes e escrutínio rigorosos pela comunidade de desenvolvedores, minimizando o risco de introdução de pontos fracos ou vulnerabilidades em seu código.

Os desenvolvedores também devem empregar medidas de segurança como o design de “verificações-efeitos-interação”, que reduz o risco de ataques de reentrada, garantindo que os ajustes de estado ocorram como uma unidade única e indivisível. Como precaução extra contra esses tipos de fraquezas, os desenvolvedores podem utilizar estruturas de desenvolvimento de contratos inteligentes seguras para reentrada, se existirem.

Em termos mais simples, o uso de estruturas de segurança reduz a necessidade de os desenvolvedores implementarem manualmente medidas de proteção contra ataques de reentrada devido aos recursos de segurança inerentes a essas estruturas. No entanto, é crucial que os desenvolvedores se mantenham informados sobre a evolução das ameaças e vulnerabilidades do blockchain.

2024-05-16 15:45