O ataque ao Drift Protocol não foi um hack no sentido tradicional.
Ninguém encontrou uma vulnerabilidade ou descobriu uma chave privada. Também não houve exploração via flash loan nem manipulação de oráculo.
Em vez disso, um atacante utilizou um recurso legítimo da Solana, os “nonces duráveis”, para enganar o conselho de segurança da Drift, fazendo com que aprovassem previamente transações que seriam executadas semanas depois, em um momento e contexto que os signatários nunca tiveram a intenção.
O resultado foi uma saída de pelo menos US$ 270 milhões que levou menos de um minuto para ser executada, mas mais de uma semana para ser planejada.
O que são nonces duráveis e por que eles existem
Na Solana, toda transação inclui um ‘recent blockhash’, essencialmente um carimbo de data e hora que comprova que a transação foi criada recentemente. Esse blockhash expira após cerca de 60 a 90 segundos. Se a transação não for submetida à rede dentro desse prazo, ela se torna inválida. Trata-se de um recurso de segurança que ajuda a prevenir que transações antigas e obsoletas sejam reproduzidas posteriormente.
Nonces duradouros substituem essa característica de segurança. Eles trocam o blockhash expiring por um ‘nonce’ fixo, um código único armazenado em uma conta especial onchain, que mantém a transação válida indefinidamente até que alguém decida enviá-la.
A funcionalidade existe por motivos legítimos. Carteiras de hardware, configurações de assinatura offline e soluções de custódia institucional todas necessitam da capacidade de preparar e aprovar transações sem serem obrigadas a enviá-las dentro de 90 segundos.
Mas transações válidas indefinidamente criam um problema. Se alguém conseguir que outra pessoa assine uma transação hoje, ela poderá ser executada na próxima semana ou no próximo mês, conforme as regras codificadas no sistema. O assinante não tem como revogar sua aprovação uma vez concedida, a menos que a conta nonce seja avançada manualmente, o que a maioria dos usuários não monitora.
Como o invasor os utilizou
O protocolo da Drift era governado por um “multisig do Conselho de Segurança”, um sistema no qual várias pessoas (neste caso, cinco) compartilham o controle, e qualquer ação requer a aprovação de pelo menos duas delas. Multisigs são uma prática padrão de segurança no DeFi, onde a ideia é que comprometer uma única pessoa não seja suficiente para roubar fundos.
Mas o atacante não precisou comprometer as chaves de ninguém. Tudo o que precisou foram duas assinaturas, e aparentemente as obteve por meio do que a Drift descreve como “aprovações de transações não autorizadas ou deturpadas”, o que significa que os signatários provavelmente acreditavam estar aprovando uma transação rotineira.
Em 23 de março, quatro contas nonce duráveis foram criadas. Duas estavam associadas a membros legítimos do Conselho de Segurança da Drift. Duas estavam sob controle do atacante. Isso significa que o atacante já havia obtido assinaturas válidas de dois dos cinco membros do conselho, bloqueadas em transações nonce duráveis que não expirariam.
Em 27 de março, a Drift realizou uma migração planejada do Conselho de Segurança para substituir um membro do conselho. O atacante se adaptou. Em 30 de março, uma nova conta nonce durável apareceu, vinculada a um membro do multisig atualizado, indicando que o atacante havia reobtido o limiar necessário de aprovação de dois entre cinco sob a nova configuração.
Em 1º de abril, o atacante executou.
Primeiramente, a Drift realizou uma retirada de teste legítima de seu fundo de seguro. Aproximadamente um minuto depois, o atacante enviou as transações com nonce durável pré-assinadas. Duas transações, separadas por quatro slots na blockchain Solana, foram suficientes para criar e aprovar uma transferência administrativa maliciosa, em seguida aprová-la e executá-la.
Em poucos minutos, o invasor obteve controle total sobre as permissões em nível de protocolo da Drift. Eles utilizaram esse controle para introduzir um mecanismo fraudulento de saque e esvaziar os cofres.
O que foi tomado e para onde foi
Pesquisadores onchain acompanharam os fluxos de fundos em tempo real. A análise dos ativos roubados, compilada pelo pesquisador de segurança Vladimir S., totalizou cerca de US$ 270 milhões em dezenas de tokens.
A maior categoria isolada foi de US$ 155,6 milhões em tokens JPL, seguida por US$ 60,4 milhões em USDC, US$ 11,3 milhões em CBBTC (bitcoin embrulhado do Coinbase), US$ 5,65 milhões em USDT, US$ 4,7 milhões em ether embrulhado, US$ 4,5 milhões em DSOL, US$ 4,4 milhões em WBTC, US$ 4,1 milhões em FARTCOIN, e quantias menores distribuídas entre JUP, JITOSOL, MSOL, BSOL, EURC e outros.
A carteira principal envolvida na drenagem foi financiada oito dias antes do ataque por meio de intenções do Protocolo NEAR, mas permaneceu inativa até o dia da execução. Os fundos roubados foram transferidos para carteiras intermediárias que foram financiadas apenas um dia antes via Backpack, uma exchange cripto descentralizada que exige verificação de identidade, potencialmente oferecendo uma pista para os investigadores.
A partir daí, os fundos foram transferidos para endereços Ethereum por meio do Wormhole, uma ponte cross-chain. Esses endereços Ethereum haviam sido pré-financiados utilizando o Tornado Cash, o mixer de privacidade sancionado.
ZachXBT, um proeminente investigador onchain, observado que mais de US$ 230 milhões em USDC foram transferidos da Solana para a Ethereum através do CCTP (Protocolo de Transferência Cross-Chain) da Circle, em mais de 100 transações.
Ele criticou a Circle, emissora centralizada do USDC, por não congelar os fundos roubados durante uma janela de seis horas após o início do ataque por volta do meio-dia, horário do Leste.
O ataque também foi reminiscente de recentes tentativas de engenharia social, utilizando táticas semelhantes às observadas anteriormente, de acordo com um postagem nas redes sociais por um usuário conhecido como ‘Temmy.’ “já vimos isso antes. já vimos isso tantas vezes,” disse o usuário.
“bybit. US$ 1,4 bilhão. o atacante comprometeu a infraestrutura de assinatura e enganou os assinantes para autorizarem transações maliciosas. mesmo conceito. engenharia social. não código. ponte ronin. US$ 625 milhões. chaves de validadores comprometidas. mesma história. protocolo cetus. US$ 223 milhões. método diferente, mas mesmo resultado. centenas de milhões desaparecidos.” disse a publicação.
O que não foi comprometido
O que falhou foi a camada humana em torno do multisig. Nonces duradouros permitiram que o atacante separasse o momento da aprovação do momento da execução por mais de uma semana, criando uma lacuna na qual o contexto do documento assinado não correspondia mais ao contexto em que foi utilizado.
Todos os depósitos nos produtos de empréstimo e empréstimo da Drift, depósitos em cofres e fundos de negociação estão afetados. Os tokens DSOL não depositados na Drift, incluindo os ativos apostados no validador da Drift, não foram afetados. Os ativos do fundo de seguro estão sendo retirados e protegidos. O protocolo foi congelado, e a carteira comprometida foi removida da multisig.
Como tal, este é o terceiro grande ataque nos últimos meses que não envolveu uma vulnerabilidade de código. A engenharia social e as falhas de segurança operacional, em vez de erros nos contratos inteligentes, são cada vez mais as formas pelas quais o dinheiro sai dos protocolos DeFi.
O vetor de nonce durável é particularmente perigoso porque explora uma funcionalidade que existe por um bom motivo e é difícil de defender sem alterar fundamentalmente o funcionamento das aprovações multisig na Solana.
A questão em aberto, que o próximo postmortem detalhado da Drift precisará responder, é como dois membros distintos do multisig aprovaram transações que não entenderam e se alguma ferramenta ou mudança na interface poderia ter sinalizado transações com nonce durável como requerendo uma análise adicional.