Efterhånden som DeFi-protokoller fortsætter med at varme op i Ethereum-økosystemet, ser CipherTrace flere og flere udnyttelser og angrebsvektorer komme frem i lyset. Denne sidste uge, den 28. december 2020, blev Cover Protocols skjoldminekontrakt, Blacksmith, udnyttet. Hackere brugte en fejl i minekontrakten til at præge en uendelig mængde COVER-tokens og dræne mere end $4.4 millioner fra projektet.
Protokol til dækning frigivet deres post-mortem i går, hvori de sagde, at fejlen, ukendt for udviklerne, havde været til stede siden den første implementering af Blacksmith-kontrakten, hvilket understreger vigtigheden af grundige sikkerhedsrevisioner og gennemgang af smarte kontrakterHvad er smarte kontrakter? En smart kontrakt er en computerpro... Mere.
En tidslinje for uendelig prægning
Den første angribers tidslinje
- New Balancer likviditetspulje var tilføjet til Blacksmith.sol kontrakten.
- Angriber indskud 1,326,879.99 BPT-tokens ind i Blacksmith.sol-kontrakten.
- Samme angriber dengang henretter udnyttelsen, ved at trække midler fra kontrakten.
- Det kunne angriberen fortsæt præge belønninger og hæve midler på omkring $4.4 mio.
I en interessant begivenhed udnyttede påståede "hvide hackere" knyttet til Grap Finance også fejlen til at præge COVER-tokens til en værdi af ca. $4M. Grap Finance returnerede til sidst midlerne til Cover Protocol.
Grap Finance Deployer Externally Owned Account (EOA) tidslinje
- Ny likviditetspulje blev godkendt til likviditetsudvinding.
- Grap Finance Deployer EOA deponeret 15,255.55 BPT (DAI/Basis) i poolen på Cover via Blacksmith.sol-kontrakten.
- Cirka fire minutter senere var midlerne trukket tilbage på Cover, der efterlader 1 Wei i Grap Finance Deployers EOA-saldo.
- Endnu en ekstern bruger trak det meste af deres saldo fra Blacksmith.sol-kontrakten omkring samme tid, hvilket førte Grap Finance med al likviditet til DAI/Basis-puljen på Blacksmith.sol-kontrakten.
- Grap Finance Deployer deponeret tilbage 15,255.55 BPT (DAI/Basis) i poolen.
- Så Grap Finance Deployer fordringer belønningerne og, på grund af udnyttelsen, præger 40,796,131,214,802,500,000.21 DÆKKE.
- Efter lidt afbrænding af de prægede tokens, Grap Finance Deployer sender tilbage Ether to Cover angivelse "Næste gang, pas på dit eget lort."
Sådan præger du uendelige tokens - en teknisk analyse
Baggrund
Denne udnyttelse fører os tilbage til det grundlæggende i programmeringssproget Solidity, som bruges til at implementere smarte kontrakter inden for Ethereum. Når disse kontrakter er kompileret, vil Ethereum Virtual Machine (EVM) være i stand til at forstå instruktionerne (dvs. opkoder), der bruges til at udføre forskellige funktioner og manipulere hukommelse og lager. EVM har tre forskellige områder, hvor den kan lagre data: hukommelse, lager og stakken. Det er vigtigt at forstå disse områder for at forstå, hvordan fejlen blev udnyttet.
Svarende til Random Access Memory (RAM) på en computerenhed, "hukommelse” nøgleord i Solidity allokerer hukommelse til en specifik variabel. I dette tilfælde er den variabel scoped til en specifik funktion. Hukommelsen ryddes, når funktionen er udført, men kan forblive, hvis indholdet af denne hukommelse skubbes ind på lager, før funktionen vender tilbage.
Den "opbevaring” nøgleordet i Solidity tillader variabler at fungere som en pegepind i lagringen af data i kortlægninger eller datastrukturer. Lagringsdata er vedvarende mellem funktionskald og transaktioner. Under hætten er opbevaring i det væsentlige et nøgleværdilager, der kortlægger 256-bit ord til 256-bit ord.
Bemærk, at EVM ikke er en registermaskine, men en stackmaskine - derfor udføres alle beregninger på et dataområde kaldet stakken. Stakken har en maksimal kapacitet på 1024 elementer, men kun de øverste 16 er let tilgængelige, som kan bruges til at bytte det øverste element med et af de 16 elementer under det og mere.
The Bug
Hackere udnyttede Cover Protocols Blacksmith.sol – en Shield Mining Contract, som gør det muligt for stakere at blive belønnet i tokens for det specifikke projekt eller pulje, såsom CLAIM og NOCLAIM tokens, inden for Cover Protocol.
For bedre at forstå fejlen, lad os først se på offentligheden puljer variabel, som er en mapping (dvs. lagring af data):
At line 118, ser vi, at kontrakten cacher pooldataene i hukommelsen via nøgleordet "hukommelse".
Så videre line 121, opdaterer kontrakten puljen på lager som den updatePool (adresse _lpToken) funktion bruge til Pool opbevaring pool variabel.
Men hvis du kigger længere nede i depositum (adresse _lpToken, uint256 _amount) funktion, bruger den det samme pool variabel fra linje 118, der blev cachelagret i hukommelsen i funktionen til beregninger for pool.accRewardsPerToken. På dette tidspunkt pool variabel blev kopieret fra puljer kortlægning og blev gemt i hukommelsen.
Som følge heraf vil eventuelle ændringer i pool variabel inden for depositum (adresse _lpToken, uint256 _amount) funktionen ændrer ikke puljer kortlægning i kontraktens on-chain storage på grund af det faktum, at variabler, der bruger søgeordet "memory" kun er scoped inden for selve funktionen. Derfra opdaterer kontrakten pool.accRewardsPerToken i updatePool (adresse _lpToken) funktion, som bruger opbevaring. Så nu inden for updatePool (adresse _lpToken) funktion pool.accRewardsPerToken der er opdateret stiger voldsomt, da det teknisk set var en ny pulje og ikke er forbundet med pool i hukommelsen.
Efter denne sårbarhed og misbrug mellem hukommelse og lager, miner.rewardWriteoff i depositum (adresse _lpToken, uint256 _amount) funktion er fejlberegnet samt bruger den forkerte pool.accRewardsPerToken, da vi stadig er inden for deponeringsfunktionen, som håndterer en hukommelsescache-forekomst af pool.
Ud over indbetalingsfunktionen kan enhver, såsom Grap Finance, få en vanvittig mængde prægede tokens, når de udfører claimRewards(adresse _lpToken) fungere. Denne funktion, som bruges til at få fat i deres belønninger, ender med at ringe _claimCoverRewards(Pool memory pool, Miner memory miner) som henviser til miner.rewardWriteoff som vi fremhævede ovenfor. Da denne variabel er meget mindre end den faktiske pool.accRewardsPerToken, resulterer kontrakten i at præge en overflod af tokens.
Nøgleforsøg
CipherTrace håber, at denne baggrund i den udnyttede fejl bringer betydningen af grundige sikkerhedsaudits og gennemtestning af smarte kontrakter frem i lyset. blockchainEn blockchain - teknologien bag bitcoin og andre c... Mere man vælger at indsætte til. Mens Grap Finance returnerede de midler, de modtog gennem udnyttelsen, var den oprindelige hacker stadig i stand til at hente over $4M fra DeFi-protokollen, og COVER-tokens værdi er siden faldet med næsten 99 %.
Kilde: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/