Relacionado a este temaRelatório GBA

Como o hacker conseguiu roubar US$ 6,15 bilhões da Binance?

  • Um invasor drenou cerca de US$ 6,15 bilhões de hot wallets da Binance em nove blockchains, sem precisar roubar nenhuma chave privada.
  • O ataque usou os próprios sistemas de assinatura da exchange e um truque com 50 autorizações simultâneas para assumir o controle de uma carteira.
  • Cerca de US$ 2,79 bilhões foram congelados ou apreendidos, e a BitOK vê indícios de ligação com o ataque à Bitget, atribuído à Coreia do Norte.
Promo

Em 29 de outubro, um hacker drenou cerca de US$ 6,15 bilhões da Binance em apenas 31 minutos, em um dos maiores roubos da história do mercado cripto.

A Binance estimou inicialmente as perdas em US$ 6,3 bilhões. A empresa de análise de blockchain BitOK, no entanto, rastreou todas as transações e chegou a US$ 6,15 bilhões, distribuídos em nove blockchains.

O detalhe mais impressionante: o invasor nunca teve acesso às chaves privadas da Binance. Ele fez com que os próprios sistemas da exchange aprovassem os saques. Este guia mostra o ataque passo a passo e explica cada termo técnico. Os horários estão em UTC, três horas à frente do horário de Brasília.

Começando pelo básico: como uma exchange movimenta dinheiro

Hot wallets são as carteiras online da exchange. Elas ficam conectadas à internet para que os saques sejam processados rapidamente.

Assinatura é a aprovação de uma transferência com a chave privada da carteira, um número secreto. Exchanges usam sistemas automatizados para assinar milhares de pagamentos por dia.

Nonce é o contador de transações de uma carteira na Ethereum. Em carteiras muito movimentadas, esse número sobe o tempo todo.

Patrocinado
Patrocinado

Moedas congeláveis são as stablecoins cujos emissores, como a Tether (USDT) e a Circle (USDC), podem bloquear endereços. Já moedas nativas como BTC, ETH e TRX não podem ser congeladas por ninguém.

28 de outubro: a preparação

Cada transação em blockchain exige uma pequena taxa. Para abastecer suas carteiras sem rastros, o invasor recorreu ao Tornado Cash, um “mixer” que reúne vários fundos para dificultar vincular saque ao depósito.

Seis saques do Tornado Cash foram usados para abastecer a carteira principal do operador e de dois ajudantes.

29 de outubro, das 2h28 às 16h47: dois ensaios

Antes de atingir a Binance, o invasor realizou testes em suas próprias carteiras, comparável a um arrombador testando uma chave na própria porta.

A ferramenta foi um smart contract, um programa que roda na Ethereum e executa exatamente o que está no código. Esse contrato foi criado para esvaziar qualquer carteira que o autorizasse a agir em nome dela, recurso viabilizado pelo EIP-7702, explicado mais abaixo.

  • 2h28: o invasor publica uma versão de teste do programa de saque.
  • 13h51 a 14h24: primeiro ensaio. Ele deposita pequenas quantias de USDT e USDC em duas carteiras próprias, autoriza o programa e o executa. As duas carteiras são esvaziadas. O método funciona.
  • 15h59: publicação da versão final, que seria usada contra a Binance.
  • 16h20 a 16h47: segundo ensaio, agora com a versão definitiva.

A versão final tinha um recurso a mais: permitia fazer a carteira executar qualquer ação, e não apenas enviar tokens. Foi isso que, horas depois, levou uma carteira da Binance a liberar 823 milhões de USDC. Para a BitOK, o nível de personalização indica que o invasor já conhecia a configuração das hot wallets da exchange.

“A diferença entre as duas versões foi decisiva. O contrato principal continha uma função capaz de executar chamadas arbitrárias em nome da carteira que delegou seu controle. O invasor usou esse recurso para sacar 823 milhões de USDC de uma smart wallet da Binance”, explicou a BitOK.

29 de outubro, a partir das 20h04: os 31 minutos do roubo

Entre 20h04min52s e 20h35min53s, o invasor esvaziou hot wallets da Binance em nove blockchains: XRP Ledger, Solana, Bitcoin, Ethereum, Tron, Base, Optimism, Arbitrum e Avalanche. Entre os ativos levados estavam:

  • 18.270,2 BTC
  • 197.540 ETH
  • 2,49 bilhões de USDT
  • 823 milhões de USDC
  • 233,46 milhões de XRP
  • 970.522 SOL, além de dezenas de outros tokens

Todas as transferências foram assinadas pelas próprias carteiras da Binance. A BitOK identificou padrões fora do comum: taxas de 2 a 2,7 vezes acima do habitual, formatos de transação diferentes dos usados pelo software de pagamentos da exchange e, na Ethereum, transferências falsas intercaladas com pagamentos reais a clientes.

Segundo as informações divulgadas até agora, o invasor comprometeu o laptop de um engenheiro de DevOps e usou um service container, programa empacotado que roda nos sistemas da Binance, para enviar ordens de saque falsas.

Linha do tempo do roubo na Binance. Fonte: BeInCrypto
Linha do tempo do roubo na Binance. Fonte: BeInCrypto

20h20: o truque das 50 chaves

Essa foi a manobra mais sofisticada da noite. O alvo era uma hot wallet muito movimentada na Ethereum, chamada Binance 14.

Patrocinado
Patrocinado

O plano. Com o EIP-7702, uma carteira pode assinar uma autorização que permite a um smart contract agir em seu nome. Se a Binance 14 assinasse uma autorização apontando para o contrato do invasor, ele passaria a controlá-la.

O obstáculo. A autorização só vale se trouxer o nonce atual da carteira. Como a Binance 14 fazia pagamentos sem parar, esse número mudava a todo momento, e uma autorização com o nonce errado é simplesmente ignorada.

O truque. Às 20h20min59s, o invasor fez o sistema de assinaturas da Binance assinar 50 autorizações de uma só vez, cada uma com um nonce diferente. É como testar 50 chaves numa fechadura ao mesmo tempo: basta uma funcionar. E uma funcionou. A Binance 14 passou a obedecer ao contrato do invasor, enquanto continuava operando e recebendo fundos normalmente.

O lucro. Minutos depois, uma única transação esvaziou 65 tokens diferentes, somando mais de US$ 2,2 bilhões, incluindo 1,615 bilhão de USDT e 167.464 ETH. Às 20h41 e às 20h59, o contrato também fez outra carteira da Binance transferir os 823 milhões de USDC.

Binance 16. Uma segunda hot wallet foi atacada de forma mais simples. O sistema da Binance recebeu nove transferências falsas, que foram assinadas e enviadas junto com pagamentos legítimos a clientes. Essas operações movimentaram 28.005,6 ETH e 55,7 milhões de USDT.

Dreno na Binance 14. Fonte: BeInCrypto
Dreno na Binance 14. Fonte: BeInCrypto

Das 20h30 às 21h14: a corrida para moedas que não podem ser congeladas

Na Ethereum, 500 milhões de USDT deixaram o endereço principal de recebimento em seis minutos. Entre 20h34 e 21h09, o invasor trocou 435 milhões de USDT por ETH na Uniswap, exchange descentralizada operada por código. Ele também depositou 60 milhões de USDT na Aave, protocolo de empréstimos, e tomou emprestados 19.762 ETH usando esse valor como garantia. Assim, deixou para trás o colateral passível de congelamento e ficou com ETH, que não pode ser bloqueado.

Fluxo dos fundos roubados no Ethereum. Fonte: BitOK Graph
Fluxo dos fundos roubados no Ethereum. Fonte: BitOK Graph

Na Tron, 612,7 milhões de USDT saíram da carteira Binance-Hot 7. Em 16 operações na SunSwap, principal exchange descentralizada da rede, o invasor converteu 234 milhões de USDT em 638,2 milhões de TRX.

USDT roubado no Tron. Fonte: BitOK Graph.
USDT roubado no Tron. Fonte: BitOK Graph.

A corrida contra o congelamento

Para congelar USDT, a Tether precisava de três aprovações em sua carteira multisig, estrutura que exige várias assinaturas. Cada bloqueio levava até 2 minutos e 36 segundos, e os pedidos pendentes ficavam visíveis na blockchain. Isso permitia ao invasor antecipar o congelamento: uma de suas carteiras transferiu 130 milhões de USDT apenas 48 segundos antes do bloqueio. Em outro endereço, porém, ele demorou e perdeu quase 175 milhões de USDT.

Já os 823 milhões de USDC ficaram parados em um único endereço e foram bloqueados em uma só transação.

Valores congelados por Tether e CircleQuantia
Ethereum USDTUS$ 1,38 bilhão
Ethereum USDCUS$ 823 milhões
Tron USDTUS$ 378,7 milhões
Avalanche USDtUS$ 8,4 milhões
TotalUS$ 2,59 bilhões

Outros emissores bloquearam USD1, XAUt, PAXG, wBETH e FDUSD, e a BEAM eliminou 984 milhões de tokens roubados. O Security Council da Arbitrum, órgão de emergência com 12 integrantes, apreendeu 8.426 ETH e 74,56 milhões de ARB.

No total, cerca de US$ 2,79 bilhões foram congelados, queimados ou apreendidos. Ainda assim, 669 milhões de USDT já haviam sido convertidos em ETH e TRX.

Das 21h43 às 0h10: a carteira que continuou sendo roubada

Mesmo depois do ataque, a Binance 14 seguiu sob controle do invasor.

  • 21h43min59s: uma transferência de rotina envia 200 milhões de USDT para a Binance 14. Doze segundos depois, o contrato drena o saldo. Os USDT vão parar em um endereço já bloqueado, mas quase 370 ETH são desviados.
  • 22h39: um novo saque retira 128,49 ETH.
  • 23h56: 2.961,91 ETH são drenados logo após chegarem à carteira.
  • 0h10min35s de 30 de outubro: a Binance finalmente revoga a autorização.

O invasor manteve acesso à carteira por quase quatro horas.

Para onde foram os 18.270 BTC

Às 20h20min06s, 11 transações retiraram 18.270,2 BTC de uma hot wallet da Binance, pagando o dobro da taxa habitual. As moedas foram divididas entre 19 carteiras, 17 delas com 1 mil BTC cada. Até 30 de outubro, nenhuma havia sido movimentada. Como o registro do Bitcoin é público, os ativos seguem rastreáveis, mas não podem ser bloqueados.

Fluxo de 18.270 BTC. Fonte: BitOK Graph
Fluxo de 18.270 BTC. Fonte: BitOK Graph

30 de outubro, 4h02: a ligação com a Bitget

A principal descoberta da BitOK: fundos roubados da Binance foram enviados ao mesmo endereço na Ethereum que já recebia valores do ataque à Bitget, em setembro.

O invasor movimentou TRX e USDT pela THORChain, protocolo de trocas entre blockchains, e recebeu ETH no endereço 0x15104a9ce0f08a8f0075a0869ae80e795fe0feb7.

Esse endereço já havia recebido ETH rastreado até o ataque à Bitget. Os recursos saíram de endereços de Bitcoin que a própria Bitget listou publicamente como carteiras dos atacantes, ativos desde 23 de outubro, e começaram como ZEC, uma criptomoeda que não foi roubada da Binance.

Até as 6h20, o endereço havia recebido oito pagamentos ligados à Bitget, somando 349,46 ETH, e cinco ligados à Binance, com 13,63 ETH. Os valores foram misturados e enviados para novas carteiras. O uso do mesmo endereço, sozinho, não identifica os autores de nenhum dos dois ataques.

Fundos da Binance e da Bitget convergem. Fonte: BitOK Graph.
Fundos da Binance e da Bitget convergem. Fonte: BitOK Graph.

Foi a Coreia do Norte?

Nos dois casos, os invasores entraram em sistemas internos sem roubar chaves privadas, e a Bitget atribuiu seu ataque à Coreia do Norte. A BitOK também aponta características associadas a grupos norte-coreanos: ensaios prévios, financiamento via Tornado Cash, troca imediata de tokens congeláveis e atuação no horário comercial do fuso UTC+9.

“O novo endereço de lavagem compartilhado identificado representa uma evidência mais sólida de sobreposição operacional do que apenas similaridades táticas. A BitOK avalia que os dois roubos podem estar ligados ao mesmo grupo da Coreia do Norte, com uma única operação controlando os fluxos de lavagem. Isso permanece como atribuição analítica, e não comprova a identidade real de todos os participantes”, afirmou a empresa.

A resposta da Binance

A Binance suspendeu os saques de suas hot wallets de Bitcoin e Tron por volta das 20h36, enquanto os depósitos continuaram funcionando normalmente. A exchange prometeu cobrir todas as perdas dos clientes com o SAFU, seu fundo de emergência, e com recursos próprios. No Brasil, a empresa também suspendeu temporariamente os saques de criptomoedas.

No mercado como um todo, US$ 1,58 bilhão em posições alavancadas foram liquidadas em 24 horas, segundo a Coinglass.

O que os invasores ainda detêm?

Às 6h20 de 30 de outubro, a BitOK vinculou ao invasor os seguintes ativos:

  • 197.460 ETH
  • 18.270,2 BTC
  • 233,46 milhões de XRP
  • cerca de 970.500 SOL
  • 675,9 milhões de TRX
  • 1,61 milhão de AVAX

Só os saldos em ETH, BTC, XRP e SOL somam cerca de US$ 2,95 bilhões.

Visão geral do ataque. Fonte: BitOK
Visão geral do ataque. Fonte: BitOK

Para a BitOK, o caso deixa uma lição para todo o setor:

“O caso da Binance demonstra que apenas proteger as chaves privadas não é suficiente. As exchanges também precisam de controles sobre a autoridade de assinatura, mecanismos contra instruções de saque suspeitas, revogação imediata de permissões comprometidas e monitoramento contínuo de transferências de ativos entre redes”, afirma.

Isenção de responsabilidade

O BeInCrypto produz e controla esta Reportagem Especial de forma independente. As opiniões citadas pertencem aos seus respectivos autores. Este conteúdo é de caráter geral e não personalizado; não considera suas circunstâncias e não constitui pesquisa de investimento, aconselhamento financeiro, de investimento, jurídico ou tributário, nem oferta, endosso ou recomendação para transacionar qualquer criptoativo, produto ou serviço. Verifique as informações relevantes antes de agir. Criptoativos são voláteis e podem resultar em perda total. O BeInCrypto não oferece qualquer garantia quanto à completude, exatidão ou atualidade das informações, exceto quando exigido por lei.

Patrocinado
Patrocinado