Ettersom DeFi-protokollene fortsetter å varme seg opp i Ethereum-økosystemet, ser CipherTrace flere og flere utnyttelser og angrepsvektorer kommer frem. Den siste uken, 28. desember 2020, ble Cover Protocols skjoldgruvekontrakt, Smed, utnyttet. Hackere brukte en feil i gruvekontrakten for å lage en uendelig mengde COVER-tokens og tømme mer enn 4.4 millioner dollar fra prosjektet.
Cover Protokoll utgitt deres post-mortem i går om at feilen ukjent for Devs hadde vært til stede siden den første distribusjonen av smeden-kontrakten, og fremhevet viktigheten av grundige sikkerhetsrevisjoner og pentesting av smarte kontrakterHva er smarte kontrakter? En smart kontrakt er et datapro ... Mer.
En tidslinje med uendelig mynte
Den første angriperens tidslinje
- New Balancer likviditetsbasseng var la til til Blacksmith.sol-kontrakten.
- angriper avleiringer 1,326,879.99 XNUMX XNUMX BPT-tokens til Blacksmith.sol-kontrakten.
- Samme angriper da Utfører utnyttelsen, ved å ta ut midler fra kontrakten.
- Angriperen klarte det fortsette prise belønninger og ta ut midler på omtrent $ 4.4 millioner.
I en interessant begivenhet utnevnte påståtte “hvite hackere” knyttet til Grap Finance også feilen til å pusse rundt COVER-tokens til $ 4 millioner. Grap Finance returnerte til slutt midlene til Cover Protocol.
Tidslinje for Grap Finance Deployer Externally Owned Account (EOA)
- Ny likviditetsbasseng var godkjent for likviditetsdrift.
- Grap Finance Deployer EOA deponert 15,255.55 XNUMX BPT (DAI / Basis) inn i bassenget på Cover via Blacksmith.sol-kontrakten.
- Omtrent fire minutter senere var midlene det trukket på Cover forlater 1 Wei i Grap Finance Deployers EOA-saldo.
- En annen ekstern bruker trakk seg det meste av balansen fra Blacksmith.sol-kontrakten rundt samme tid, noe som førte til Grap Finance med all likviditet for DAI / Basis-bassenget på Blacksmith.sol-kontrakten.
- Grap Finance Deployer deponert tilbake 15,255.55 BPT (DAI / Basis) i bassenget.
- Deretter Grap Finance Deployer krav belønningene og, på grunn av utnyttelsen, mynter 40,796,131,214,802,500,000.21 DEKSEL.
- Etter litt brenning av de pregede tokens, Grap Finance Deployer sender tilbake Ether to Cover "Ta vare på din egen dritt neste gang."
Hvordan lage uendelige tokens - En teknisk analyse
Bakgrunn
Denne utnyttelsen tar oss tilbake til grunnleggende programmeringsspråk for Solidity, som brukes til å implementere smarte kontrakter innen Ethereum. Når disse avtalene er utarbeidet, vil Ethereum Virtual Machine (EVM) kunne forstå instruksjonene (dvs. opkoder) som brukes til å utføre forskjellige funksjoner og manipulere minne og lagring. EVM har tre forskjellige områder der den kan lagre data: minne, lagring og stabelen. Å forstå disse områdene er viktig for å forstå hvordan feilen ble utnyttet.
I likhet med Random Access Memory (RAM) på en datamaskin, er “minne”Nøkkelord i Solidity tildeler minne for en bestemt variabel. I dette tilfellet er denne variabelen rettet mot en bestemt funksjon. Minnet tømmes når funksjonen er utført, men kan forbli hvis innholdet i minnet blir lagret før funksjonen returnerer.
Den "lagring”Nøkkelord i Solidity tillater variabler å fungere som en peker til lagring av data i kartlegginger eller datastrukturer. Lagringsdata er vedvarende mellom funksjonsanrop og transaksjoner. Under panseret er lagring egentlig en nøkkelverdi-butikk som kartlegger 256-biters ord til 256-biters ord.
Vær oppmerksom på at EVM ikke er en registermaskin, men en stakkmaskin - altså utføres alle beregninger på et dataområde som kalles stabelen. Stabelen har en maksimal kapasitet på 1024 gjenstander, men bare topp 16 er lett tilgjengelig som kan brukes til å bytte det øverste elementet med ett av de 16 elementene under seg og mer.
Insektet
Hackere utnyttet Cover Protocol's Blacksmith.sol - en Shield Mining Contract som gjør det mulig for belønning av stakere i tokens til det spesifikke prosjektet eller bassenget, som CLAIM og NOCLAIM tokens, innenfor Cover Protocol.
For å bedre forstå feilen, la oss først se på publikum bassenger variabel som er en kartlegging (dvs. lagring av data):
At linje 118, ser vi at kontrakten cacher bassengdataene i minnet via nøkkelordet "minne".
Så videre linje 121, oppdaterer kontrakten bassenget som er lagret som updatePool (adresse _lpToken) funksjon bruker a Basseng lagringsbasseng variabel.
Imidlertid, hvis du ser lenger ned i innskudd (adresse _lpToken, uint256 _beløp) funksjon, bruker den det samme basseng variabel fra linje 118 som ble lagret i minnet i funksjonen for beregninger for pool.accRewardsPerToken. På dette punktet, basseng variabel ble kopiert fra bassenger kartlegging og ble lagret i minnet.
Som et resultat av eventuelle endringer i basseng variabel i innskudd (adresse _lpToken, uint256 _beløp) funksjonen vil ikke endre bassenger kartlegging i kontraktens lagring på kjeden på grunn av at variabler som bruker nøkkelordet "minne" bare er innenfor omfanget av selve funksjonen. Derfra oppdaterer kontrakten pool.accRewardsPerToken innenfor updatePool (adresse _lpToken) funksjon, som bruker lagring. Så nå, innenfor updatePool (adresse _lpToken) funksjonen pool.accRewardsPerToken som er oppdatert øker sterkt, siden det teknisk sett var et nytt basseng og ikke tilknyttet basseng i minne.
Etter dette sårbarheten og misbruk mellom minne og lagring, har gruvearbeider. belønning innenfor innskudd (adresse _lpToken, uint256 _beløp) feilberegnes i tillegg til å bruke feil pool.accRewardsPerToken, da vi fremdeles er innenfor innskuddsfunksjonen som håndterer en minnebuffet forekomst av basseng.
I tillegg til innskuddsfunksjonen, kan hvem som helst, for eksempel Grap Finance, skaffe seg vanvittig mye pregede tokens når de utfører claimRewards (adresse _lpToken) funksjon. Denne funksjonen, som brukes til å hente fordelene deres, ender opp med å ringe _claimCoverRewards (Pool memory pool, Miner memory miner) som refererer til gruvearbeider. belønning som vi fremhevet ovenfor. Siden den variabelen er mye mindre enn den faktiske pool.accRewardsPerToken, resulterer kontrakten i å prege en overflod av tokens.
Nøkkelfunksjoner
CipherTrace håper denne bakgrunnen i den utnyttede feilen fremhever viktigheten av grundige sikkerhetsrevisjoner og pentesting av smarte kontrakter avhengig av blockchainEn blockchain - teknologien som ligger til grunn for bitcoin og andre ... Mer man velger å distribuere til. Mens Grap Finance returnerte midlene de mottok gjennom utnyttelsen, var den opprinnelige hackeren fortsatt i stand til å tjene over $ 4 millioner fra DeFi-protokollen, og COVER-tokens verdi har siden falt med nesten 99%.
Kilde: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/