Depuração de Transações OnChain: 6. Análise do Projeto CirculateBUSD Rugpull, Perda de $2,27 Milhões!
Autor: Numen Cyber Technology
De acordo com o monitoramento OnChain da NUMEN, em 12 de janeiro de 2023 às 14:22:39 (horário de Singapura), o projeto CirculateBUSD realizou um rugpull, resultando em uma perda de $2,27 milhões. A transferência de fundos do projeto foi principalmente realizada pelo administrador através da chamada da função CirculateBUSD.startTrading
, onde o principal parâmetro de verificação é o valor retornado pela função não open-source SwapHelper.TradingInfo
. Em seguida, os fundos foram transferidos através da chamada da função SwapHelper.swaptoToken
.
- Primeiro, a função
startTrading
do contrato foi chamada, e dentro dessa função foi chamada a funçãoTradingInfo
do contrato SwapHelper, como mostrado no código abaixo.
A imagem acima mostra a pilha de chamadas da transação, e combinando com o código, podemos ver que TradingInfo
é apenas uma chamada estática, e o problema chave não está nessa função. Continuando a análise, encontramos as operações approve
e safeapprove
na pilha de chamadas. Em seguida, a função swaptoToken
do contrato SwapHelper é chamada, e combinando com a pilha de chamadas, percebemos que essa é uma função chave onde a transferência de fundos é executada. Através das informações na blockchain, descobrimos que o contrato SwapHelper não é open-source, e o endereço específico é: https://bscscan.com/address/0x112f8834cd3db8d2dded90be6ba924a88f56eb4b#code
-
Vamos tentar fazer uma análise reversa.
- Primeiro, localizamos a assinatura da função
0x63437561
.
- Localizamos a função descompilada, e como vimos que a transferência foi acionada na pilha de chamadas, tentamos procurar palavras-chave como
transfer
.
- Localizamos esse trecho do código da função, começando com
stor_6_0_19
, e o extraímos.
- Agora temos o endereço de transferência
to
,0x0000000000000000000000005695ef5f2e997b2e142b38837132a6c3ddc463b7
, que é o mesmo endereço de transferência na pilha de chamadas.
- Analisando cuidadosamente o fluxo de controle do if e else dessa função, percebemos que se o if for verdadeiro, é uma troca normal. Porque através do slot, sabemos que
stor5
é0x00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e
, que é o contratopancakerouter
. A função de backdoor está no else, e basta passar um parâmetro igual ao valor armazenado no slot7stor7
para acioná-la.
- Essa função é responsável por modificar o valor armazenado no slot7, e só pode ser acionada pelo owner do contrato.
Todas as análises acima são suficientes para concluir que se trata de um caso de rugpull por parte do projeto.
- Primeiro, localizamos a assinatura da função
O laboratório NUMEN lembra aos usuários que ao investir, é necessário realizar uma auditoria de segurança nos contratos dos projetos. Contratos não verificados podem conter funcionalidades que dão ao projeto permissões excessivas ou afetam diretamente a segurança dos ativos dos usuários. Os problemas encontrados neste projeto são apenas a ponta do iceberg no ecossistema blockchain como um todo. Ao investir e desenvolver projetos, é essencial realizar uma auditoria de segurança no código. A NUMEN está focada em garantir a segurança do ecossistema web3.