Ataques de negação de serviço em contratos inteligentes: como consertar e evitar (um guia especializado) PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Ataques de negação de serviço em contratos inteligentes: como corrigir e evitar (um guia especializado)

Tempo de leitura: 6 minutos

Já visitou um site que demorou muito para carregar e descobriu que não pode ser aberto no momento? Isso é simplesmente tudo sobre o efeito dos ataques de negação de serviço. 

Os ataques de negação de serviço (DoS) são uma das muitas vulnerabilidades que são mais observadas ao auditar contratos inteligentes. Este blog tem como objetivo desvendar os meandros do ataque DoS - o que é, seu impacto, tipos e muito mais para adicionar.

Vamos entrar rapidamente e explorar todos eles. 

O que é um ataque DoS?

O ataque DoS pretende interromper os recursos de processamento de uma rede, servidor ou aplicativo, impedindo a aceitação de solicitações de usuários legítimos. Nisso, o invasor sobrecarrega a rede enviando mais tráfego que esgota a memória e a largura de banda dos servidores. 

Por causa do imenso potencial que o blockchain possui, eles são o principal alvo dos ataques DoS para roubar as riquezas. As criptomoedas mais famosas, como Bitcoin, Ethereum, etc., também sofreram ataques DoS. 

Negação Distribuída de Serviço (DDoS)

Distributed Denial of Service (DDoS) é um ataque DoS envolvendo o invasor controlando vários dispositivos para lançar um ataque no nó de destino.

O invasor observa o nodo alvo e canaliza os múltiplos dispositivos sob seu controle para enviar uma grande quantidade de informações inundando o nodo alvo. Isso faz com que o destino falhe e não consiga cumprir a tarefa especificada.  

Alvos de ataques DoS no ecossistema Blockchain

A partir das gravações dos eventos anteriores de ataques DoS, cada parte do ecossistema blockchain é vulnerável a ataques DoS. E para citar alguns, 

Carteiras de criptomoedas: Como em qualquer carteira, a carteira de criptomoedas é usada para armazenar, enviar ou receber criptomoedas. E essas carteiras online usam contratos inteligentes, propensos a ataques DoS que dificultam seus serviços e interação com Dapps. 

Serviços de troca de criptomoedas: A plataforma online em que as criptomoedas são negociadas e a troca ocorre entre usuários. Eles são os principais alvos para hackers realizarem ataques DoS que causam a indisponibilidade da plataforma e seus serviços. 

Ex: Plataforma de câmbio Bitcoin, a Bifinex já sofreu ataques DDoS várias vezes. 

Pools de memória (transação): As transações no blockchain precisam ser validadas antes de serem adicionadas aos blocos. Até então, as solicitações de transação são armazenadas no mempool, que é como um repositório de transações não confirmadas aguardando para serem coletadas por um minerador. 

A transação com uma taxa alta provavelmente será escolhida pelo minerador. Portanto, inundar o mempool com muitas transações de pequenas taxas faz com que o usuário pague altas taxas para que sua transação seja processada. Assim, o ataque DoS fez sua mágica ao aumentar a taxa de processamento. 

Participantes do consenso: Eles são os jogadores que resolvem a lógica e decidem os blocos a serem adicionados ao blockchain. Infligir ataques DoS ao líder de consenso interrompe todo o sistema. 

Serviços de mixagem: Ele emprega um protocolo para que os usuários realizem transações anonimamente. Eles sofrem ataques DoS por vários meios, como solicitações excessivas de participação ao pool de mixagem, entrada inconsistente para o shuffle, etc. 

Contratos inteligentes: O contrato inteligente é o protocolo subjacente por trás de cada transação no blockchain. Ataques DoS em contratos inteligentes podem travar o nó que interrompe o funcionamento dos Dapps hospedados por ele.

Os ataques DoS são executados neles de várias maneiras possíveis, elaboradas na seção a seguir.

Analisando tipos de ataques DoS de contrato inteligente 

A vulnerabilidade DoS em contratos inteligentes resulta em uso ilimitado de recursos ou manipulação do contrato. Isso leva à suspensão na execução das atividades normais ou interrompe e colapsa a lógica do contrato. 

Abaixo está a classificação de vários ataques DoS em contratos inteligentes

Reverter DoS inesperado

Para estudar esse ataque DoS em contratos inteligentes, vamos usar um contrato de leilão como exemplo. O contrato de leilão é atualizado com cada lance mais alto recebido e retorna o valor do lance do licitante anterior, pois é menor que o lance atual.

contract Auction {
    address frontRunner;
    uint256 highestBid;

    function bid() public payable {
        require(msg.value > highestBid, "Need to be higher than highest bid");
        // Refund the old leader, if it fails then revert   
        require(payable(frontRunner).send(highestBid), "Failed to send Ether");
 
        frontRunner = msg.sender;
        highestBid = msg.value;
    }
}

O contrato do invasor é inicializado com o contrato de leilão no construtor, que obtém acesso ao contrato de leilão. Nesse caso, ao chamar a função 'attack()', o invasor bloqueia o valor e, com isso, não retorna o valor do lance para o invasor, mesmo recebendo um lance maior que esse. 

import "./Auction.sol";   
contract Attacker{
    Auction auction;

    constructor(Auction _auctionaddr){
        auction = Auction(_auctionaddr);
    }

    function attack (){
        auction.bid{value: msg.value}();
    }

}

É porque o contrato 'atacante' não inclui nenhuma função 'receive()' ou fallback para reembolsar o Ether, resultando na reversão inesperada. Isso faz com que o contrato do atacante seja sempre o maior lance. 

Bloquear Limite de Gás DoS 

O bloco tem um limite máximo de gás a ser gasto que é proporcional à quantidade de trabalho computacional a ser feito. No caso de exceder o limite de gás, isso leva a dois tipos de ataques DoS.

Limite de Gás DoS - Operação de Contrato Sem Limites

Há um limite de gás definido e, se as transações atingirem um limite de gás mais alto do que o limite definido, resultará em falha na transação. 

Torna-se ainda pior quando o atacante manipula o gás necessário. É quando o invasor adiciona alguns endereços para um reembolso muito pequeno. Cada reembolso custa uma taxa de gás; assim, o custo do gás ultrapassa o limite que impede as transações de reembolso. 

struct Payee {
    address addr;
    uint256 value;
}

Payee[] payees;
uint256 nextPayeeIndex;

function payOut() {
    uint256 i = nextPayeeIndex;
    while (i < payees.length && msg.gas > 200000) {
      payees[i].addr.send(payees[i].value);
      i++;
    }
    nextPayeeIndex = i;
}

Portanto, as etapas necessárias devem ser consideradas ao implementar um loop em uma matriz. 

Recheio de bloco

O invasor inicia esse ataque para impedir que transações sejam adicionadas aos blocos enviando transações computacionalmente intensivas com altos preços de gás. Várias transações são emitidas de forma semelhante para consumir todo o limite de gás. 

Ao pagar a alta taxa de gás, o invasor garante que apenas as transações pretendidas sejam adicionadas aos blocos, deixando de fora o restante. 

Ação do proprietário

Cada contrato tem um endereço de proprietário que tem autoridade para abrir ou suspender transações. Toda a operação depende do endereço do proprietário e, portanto, se for perdido, o usuário não poderá enviar tokens e o funcionamento do contrato entrará em colapso.

Impacto do ataque DoS

O preenchimento de blocos é um dos muitos impactos que impedem que transações legítimas sejam adicionadas aos blocos. No entanto, existem vários outros impactos dos ataques DoS. 

Razão inchada: O livro blockchain é onde as transações são registradas permanentemente. Os nós blockchain armazenam uma cópia das transações para verificar se há gastos duplos. Um ataque DoS pode inchar o livro-razão com transações de spam.

Tráfego de rede: Conhecemos as funções do blockchain com base no modo peer-to-peer. Cada nó no blockchain recebe uma cópia da transação. Uma inundação de DoS pode resultar em um grande volume de transações, consumindo a largura de banda da rede. 

Falhas de nós: O Blockchain funciona nos nós que requerem o suporte do software para lidar com grandes volumes de dados. Durante a inundação de transações, os nós podem ficar sem memória, interrompendo as operações.

Falha de software: Como discutimos, o mempool ou os blocos vêm com certos limites na memória alocada a eles. O software recebe, processa e armazena transações dentro do limite definido. Quando as transações de entrada superam os limites internos, o software trava.  

Restringir contratos inteligentes de ataques DoS 

A partir da análise de ataques DoS, as seguintes formas podem ser empregadas para mitigar o ataque. 

Enigmas: Os servidores podem gerar quebra-cabeças como quebra-cabeças de memória, quebra-cabeças de bloqueio de tempo, quebra-cabeças vinculados à CPU, etc. Para que um usuário tenha acesso a um serviço, os quebra-cabeças precisam ser resolvidos, o que combate os ataques de spam.

Abordagem baseada em taxas: Uma taxa extra pode ser imposta ao blockchain, como taxas de mineração para pools de mineração, taxas de transação, etc. Isso torna o hack DoS caro para os invasores, derrubando esses ataques. 

Nota final

Uma auditoria de contrato inteligente realizada em QuillAuditorias olha para as vulnerabilidades potenciais que se encontram na codificação. Alguns deles incluem vulnerabilidade de reentrada, colisão de armazenamento, ataque de aleatoriedade, negação de serviço e assim por diante. 

Isto significa claramente o smart contracts são exaustivamente testados para estarem livres de ameaças de ataque de negação de serviço. Isso garante que seu projeto esteja protegido contra possíveis vulnerabilidades do espaço Web3.

Fique atento ao nosso canal Telegram para obter as informações mais recentes sobre nossos serviços: https://t.me/quillhash

13 Visualizações

Carimbo de hora:

Mais de Quilhash