A maioria dos “drains” de NFT acontece no momento em que assina uma solicitação da carteira, não porque um smart contract tenha sido hackeado. Um mint legítimo chama safeMint e pede-lhe para pagar gas, enquanto uma página drainer o engana para assinar setApprovalForAll, permit, increaseAllowance ou eth_sign, o que permite a um atacante mover os seus tokens ou NFTs mais tarde. A melhor defesa é uma hot wallet que não contenha nada de valor, além de verificações antes de assinar, como Revoke.cash e Pocket Universe.
Pontos-chave
- Mints reais custam gas e chamam safeMint; a maioria dos mints falsos pede antes uma assinatura ou uma aprovação de token que dá a um contrato permissão sobre os seus ativos.
- Os quatro padrões de assinatura que o devem levar a fechar o separador são setApprovalForAll, permit, increaseAllowance e qualquer pedido eth_sign ou personal_sign que não seja uma simples mensagem de início de sessão.
- Os dados tipados EIP-712 são legíveis por humanos: se o domínio, o endereço do contrato ou o nome da ação não corresponderem ao que o site afirma fazer, trate-o como hostil.
- Use uma carteira burner para mints, revogue aprovações antigas em Revoke.cash e simule todas as transações com Pocket Universe antes de confirmar na sua carteira.
O que é um mint NFT falso e porque se parece com um normal?
Um mint NFT falso é uma página web, uma ligação no Discord ou uma publicação no Twitter que imita a página de mint de uma coleção real para que assine algo que não compreende. O objetivo não é dar-lhe um NFT. O objetivo é obter uma mensagem assinada ou uma aprovação on-chain que permita ao atacante mover os seus tokens ou NFTs existentes mais tarde. Normalmente, a página carrega, a sua carteira aparece e clica em confirmar sem ler, porque a formulação parece plausível, o temporizador de contagem decrescente está a avançar e a arte é convincente.
Duas coisas tornam este ataque diferente do phishing mais antigo. Primeiro, muitas vezes o atacante nem precisa de implementar um contrato malicioso. Pode usar as interfaces padrão que as coleções reais já usam, como setApprovalForAll de ERC-721, e simplesmente direcioná-lo para um endereço de contrato que controla. Segundo, o ataque pode ser dividido em duas transações. A primeira transação é pequena e inofensiva, por vezes até um mint gratuito que não cria nada. A segunda é executada mais tarde, por vezes semanas depois, por um bot que chama transferFrom em todos os endereços aprovados. Quando dá por isso, a sua carteira está vazia.
A razão pela qual isto é importante para colecionadores é que o minting é o único momento em crypto em que se espera que assine algo que não escreveu. Iniciar sessão numa CEX (bolsa centralizada) ou comprar na Uniswap não exige que leia uma carga útil de dados tipados. O minting exige, o que significa que a porta de entrada para colecionar NFTs é também o local mais fácil para drenar uma carteira. Trate a solicitação de assinatura como um banqueiro trataria um pedido de transferência bancária: leia o destino, leia o montante e, se a formulação não corresponder à história no ecrã, vá-se embora.
Os riscos reais: como os kits drainer esvaziam carteiras na prática
A maioria dos drainers de NFT modernos é vendida como serviço. Os operadores pagam uma subscrição, colam um endereço de contrato ou um endereço de carteira para onde drenar e recebem uma página de phishing que se parece com um mint, um pedido de airdrop ou um mint gratuito. Os kits vêm com funcionalidades anti-deteção que rodam domínios, escondem a aprovação numa subtransação e até simulam um mint bem-sucedido para que a vítima veja uma confirmação falsa. Na segunda metade de 2024 e ao longo de 2025, investigadores on-chain de empresas como Scam Sniffer e Blockaid acompanharam volumes de drainers na ordem das centenas de milhões de dólares por ano, com uma parte significativa atribuída especificamente a páginas de mint de NFT.
Há quatro padrões de assinatura responsáveis pela grande maioria destes drains. Conhecê-los pelo nome é a maior melhoria que pode fazer à sua própria segurança. Nenhum deles exige que envie ETH ao atacante. Exigem apenas que assine algo, e é por isso que a solicitação da carteira parece inofensiva.
Para além da assinatura em si, os drainers dependem de alguns truques sociais. Fazem-se passar pelo Discord oficial de um projeto, fazem mint com um nome que difere da coleção real por apenas um carácter e temporizam os seus lançamentos para coincidirem com mints reais, de modo que o ruído tape o sinal. Também semeiam comentários falsos sob o projeto no X/Twitter e pagam por ligações patrocinadas no Google. Se chegou à página de mint através de um anúncio de pesquisa, uma DM ou uma ligação do Discord enviada por alguém que não conhece, abrande antes de assinar qualquer coisa.
A verdade honesta é que nenhuma rotina de inspeção de assinaturas o salvará 100% das vezes. Os autores de drainers atualizam as suas cargas úteis para imitar solicitações legítimas, e alguns usam contratos de mint reais implementados pelo próprio projeto. O objetivo deste artigo não é torná-lo invencível. O objetivo é tornar os ataques baratos óbvios, para que o único risco restante sejam os sofisticados, que a maioria dos atacantes evitará porque existem vítimas mais fáceis.
As quatro assinaturas que nunca deve assinar às cegas
- setApprovalForAll: “Permitir que este contrato mova todos os seus NFTs (ou toda uma coleção) a qualquer momento, para sempre, até revogar.” Um mint legítimo quase nunca precisa disto. Se uma página de mint o pedir, trate o site como hostil.
- permit (ERC-2612): “Permitir que um spender retire uma quantidade fixa do seu token no futuro, sem expiração, apenas chamando permit.” Os drainers envolvem isto num botão de mint falso. O token aprovado é normalmente uma stablecoin ou um blue-chip como USDC ou USDT, não um NFT.
- increaseAllowance / approve: “Permitir que um spender mova uma quantidade específica de um token.” Como permit, mas o montante e o token estão explicitados. Leia ambos. Se o token for algo que detém, não assine.
- eth_sign / personal_sign com um URL ou blob hexadecimal: “Assine esta mensagem.” Sites reais usam personal_sign apenas para inícios de sessão, e a mensagem parece inglês normal. Se a solicitação for uma longa cadeia hexadecimal ou contiver “opensea”, “blur” ou um URL de marketplace dentro de uma carga útil personal_sign, é quase certamente uma ordem off-chain ou uma exploração de listagem Seaport.
safeMint vs setApprovalForAll: o que uma cunhagem legítima realmente faz
A comparação mais útil para um colecionador é entre uma assinatura de cunhagem real e uma assinatura de drainer. Parecem superficialmente semelhantes no pop-up da carteira, mas fazem coisas completamente diferentes on-chain, e a diferença é visível se souber onde olhar.
Uma cunhagem ERC-721 legítima normalmente chama uma função chamada safeMint (ou mint, publicMint, teamMint, dependendo do contrato). Quando a sua carteira apresenta um pop-up, está a ser-lhe pedido que envie uma transação, o que custa gas, e a transação tem um endereço 'To' claro que corresponde ao contrato de cunhagem oficial anunciado pelo projeto. O nome da função é legível na sua carteira. O campo de valor é o preço da cunhagem, denominado em ETH ou numa stablecoin. Não é pedido nenhum approval em separado, porque o contrato não precisa de tocar nos seus ativos existentes: vai cunhar um novo token para si. Esse é precisamente o objetivo.
Uma cunhagem drainer faz uma de duas coisas. A versão barata ignora por completo a cunhagem on-chain e pede-lhe que assine uma mensagem EIP-712 off-chain que contém uma ordem para um marketplace como Blur, OpenSea Pro ou LooksRare. A versão perigosa pede-lhe que chame setApprovalForAll num endereço de contrato controlado pelo atacante, que passa então a ter permissão ilimitada para fazer transferFrom de qualquer NFT na sua carteira em qualquer momento no futuro, enquanto não revogar.
Ler o pedido da carteira, linha a linha
- To: Deve ser o endereço do contrato oficial. Verifique-o no próprio site do projeto, não num link que alguém lhe enviou. Uma única letra ou número diferente é suficiente para o redirecionar para um contrato do atacante.
- Function: Deve ser safeMint, mint ou uma função com nome semelhante. Não deve ser setApprovalForAll, approve, nem um método chamado algo como 'claimRewards' ou 'airdrop'.
- Value: Deve ser o preço da cunhagem em ETH ou numa stablecoin. Não deve ser zero numa 'free mint' que pede um approval no pedido seguinte. Cunhagens de valor zero que pedem approvals são um padrão de drainer conhecido.
- Spender / Approval target: Se o pedido mencionar sequer um approval, o spender deve ser um contrato que reconhece, e ainda assim deve revogá-lo no Revoke.cash depois de a cunhagem ser liquidada.
Como ler dados tipados EIP-712 antes de assinar
EIP-712 é a norma que torna os pedidos de assinatura legíveis. Em vez de lhe pedir para assinar um bloco de hex, a carteira mostra-lhe um payload estruturado com campos nomeados como 'from', 'to', 'value', 'deadline' e 'nonce'. Isto é uma melhoria de usabilidade, mas apenas se o ler de facto. A maioria dos colecionadores não o faz, e é por isso que os drainers adoram EIP-712: os payloads parecem oficiais.
Para uma cunhagem NFT legítima, os dados tipados normalmente não têm spender, campos de permit, nem contrato de token. Podem dizer 'Minting 1 NFT for 0.08 ETH', com o endereço da sua carteira como destinatário. Para uma assinatura de listagem ao estilo da Blur ou da OpenSea, o payload contém uma entrada de livro de ordens com preços, prazos de expiração e um contador. Para um drainer, o payload normalmente contém um objeto permit com o saldo da sua stablecoin como valor, ou uma ordem Seaport que lista um dos seus NFTs valiosos a zero ETH.
Uma checklist para pop-ups EIP-712
- Domain: O 'name' e a 'version' devem corresponder ao projeto. Uma ordem Blur legítima diz 'Blur', uma ordem OpenSea legítima diz 'Seaport' e uma ordem LooksRare legítima diz 'LooksRare Exchange'. Se o domínio for algo como 'MintNFT-Free' ou o campo de versão estiver vazio, pare.
- Primary type: Deve corresponder ao que o site afirma estar a fazer. Um site de cunhagem que mostra um tipo 'Permit' ou 'Order' é um sinal de alerta.
- Token address: Se for mencionado um token, cole o endereço do contrato num explorador de blocos. Certifique-se de que é o USDC, USDT, WETH real, ou aquilo que o site afirma, e não um token parecido com o mesmo nome.
- Amount: Se um permit ou approval mencionar um montante, deve ser um tamanho de transação normal. Qualquer coisa próxima do seu saldo total, ou qualquer coisa que use o valor sentinela especial 'unlimited' (muitas vezes 2^256 - 1), deve ser recusada.
- Nonce and deadline: Mensagens legítimas têm uma deadline no futuro e um nonce que corresponde à sua carteira. Nonces antigos e deadlines em falta são sinais de replay ou de um payload criado manualmente.
A 'free mint' que pede um approval: um exemplo prático
Este é o padrão de drain mais comum em 2024 e 2025, e vale a pena analisá-lo passo a passo porque é aquele em que os colecionadores caem com mais frequência. Uma conta no Twitter faz-se passar por um projeto real e anuncia que os detentores de uma coleção parceira podem cunhar um NFT gratuito. O link leva a um clone da página de cunhagem real. O botão de cunhagem aciona dois pedidos da carteira em sequência.
O primeiro pedido é um personal_sign ou eth_sign para uma mensagem de 'verification'. O atacante espera que assine sem ler, porque parece um início de sessão. O segundo pedido é setApprovalForAll no contrato do atacante, muitas vezes limitado a uma coleção blue-chip como Pudgy Penguins ou Bored Apes. Depois de confirmar, a página ou cunha para si um NFT sem valor, ou falha silenciosamente. De qualquer forma, o atacante passa a ter approval para mover os seus NFTs reais.
A defesa é mecânica. Uma free mint real ou custa gas e chama safeMint, ou é uma merkle-claim que chama uma função chamada claim, claimAirdrop ou semelhante, e escreve um token para si. Não precisa de aprovar nada. No momento em que uma 'free mint' pede qualquer tipo de approval ou assinatura que não seja um início de sessão simples, assuma o pior. Feche o separador, encontre o projeto através do seu próprio marcador e confirme com a equipa no Discord antes de fazer qualquer outra coisa.
Disfarces comuns usados pelo mesmo ataque
- Pedidos 'Verify you are human' que solicitam um personal_sign numa string hex longa.
- Botões 'Claim your gas refund' que fazem aparecer um permit em USDC.
- Botões 'List your NFT for free' em páginas falsas de marketplaces que produzem uma assinatura de ordem Seaport ou Blur em vez de uma listagem on-chain.
- 'Bridge rewards' e 'snapshot registrations' que pedem setApprovalForAll num contrato multisend.
Como configurar uma carteira que sobrevive a uma má assinatura
Mesmo com uma higiene de assinaturas perfeita, acabará por assinar algo que não pretendia. A questão é quanto perde quando isso acontece. A resposta padrão dos colecionadores profissionais é manter duas carteiras: uma hot wallet para cunhagem e negociação, e uma cold wallet para armazenamento. A hot wallet não deve conter nada que não possa perder. A cold wallet guarda os blue-chips e nunca se liga a páginas de cunhagem.
Isto parece paranoico até fazer as contas. Uma carteira burner não custa nada e demora dez minutos a configurar. Um Bored Ape drenado custa seis dígitos e não pode ser substituído. A assimetria é tão extrema que 'use sempre uma burner' é o mais próximo de dinheiro grátis no colecionismo de NFT.
Checklist operacional antes de cada cunhagem
- Use uma carteira burner financiada apenas com o ETH necessário para gas e para o preço da cunhagem.
- Simule a transação com Pocket Universe, Blowfish ou Wallet Guard antes de confirmar na sua carteira real.
- Verifique approvals no Revoke.cash imediatamente depois de cunhar. Se a cunhagem pediu algum approval, revogue-o antes de fazer qualquer outra coisa.
- Revogue novamente no dia seguinte. Alguns drainers usam execução atrasada para contornar hábitos de revogação imediata.
- Nunca cunhe a partir de uma carteira que detenha ativos derivados de seed phrase, como uma conta hot-side de uma hardware wallet que também detenha BTC ou posições de staking em ETH.
O que fazer se já assinou algo suspeito
Se assinou um setApprovalForAll ou uma permit, ainda não perdeu nada, mas o atacante tem agora as chaves para o levar. O tempo conta. O caminho mais rápido é abrir o Revoke.cash, ligar a carteira afetada e revogar todas as aprovações para o endereço do contrato que acabou de assinar. Se não souber o endereço do contrato, revogue tudo o que não reconhecer.
Se assinou por engano uma ordem Seaport ou Blur, o atacante pode já ter uma ordem aberta para comprar o seu NFT por zero ou por um wei. Vá ao marketplace, encontre as suas listagens e cancele-as. No Blur, isto fica em 'My bids' e 'My listings'. No OpenSea, fica em 'Listings'. Cancelar uma listagem off-chain exige uma segunda assinatura, que é o custo de entrada para usar marketplaces, mas é muito mais barato do que deixar a ordem ser executada.
Se os seus NFTs já desapareceram, não negoceie com o burlão, não pague a um 'serviço de recuperação' que lhe envie DMs no Twitter e não assine mais transações a partir dessa carteira. Mova quaisquer ativos restantes para uma carteira nova, apresente uma denúncia aos moderadores da comunidade do projeto e considere comunicar o contrato ao Etherscan ou ao mecanismo de sinalização do explorador de blocos relevante, para que o próximo colecionador receba um aviso.
Como acompanhar notícias de mint de NFT sem se tornar vítima de um drainer
Os anúncios de mint de NFT avançam depressa, e a diferença entre um lançamento real e um clone falso mede-se em minutos. Acompanhar manualmente todos os canais oficiais é uma batalha perdida, e é exatamente com isso que os operadores de drainers contam. O Zippfeed destaca títulos de mint de NFT com pontuação de sentimento assinalada como bullish, neutral ou bearish e uma classificação de importância, para que consiga identificar os lançamentos reais, ignorar os imitadores e clicar apenas em páginas de mint que já verificou. Combine esse feed com o hábito de usar uma carteira descartável descrito acima e transforma o momento mais perigoso de colecionar numa rotina.