Kuna DeFi protokollid jätkavad Ethereumi ökosüsteemis kuumenemist, näeb CipherTrace üha rohkem ärakasutusi ja rünnakute vektoreid. Eelmisel nädalal, 28. detsembril 2020, kasutati katteprotokolli kilbi kaevandamise lepingut Blacksmith. Häkkerid kasutasid kaevanduslepingus olevat viga, et vermida lõpmatu hulk COVER-märke ja kulutada projektist üle 4.4 miljoni dollari.
Kaaneprotokoll vabastatud nende surmajärgne eile teatas, et arendajatele teadmata oli viga esinenud alates Blacksmithi lepingu esialgsest kasutuselevõtust, rõhutades põhjalike turbeauditite ja eeltestimise tähtsust. arukad lepingudMis on nutikad lepingud? Nutikas leping on arvuti pro… rohkem.
Lõpmatu rahapaja ajaskaala
Esialgse ründaja ajaskaala
- New Balanceri likviidsuskogum oli lisatud sepa.sol lepingule.
- Ründaja hoiused 1,326,879.99 XNUMX XNUMX BPT märgid Blacksmith.sol lepingusse.
- Sama ründaja siis hukkab ära kasutada, võttes raha lepingust välja.
- Ründaja suutis jätkama preemiate vermimine ja raha väljavõtmine summas ligikaudu 4.4 miljonit dollarit.
Huvitava sündmuste pöörde käigus kasutasid Grap Finance'iga seotud väidetavad "valged häkkerid" seda viga ka ligikaudu 4 miljoni dollari väärtuses COVER-žetoone. Lõpuks tagastas Grap Finance raha katteprotokollile.
Grap Finance Deployer Externally Owned Account (EOA) ajaskaala
- Uus likviidsusbassein oli heaks likviidsuse kaevandamiseks.
- Grap Finance Deployer EOA hoiule 15,255.55 XNUMX BPT (DAI/Basis) Blacksmith.soli lepingu kaudu Coveri basseini.
- Umbes neli minutit hiljem olid rahalised vahendid olemas endassetõmbunud kaanel, jättes Grap Finance Deployeri EOA saldole 1 Wei.
- Veel üks väliskasutaja loobus suurem osa nende saldost pärines Blacksmith.soli lepingust umbes samal ajal, mis viis Grap Finance'i kogu likviidsusega DAI/Basise kogumi jaoks Blacksmith.soli lepingul.
- Grap Finance'i juurutaja hoiule tagasi 15,255.55 XNUMX BPT (DAI/Basis) basseini.
- Seejärel Grap Finance Deployer nõuete preemiad ja ärakasutamise tõttu rahapajad 40,796,131,214,802,500,000.21 XNUMX XNUMX XNUMX XNUMX XNUMX XNUMX KAATE.
- Pärast vermitud märkide põletamist Grap Finance Deployer saadab tagasi Eeter kaanele märkides "Järgmine kord hoolitsege oma jama eest."
Kuidas vermida lõpmatuid märke – tehniline analüüs
Taust
See ärakasutamine viib meid tagasi Solidity programmeerimiskeele põhialuste juurde, mida kasutatakse nutikate lepingute rakendamiseks Ethereumis. Kui need lepingud on koostatud, suudab Ethereumi virtuaalmasin (EVM) mõista juhiseid (st opkoode), mida kasutatakse erinevate funktsioonide täitmiseks ning mälu ja salvestusruumiga manipuleerimiseks. EVM-il on kolm erinevat ala, kus see saab andmeid salvestada: mälu, salvestusruum ja virn. Nende valdkondade mõistmine on oluline, et mõista, kuidas viga ära kasutati.
Sarnaselt muutmälule (RAM) arvutiseadmes, "mäluSolidity märksõna eraldab konkreetse muutuja jaoks mälu. Sel juhul on see muutuja suunatud konkreetsele funktsioonile. Mälu tühjendatakse pärast funktsiooni käivitamist, kuid see võib alles jääda, kui selle mälu sisu lükatakse enne funktsiooni naasmist salvestusruumi.
"ladustamine” Solidity'i märksõna võimaldab muutujatel toimida osutina andmete salvestamisel vastendustes või andmestruktuurides. Salvestusandmed on funktsioonikutsete ja tehingute vahel püsivad. Kapoti all olev salvestusruum on sisuliselt võtmeväärtuste salvestusruum, mis kaardistab 256-bitised sõnad 256-bitisteks sõnadeks.
Pange tähele, et EVM ei ole registrimasin, vaid pinu masin – seega tehakse kõik arvutused andmealal, mida nimetatakse virn. Virna maksimaalne mahutavus on 1024 eset, kuid ainult 16 ülemist on kergesti ligipääsetavad, mida saab kasutada ülemise elemendi vahetamiseks ühega selle all olevast 16 elemendist ja rohkemgi.
Viga
Häkkerid kasutasid katteprotokolli Blacksmith.sol – Shield Mining Contract, mis võimaldab panustajaid katteprotokolli raames premeerida konkreetse projekti või kogumi žetoonidega, nagu CLAIM ja NOCLAIM märgid.
Vea paremaks mõistmiseks vaatame kõigepealt avalikkust basseinid muutuja, mis on kaardistus (st andmete salvestamine):
At rida 118, näeme, et leping salvestab basseini andmed mällu märksõna „mälu” kaudu.
Siis edasi rida 121, värskendab leping laos olevat kogumit updatePool(aadress _lpToken) funktsioon kasutab a Basseini hoiubassein muutuja.
Kui aga vaatate süsteemis kaugemale deposiit(aadress _lpToken, uint256 _summa) funktsiooni, kasutab see sama ujula muutuja realt 118, mis salvestati vahemällu funktsioonis arvutuste tegemiseks pool.accRewardsPerToken. Sel hetkel on ujula muutuja kopeeriti failist basseinid kaardistamine ja salvestati mällu.
Selle tulemusena on kõik rakenduses tehtud muudatused ujula muutuja sees deposiit(aadress _lpToken, uint256 _summa) funktsioon ei muuda basseinid kaardistamine lepingu ahelasiseses salvestusruumis, kuna muutujad, mis kasutavad märksõna "mälu", on hõlmatud ainult funktsiooni enda piires. Sealt uuendab leping pool.accRewardsPerToken jooksul updatePool(aadress _lpToken) funktsioon, mis kasutab salvestusruumi. Nii et nüüd, sees updatePool(aadress _lpToken) funktsioon pool.accRewardsPerToken mida värskendatakse, suureneb märkimisväärselt, kuna see oli tehniliselt uus bassein ja ei olnud sellega seotud ujula mälus.
Pärast seda haavatavust ning mälu ja salvestusruumi väärkasutust on kaevandaja.tasu mahakandmine jooksul deposiit(aadress _lpToken, uint256 _summa) funktsioon on valesti arvutatud, samuti kasutatakse valet pool.accRewardsPerToken, kuna oleme endiselt deposiidifunktsioonis, mis käsitleb mälu vahemällu salvestatud eksemplari ujula.
Lisaks deposiitfunktsioonile võib igaüks, näiteks Grap Finance, hankida meeletul hulgal vermitud žetoone. nõuda preemiaid (aadress _lpToken) funktsiooni. See funktsioon, mida kasutatakse nende hüvede saamiseks, lõpeb helistamisega _claimCoverRewards (basseini mälukogum, kaevuri mälukaevur) mis viitab kaevandaja.tasu mahakandmine mida me eespool esile tõstsime. Kuna see muutuja on tegelikust palju väiksem pool.accRewardsPerToken, lepingu tulemusena vermitakse ohtralt žetoone.
Võtme tagasivõtmine
CipherTrace loodab, et see ärakasutatud vea taust toob päevavalgele põhjalike turvaauditite ja nutikate lepingute eeltestimise olulisuse. blockchainPlokiahel – bitcoini ja muu tehnoloogia aluseks olev tehnoloogia… rohkem üks otsustab kasutusele võtta. Kuigi Grap Finance tagastas ärakasutamise kaudu saadud raha, suutis algne häkker DeFi protokolli kaudu teenida siiski üle 4 miljoni dollari ja COVER-märgi väärtus on sellest ajast alates langenud peaaegu 99%.
Allikas: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/