Resumo
Na Ethereum, o token ERC20 é amplamente utilizado por empresas ou usuários para construir aplicativos descentralizados (DApps). Muitos tokens ERC20 obtêm grande valor e circulam no mercado cripto. Além disso, com o desenvolvimento próspero do ecossistema DeFi, a negociação de tokens ERC20 se torna mais frequente. Com base no padrão ERC20, o método aprove() é invocado para dar permissão para os DApps ou outros usuários retirarem tokens. Na realidade, muitos DApps exigem aprovação ilimitada dos usuários e esse design trouxe um problema grave. Uma série de incidentes aconteceu e causou um grande prejuízo tanto para os usuários quanto para os próprios DApps.
0xffffff. Introdução
Como um tópico discutido há muito tempo, a “Aprovação Ilimitada” (Unlimited Approval) surge desde o próspero desenvolvimento do DeFi e alguns incidentes de segurança. Inspirados por muitos incidentes de segurança, estamos tentando novamente conduzir uma investigação abrangente para a “Aprovação Ilimitada” em diferentes aspectos. Ao mesmo tempo, também fomos convidados a participar da 29ª conferência Blockchain Village e falar sobre esse assunto. Você pode assistir nossa palestra pelo seguinte link: https://www.youtube.com/watch?v=ijgYfdOADVI.
Recomendação de leitura:
- Se você é iniciante na Ethereum, sugerimos fortemente a leitura de todo o artigo.
- Se você é um especialista em Ethereum e tem alguma experiência com aprovação ilimitada, pode começar a leitura na seção 0x2.
0x0. Histórico
Antes de entrarmos na discussão de “O que é a aprovação ilimitada?”, gostaria de recapitular sobre “O que é a aprovação no token ERC20?”.
Tokens ERC20
Na Ethereum, exceto Ether, vários tokens estão circulando no mercado Cripto com um grande valor. O ERC20 é o padrão de token mais popular. Com base em nossas estatísticas incompletas, entre 5.600 e 44.000 tokens ERC20 foram registrados dentre a CoinGecko (um site que agrega o preço do token) e a Uniswap (atualmente uma das mais famosas exchanges descentralizadas).
Mecanismo de Aprovação
O processo de aprovação refere-se principalmente a três entidades (remetente, gastador e contrato de token), bem como a duas funções (approve
, transferFrom
) e duas variáveis ( balanceOf
, allowance
) no padrão ERC20 (conforme mostrado na figura abaixo).
Para entender o processo de aprovação, apresentamos a figura abaixo e explicamos como as funções approve
e transferFrom
alteram o estado do contrato de token.
- (Etapa 1) Como status inicial, o remetente detém 100 tokens no contrato e o gastador não possui nenhum
allowance
aprovado pelo remetente. - (Etapa 2) O remetente invoca a função
approve
para conceder permissão de 100 tokens ao gastador. Portanto,allowance[sender][spender]
aumenta para 100 de 0 e não haverá alteração aplicada ao remetentebalanceOf
. - (Etapa 3) Por fim, o gastador invoca
transferFrom
para mover 80 tokens do remetente para si mesmo. Como resultado, obalanceOf
tanto do remetente quanto do gastador são atualizados (ou seja, 20 e 80), bem como a permissão do gastador diminui para 20.
Três tipos de aprovação na realidade
No mundo real, podemos classificar todas as aprovações em três tipos com base no valor da aprovação.
- Aprovação zero: O valor da aprovação é igual a zero. Isso basicamente significa que o usuário/remetente tenta revogar sua permissão de uma determinada plataforma/gastador.
-
Aprovação Ilimitada: O valor da aprovação é igual ao valor máximo de
uint256
(0xffff...ffff) ou o fornecimento total dos tokens. Esse tipo de aprovação é frequentemente usado por muitas plataformas DeFi (como bolsas, plataformas de empréstimo). - Outra aprovação: Este tipo de aprovação abrange o restante. Os usuários normalmente lançam esta aprovação com base no recurso de modificação suportado por plataformas ou carteiras.
0x1. Incidentes do mundo real
Existem também alguns incidentes do mundo real relacionados ao problema de aprovação mencionado anteriormente. Em nossa palestra, passamos por duas (UniCat, Bancor Finance) dessas histórias com detalhes. Se você puder aprender mais sobre esses incidentes, basta seguir os links fornecidos abaixo:
- Incidente do UniCat: Link.
- Incidente do Bancor Finance: Link.
- Primitive Finance: Link1, Link2.
- Furucombo: Link, Link (chinês).
- DeFi Saver: Link, Link (chinês).
- Degen Money: Twitter, Link.
0x2. Algumas medidas
Nesta seção, apresentaremos nossa investigação detalhada dos aspectos off-chain e on-chain. Para entender melhor a situação atual da “aprovação ilimitada”, assumimos o papel de usuário front-end para conduzir nossas medições.
Processo de aprovação do mundo real
A figura acima mostra que os usuários front-end podem seguir seis etapas para concluir uma transação de aprovação. Existem quatro entidades principais (usuários de front-end, carteiras, plataformas, contratos de token). Agora, vamos trabalhar com o fluxo passo a passo:
Etapas 1,2: Primeiro, a maioria dos usuários de front-end (móveis, sites) conectam suas carteiras à plataforma selecionada e enviam suas solicitações de serviço.
Etapa 3: Em seguida, das plataformas para a carteira do usuário, a plataforma constrói a transação de aprovação com os dados necessários (o mais importante, o valor da aprovação) e a envia para a carteira do usuário para confirmação.
Etapas 4,5:Depois de receber a transação de aprovação, a carteira exibirá as informações correspondentes para o usuário e aguardará a confirmação do usuário.
Etapa 6: Assim que o usuário confirmar a transação, a carteira enviará a transação para a rede para validação. Além disso, a transação validada modificará o estado do contrato de token (Allowance[User][Platform]).
(Na próxima seção, primeiro apresentaremos nossa motivação para cada tipo de medição (off-chain e on-chain). Em seguida, apresentaremos nossos resultados de medição e as descobertas com diferentes aspectos.)
Investigação off-chain
Motivação
No processo de aprovação do mundo real, podemos descobrir facilmente que os usuários do front-end estão interagindo diretamente com a interface do usuário da carteira e da plataforma. Portanto, escolhemos 15 carteiras conhecidas e 24 plataformas DeFi (Finanças Descentralizadas) e conduzimos a investigação off-chain.
(Os resultados da investigação estão resumidos nas duas figuras mostradas abaixo.)
Além disso, consideramos principalmente sua explicação e flexibilidade na aprovação:
- Explicação.
- Carteira: 1) Se a carteira exibe informações sólidas da transação de aprovação (incluindo usuário, gastador, token e valor da aprovação); 2) Se a carteira dá um aviso especial ou notifica os usuários sobre a “aprovação ilimitada”.
- Plataforma: Critério 1)Se a plataforma fornece uma explicação sólida para transações de aprovação em sua interface do usuário (UI) da web; Critério 2)Se a plataforma notifica os usuários sobre a existência da transação de aprovação; Critério 3) Se a plataforma notifica os usuários de que duas transações são executadas sequencialmente.
- Flexibilidade: Independentemente das carteiras ou plataformas, se a interface do usuário fornece recurso de modificação no valor da aprovação.
(Na próxima seção, mostraremos o resultado de como os dois aspectos acima são executados em carteiras e plataformas. Selecionamos dois casos para cada carteira e plataforma.)
0x222. Carteiras: Metamask e Coinbase
Apresentaremos o resultado de nossa investigação sobre a carteira Coinbase e a carteira Metamask (extensão do Chrome). De acordo com as informações da Google Play Store (mostrada na figura abaixo), a Coinbase e a Metamask têm mais de 1 milhão de instalações. De alguma forma, a Coinbase ganha mais avaliações de clientes e também tem uma pontuação mais alta.
Quanto à investigação das duas carteiras, nós as usamos para testar a função de troca na plataforma Compound. Observe que a plataforma Compound tem como padrão a aprovação ilimitada para usuários.
Carteira 1: Metamask
Conforme mostrado na figura abaixo, enquanto os usuários revisam a transação de aprovação construída pela Compound, eles podem basicamente ver as informações completas, incluindo endereço do gastador, assinatura de aprovação e valor da aprovação (Etapa 2). Além disso, a Metamask ainda permite que os usuários modifiquem seu valor de aprovação com o botão “Edit” (Editar) (etapas 2, 3, 4).
Carteira 2: Coinbase
Em comparação com a carteira Metamask, a carteira Coinbase não apresenta nenhuma informação importante. Os usuários só podem ver mais detalhes após confirmar a transação de aprovação (figura abaixo). Observe que as etapas 2, 3, 4 são exibidas apenas durante ou após a transação de aprovação estar no modo pendente ou concluída. Portanto, a carteira Coinbase oculta as informações necessárias da transação de aprovação e não fornece nenhum recurso de modificação para o valor aprovado.
0x223. Plataformas: Bancor e Curve Finance
Nesta seção, vamos comparar o Bancor e a Curve Finance. Conforme mostrado na figura abaixo, com base nas estatísticas mais recentes (em 7 de agosto de 2021) do defipulse, a Curve Finance e o Bancor são a primeira e a quinta DEX (exchange descentralizada) em termos de valor total bloqueado (tvl).
Para a configuração de nossa investigação em ambas as plataformas, usaremos a carteira Metamask para testar o recurso de troca fornecido por ambas as plataformas.
Plataforma 1: Bancor
Enquanto estamos testando o recurso de troca no Bancor, ele explica a necessidade da transação de aprovação (figura abaixo) e ainda oferece aos usuários duas opções (aprovação ilimitada/limitada). Além da aprovação ilimitada, a aprovação limitada no Bancor requer apenas a quantidade exata de allowance
que os usuários estão tentando usar para troca.
Plataforma 2: Curve Finance
No entanto, na Curve Finance, uma coisa “interessante” acontece. Conforme mostrado na figura abaixo, enquanto solicitamos a troca, a interface do usuário da Curve Finance exibe “Por favor, aprove 10 USDT para troca” (figura abaixo), mas a Metamask recebe uma transação de aprovação ilimitada. Esta é definitivamente uma informação enganosa para os usuários.
Mais tarde, quando tentamos confirmar o problema com a Curve Finance, eles reconheceram nossa preocupação e disseram que era porque “os usuários não gostavam de aprovar todas as vezes” (figura abaixo).
Semelhante a Curve Finance, a interface do usuário da Yearn Finance tem o mesmo problema. (Também mencionamos e mostramos as evidências em nossa palestra)
0x23. Investigação on-chain
0x231. Motivação
Para entender melhor a situação da “aprovação ilimitada” na cadeia, coletamos todas as transações (até 30 de abril de 2021) para continuar nossa exploração. Como mostra a figura abaixo, o número de “aprovações ilimitadas” cresce muito rápido hoje em dia. Em nossa investigação, descobrimos que a introdução da UniswapV2 parece ser o principal fator estimulador do crescimento da “aprovação ilimitada”. E explicaremos mais sobre este ponto com base em nossos resultados de medição.
Ao mesmo tempo, para explorar a “aprovação ilimitada” em nome do token e da plataforma (uma vez que são os termos mais relacionados em vez dos próprios usuários), levaremos nossa investigação a dois aspectos:
- A distribuição da “Aprovação Ilimitada”.
- Análise de risco.
0x232. A Distribuição da “Aprovação Ilimitada”
Para ajudar a entender os gráficos abaixo, vamos primeiro explicar cada termo mencionado nas figuras:
- Eixo Y (Max Approval Ratio ou Taxa máxima de aprovação): valor maior -> a porcentagem mais alta de "aprovação ilimitada" entre todas as transações de aprovação.
- Eixo X(Liveness): Valor maior -> Mais ativas são as plataformas ou tokens. O valor da liveness (vivacidade) depende do número de transações de aprovação e da diferença de tempo entre a primeira e a última transação de aprovação.
- Tamanho do Ponto: Tamanho maior -> Mais transações de aprovação estão envolvidas pelo token ou plataforma.
(As duas figuras abaixo mostram apenas os 1000 principais tokens/plataformas mais frequentemente envolvidos em transações de aprovação)
(Plataforma)
(Token)
Plataforma: Observando o gráfico da plataforma, a UniswapV2 está obviamente dominando qualquer outra plataforma em três termos. É por isso que afirmamos que “a introdução da UniswapV2 parece ser o principal fator estimulante do crescimento da 'aprovação ilimitada'”.
Token: Quanto à distribuição, o USDC, o USDT e o DAI têm o melhor desempenho com base nos três termos definidos acima. Esses tokens são todos moedas estáveis (stablecoins), o que faz sentido, pois as moedas estáveis geralmente são usadas para negociar no mercado de cripto. Quanto aos outros tokens destacados (Top 10 tokens), eles são bastante semelhantes em relação à taxa de aprovação máxima.
0x233. Análise de risco
De acordo com os resultados anteriores, selecionamos o USDC, o USDT e o DAI (3 principais tokens) e duas plataformas (Bancor, UniCat) para conduzir nossa análise de risco. Enquanto isso, também definimos dois termos (conforme mostrado na figura abaixo) para ajudar a desmistificar o risco de tokens aprovados.
Risk Amount (valor do risco)
- Para o token, o Risk Amount é igual à quantidade total de tokens que podem ser transferidos invocando a função
transferFrom.
- Para a Plataforma, o Risk Amount é igual ao valor total de um único token que pode ser transferido invocando a função
transferFrom.
Risk Rate (taxa de risco)
- Com um token fixo, o Risk Amount representa a porcentagem do Risk Amount no fornecimento total desse token fixo.
Token: Conforme mostrado na figura abaixo, o USDC e o USDT são bastante estáveis (sua taxa de risco é de cerca de 10%) durante um ano e meio. O DAI experimenta uma queda dramática no meio do ano e finalmente se estabiliza (também em torno de 10%, mas com mais altos e baixos). Esse fenômeno pode indicar alguns eventos específicos ou o mecanismo de trabalho do DAI. Portanto, ainda há algum trabalho a fazer para explorarmos a causa.
Plataforma: Sobre a análise de risco nas plataformas, apresentaremos um gráfico de tendência do valor do risco (figura abaixo) tanto no Bancor (com token BNT) quanto no UniCat (com token UNI).
O gráfico de tendência do Bancor mostra um crescimento instantâneo e uma queda. Na verdade, essa é uma explicação perfeita da rapidez com que a equipe transfere seus tokens passíveis de exploração do contrato com bugs para um local seguro.
Quanto ao gráfico de tendências do UniCat, confirmamos que algumas quedas óbvias são, na verdade, causadas por ataques backdoor do UniCat.
0x3. Soluções existentes
Como já mencionado, a “Aprovação Ilimitada” é um tema existente no ecossistema há muito tempo. Através de várias discussões, algumas soluções são realmente propostas para melhorar o processo de aprovação:
- ERC777
- EIP2612
Antes de entrar nas soluções, gostaríamos de lembrá-lo novamente sobre a motivação raiz da “aprovação ilimitada”:
- Duas transações são necessárias para approve/transferFrom;
- A aprovação personalizada faz com que os usuários tenham de aprovar todas as vezes antes de negociar ou depositar (o que significa mais taxas de transação a pagar);
- As plataformas querem maximizar a experiência do usuário solicitando aprovação ilimitada uma única vez.
0x31. ERC777
Como padrão de token proposto em 2017, o ERC777 possui os seguintes pontos utilizados para melhorar o processo de aprovação do token ERC20:
- Os usuários podem “autorizar” um operador (como uma exchange) a transferir seu token com o valor desejado.
- Os usuários não precisam enviar transações para aprovações repetidamente.
- Os usuários não precisam se preocupar com o risco de “aprovação ilimitada”.
Concluindo, com o ERC777, os usuários podem realizar compras atômicas com qualquer operadora autorizada.
No entanto, as desvantagens do ERC777 também são óbvias:
- Alta taxa de transação, desde os ganchos aplicados na norma (para mais detalhes).
- Os usuários devem selecionar um operador confiável (isso lança a questão de volta aos usuários).
0x32. EIP2612
Sobre a EIP2612, nesta proposta, o autor indica que os usuários podem usar mensagens assinadas para a validação da transação, de modo que os usuários não precisem pagar nenhuma taxa de transação para modificar seus arquivos allowance
. Mais diretamente, as transações de aprovação estão se tornando gratuitas com a EIP2612. Além disso, esta proposta é atualmente usada pela UniswapV3 para emprestar tokens de provedores.
0x4. Conclusão
Concluindo, a “Aprovação Ilimitada” realmente diminui o custo dos usuários para executar várias transações de aprovação. No entanto, por meio de nossa investigação, algumas plataformas e carteiras ainda se apresentam como inofensivas na batalha da conveniência e segurança. Pior ainda, algumas delas até tentam enganar os usuários exibindo informações erradas. Portanto, em vez de usar a “Aprovação Ilimitada”, sugerimos que as plataformas e as carteiras realmente considerem o desenvolvimento de uma interface de usuário ou protocolo mais seguro para proteger os usuários desde o início. Como usuário de DeFi, construir o senso de segurança não deve ser o resultado de explorações, mas ter consciência desde o início. Acreditamos que construir um ambiente seguro e próspero na Ethereum não é apenas responsabilidade da comunidade, mas de cada um de nós.
Sobre nós
Twitter: https://twitter.com/BlockSecTeam
Medium: https://blocksecteam.medium.com/
O artigo original foi escrito pela BlockSec. Traduzido por Marcelo Panegali.
Oldest comments (0)