Analise smart-contract
12.04.2024

Descrierea detectorului Proxy

Continuăm seria de articole dedicate descrierii schemelor frauduloase din contractele inteligente. Astăzi vom vorbi despre contractele inteligente cu funcția de control proxy (Proxy).

Contractele inteligente proxy au câștigat popularitate în spațiul blockchain datorită modernizabilității și flexibilității lor. Cu toate acestea, astfel de contracte comportă și un mare pericol, mai ales atunci când sunt utilizate de utilizatori rău intenționați. Fraudatorii folosesc adesea scheme înșelătoare în contractele inteligente proxy pentru a înșela utilizatorii. Pentru a identifica astfel de amenințări, trebuie să înțelegeți riscurile posibile și să aveți cunoștințe tehnice.

Să analizăm mai îndeaproape o descriere a pericolelor potențiale, a schemelor de înșelăciune comune și a modului de identificare a acestor amenințări în contractele inteligente proxy.

Pericolele contractelor inteligente proxy:

  1. Actualizare neautorizată:
    Contractele proxy permit proprietarului să actualizeze contractul de bază. Cu toate acestea, dacă acest mecanism nu este implementat în siguranță, poate duce la actualizări neautorizate, permițând atacatorilor să injecteze cod malițios în contract.

  2. Apeluri externe necontrolate:
    Programatorii necinstiți pot utiliza apeluri externe către contracte neîncrezătoare fără o verificare corespunzătoare. Acest lucru poate duce la vulnerabilități, inclusiv atacuri de reentranță, în care contractele rău intenționate apelează în mod repetat un contract proxy, care poate epuiza fondurile acestuia.

  3. Lipsă de transparență:
    Codul sursă al contractului de management nu este de obicei verificat.

  4. Proiecte false:
    Fraudatorii creează proiecte false care promit caracteristici atractive, cum ar fi randamente ridicate sau funcționalități unice. Aceștia pot utiliza contracte proxy pentru a crea aparența de legitimitate, ascunzând în același timp intenții malițioase.

  5. Schemele Ponzi:
    Escrocii construiesc scheme Ponzi bazate pe contracte proxy, ademenind utilizatorii cu promisiuni de randamente ridicate. Astfel de scheme pot avea componente actualizabile pentru a menține iluzia plauzibilității.

  6. Contracte clonate:
    Fraudatorii clonează proiecte legitime și introduc vulnerabilități sau modificări în contractul clonat. Utilizatorii care nu bănuiesc nimic pot interacționa cu astfel de clone, confundându-le cu originalul.

Cum puteți determina în mod independent dacă astfel de amenințări sunt prezente în contractele inteligente?

Este demn de remarcat faptul că, dacă codul țintă al unui contract inteligent conține o referință la un contract extern (Proxy), atunci în aproape 100% din cazuri acest contract Proxy va fi cu codul sursă ascuns. În acest caz, contractul de control extern poate efectua absolut orice acțiune cu contractul țintă (de exemplu: modificarea soldurilor utilizatorilor, activarea și dezactivarea tranzacțiilor, pornirea emisiei etc.).

De aceea, merită să înțelegem că lucrul cu un contract inteligent Proxy este un joc de ruletă în adevăratul sens al cuvântului (cazinoul câștigă întotdeauna).

Găsirea invocărilor Proxy într-un contract inteligent este destul de ușoară. Și, așa cum am spus mai devreme, implementarea funcțiilor malițioase se află în contractul de control - contractul inteligent țintă părând "alb și pufos" (adică, în general, este lipsit de orice metode care ar putea ridica suspiciuni).

Dacă doriți să determinați singur dacă funcțiile Proxy sunt prezente în contractele inteligente, următoarele sfaturi vă vor fi de ajutor.

  • Conduceți un audit al contractului: Înainte de a lucra cu orice contract inteligent, examinați codul sursă și funcționalitatea acestuia. Acordați atenție existenței unor procese de actualizare bine documentate, mecanismelor de control al accesului și transparenței proiectului.

  • Asigurați-vă că contractul inteligent a fost supus unui audit de securitate extern de către companii de renume. Raportul de audit poate oferi o perspectivă asupra potențialelor vulnerabilități.

  • Analizați echipa de dezvoltare a proiectului. Echipele transparente și de încredere sunt mai puțin susceptibile de a se angaja în fraudă.

  • Consultați comunitatea proiectului și obțineți feedback de la alți utilizatori care au experiență cu contractul. Escrocii evită adesea discuțiile publice.

  • Când lucrați cu contracte, utilizați programe și instrumente de portofel bine cunoscute care oferă funcții suplimentare de securitate și de protecție a tranzacțiilor.

  • Aveți grijă când lucrați cu contracte noi și nedovedite, în special cu cele care promit randamente ridicate sau prezintă un comportament neobișnuit.

  • Dacă ceva din contract pare prea bun ca să fie adevărat sau este suspect, aveți încredere în intuiția dvs. și evitați-l.

  • Să fiți la curent cu cele mai recente evoluții din comunitatea noastră (canalul Telegram) și cu cele mai bune practici pentru detectarea fraudelor (blogul nostru și canalul YouTube).

Scanerul de securitate al Lotus Market găsește toate caracteristicile comune (inclusiv ascunse) de control extern (Proxy). Utilizați abonamentul nostru premium și protejați-vă fondurile de amenințări.


Sunt prezentate în continuare exemple de semnale de alarmă comune și modele suspecte pe care ar trebui să le căutați atunci când examinați contractele inteligente pentru a identifica funcționalități potențial malițioase. Este important să înțelegeți aceste semne pentru a vă proteja pe dvs. și pe alții de posibile fraude. Să analizăm câteva variații de tipare de cod și sfaturi pentru a vă ajuta să identificați funcționalitatea suspectă într-un contract inteligent:

Regula principală este că, dacă un cod de contract conține o apelare a funcțiilor Call, CallCode sau DelegateCall, înseamnă că contractul apelează la un cod extern și îi transmite acestuia controlul datelor sale.

tips around proxy

Să aruncăm o privire la principalele exemple de utilizare a contractelor Proxy.

1. Variabile de stocare neinițializate.

Una dintre cele mai comune vulnerabilități ale contractelor proxy este utilizarea abuzivă a variabilelor de stocare. Atunci când un contract proxy este utilizat cu DelegateCall pentru a apela funcții pe un contract de implementare, variabilele de stocare ale contractului proxy sunt modificate. Cu toate acestea, dacă stocarea contractului proxy are valori neinițializate sau valori implicite, acest lucru poate duce la un comportament neașteptat.


  contract Implementation {
    address public owner;

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

În acest exemplu, dacă variabila owner din contractul Proxy este neinițializată, apelarea lui owner() pe contractul proxy va returna variabila owner a contractului de implementare, ceea ce poate să nu fie ceea ce se așteaptă utilizatorul.

2. Apeluri externe neverificate.

Contractele frauduloase pot utiliza apeluri externe către contracte neîncrezătoare fără verificări corespunzătoare. Dacă un contract proxy invocă direct sau indirect un contract malițios prin DelegateCall, contractul malițios poate efectua acțiuni arbitrare, inclusiv atacuri de reentranță, fără garanții adecvate.


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

Dacă un utilizator trimite un contract arbitrar și date malițioase ca adresă țintă, aceasta poate avea ca rezultat efectuarea de acțiuni neautorizate în numele utilizatorului.

3. Control de acces necorespunzător.

Contractele frauduloase pot avea controale de acces necorespunzătoare, permițând utilizatorilor neautorizați să efectueze funcții administrative. Atunci când se utilizează un contract proxy, trebuie controlat cu atenție cine are permisiunea de a actualiza contractul de implementare. Nerespectarea acestei reguli poate duce la modificări neautorizate ale comportamentului contractului.


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

În acest exemplu, dacă adresa proprietarului nu este controlată corespunzător sau dacă nu există verificări cu privire la cine poate invoca funcția de actualizare, părțile neautorizate pot modifica implementarea într-un contract rău intenționat.

4. Riscuri legate de versionare și gestionare.

Contractele proxy utilizează adesea mecanisme de versionare și gestionare pentru a actualiza logica contractului. Dacă aceste mecanisme nu sunt implementate în siguranță, ele pot deveni vulnerabile la atac sau manipulare de către părți rău intenționate.


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

În acest caz, atacatorul poate oferi un nou contract "curat" și apoi face imediat actualizări, punând efectiv în funcțiune codul său malițios.

tips around proxy

La ce ar trebui să fiu atent atunci când studiez contractele Proxy și ce amenințări reprezintă acestea?

  1. Transfer neautorizat de fonduri:
    Una dintre cele mai frecvente modalități prin care escrocii fură bani este transferul de fonduri de către titularul contractului către sine sau către o altă adresă fără autorizație.

  2. "Backdoors" ascunse:
    Fraudatorii pot ascunde codul malițios în spatele unor denumiri de funcții neclare sau înșelătoare, făcând dificilă detectarea adevăratelor intenții ale utilizatorilor. Nume de funcții neclare sau înșelătoare. Operatori condiționali care acordă privilegii speciale anumitor adrese.

  3. Tokens și schimburi false:
    Escrocii creează adesea jetoane false sau platforme de schimb false pentru a păcăli utilizatorii să își transfere activele către un contract malițios. Acordați atenție contractelor de jetoane al căror comportament este suspect, cum ar fi baterea de jetoane nelimitate sau acceptarea transferurilor neautorizate.

  4. Funcții neautorizate de emitere sau transfer de proprietate:
    Un contract extern poate schimba deținătorul tokenului sau poate declanșa o nouă emisiune, provocând inflația prețurilor.

  5. Documentație înșelătoare sau comentarii inconsistente cu comportamentul codului:
    Fraudatorii pot furniza documentație înșelătoare sau inexactă sau comentarii în codul lor pentru a induce în eroare utilizatorii cu privire la adevărata funcționalitate a contractului. Întotdeauna verificați încrucișat documentația cu comportamentul real al codului.

  6. Lipsă de inspecții de securitate:
    Feriți-vă de contractele cărora le lipsesc verificările de securitate adecvate, controalele de acces sau nu reușesc să implementeze protecții împotriva vulnerabilităților comune, cum ar fi reentranța. Atunci când luați în considerare un contract inteligent, scrutați întotdeauna codul, căutați modele bine documentate și transparente, verificați auditurile de securitate externe și studiați feedback-ul comunității. În plus, fiți precauți atunci când interacționați cu contracte care prezintă oricare dintre aceste atribute, deoarece acestea pot fi concepute pentru a fura fonduri sau a efectua alte activități rău intenționate.

  7. Expresii condiționale complexe:
    Fraudatorii pot utiliza expresii condiționale complexe sau o logică greu de urmărit, ceea ce face dificilă înțelegerea adevăratei funcționalități a contractului. Căutați coduri inutil de întortocheate: logică prea complexă sau neclară și termeni și condiții care nu sunt relevante pentru scopul contractului.

  8. Modele neclare de gestionare și de proprietate (Proprietate):
    Escrocii utilizează adesea contracte proxy cu mecanisme de guvernanță neclare sau structuri de proprietate ascunse, ceea ce face dificilă pentru utilizatori determinarea persoanei care controlează contractul.

  9. Imitarea proiectelor cunoscute:
    Escrocii creează adesea contracte care imită funcționalitatea sau aspectul unor proiecte cunoscute, legitime. Verificați întotdeauna autenticitatea proiectului și asigurați-vă că nu este un fals. Acordați atenție diferențelor minore în nume, logo-uri sau branding. Proiecte care pretind a fi oficiale, dar cărora le lipsește validarea corespunzătoare.

  10. Distribuire grăbită sau anonimă:
    Fraudatorii pot desfășura contracte în grabă, fără o identificare clară și cu informații minime despre proiect sau dezvoltatorii acestuia. Acordați atenție contractelor desfășurate fără diligența și planificarea necesare, lansate de o echipă necunoscută.

  11. Lipsă de verificare sau audit public:
    Dacă contractul nu oferă o revizuire publică a codului sursă sau nu a fost supus unui audit de securitate al unei terțe părți, ar trebui să îl abordați cu extremă precauție.

  12. Stocarea neobișnuită sau ascunsă a datelor:
    Fraudatorii pot utiliza scheme neconvenționale sau ascunse de stocare a datelor pentru a masca funcționalitatea rău intenționată. Rețineți că datele pot fi stocate în locuri neașteptate în cadrul contractului.

  13. Piscine de lichidități contrafăcute:
    În cazul proiectelor DeFi, feriți-vă de bazinele de lichidități care promit randamente ridicate. Fraudatorii pot crea bazine false pentru a atrage lichidități și a exploata apoi utilizatorii. Venituri ridicate în mod inconsecvent din furnizarea de lichidități. Lipsa de transparență și de documentare a mecanismului de funcționare a bazinului.

tips around proxy

Pentru a se proteja împotriva unor astfel de vulnerabilități, contractele care utilizează modele de proxy și DelegateCall ar trebui revizuite și auditate cu atenție, ar trebui implementate mecanisme de control al accesului, iar apelurile externe ar trebui securizate. Utilizatorii ar trebui să dea dovadă de prudență atunci când interacționează cu contractele, în special cele cu mecanisme complexe de actualizare, și ar trebui să efectueze întotdeauna o diligență corespunzătoare înainte de a interacționa cu un contract inteligent pe blockchain.

În lumea Blockchain, care evoluează rapid, este imperativ să rămâneți vigilenți și informați pentru a vă proteja și a vă proteja bunurile de potențiale scheme frauduloase și vulnerabilități legate de contractele proxy și caracteristicile DelegateCall.


Sperăm că aceste informații v-au ajutat să înțelegeți mai bine schemele de contracte inteligente gestionate (Proxy).


Din moment ce toate informațiile din blockchain sunt deschise (cu condiția, desigur, ca codul sursă al contractului să fie verificat), înarmat cu aceste cunoștințe puteți studia independent contractele inteligente și identifica diverse scheme de înșelăciune.

De altfel, noi am făcut deja totul pentru dumneavoastră! Înscrieți-vă pentru un abonament premium și obțineți acces la filtre exclusive privind caracteristicile contractelor inteligente și la analize proaspete. Creșteți-vă șansele de a investi cu succes în token-uri profitabile.

Regards, Lotus Market team.

All posts

Connect to a wallet

Metamask