SharkTeam: Análise do Princípio de Ataque da Proposta Tornado.Cash

O motivo desse incidente foi que a comunidade falhou em descobrir os riscos na proposta ao verificar a proposta e não verificou cuidadosamente se o código do contrato da proposta tinha vulnerabilidades de segurança.

Escrito por: SharkTeam

Em 20 de maio de 2023, horário de Pequim, o Tornado.Cash sofreu um ataque de proposta e o invasor obteve um lucro de cerca de 680.000 dólares americanos. A SharkTeam realizou uma análise técnica deste incidente pela primeira vez e resumiu as precauções de segurança, esperando que os projetos subsequentes possam aprender com isso e construir uma linha de defesa de segurança para a indústria de blockchain.

1. Análise de eventos

Endereço do atacante:

0x092123663804f8801b9b086b03B98D706f77bD59

0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9

Contrato de ataque:

0xAF54612427d97489707332efe0b6290F129DbAcb

0x03ecf0d22f9ccd21144a7d492cf63b471916497a

0x7dc86183274b28e9f1a100a0152dac975361353d (contrato de implantação)

0xc503893b3e3c0c6b909222b45f2a3a259a52752d (contrato de proposta falsa)

Contrato atacado:

0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce

Iniciar uma transação de proposta:

0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d

Transações de ataque:

0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d

Processo de ataque:

(1) Primeiro, o atacante (0x08e80ecb) inicia uma proposta ao contrato atacado (0x5efda50f), alegando que esta proposta é um complemento da Proposição 16

(2) Mas, na verdade, há uma função adicional de autodestruição na proposta.

(3) Infelizmente, a comunidade não encontrou nenhum problema nesta proposta, e a maioria dos membros votou para aprová-la.

(4) O invasor criou muitos contratos para implementar a transferência de tokens

(5) O atacante (0x08e80ecb) destrói o contrato de proposta (0xc503893b) e seu contrato de criação (0x7dc86183). O contrato de ataque (0xc503893b) foi posteriormente reimplantado no mesmo endereço.

(6) Depois de modificar o contrato da proposta, o invasor (0x08e80ecb) executa a proposta e modifica a quantidade de token lock do endereço do contrato sob seu controle para 10000.

(7) Após a execução da proposta, o atacante (0x08e80ecb) transfere os tokens para seu próprio endereço e obtém a propriedade do contrato atacado.

Análise de vulnerabilidade: Como o contrato de criação (0x7dc86183) do contrato de proposta (0xc503893b) é implantado por meio de creat2, depois que os dois contratos são destruídos, um novo contrato lógico pode ser implantado no mesmo endereço e a execução da proposta é invocada no formulário de um delegatecall.O contrato atacante pode modificar arbitrariamente o valor no contrato atacado.

Resumo do incidente: o motivo desse incidente foi que a comunidade falhou em descobrir os riscos na proposta ao verificar a proposta e não verificou cuidadosamente se o código do contrato da proposta tinha vulnerabilidades de segurança.

2. Recomendações de segurança

Em resposta a este ataque, devemos seguir os seguintes cuidados durante o processo de desenvolvimento:

  • Ao projetar propostas, considere totalmente a segurança do mecanismo de proposta e minimize o risco de propostas serem controladas centralmente. Considere reduzir o valor dos ataques, aumentar o custo de obtenção de direitos de voto e aumentar o custo de execução de ataques etc.
  • Antes de votar na proposta, a comunidade deve verificar cuidadosamente se o código do contrato tem um backdoor.
  • Antes da proposta ser aprovada, uma empresa terceirizada de auditoria de segurança pode ser contatada para realizar uma auditoria de segurança do código lógico do contrato.
Ver original
  • Recompensa
  • Comentário
  • Compartilhar
Comentário
Sem comentários
  • Tema