Este artigo é uma contribuição da comunidade. O autor é Minzhi He, auditor da CertiK.

As opiniões expressas neste artigo são de responsabilidade do colaborador/autor e não refletem necessariamente as opiniões da Binance Academy.

Resumo

As pontes Blockchain são fundamentais para alcançar a interoperabilidade no espaço blockchain. Portanto, a segurança da tecnologia de ponte entre cadeias é crucial. Algumas vulnerabilidades comuns de segurança da ponte blockchain incluem verificação insuficiente dentro e fora da cadeia, manuseio inadequado de tokens nativos e configuração incorreta. Para garantir que a lógica de verificação seja correta, é recomendável testar a ponte entre cadeias contra todos os vetores de ataque possíveis.

Introdução

Uma ponte blockchain é um protocolo que conecta duas blockchains e permite que elas interajam. Através da ponte blockchain, se os usuários quiserem participar de atividades DeFi na rede Ethereum, eles só precisam manter o Bitcoin e não precisam vendê-lo para atingir seus objetivos.​

A ponte Blockchain é a base para a interoperabilidade no campo blockchain. Eles usam várias verificações dentro e fora da cadeia para funcionar, portanto, também pode haver diferentes vulnerabilidades de segurança.

Por que a segurança das pontes blockchain é crítica?

As pontes Blockchain normalmente contêm tokens que os usuários desejam transferir de uma cadeia para outra. As pontes Blockchain são geralmente implantadas na forma de contratos inteligentes. À medida que as transferências entre cadeias continuam a se acumular, um grande número de tokens será mantido na ponte. Essa enorme riqueza os tornará um alvo cobiçado pelos hackers.

Além disso, a superfície de ataque das pontes blockchain tende a ser grande devido aos muitos componentes envolvidos. Portanto, os criminosos têm fortes incentivos para visar aplicações entre cadeias, a fim de apreender grandes quantidades de fundos.

De acordo com estimativas da CertiK, os ataques às pontes blockchain causaram mais de US$ 1,3 bilhão em perdas em 2022, representando 36% das perdas totais naquele ano.

Vulnerabilidades comuns de segurança de ponte cruzada

Para aumentar a segurança de uma ponte blockchain, é importante compreender as vulnerabilidades comuns de segurança da ponte entre cadeias e testar a ponte blockchain antes de lançá-la. Essas vulnerabilidades vêm principalmente dos quatro aspectos a seguir:

Verificação insuficiente na cadeia

Para pontes blockchain simples, especialmente aquelas projetadas para um dApp específico, geralmente há apenas um nível mínimo de verificação na cadeia. Essas pontes contam com um back-end centralizado para realizar operações básicas, como cunhagem, queima e transferência de tokens, com todas as verificações ocorrendo fora da cadeia.

Enquanto outros tipos de pontes usam contratos inteligentes para validar mensagens e verificá-las na cadeia. Nesse caso, quando um usuário deposita fundos na cadeia, o contrato inteligente gera uma mensagem assinada e retorna a assinatura na transação. Esta assinatura servirá como comprovante de depósito e para verificar a solicitação de saque do usuário em outra rede. Este processo deve evitar vários ataques à segurança, incluindo ataques de repetição e registros de recarga falsificados.

No entanto, se houver uma vulnerabilidade no processo de verificação em cadeia, um ataque poderá causar danos graves. Por exemplo, se o blockchain usar árvores Merkle para verificar registros de transações, um invasor poderá gerar provas falsas. Isso significa que se o processo de verificação for vulnerável, um invasor poderá ignorar a verificação de prova e cunhar novos tokens em sua conta.

Algumas pontes blockchain implementam o conceito de “tokens empacotados”. Por exemplo, quando um usuário transfere DAI do Ethereum para a Cadeia BNB, seu DAI é retirado do contrato Ethereum e uma quantidade igual de DAI empacotado é emitida na Cadeia BNB.

No entanto, se esta transação não for devidamente validada, um invasor pode implantar um contrato malicioso que manipula essa funcionalidade para rotear tokens agrupados da ponte para o endereço errado.​

O invasor também precisa que a vítima aprove o contrato da ponte entre cadeias antes de usar a função “TransferFrom” para transferir tokens, retirando assim os ativos do contrato da ponte entre cadeias.

Mas a parte complicada é que muitas pontes entre cadeias exigem que os usuários do dApp aprovem uma quantidade ilimitada de tokens. Essa prática é muito comum, o que pode reduzir as taxas de gás, mas permite que contratos inteligentes acessem uma quantidade ilimitada de tokens da carteira do usuário. o que trará riscos adicionais. Os invasores explorariam essas subverificações e superaprovações para transferir tokens de outros usuários para si próprios.

Verificação fora da cadeia insuficiente

Em alguns sistemas de ponte entre cadeias, os servidores backend fora da cadeia desempenham um papel crucial na verificação da legitimidade das mensagens enviadas da cadeia de blocos. Nesse caso, precisamos focar na verificação da transação de recarga.

Uma ponte blockchain com verificação fora da cadeia funciona da seguinte forma:

  1. Os usuários interagem com o dApp e depositam tokens em contratos inteligentes na cadeia de origem.

  2. O dApp então envia o hash da transação de depósito para o servidor back-end por meio da API.

  3. O hash da transação precisa ser verificado várias vezes pelo servidor. Se for considerado legítimo, o signatário assina uma mensagem e envia a assinatura de volta à interface do usuário por meio da API.

  4. Assim que a assinatura é recebida, o dApp a verifica e permite ao usuário retirar tokens da cadeia de destino.

O servidor back-end deve garantir que as transações de recarga que ele administra são reais e não forjadas. Este servidor backend determina se um usuário pode retirar tokens da cadeia de destino, tornando-a o primeiro alvo de ataques.

O servidor backend precisa verificar a estrutura do evento de início da transação e o endereço do contrato que iniciou o evento. Se este último for ignorado, os invasores poderão implantar contratos maliciosos para forjar eventos de recarga com a mesma estrutura dos eventos de recarga legítimos.

Se o servidor backend não verificar qual endereço iniciou o evento, ele assumirá que é uma transação válida e assinará a mensagem. Um invasor pode então enviar o hash da transação para o servidor back-end, ignorando a verificação e permitindo retirar tokens da cadeia de destino.

Tratamento inadequado de token nativo

As pontes entre cadeias adotam uma abordagem diferente para tokens nativos e tokens utilitários. Por exemplo, na rede Ethereum, o token nativo é ETH, e a maioria dos tokens utilitários está em conformidade com o padrão ERC-20.

Se um usuário pretende transferir seu ETH para outra rede, ele deve primeiro depositá-lo no contrato de ponte entre cadeias. Para fazer isso, o usuário simplesmente anexa o ETH à transação e pode recuperar a quantidade de ETH lendo o campo da transação “msg.value”.

Depositar tokens ERC-20 é muito diferente de depositar ETH. Para depositar tokens ERC-20, os usuários devem primeiro permitir que o contrato de ponte entre cadeias use seus tokens. Depois de aprovar e depositar os tokens no contrato de ponte entre cadeias, o contrato usará a função “burnFrom()” para destruir os tokens do usuário, ou a função “transferFrom()” para transferir os tokens do usuário para o contrato.

Para distinguir qual operação é, você pode usar instruções if-else na mesma função. Ou crie duas funções separadas para lidar com cada cenário. Devido aos diferentes métodos de processamento, se um usuário tentar depositar ETH usando a função de depósito ERC-20, o ETH poderá ser perdido.

Ao processar solicitações de depósito ERC-20, os usuários geralmente fornecem o endereço do token como parâmetro de entrada para a função de depósito. Isto representa um risco significativo, uma vez que podem ocorrer chamadas externas não confiáveis ​​durante as transações. Usar uma lista de permissões para incluir apenas tokens suportados por uma ponte entre cadeias é uma prática comum para minimizar o risco. Somente endereços na lista de permissões são passados ​​como parâmetros. Isso evita chamadas externas porque a equipe do projeto filtrou os endereços dos tokens.

No entanto, também há um problema quando a ponte entre cadeias lida com a transferência entre cadeias de tokens nativos, porque os tokens nativos não possuem endereços. Os tokens nativos podem ser representados por um endereço especial, o "endereço zero" (0x000... 0). Mas há um problema com isso: se a lógica de verificação da lista de permissões não for implementada corretamente, passar um endereço zero para a função pode ignorar a verificação da lista de permissões.

Quando o contrato de ponte entre cadeias chama "TransferFrom" para transferir ativos do usuário para o contrato, a chamada externa para o endereço zero retornará falso porque a função "transferFrom" não está implementada no endereço zero. Porém, se o contrato não tratar o valor de retorno corretamente, a transação ainda poderá continuar a ocorrer. Isso cria uma oportunidade para um invasor executar uma transação sem transferir nenhum token para o contrato.

Erro de configuração

Na maioria das pontes blockchain, há uma função privilegiada responsável por colocar tokens e endereços na lista branca ou na lista negra, atribuir ou alterar signatários e outras configurações importantes. É fundamental garantir que todas as configurações sejam precisas, pois descuidos aparentemente triviais podem causar danos significativos.

Na verdade, houve incidentes em que os invasores contornaram com êxito a verificação do registro de transferência devido a configurações incorretas. A equipe do projeto implementou uma atualização de protocolo dias antes do hack em que uma determinada variável foi alterada. Esta variável é o valor padrão usado para representar mensagens confiáveis. Essa mudança faz com que todas as mensagens sejam automaticamente consideradas autenticadas, permitindo assim que um invasor envie uma mensagem aleatória e passe na autenticação.

Como melhorar a segurança das pontes entre cadeias

As quatro vulnerabilidades comuns de pontes entre cadeias descritas acima demonstram que os desafios enfrentados pela segurança em um ecossistema blockchain conectado não podem ser subestimados. Para lidar com essas vulnerabilidades, precisamos considerar “de acordo com as condições locais”. Nenhum método pode ser uma panacéia para lidar com todas as vulnerabilidades.

Por exemplo, uma vez que cada ponte de cadeia cruzada tem requisitos de verificação únicos, seria difícil garantir que o processo de verificação esteja isento de erros simplesmente fornecendo orientações gerais. A maneira mais eficaz de evitar o desvio de verificação é testar minuciosamente a ponte entre cadeias contra todos os vetores de ataque possíveis e garantir que a lógica de verificação seja razoável.

Em suma, devem ser realizados testes rigorosos contra ataques potenciais, com especial atenção às vulnerabilidades de segurança mais comuns em pontes entre cadeias.

Conclusão

Devido ao grande volume de fundos, as pontes entre cadeias têm sido alvo de ataques há muito tempo. Os construtores podem fortalecer a segurança das pontes entre cadeias realizando testes abrangentes de pré-implantação e incorporando auditorias de terceiros, reduzindo assim o risco de hacks catastróficos que surgiram nas pontes entre cadeias nos últimos anos. As pontes entre cadeias são cruciais num mundo multi-cadeias, mas a segurança deve ser uma consideração primordial ao projetar e construir uma infraestrutura Web3 eficaz.

Leitura adicional

O que é uma ponte blockchain?

O que é interoperabilidade entre cadeias?

Três pontes populares de criptomoeda e como elas funcionam

O que é um token empacotado?

Isenção de responsabilidade e aviso de risco: O conteúdo deste artigo são fatos e destinam-se apenas a informações gerais e fins educacionais e não constituem qualquer representação ou garantia. Este artigo não deve ser interpretado como aconselhamento financeiro, jurídico ou outro conselho profissional e não é uma recomendação para que você compre qualquer produto ou serviço específico. Você deve procurar aconselhamento de consultores profissionais apropriados. Se este artigo foi fornecido por um contribuidor terceirizado, observe que as opiniões expressas neste artigo pertencem ao contribuidor terceirizado e não refletem necessariamente as opiniões da Binance Academy. Para obter mais informações, clique aqui para ler nosso aviso completo. Os preços dos ativos digitais podem flutuar. O valor do seu investimento pode cair ou subir e você pode não recuperar o principal investido. Você é o único responsável por suas próprias decisões de investimento e a Binance Academy não é responsável por quaisquer perdas que você possa sofrer. Este artigo não constitui aconselhamento financeiro, jurídico ou outro aconselhamento profissional. Para obter mais informações, consulte nossos Termos de Uso e Aviso de Risco.