Împrumuturile Flash au fost în centrul atenției în ultima vreme, deoarece au loc mai multe incidente de furt de bani din protocoalele DeFi...
Împrumuturile Flash au fost în centrul atenției în ultima vreme, deoarece au avut loc mai multe incidente de furt cu protocolul DeFi, de la Harvest Finance piratat pentru peste 33 de milioane USD până la cel mai recent incident OUSD. Mining de 7 milioane USD.
Din punctul de vedere al hackerului, acest atac pare o oportunitate grozavă de a împrumuta instantaneu sute de mii de dolari de la o persoană fără bani în valoarea ETH. Apoi treceți-l prin protocoale vulnerabile în lanț și extrageți sute de dolari din buzunar și plătiți înapoi împrumutul. Toate acestea s-au întâmplat cât ai clipi într-o tranzacție Ethereum.
Nu știm cine sunt acești atacatori sau de unde vin. Toți au început cu nimic și au plecat cu bani în valoare de sute de mii de dolari și nu au lăsat nicio urmă de identificat.
Ce sunt împrumuturile flash?
Conceptul de împrumuturi flash a fost introdus pentru prima dată de Max Wolff, creatorul Marble Protocol, în 2018.
Împrumuturile Flash utilizate în mod obișnuit pentru Ethereum sau ERC20 sunt împrumutate doar pentru timpul necesar pentru a finaliza un bloc de tranzacții pe blockchain. Atâta timp cât împrumutul este rambursat înainte de începerea următorului bloc de tranzacții, împrumutatul nu va suporta dobânzi.
Dacă creditorii tradiționali suportă două forme de risc: riscul de neplată sau riscul de lichiditate, Flash Loans rezolvă aceste două probleme. Practic, împrumuturile flash funcționează astfel:
Vă împrumut suma dorită într-o singură tranzacție. Dar la sfârșitul acestei tranzacții trebuie să-mi returnați cel puțin suma pe care v-am împrumutat. Dacă nu plătiți, vă voi restabili automat tranzacția, ceea ce înseamnă că nu a început niciodată.
Acest lucru există doar pe Blockchain. Nu puteți face împrumuturi flash pe BitMex. Deoarece contractul inteligent poate procesa fiecare tranzacție, tot ceea ce se întâmplă în tranzacție este executat secvenţial. Puteți considera acest lucru drept „timp de înghețare” a tranzacției în timp ce tranzacția este în curs.
Creditorii tradiționali sunt compensați pentru două lucruri: riscul pe care și-l asumă (riscuri de nerambursare și lipsă de lichiditate) și costul de oportunitate al capitalului pe care îl împrumută.
Împrumuturile flash sunt diferite. Împrumuturile flash într-adevăr nu au niciun risc și nici un cost de oportunitate! Acest lucru se datorează faptului că împrumutații sunt „înghețați” pe durata împrumuturilor lor rapide, astfel încât capitalul sistemului nu este niciodată în pericol și nu este niciodată împiedicat, astfel încât nu poate câștiga dobândă în altă parte (adică nu are cost de oportunitate).
Aceasta înseamnă că nu există niciun cost pentru a deveni un creditor flash. Acestea fiind spuse, cât costă împrumuturile flash la echilibru?
Practic, împrumuturile flash sunt gratuite. Sau, mai degrabă, o taxă suficient de mică pentru a amortiza costul include 3 linii de cod suplimentare, astfel încât proprietatea să se poată împrumuta rapid.
Împrumuturile flash nu pot fi percepute cu dobândă în mod tradițional, deoarece împrumutul este valabil pentru zero timp (orice DAE * 0 = 0). Și, desigur, dacă instituțiile care oferă împrumuturi flash percep dobânzi mai mari, acestea vor fi percepute rapid cu dobânzi mai mici de către alte pool-uri de creditare flash.
Unele proiecte aplică în prezent împrumuturi flash fără comisioane, cum ar fi dYdX sau AAVE, care percep 0,09% din principal pentru împrumuturile flash.
Pentru ce sunt folosite împrumuturile flash?
Împrumuturile flash erau cunoscute inițial în principal pentru tranzacționarea prin arbitraj. Marble, creatorul sursei de definire a împrumuturilor Flash, spune:
Cu împrumuturi flash, comercianții pot împrumuta de la Marble Bank, pot cumpăra jetoane pe un DEX, vinde jetoane pe un alt DEX la un preț mai mare, rambursează împrumuturile bancare și pot profita de arbitraj de buzunar într-o singură tranzacție.” .
Într-adevăr, majoritatea împrumuturilor sunt folosite în acest scop.
Dar volumul este foarte mic. AAVE are puțin peste 10.000 USD în împrumuturi de la înființare. Acest lucru este minuscul în comparație cu piața de arbitraj și lichidare de pe DeFi.
De asemenea, pentru că majoritatea tranzacțiilor prin arbitraj sunt efectuate de arbitrageri competitivi care rulează programe complexe. Ei participă la licitațiile de gaz preferate în lanț și folosesc jetoane de gaz pentru a optimiza taxele de tranzacție. Este o piață foarte competitivă - acești oameni sunt perfect fericiți să păstreze niște jetoane în bilanțul lor pentru a optimiza câștigurile.
Pe de altă parte, împrumutul pe AAVE costă în jur de 80.000 de gaze și percepe 0,09% din capital, un preț prea scump de plătit pentru un arbitraj competitiv cu o marjă mică. De fapt, la majoritatea comercianților de arbitraj AAVE, împrumutatul ajunge să plătească mai multe comisioane către grupul de creditare decât le primește.
Pe termen lung, este puțin probabil ca arbitragerii să folosească împrumuturi flash, cu excepția unor circumstanțe excepționale.
Dar împrumuturile flash au alte cazuri de utilizare mai convingătoare în DeFi. Un exemplu este refinanțarea împrumuturilor.
Exemplu: Să presupunem că aveți un seif Maker (CDP) cu 100 USD ETH blocat și ați împrumutat 40 DAI de la acesta. Deci aveți o poziție netă de 60 USD minus datoria. Acum doriți să refinanțați în Compound pentru o rată a dobânzii mai bună.
De obicei, este necesar să răscumpărați 40 DAI extern, poate pe acel schimb pentru a completa CDP, deoarece necesită niște capital inițial. În schimb, puteți obține un împrumut rapid de 40 DAI, puteți închide 100 USD CDP, puteți depune 60 USD ETH deblocat în Compound, puteți converti încă 40 USD ETH înapoi în DAI prin Uniswap și îl puteți folosi pentru a plăti împrumuturi flash.
Atacurile de împrumut flash au implicații mari de securitate
Primele incidente au provenit din hack-ul bZx și poate că aceasta a fost torța care a declanșat alte atacuri.
Există două motive principale pentru care împrumuturile flash sunt deosebit de atractive pentru atacatori.
Multe atacuri necesită mult capital inițial (cum ar fi atacurile de manipulare a oracolului).
Împrumuturile flash reduc riscul expunerii la atacatori. Dacă am o idee despre cum să manipulez oracolul cu 10 milioane de dolari Ether, chiar dacă dețin atât de mult Ether, s-ar putea să nu vreau să-mi risc capitalul. ETH-ul meu va fi afectat, schimburile pot respinge depozitul meu și va fi mai greu ca banii să circule. Destul de risc! Dar dacă primesc un împrumut rapid de 10 milioane de dolari, cui îi pasă? Toate sunt opuse. Nu este ca și cum fondul de credite ipotecare al dYdX ar fi considerat afectat negativ, deoarece de aici provin împrumuturile sale.
S-ar putea să nu vă placă faptul că lista neagră a schimburilor este parte a paradigmei de securitate blockchain de astăzi. Este destul de secret și concentrat. Dar realitatea este destul de importantă având în vedere calculul din spatele acestor atacuri.
În cartea albă Bitcoin, Satoshi a declarat că Bitcoin este ferit de atacuri deoarece:
„[Atacatorul] ar trebui să găsească mai profitabil să respecte regulile […] decât să distrugă sistemul și propria valoare a activelor.”
Cu împrumuturile flash, atacatorii nu mai trebuie să cheltuiască mulți bani pe joc. Împrumuturile flash modifică dramatic riscul pentru atacatori.
Și nu uitați, împrumuturile flash se pot acumula! În conformitate cu plafonul de benzină, puteți agrega orice fonduri împrumutabile rapid într-o singură tranzacție (până la 50 de milioane de dolari) și puteți reduce tot acel capital la un singur contract vulnerabil. Este o memorie masivă de 50 de milioane de dolari la care oricine se poate alătura acum, atâta timp cât există bani. E atât de mizerie!
Desigur, acum nu vei putea ataca un protocol dacă ai doar mulți bani. Dacă DeFi este la fel de sigur pe cât se pretinde, toate acestea nu vor conta, ce fel de protocol nu este sigur împotriva balenelor? Nu numai că a fost doar neglijență.
Cu toate acestea, am putea vedea Ethereum însuși supus unui atac de 51% pentru mai puțin de 200.000 USD/oră. Dacă propriul model de securitate al lui Ethereum este construit în principal în jurul constrângerilor de capital, de ce suntem atât de repede să presupunem că aplicațiile DeFi pot fi piratate cu succes pentru doar 10 milioane de dolari?
Cum să atenuăm atacurile de împrumut rapid?
Să presupunem că sunt un protocol DeFi și vreau să evit să fiu atacat de împrumuturi flash. Prima întrebare este, pot detecta dacă utilizatorii care interacționează cu mine folosesc împrumuturi flash?
Răspunsul simplu este nu!
EVM nu permite fraților să citească memoria din orice alt contract. Deci, dacă vrei să știi ce se întâmplă într-un alt contract, acel contract îți va spune.
Deci, dacă vrei să știi dacă se folosesc împrumuturi flash, trebuie să ceri direct contractul. Astăzi, multe protocoale de creditare nu răspund la astfel de întrebări (și nu există nicio modalitate de a aplica ceea ce face un creditor expres).
În plus, chiar dacă ați încercat să testați orice astfel de interogare, poate fi ușor să fiți direcționat greșit folosind un contract de autorizare sau prin conectarea între grupuri de împrumut rapid. În general, nu se poate spune în general dacă deponenții folosesc împrumuturi flash sau nu.
La fel ca cineva care îți bate la ușă și stă în fața ta cu o valiză care conține 10 milioane de dolari, nu poți spune dacă sunt banii lor sau nu. Dreapta?
Cum să fii protejat de atacurile de împrumut rapid?
Nu mai oferiți serviciul Flash Loans
Serios, încercarea de a determina creditorii să nu mai ofere împrumuturi flash este ca și cum ai încerca să oprești poluarea fonică.
Furnizarea de împrumuturi rapide este supusă intereselor personale ale fiecărui protocol și există motive întemeiate pentru care utilizatorii lor își doresc această funcționalitate. Deci putem elimina acest lucru în siguranță.
Forțarea tranzacțiilor importante să dureze două blocuri
Amintiți-vă, împrumuturile flash vă permit să împrumutați bani pe durata unei singure tranzacții. Dacă solicitați o tranzacție intensivă în capital care se întinde pe două blocuri, atunci utilizatorii trebuie să împrumute cel puțin două blocuri, învingând orice atac de împrumut flash. (Notă: Pentru ca acest lucru să funcționeze, utilizatorii trebuie să-și blocheze valoarea între cele două blocuri, împiedicându-i să ramburseze împrumutul).
Evident, acest lucru duce la un compromis UX: înseamnă că tranzacțiile nu vor mai fi sincronizate. Este atractiv pentru utilizatori și, de asemenea, pare destul de sigur.
Mulți dezvoltatori se plâng de operațiunile de contracte inteligente asincrone, cum ar fi interacțiunea cu comunicarea de nivel 2 sau cross-sharding în Ethereum 2.0.
În mod ironic, asincronia face ca aceste sisteme să fie protejate de atacurile de împrumut flash, deoarece nu poți trece printr-un fragment sau un strat 2 într-o singură tranzacție mică. Aceasta înseamnă că nu există niciun atac de împrumut rapid asupra fragmentelor ETH 2.0 sau împotriva DEX-urilor de nivel 2.
Solicitați online dovada soldului anterior al utilizatorului
Am putea învinge atacurile de împrumut rapid dacă ar exista o modalitate de a detecta care este soldul net al unui utilizator - adică care era soldul său înainte de a contracta un împrumut.
Înainte ca un utilizator să interacționeze cu protocolul unei platforme, platforma necesită o dovadă Merkle care să demonstreze că la sfârșitul blocului anterior, are suficient sold pentru a contabiliza capitalul pe care îl folosește în prezent. Platforma trebuie să urmărească acest lucru pentru fiecare utilizator din fiecare bloc.
Această soluție are câteva complicații: verificarea acestor dovezi în lanț este extrem de costisitoare în lanț și niciun utilizator bine intenționat nu dorește să le genereze și să plătească taxe de gaz pentru tot. . Alternativ, este posibil ca utilizatorii să-și fi modificat soldurile mai devreme în același bloc din motive perfect legitime. Deci teoretic are ceva merit, dar nu este o soluție practică.
Nu există o soluție unică care să poată preveni complet atacurile de împrumut flash, dar două aplicații specifice care pot atenua aceste atacuri sunt: oracolul de prețuri bazate pe piață și jetoanele de guvernare.
Pentru Oracle de prețuri bazate pe piață, cum ar fi Uniswap sau OasisDEX, atacurile de împrumut flash vă împiedică să utilizați ratele medii actuale ale pieței, cum ar fi Oracle.
Planul atacatorului a fost să mute prețul mediu al pieței într-o singură tranzacție și să creeze un crash flash, dăunând oracolului în ceea ce privește prețul.
Cea mai bună soluție aici este să folosiți o medie ponderată a ultimelor X blocuri prin TWAP sau VWAP. Uniswap v2 va oferi această soluție. Există și Polaris, o abordare generalizată pentru furnizarea de medii mobile pentru protocoalele DeFi, dar Polaris a fost întrerupt de mulți ani.
Guvernarea în lanț este de obicei determinată de votul ponderat în funcție de monede în rândul deținătorilor de jetoane de guvernare. Dar dacă acele jetoane de guvernare sunt într-un grup de împrumuturi flash, atunci orice atacator poate lua o grămadă imensă de monede și se poate baza pe orice rezultat dorește.
Desigur, majoritatea protocoalelor de guvernare necesită blocarea cu simboluri în timpul votării, ceea ce ajută la învingerea atacurilor de împrumut rapid. Dar unele forme de vot nu necesită acest lucru, cum ar fi votul carbonului sau contractul de operare al Maker. Cu atacurile de împrumut de astăzi, aceste formulare de vot ar trebui considerate complet sparte.
Cel mai logic este că token-ul de guvernare este complet fără împrumut, dar depinde de piață. Prin urmare, toate acțiunile administrative ar trebui să necesite o blocare pentru a preveni atacurile prin împrumuturi flash. Noul token COMP al Compound face un pas mai departe prin cronometrarea tuturor voturilor protocolului, slăbind instantaneu chiar și atacul ocazional de împrumut împotriva simbolului de guvernare.
În linii mari, toate jetoanele de guvernare trebuie să aibă timp. Timelock care execută toate deciziile administrative trebuie să aștepte o perioadă de timp înainte ca acestea să intre în vigoare (pentru Timelock Compound este de 2 zile). Acest lucru permite sistemului să se recupereze de la orice atacuri administrative neprevăzute.
Adică pe termen lung
Cred că atacurile bZx au schimbat totul.
Acesta nu va fi ultimul atac de împrumut rapid. Al doilea atac bZx este prima clonă și mă îndoiesc că va provoca un val de atacuri în lunile următoare.
Și asta s-a întâmplat complet, într-un șir de atacuri de împrumut rapid, cum ar fi Harvest Finance (33,8 milioane USD), Value DeFi (7 milioane USD), Akro (2 milioane USD), Cheese Bank (3,3 milioane USD). USD) și cel mai recent OUSD (7 milioane USD). milioane USD).
Epilog
Aceasta este probabil una dintre motivațiile pentru ca Ethereum să treacă rapid la Ethereum 2.0. DeFi nu este stabil pe lanțul PoW, dacă ar exista protocoale DeFi pe fragmente separate pe Ethereum 2.0 , acestea nu ar fi vulnerabile la împrumuturile flash.
Atacul împrumuturilor flash ne oferă un memento mic, dar util, că fiecare platformă abia începe, este nevoie de mult timp pentru a obține o arhitectură durabilă pentru a construi sistemul financiar al viitorului.
Articolul este tradus și editat din articolul original publicat de Dragonfly Research.