Blog

Tradução automática · Ler em inglês

Módulo SSO 2 - Vulnerabilidades de Contratos Inteligentes: Uma Análise Profunda dos Ataques de Reentrância

Os contratos inteligentes oferecem transparência, mas acarretam riscos. Este artigo revela vulnerabilidades como a Reentrância, com a perda de 150 milhões de dólares da DAO como caso. O Integer Overflow levou ao revés de 900 milhões de dólares da BeautyChain. A DAOMaker perdeu 4 milhões de dólares devido a falhas de Controlo de Acesso. Os Ataques FlashLoan viram a Harves Finance perder 38 milhões de dólares.

Por Markos Mebellis

Módulo SSO 2 - Vulnerabilidades de Contratos Inteligentes: Uma Análise Profunda dos Ataques de Reentrância
Nesta página

Os contratos inteligentes estão a revolucionar as indústrias globais com a sua eficiência, transparência e características imutáveis. No entanto, o seu design aberto e automatizado também os expõe a riscos. Para maximizar o seu potencial e minimizar as ameaças, é vital compreender as suas vulnerabilidades e possíveis vias de ataque. A criação e manutenção destes contratos exige atenção cuidada e adesão às melhores práticas. Este artigo aprofunda vulnerabilidades comuns, ilustrando-as com casos reais para melhorar a compreensão. Vejamos o seguinte artigo, cortesia da Salus Security.

Vulnerabilidades Principais:

**Reentrância:** Aqui, os atacantes exploram uma lacuna, reentrando em funções antes de operações-chave serem concluídas ou valores serem atualizados.

Reentrância de Função Única: Isto ocorre quando um contrato interage com um contrato malicioso, permitindo que este último reentre numa função. Por exemplo, contratos maliciosos podem reentrar continuamente na função 'withdrawBalance', drenando mais ether antes de os saldos serem atualizados.

Ataques Notáveis:

  • A DAO (2016): Após angariar 150 milhões de dólares, foi hackeada devido a vulnerabilidades de codificação. Isto levou a uma divisão na rede Ethereum.
  • PolyDex (2021): Perdeu 500 mil dólares devido a um ataque de reentrância no Contrato Inteligente PLX Locker.
  • Bacon Protocol (2022): Sofreu uma perda de 1 milhão de dólares devido a um bug de reentrância na função lend().
  • Lendf.Me (2020): Perdeu aproximadamente 24,7 milhões de dólares em várias criptomoedas.

**Reentrância Cruzada entre Funções:** Surge de estados partilhados entre diferentes funções e fraca proteção contra reentrada. O exemplo 'balances' acima indica que, apesar de 'withdrawAll' ter proteção, os atacantes ainda podem explorar a função 'transfer'.

Incidentes Famosos:

  • DFX Finance (2022): Perdeu mais de 7 milhões de dólares devido a um ataque que explorou uma função sem proteção contra reentrância.
  • Hundred Finance (2022): Perdeu cerca de 6,5 milhões de dólares após um ataque de reentrância explorar a função borrowFresh.
  • Fei Protocol (2022): Perdeu cerca de 80 milhões de dólares num ataque que aproveitou uma falha de Reentrância.

**Reentrância Cruzada entre Contratos:** Resulta de estados partilhados entre diferentes contratos e sequências erradas de modificação de variáveis. Mesmo que as funções tenham proteção, outras funções, como 'burnAccount', ainda podem ser exploradas.

Ataques Proeminentes:

  • Rari Capital (2021): Perdeu aproximadamente 10 milhões de dólares (~2600 ETH) em menos de uma hora.
  • ValueDefi (2021): Perdeu 5345,314 WBNB devido a cálculos de quotas inválidos, que dependiam de dados externos.

Reentrância Apenas de Leitura:

A reentrância apenas de leitura explora uma função que, embora não altere o estado do contrato, ainda pode produzir resultados erróneos quando o estado não é consistente.

Ataques Notáveis:

  • QuickSwap (2022): Os exploradores usaram indevidamente um flash loan para alterar o preço à vista do ativo, defraudando 138 ETH e 700 tokens MATIC. Isto foi possível devido a uma falha no oráculo Curve LP.
  • dForce (2023): Um bug de reentrância apenas de leitura estava no código que acede a oráculos de preços nas cadeias Arbitrum e Optimism com a Curve Finance.
  • Sentimente (2023): Um ataque, explorando uma falha de reentrância apenas de leitura, levou a um roubo de 1 milhão de dólares. Felizmente, 90% foi devolvido pelo autor.
  • Sturdy (2023): Perdeu aproximadamente 442 ETH devido a um problema de reentrância apenas de leitura da Balancer, em que o preço do B-stETH-STABLE foi adulterado.

Prevenção da Vulnerabilidade de Reentrância:

  1. Cumprir sempre o padrão check-effect-interaction.
  2. Empregar proteção contra reentrada para todas as operações sensíveis.
  3. Tratar meticulosamente cada chamada externa.

Integer Overflow:

Quando os cálculos ultrapassam os limites, ocorre overflow, levando frequentemente a valores minúsculos ou gigantescos.

Ataques Ilustrativos:

  • BeautyChain (2018): Os atacantes obtiveram 10^58 BECs através de um integer overflow, despejando uns impressionantes 900 milhões de dólares.
  • Poolz (2023): Resultou numa perda de cerca de 665 000 dólares nas cadeias Ethereum, Binance e Polygon.

Contramedidas contra Integer Overflow:

  1. Utilizar métodos de cálculo seguros como a biblioteca safeMath.
  2. Priorizar a verificação de limites para assegurar que os resultados permanecem dentro do intervalo.
  3. Adotar a versão 0.8.0 ou posterior do compilador Solidity para deteção de overflow incorporada.

Controlo de Acesso:
As vulnerabilidades de controlo de acesso surgem da ausência de restrições de acesso rigorosas em funções que tratam operações cruciais.

  • Ataques Proeminentes:
  • DAOMaker (2021): Uns impressionantes ~4 milhões de dólares foram drenados após a função init ter ficado vulnerável.
  • GymNetwork (2022): Os exploradores aproveitaram uma falha de autenticação em depositFromOtherContract(), facilitando o aumento ilícito de saldos sem qualquer pagamento real. A perda? Cerca de 2 475,91 WBNB.
  • Tempdao (2023): Uma abordagem negligente ao controlo de acesso da função migrateStake levou a uma perda superior a 2,34 milhões de dólares.

Vulnerabilidade de Controlo de Acesso

  • Descrição: Vulnerabilidades que surgem devido a mecanismos de restrição inadequados que regem o acesso e privilégios a operações específicas dentro de um sistema.

Medidas de Prevenção:

  1. Verificação Estrita de Permissões: Aplicar sempre protocolos de permissão rigorosos para funções, especialmente as que tratam operações sensíveis.
  2. Mecanismo Multiassinatura: Para tarefas que exigem decisão conjunta, usar protocolos multiassinatura que requerem múltiplas aprovações antes de executar operações sensíveis.

Vetores de Ataque Comuns

  • Descrição: Vários métodos ou canais através dos quais os atacantes exploram vulnerabilidades num sistema, principalmente em contratos inteligentes.

Exemplos notáveis:

  • Ataques FlashLoan: Explora a funcionalidade de empréstimo instantâneo dos sistemas de finanças descentralizadas para executar atividades maliciosas.
  • Front-Running: Os atacantes obtêm conhecimento de uma transação pendente de outro utilizador e agem sobre ela oferecendo uma taxa de gás mais elevada.

Ataque FlashLoan

  • Descrição: Embora não seja intrinsecamente um ataque, o FlashLoan é uma funcionalidade DeFi que permite aos utilizadores pedir emprestadas somas substanciais instantaneamente sem garantia. Tem sido explorado devido a falhas lógicas nas interações e relações entre contratos.

Ataques notáveis:

  1. Harves Finance (2020.10.26): Resultou numa perda de 38 milhões de dólares.
  2. InverseFinance (2022.6.16): Levou a uma perda de 53,2445 WBTC e 99.976,29 USDT.
  3. NewFreeDAO (2022.9.8): Drenados 4.481 WBNB, equivalente a cerca de 1,25 milhões de dólares.
  4. Lodestar (2022.12.11): Explorado através de manipulação de preços de oráculos.
  5. 0vix (2023.4.28): Resultou numa perda de 2 milhões de dólares na chain Polygon.

Recomendações de Prevenção:

  1. Reconhecer as características de Flashloan durante o desenvolvimento do projeto.
  2. Para uma determinação precisa do preço, utilize médias ponderadas no tempo ou múltiplos oráculos.

Front-running

  • Descrição: Um atacante obtém conhecimento da transação de outro utilizador a partir do memPool e aproveita-se disso oferecendo uma taxa de gás mais elevada.

Ataques notáveis:

  1. Sushi Badger Digg (2021.1.25): Resultou numa perda de 81.68 ETH.
  2. Pool Sushiswap Ape-ETH (2022.5.17): O atacante lucrou aproximadamente 0.3 ETH.
  3. Uniswap (2023.4.2): Causou uma perda de cerca de 25 milhões de dólares através de um ataque sandwich.

Recomendações de prevenção:

  1. Use proteção contra slippage ao negociar.
  2. Execute negociações fora dos horários de pico, especialmente em mercados voláteis.
  3. Utilize o FlashBot rpc da 1inch para enviar negociações diretamente aos mineradores, contornando assim o memPool.

Resumo

Parabéns! Concluiu o Módulo 2 - Vulnerabilidades de Contratos Inteligentes: Uma Análise Aprofundada de Ataques de Reentrância e Exploits Comuns

Vamos rever o que aprendeste:

Vulnerabilidades de reentrância - Os atacantes exploram falhas, reentrando em funções antes de estas terminarem por completo.

  • Reentrância numa única função: Um contrato malicioso reentra numa função de outro contrato.
  • Reentrância entre funções: Os estados partilhados entre diferentes funções são explorados devido a uma proteção de reentrada deficiente.
  • Reentrância entre contratos: Explora estados partilhados entre diferentes contratos.
  • Reentrância só de leitura: Explora uma função que produz resultados errados quando o estado não é consistente.

Integer Overflow - Cálculos que ultrapassam os limites definidos, resultando em valores extremos.

Vulnerabilidades de controlo de acesso - Resultam da ausência de restrições de acesso rigorosas em funções essenciais.

Vetores de ataque comuns - Métodos através dos quais os atacantes exploram vulnerabilidades do sistema.

**Ataque FlashLoan **- Uma funcionalidade DeFi que permite empréstimos instantâneos de grande dimensão sem garantia, mas é explorada devido a falhas lógicas.

Ataque de front-running- Os atacantes tomam conhecimento de transações pendentes e aproveitam ao oferecer taxas de gas mais elevadas.

Este artigo foi trazido até si por:

Resumo — ilustração