Por que é simples drenar a carteira Ethereum, ao contrário da carteira Cardano?
No domínio dos aplicativos descentralizados (DApps), os usuários podem, infelizmente, ser vítimas de atores mal-intencionados. Esses malfeitores podem enganar os usuários para que assinem transações que resultem na drenagem de ativos de suas carteiras. Este problema é particularmente prevalente no ecossistema Ethereum e não se deve apenas ao seu tamanho maior. No Ethereum, os usuários geralmente pré-autorizam os DApps para transferir qualquer quantidade de ativos de suas carteiras no futuro. Embora esse recurso possa parecer conveniente, ele é frequentemente explorado por entidades maliciosas, comumente chamadas de “drenadores de Ethereum”. Tais incidentes são menos comuns no ecossistema Cardano. No artigo, explicaremos por que isso acontece.
A pré-aprovação de futuras transferências de ativos é perigosa
Idealmente, um contrato inteligente não deve ter um proprietário ou qualquer mecanismo que permita ao proprietário transferir ativos do contrato inteligente para um endereço externo. Este atributo confere aos contratos inteligentes um certo grau de confiança. Os usuários podem delegar seus ativos com segurança a um contrato inteligente (confiar no código, não nas pessoas), sabendo que nenhum terceiro pode manipular esses ativos. Consequentemente, os usuários não precisam confiar na equipe que implantou o contrato inteligente.
No entanto, é possível incorporar uma função de transferência no contrato inteligente, que permite ao proprietário transferir tokens do contrato inteligente para outro endereço.
Esse recurso está normalmente associado a contratos inteligentes maliciosos.
Os drenadores Ethereum contêm uma função ‘transferFrom’ que é usada para mover ativos digitais da carteira do usuário para o contrato inteligente. Em seguida, uma função de “transferência” é usada para transferir ativos para o endereço do invasor.
A função ‘transferFrom’ é comumente usada por DApps e faz parte do padrão de token ERC-20. Ele permite que um contrato inteligente transfira uma certa quantidade de tokens de um endereço para outro, desde que o endereço de origem tenha aprovado o contrato inteligente para fazê-lo. Mais sobre a aprovação posteriormente.
Uma vez que os ativos sejam controlados (de propriedade) pelo contrato inteligente, a função de “transferência” pode ser usada para movê-los do contrato inteligente para outro endereço.
A função de ‘transferência’ também faz parte do padrão de token ERC-20. É usado para transferir tokens diretamente do endereço do chamador da função para outro endereço.
No contexto de um contrato inteligente, se estiver presente uma função de transferência que permita ao proprietário do contrato transferir tokens do contrato para qualquer endereço externo, isso poderá ser potencialmente um sinal de um contrato malicioso. O endereço pode ser controlado pelo invasor.
Os drenadores de carteira Ethereum abusam da função ‘aprovar’.
Ao interagir com um contrato inteligente no ecossistema Ethereum, os usuários muitas vezes precisam aprovar o contrato para gastar uma certa quantidade de tokens de sua carteira. Isso é conhecido como transação de “aprovação de token”.
Normalmente, para casos de uso não maliciosos, isso é útil. Os usuários podem aprovar um DApp para comprar ativos a um preço-alvo sem retirar ativos da carteira antecipadamente. A transferência deve acontecer no momento apropriado.
Depois que a transação de ‘aprovação’ for assinada, o contrato inteligente pode chamar a função ‘transferFrom’ a qualquer momento, sem exigir quaisquer aprovações ou ações adicionais do usuário. A função ‘transferFrom’ é uma transação em cadeia e requer taxas GAS, que são pagas automaticamente na carteira do usuário.
Tanto as transações de ‘aprovação’ quanto de ‘transferência de’ exigem taxas de GAS.
Os invasores geralmente enganam os usuários para que chamem a função de aprovação de um contrato malicioso, permitindo que ele use posteriormente transferFrom para drenar tokens da carteira do usuário. A função de transferência poderia ser usada de forma semelhante se o contrato fosse projetado para aceitar e manter tokens.
Como funciona a drenagem de uma carteira, passo a passo
O ataque começa com engenharia social. O invasor precisa criar um site de phishing convincente ou um DApp malicioso. Freqüentemente, eles pagam ao Google para mostrar aos usuários seu site fraudulento como o primeiro link. Há muitas maneiras de enganar os usuários e atraí-los para uma armadilha.
Um DApp malicioso pode ser uma versão falsa de um serviço DeFi popular (DEX ou plataforma de empréstimo) ou um novo DApp que promete altos retornos. Também pode ser atraente cunhar uma série NFT, apostar tokens para produção agrícola ou participar de uma venda de tokens.
O usuário visita o site malicioso ou DApp e decide interagir com ele.
Para interagir com o DApp, o usuário é solicitado a conectar sua carteira Ethereum. Assim que a carteira estiver conectada, o DApp pede ao usuário para assinar uma transação de “aprovação”. O usuário é solicitado a aprovar o gasto de uma grande quantidade de tokens, geralmente o valor máximo possível.
Os usuários podem não achar isso suspeito, pois normalmente assinam transações de “aprovação” no caso de DApps não maliciosos. Eles podem não prestar atenção a detalhes importantes.
Um usuário confirma a transação em sua carteira, sem perceber que deu permissão ao contrato inteligente malicioso para gastar todos os seus tokens.
Assim que a transação for confirmada, o contrato inteligente malicioso pode chamar a função transfer (ou transferFrom) a qualquer momento para drenar todos os tokens aprovados da carteira do usuário.
É possível revogar a aprovação dada a um contrato inteligente Ethereum. Esse processo costuma ser chamado de revogação de permissões de token ou revogação de aprovações de token. A revogação de uma aprovação é uma transação on-chain, portanto os usuários precisarão pagar taxas de GAS. Alguns usuários podem hesitar em revogar as aprovações de tokens devido às taxas associadas.
Na maioria dos casos, porém, os invasores agem rapidamente, para que os usuários não tenham tempo de perceber que cometeram um erro.
Por que não é possível esvaziar uma carteira Cardano tão facilmente?
Nos ecossistemas Cardano e Ethereum, existe o risco de um invasor induzi-lo a assinar uma transação que transfira mais ativos do que você pretendia.
Ao contrário da Ethereum, os contratos inteligentes da Cardano não possuem um mecanismo de aprovação equivalente. Isso significa que um contrato inteligente não pode ter acesso ilimitado à carteira de um usuário. Como resultado, um contrato inteligente malicioso não pode esgotar a carteira de um usuário sem que o usuário assine explicitamente uma transação para cada transferência.
Os contratos inteligentes em Cardano são essencialmente scripts validadores. Esses scripts são executados automaticamente por cada nó Cardano ao validar uma transação que tenta movimentar fundos do endereço do script.
A diferença entre o modelo UTxO da Cardano e o modelo baseado em contas da Ethereum é significativa quando se trata da possibilidade de esgotar carteiras.
Cardano usa o modelo UTxO, onde os ativos são armazenados em resultados não gastos, e não como saldos em contas. Neste modelo, uma transação possui entradas e saídas, onde as entradas são saídas não gastas de transações anteriores. Cada UTxO só pode ser consumido uma vez e como um todo. Portanto, não há equivalente à função de aprovação do Ethereum no modelo UTxO de Cardano.
Normalmente, uma transação envolve apenas um número limitado de UTxOs que um usuário possui em sua carteira. Quaisquer UTxOs que não sejam incluídos como entradas na transação não serão afetados pela assinatura da transação.
Do ponto de vista da segurança, este modelo pode ser visto como mais resistente a ataques de drenagem de carteira.
Você pode ver na imagem que Alice tem que assinar cada transação que gasta UTxO. Não é possível que um contrato inteligente transfira arbitrariamente UTxOs de propriedade de Alice.
Uma conta Ethereum, representada por um único endereço, pode conter saldos de vários tipos diferentes de tokens, incluindo vários tokens ERC-20. A função de aprovação geralmente não concede aprovação de gastos para toda a conta. Em vez disso, ele concede a um contrato inteligente específico a aprovação para gastar uma determinada quantia de um token ERC-20 específico da conta do usuário.
No entanto, contratos inteligentes maliciosos podem ser aprovados involuntariamente para gastar tokens de toda a conta do usuário. O mecanismo de aprovação pode ser explorado por contratos inteligentes maliciosos para drenar tokens da carteira de um usuário sem exigir quaisquer aprovações ou ações adicionais do usuário.
Na foto você pode ver que Alice apenas assinou a transação de ‘aprovar’. Isso permitiu que o contrato inteligente malicioso transferisse todos os tokens de sua conta.
Para evitar a perda de todos os ativos da sua conta, os utilizadores devem garantir que apenas concedem aprovações de despesas a contratos inteligentes fiáveis e confiáveis.
Conclusão
A função de aprovação da Ethereum fornece aos desenvolvedores um recurso semelhante a permitir que terceiros retirem periodicamente uma determinada quantia de sua conta bancária. Embora esta seja uma função útil, exige que os usuários confiem que o terceiro não excederá seu limite de saque. Por outro lado, Cardano não oferece recurso semelhante aos desenvolvedores. Os usuários são obrigados a assinar explicitamente cada transação que gasta UTxOs de sua carteira.
Ambas as abordagens têm seus méritos. As respectivas equipes tiveram que encontrar um equilíbrio entre garantir a segurança e fornecer uma ampla gama de opções para os desenvolvedores na elaboração de contratos inteligentes. Embora os scripts de Cardano sejam projetados para verificar se as condições para gastar UTxOs foram atendidas, os contratos inteligentes de Ethereum podem obter controle sobre as contas dos usuários.
Você gostou deste artigo? Por favor, compartilhe, obrigado!