Analise smart-contract
12.04.2024

Descrizione del rilevatore proxy

Continuiamo la serie di articoli dedicati alla descrizione degli schemi fraudolenti nei contratti smart. Oggi parleremo degli smart contract con funzione di controllo proxy (Proxy).

Gli smart contract proxy hanno guadagnato popolarità nello spazio blockchain grazie alla loro modernizzazione e flessibilità. Tuttavia, tali contratti comportano anche un grande pericolo, soprattutto se utilizzati da utenti malintenzionati. I truffatori spesso utilizzano schemi ingannevoli nei contratti smart proxy per frodare gli utenti. Per identificare tali minacce, è necessario comprendere i possibili rischi ed essere tecnicamente esperti.

Diamo un'occhiata più da vicino a una descrizione dei potenziali pericoli, degli schemi di inganno più comuni e di come identificare tali minacce nei contratti smart proxy.

I pericoli dei contratti smart proxy:

  1. Aggiornamento non autorizzato:
    I contratti proxy consentono al proprietario di aggiornare il contratto sottostante. Tuttavia, se questo meccanismo non è implementato in modo sicuro, può portare ad aggiornamenti non autorizzati, consentendo agli aggressori di iniettare codice dannoso nel contratto.

  2. Chiamate esterne non verificate:
    I programmatori non autorizzati possono utilizzare chiamate esterne a contratti non attendibili senza un'adeguata verifica. Questo può portare a vulnerabilità, tra cui gli attacchi di rientranza, in cui i contratti dannosi chiamano ripetutamente un contratto proxy, che può esaurire i suoi fondi.

  3. Mancanza di trasparenza:
    Il codice sorgente del contratto di gestione di solito non è verificato.

  4. Progetti falsi:
    I truffatori creano progetti falsi che promettono caratteristiche interessanti, come alti rendimenti o funzionalità uniche. Possono utilizzare contratti proxy per creare un'apparenza di legittimità, nascondendo al contempo un intento malevolo.

  5. Schemi di Ponzi:
    I truffatori costruiscono schemi Ponzi basati su contratti proxy, attirando gli utenti con promesse di alti rendimenti. Tali schemi possono avere componenti aggiornabili per mantenere l'illusione di plausibilità.

  6. Contratti clonati:
    I truffatori clonano progetti legittimi e introducono vulnerabilità o modifiche al contratto clonato. Gli utenti ignari possono interagire con tali cloni, scambiandoli per l'originale.

Come si può determinare in modo indipendente se tali minacce sono presenti negli smart contract?

Vale la pena notare che se il codice di destinazione di uno smart contract contiene un riferimento a un contratto esterno (Proxy), allora in quasi il 100% dei casi questo contratto Proxy sarà con codice sorgente nascosto. In questo caso, il contratto di controllo esterno può eseguire qualsiasi azione con il contratto target (ad esempio: modificare i saldi degli utenti, attivare e disattivare il trading, avviare l'emissione, ecc.)

Quindi, vale la pena di capire che lavorare con uno smart contract Proxy è un gioco di roulette nel vero senso della parola (il casinò vince sempre).

Trovare invocazioni Proxy in uno smart contract è abbastanza facile. E, come abbiamo detto in precedenza, l'implementazione di funzioni dannose si trova nel contratto di controllo, mentre lo smart contract di destinazione appare "bianco e soffice" (cioè, è generalmente privo di metodi che potrebbero destare sospetti).

Se volete determinare da soli se le funzioni Proxy sono presenti negli smart contract, i seguenti suggerimenti vi saranno utili.

  • Condurre una verifica del contratto: Prima di lavorare con qualsiasi contratto smart, esaminatene il codice sorgente e le funzionalità. Prestate attenzione all'esistenza di processi di aggiornamento ben documentati, ai meccanismi di controllo degli accessi e alla trasparenza del progetto.

  • Assicuratevi che lo smart contract sia stato sottoposto a un audit di sicurezza esterno da parte di aziende affidabili. Il rapporto di audit può fornire indicazioni sulle potenziali vulnerabilità.

  • Ricerca sul team di sviluppo del progetto. I team trasparenti e affidabili hanno meno probabilità di commettere frodi.

  • Consulta la comunità del progetto e ottieni un feedback da altri utenti che hanno esperienza con il contratto. I truffatori spesso evitano le discussioni pubbliche.

  • Quando si lavora con i contratti, utilizzare programmi e strumenti di portafoglio ben noti che forniscono ulteriori funzioni di sicurezza e di protezione delle transazioni.

  • Fare attenzione quando si ha a che fare con contratti nuovi e non collaudati, soprattutto quelli che promettono rendimenti elevati o che mostrano un comportamento insolito.

  • Se qualcosa nel contratto sembra troppo bello per essere vero o è sospetto, fidatevi del vostro intuito ed evitatelo.

  • Aggiornatevi sugli ultimi sviluppi della nostra comunità (canale Telegram) e sulle migliori pratiche per il rilevamento delle frodi (il nostro blog e il nostro canale YouTube).

Lo scanner di sicurezza di Lotus Market trova tutte le funzioni di controllo esterno (Proxy) comuni (anche nascoste). Utilizzate il nostro abbonamento premium e proteggete i vostri fondi dalle minacce.


Quelli che seguono sono esempi di bandiere rosse comuni e schemi sospetti che dovreste cercare quando esaminate gli smart contract per identificare funzionalità potenzialmente dannose. È importante comprendere questi segnali per proteggere se stessi e gli altri da potenziali frodi. Vediamo alcune varianti di schemi di codice e suggerimenti per aiutarvi a identificare funzionalità sospette in uno smart contract:

La regola principale è che se il codice di un contratto contiene una chiamata di funzioni Call, CallCode o DelegateCall, significa che il contratto chiama un codice esterno e gli passa il controllo dei suoi dati.

tips around proxy

Vediamo i principali esempi di utilizzo dei contratti Proxy.

1. Variabili di memorizzazione non inizializzate. Variabili di memoria non inizializzate.

Una delle vulnerabilità più comuni nei contratti proxy è l'uso improprio delle variabili di memoria. Quando un contratto proxy viene usato con DelegateCall per chiamare funzioni su un contratto di implementazione, le variabili di memorizzazione del contratto proxy vengono modificate. Tuttavia, se la memoria del contratto proxy ha valori non inizializzati o valori predefiniti, questo può portare a comportamenti inaspettati.


  contract Implementation {
    address public owner;

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

In questo esempio, se la variabile owner nel contratto Proxy non è inizializzata, la chiamata a owner() sul contratto proxy restituirà la variabile owner del contratto di implementazione, che potrebbe non essere quella che l'utente si aspetta.

2. Chiamate esterne non verificate.

I contratti fraudolenti possono utilizzare chiamate esterne a contratti non attendibili senza controlli adeguati. Se un contratto proxy invoca direttamente o indirettamente un contratto dannoso tramite DelegateCall, il contratto dannoso può eseguire azioni arbitrarie, compresi gli attacchi di rientranza, senza le dovute protezioni.


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

Se un utente invia un contratto arbitrario e dati dannosi come indirizzo di destinazione, è possibile che vengano eseguite azioni non autorizzate per conto dell'utente.

3. Controllo dell'accesso improprio.

I contratti fraudolenti possono avere controlli dell'accesso inappropriati, consentendo a utenti non autorizzati di eseguire funzioni amministrative. Quando si utilizza un contratto proxy, occorre controllare attentamente chi ha il permesso di aggiornare il contratto di implementazione. In caso contrario, potrebbero verificarsi modifiche non autorizzate al comportamento del contratto.


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

In questo esempio, se l'indirizzo del proprietario non è adeguatamente controllato o non ci sono controlli su chi può invocare la funzione di aggiornamento, parti non autorizzate possono modificare l'implementazione in un contratto dannoso.

4. Rischi legati al versioning e alla gestione.

I contratti proxy utilizzano spesso meccanismi di versioning e gestione per aggiornare la logica del contratto. Se questi meccanismi non sono implementati in modo sicuro, possono diventare vulnerabili ad attacchi o manipolazioni da parte di malintenzionati.


  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;
    }
}

In questo caso, l'aggressore può offrire un nuovo contratto "pulito" e poi effettuare immediatamente gli aggiornamenti, mettendo effettivamente in funzione il proprio codice dannoso.

tips around proxy

A cosa devo prestare attenzione quando studio i contratti Proxy e quali minacce rappresentano?

  1. Trasferimento di fondi non autorizzato:
    Uno dei modi più comuni in cui i truffatori rubano il denaro è il trasferimento di fondi dal titolare del contratto a se stesso o a un altro indirizzo senza autorizzazione.

  2. Le "backdoor" nascoste:
    I truffatori possono nascondere il codice maligno dietro nomi di funzioni offuscati o fuorvianti, rendendo difficile per gli utenti individuare le loro vere intenzioni. Nomi di funzioni poco chiari o fuorvianti. Operatori condizionali che concedono privilegi speciali a determinati indirizzi.

  3. Tokens e scambi falsi:
    I truffatori spesso creano token falsi o piattaforme di scambio false per ingannare gli utenti e trasferire i loro beni a un contratto dannoso. Prestate attenzione ai contratti di token il cui comportamento è sospetto, come il conio di token illimitati o l'accettazione di trasferimenti non autorizzati.

  4. Funzioni di emissione non autorizzata o di trasferimento di proprietà:
    Un contratto esterno può cambiare il titolare del token o innescare una nuova emissione, causando un'inflazione dei prezzi.

  5. Documentazione fuorviante o commenti non coerenti con il comportamento del codice:
    I truffatori possono fornire documentazione o commenti fuorvianti o imprecisi nel loro codice per ingannare gli utenti sulla reale funzionalità del contratto. Effettuate sempre un controllo incrociato tra la documentazione e il comportamento effettivo del codice.

  6. Mancanza di ispezioni di sicurezza:
    Diffidate dei contratti che mancano di controlli di sicurezza adeguati, di controlli di accesso o che non implementano protezioni contro vulnerabilità comuni come la rientranza. Quando si prende in considerazione uno smart contract, bisogna sempre esaminare il codice, cercare progetti ben documentati e trasparenti, controllare le verifiche di sicurezza esterne e studiare i feedback della comunità. Inoltre, bisogna essere cauti quando si interagisce con contratti che presentano uno di questi attributi, poiché potrebbero essere progettati per rubare fondi o eseguire altre attività dannose.

  7. Espressioni condizionali complesse:
    I truffatori possono utilizzare espressioni condizionali complesse o una logica difficile da seguire, rendendo difficile la comprensione della vera funzionalità del contratto. Cercate codici inutilmente contorti, logiche troppo complesse o poco chiare e termini e condizioni irrilevanti per lo scopo del contratto.

  8. Schemi non chiari di gestione e proprietà (Ownership):
    I truffatori spesso utilizzano contratti proxy con meccanismi di governance poco chiari o strutture di proprietà nascoste, rendendo difficile per gli utenti determinare chi controlla il contratto.

  9. Imitazione di progetti noti:
    I truffatori spesso creano contratti che imitano la funzionalità o l'aspetto di progetti noti e legittimi. Verificate sempre l'autenticità del progetto e assicuratevi che non si tratti di un falso. Prestate attenzione alle piccole differenze nei nomi, nei loghi o nel marchio. Progetti che dichiarano di essere ufficiali ma che non hanno un'adeguata convalida.

  10. Distribuzione frettolosa o anonima:
    I truffatori possono distribuire i contratti in modo frettoloso, senza una chiara identificazione e con informazioni minime sul progetto o sui suoi sviluppatori. Prestate attenzione ai contratti distribuiti senza la dovuta diligenza e pianificazione, rilasciati da un team sconosciuto.

  11. Mancanza di verifica o audit pubblico:
    Se il contratto non offre una verifica pubblica del codice sorgente o non è stato sottoposto a un audit di sicurezza da parte di terzi, dovreste affrontarlo con estrema cautela.

  12. Memorizzazione dei dati insolita o nascosta:
    I truffatori possono utilizzare schemi di archiviazione dei dati non convenzionali o furtivi per mascherare le funzionalità dannose. Si noti che i dati possono essere memorizzati in luoghi inaspettati all'interno del contratto.

  13. Pool di liquidità contraffatti:
    Nel caso dei progetti DeFi, diffidate dei pool di liquidità che promettono rendimenti elevati. I truffatori possono creare pool falsi per attirare liquidità e poi sfruttare gli utenti. Ricavi incoerentemente elevati dalla fornitura di liquidità. Mancanza di trasparenza e di documentazione del meccanismo operativo del pool.

tips around proxy

Per proteggersi da queste vulnerabilità, i contratti che utilizzano modelli proxy e DelegateCall dovrebbero essere attentamente rivisti e verificati, dovrebbero essere implementati meccanismi di controllo degli accessi e le chiamate esterne dovrebbero essere protette. Gli utenti dovrebbero esercitare cautela quando interagiscono con i contratti, specialmente quelli con meccanismi di aggiornamento complessi, e dovrebbero sempre eseguire la dovuta diligenza prima di interagire con uno smart contract sulla blockchain.

Nel mondo in rapida evoluzione della blockchain, è imperativo rimanere vigili e informati per proteggere se stessi e i propri beni da potenziali schemi fraudolenti e vulnerabilità legate ai contratti proxy e alle funzionalità di DelegateCall.


Speriamo che queste informazioni vi abbiano aiutato a comprendere meglio gli schemi di contratti smart gestiti (Proxy).


Dal momento che tutte le informazioni nella blockchain sono aperte (a condizione, ovviamente, che il codice sorgente del contratto sia verificato), armati di queste conoscenze potete studiare in modo indipendente i contratti smart e identificare i vari schemi di truffa.

Tuttavia, abbiamo già fatto tutto per voi! Sottoscrivete un abbonamento premium e avrete accesso a filtri esclusivi sulle caratteristiche dei contratti intelligenti e a nuove analisi. Aumenta le tue possibilità di investire con successo in token redditizi.

Regards, Lotus Market team.

All posts

Connect to a wallet

Metamask