Análise de smart contracts
12.04.2024

Descrição do detetor de proxy

Continuamos a nossa série de artigos dedicados à descrição de esquemas fraudulentos em contratos inteligentes. Hoje vamos falar de contratos inteligentes com a funcionalidade de controlo de proxy (Proxy).

Os contratos inteligentes de proxy ganharam popularidade no espaço da blockchain devido à sua modernidade e flexibilidade. No entanto, esses contratos também representam um grande perigo, especialmente quando utilizados por utilizadores mal-intencionados. Os autores de fraudes utilizam frequentemente esquemas enganadores nos contratos inteligentes proxy para defraudar os utilizadores. Para identificar tais ameaças, é necessário compreender os possíveis riscos e ser tecnicamente experiente.

Vamos analisar mais detalhadamente uma descrição dos potenciais perigos, esquemas de engano comuns e como identificar essas ameaças em contratos inteligentes proxy.

Os perigos dos contratos inteligentes proxy:

  1. Actualizações não autorizadas:
    Os contratos proxy permitem que o proprietário actualize o contrato subjacente. No entanto, se este mecanismo não for implementado de forma segura, pode conduzir a actualizações não autorizadas, permitindo aos atacantes injetar código malicioso no contrato.

  2. Chamadas externas não verificadas:
    Os programadores fraudulentos podem utilizar chamadas externas para contratos não fiáveis sem a devida verificação. Isto pode conduzir a vulnerabilidades, incluindo ataques de reentrada, em que contratos maliciosos chamam repetidamente um contrato proxy, o que pode esgotar os seus fundos.

  3. Falta de transparência:
    O código-fonte do contrato de gestão não é geralmente verificado.

  4. Projectos falsos:
    Os autores de fraudes criam projectos falsos que prometem características atractivas, como rendimentos elevados ou funcionalidades únicas. Podem utilizar contratos de procuração para criar uma aparência de legitimidade e ocultar intenções maliciosas.

  5. Esquemas Ponzi:
    Os burlões constroem esquemas Ponzi com base em contratos proxy, atraindo os utilizadores com promessas de rendimentos elevados. Estes esquemas podem ter componentes actualizáveis para manter a ilusão de plausibilidade.

  6. Contratos clonados:
    Os autores de fraudes clonam projectos legítimos e introduzem vulnerabilidades ou alterações no contrato clonado. Utilizadores incautos podem interagir com esses clones, confundindo-os com o original.

Como é que se pode identificar de forma independente a presença de tais ameaças nos contratos inteligentes?

É de salientar que, se o código-alvo de um contrato inteligente contiver uma referência a um contrato externo (Proxy), então, em quase 100% dos casos, este contrato Proxy terá um código-fonte oculto. Neste caso, o contrato de controlo externo pode executar absolutamente quaisquer acções com o contrato-alvo (por exemplo: alterar os saldos dos utilizadores, ligar e desligar a negociação, iniciar a emissão, etc.).

Por conseguinte, vale a pena compreender que trabalhar com um contrato inteligente Proxy é um jogo de roleta no verdadeiro sentido da palavra (o casino ganha sempre).

Encontrar invocações de proxy num contrato inteligente é bastante fácil. E, como dissemos anteriormente, a implementação de funções maliciosas está no contrato de controlo - com o contrato inteligente alvo a parecer "branco e fofo" (ou seja, é geralmente livre de quaisquer métodos que possam levantar suspeitas).

Se quiser determinar por si próprio se as funcionalidades de proxy estão presentes nos contratos inteligentes, as dicas seguintes serão úteis.

  • Efetuar uma auditoria ao contrato: Antes de trabalhar com qualquer contrato inteligente, analisar o seu código fonte e funcionalidade. Preste atenção à existência de processos de atualização bem documentados, mecanismos de controlo de acesso e transparência do projeto.

  • Certificar-se de que o contrato inteligente foi submetido a uma auditoria de segurança externa efectuada por empresas idóneas. O relatório da auditoria pode fornecer informações sobre potenciais vulnerabilidades.

  • Investigar a equipa de desenvolvimento do projeto. As equipas transparentes e de confiança têm menos probabilidades de se envolverem em fraudes.

  • Consultar a comunidade do projeto e obter feedback de outros utilizadores que tenham experiência com o contrato. Os burlões evitam frequentemente o debate público.

  • Ao lidar com contratos, utilize programas e ferramentas de carteira bem conhecidos que proporcionem segurança adicional e características de proteção das transacções.

  • Ter cuidado ao lidar com contratos novos e não comprovados, especialmente os que prometem rendimentos elevados ou apresentam um comportamento invulgar.

  • Se algo no contrato parecer demasiado bom para ser verdade ou for suspeito, confie na sua intuição e evite-o.

  • Manter-se a par dos últimos desenvolvimentos na nossa comunidade (canal Telegram) e das melhores práticas para a deteção de fraudes (nosso blogue e canal YouTube).

 

O scanner de segurança do Lotus Market encontra todas as funcionalidades comuns (incluindo as ocultas) de controlo externo (Proxy). Utiliza a nossa subscrição premium e protege os teus fundos contra ameaças.

 

 

Seguem-se exemplos de sinais de alerta comuns e padrões suspeitos que deve procurar ao examinar contratos inteligentes para identificar funcionalidades potencialmente maliciosas. É importante compreender estes sinais para se proteger a si e aos outros de potenciais fraudes. Vejamos algumas opções de padrões de código e dicas para o ajudar a identificar funcionalidades suspeitas num contrato inteligente:

 

A regra principal é que, se um código de contrato contiver uma chamada das funções Call, CallCode ou DelegateCall, isso significa que o contrato chama o código externo e passa-lhe o controlo dos seus dados.

tips around proxy

Vejamos os principais exemplos de utilização de contratos Proxy.

1. Variáveis de armazenamento não inicializadas.

Uma das vulnerabilidades mais comuns nos contratos de proxy é a utilização incorrecta das variáveis de armazenamento. Quando um contrato de proxy é utilizado com DelegateCall para chamar funções num contrato de implementação, as variáveis de armazenamento do contrato de proxy são modificadas. No entanto, se o armazenamento do contrato proxy tiver valores não inicializados ou valores por defeito, isto pode levar a um comportamento inesperado.


    contract Implementation {
        address public owner;

        constructor() {
            owner = msg.sender;
        }
    }

Neste exemplo, se a variável do proprietário no contrato Proxy não estiver inicializada, chamar owner() no contrato proxy devolverá a variável do proprietário do contrato de implementação, que pode não ser o que o utilizador espera.

2. Chamadas externas não verificadas.

Os contratos fraudulentos podem utilizar chamadas externas para contratos não fiáveis sem controlos adequados. Se um contrato proxy invocar direta ou indiretamente um contrato malicioso através de DelegateCall, o contrato malicioso pode executar acções arbitrárias, incluindo ataques de reentrada, sem as devidas salvaguardas.


    contract Proxy {
        function execute(address target, bytes memory data) external {
            target.delegatecall(data);
        }
    }

Se um utilizador enviar um contrato arbitrário e dados maliciosos como endereço de destino, isso pode resultar na execução de acções não autorizadas em nome do utilizador.

3. Controlo de acesso inadequado..

Os contratos fraudulentos podem ter controlos de acesso inadequados, permitindo que utilizadores não autorizados executem funções administrativas. Quando se utiliza um contrato proxy, deve controlar-se cuidadosamente quem tem autorização para atualizar o contrato de execução. Se tal não for feito, podem ocorrer alterações não autorizadas do comportamento do contrato.


    contract Proxy {
        address public owner;
        address public implementation;
                                        
        function upgrade(address newImplementation) external {
            require(msg.sender == owner, "Only the owner can upgrade.");
            implementation = newImplementation;
        }
    }

Neste exemplo, se o endereço do proprietário não for devidamente controlado ou se não houver controlos sobre quem pode invocar a função de atualização, pessoas não autorizadas podem alterar a implementação para um contrato malicioso.

4. Riscos de controlo de versões e de gestão.

Os contratos proxy utilizam frequentemente mecanismos de gestão e de controlo de versões para atualizar a lógica do contrato. Se estes mecanismos não forem implementados de forma segura, podem ser vulneráveis a ataques ou manipulações por actores maliciosos.


    contract Proxy {
        address public owner;
        address public implementation;
        address public pendingImplementation;
            
        function upgrade(address newImplementation) external {
            require(msg.sender == owner, "Only the owner can upgrade.");
            pendingImplementation = newImplementation;
        }
        function claimUpgrade() external {
            require(msg.sender == owner, "Only the owner can claim the upgrade.");
            implementation = pendingImplementation;
        }
    }

Neste caso, o atacante pode oferecer um novo contrato "limpo" e depois fazer imediatamente actualizações, colocando efetivamente o seu código malicioso em funcionamento.

tips around proxy

A que é que devo prestar atenção ao estudar os contratos por procuração e que ameaças representam?

  1. Transferência não autorizada de fundos:
    Uma das formas mais comuns de os burlões roubarem dinheiro é através da transferência de fundos pelo titular do contrato para si próprio ou para outro endereço sem autorização.

  2. "Backdoors" ocultos:
    Os autores de fraudes podem esconder código malicioso por detrás de nomes de funcionalidades ofuscados ou enganadores, tornando difícil para os utilizadores descobrirem as suas verdadeiras intenções. Nomes de funções pouco claros ou enganadores. Operadores condicionais que concedem privilégios especiais a determinados endereços.

  3. Falsos tokens e trocas:
    Os burlões criam frequentemente tokens falsos ou plataformas de troca falsas para induzir os utilizadores a transferir os seus activos para um contrato malicioso. Esteja atento a contratos de tokens cujo comportamento seja suspeito, como a criação de tokens ilimitados ou a aceitação de transferências não autorizadas.

  4. Funções de emissão ou de transferência de propriedade não autorizadas:
    Um contrato externo pode alterar o detentor do token ou desencadear uma nova emissão, causando uma inflação dos preços.

  5. Documentação enganosa ou comentários que não correspondem ao comportamento do código:
    Os autores de fraudes podem fornecer documentação ou comentários enganosos ou inexactos no seu código para induzir os utilizadores em erro sobre a verdadeira funcionalidade do contrato. Verifique sempre se a documentação corresponde ao comportamento efetivo do código.

  6. Falta de inspecções de segurança:
    Tenha cuidado com os contratos que não dispõem de verificações de segurança e controlos de acesso adequados ou que não aplicam protecções contra vulnerabilidades comuns, como a reentrada. Ao considerar um contrato inteligente, analise sempre o código, procure designs bem documentados e transparentes, verifique as auditorias de segurança externas e estude o feedback da comunidade. Além disso, tenha cuidado ao interagir com contratos que apresentem qualquer um dos atributos acima referidos, uma vez que podem ser concebidos para roubar fundos ou realizar outras actividades maliciosas.

  7. Expressões condicionais complexas:
    Os autores das fraudes podem utilizar expressões condicionais complexas ou uma lógica difícil de seguir, o que dificulta a compreensão da verdadeira funcionalidade do contrato. Procure códigos desnecessariamente complicados: lógica demasiado complexa ou pouco clara e termos e condições irrelevantes para o objetivo do contrato.

  8. Padrões pouco claros de gestão e propriedade (Ownership):
    Os autores de fraudes utilizam frequentemente contratos de procuração com mecanismos de governação pouco claros ou estruturas de propriedade ocultas, tornando difícil para os utilizadores determinar quem controla o contrato.

  9. Imitação de projectos conhecidos:
    Os burlões criam frequentemente contratos que imitam a funcionalidade ou o aspeto de projectos conhecidos e legítimos. Verifique sempre a autenticidade do projeto e certifique-se de que não se trata de uma falsificação. Prestar atenção a pequenas diferenças nos nomes, logótipos ou marcas. Projectos que se dizem oficiais mas não estão devidamente validados.

  10. Utilização precipitada ou anónima:
    Os autores de fraudes podem lançar contratos apressadamente, sem uma identificação clara e com informações mínimas sobre o projeto ou os seus promotores. Atenção aos contratos implementados sem a devida diligência e planeamento, lançados por uma equipa desconhecida.

  11. Ausência de controlo público ou de auditoria:
    Если контракт не предлагает публичной проверки исходного кода или не прошел аудит безопасности третьей стороной, следует подходить к нему с особой осторожностью.

  12. Armazenamento de dados invulgares ou ocultos:
    Os autores de fraudes podem utilizar esquemas de armazenamento de dados não convencionais ou ocultos para mascarar funcionalidades maliciosas. Note-se que os dados podem ser armazenados em locais inesperados no âmbito do contrato.

  13. Pools de liquidez falsificados:
    No caso dos projectos DeFi, é preciso ter cuidado com os pools de liquidez que prometem rendimentos elevados. Os autores de fraudes podem criar pools falsos para atrair liquidez e depois explorar os utilizadores. Receitas incoerentemente elevadas da provisão de liquidez. Falta de transparência e de documentação sobre o mecanismo de funcionamento do fundo comum.

tips around proxy

Para proteger contra tais vulnerabilidades, os contratos que utilizam modelos de proxy e DelegateCall devem ser cuidadosamente revistos e auditados, devem ser implementados mecanismos de controlo de acesso e as chamadas externas devem ser protegidas. Os utilizadores devem ter cuidado ao interagir com contratos, especialmente aqueles com mecanismos de atualização complexos, e devem sempre realizar a devida diligência antes de interagir com um contrato inteligente na cadeia de blocos.

No mundo em rápida evolução da Blockchain, é imperativo manter-se vigilante e informado para se proteger a si e aos seus activos de potenciais esquemas fraudulentos e vulnerabilidades relacionadas com contratos proxy e funcionalidades DelegateCall.

 

Esperamos que esta informação o tenha ajudado a compreender melhor os esquemas de contratos inteligentes geridos (Proxy).

 

Uma vez que toda a informação na cadeia de blocos é aberta (desde que, obviamente, o código-fonte do contrato seja verificado), munido deste conhecimento pode estudar independentemente os contratos inteligentes e identificar vários esquemas de burla.

No entanto, nós já fizemos tudo isso por ti! Inscreve-te para uma subscrição premium e obtém acesso a filtros exclusivos sobre características de contratos inteligentes e novas análises. Aumenta as tuas hipóteses de investir com sucesso em tokens lucrativos.

Cumprimentos, equipa do Lotus Market.

All posts

Connect to a wallet

Metamask