Eftersom DeFi-protokoll fortsätter att värmas upp inom Ethereum-ekosystemet ser CipherTrace fler och fler exploateringar och attackvektorer kommer fram. Den senaste veckan, den 28 december 2020, utnyttjades Cover Protocols sköldbrytningsavtal, Smed,. Hackare använde en bugg i gruvkontraktet för att skapa en oändlig mängd COVER-tokens och tömma mer än 4.4 miljoner dollar från projektet.
Täckprotokoll frigörs deras post-mortem igår om att, okänt för Devs, buggen hade varit närvarande sedan den första utplaceringen av smeden kontrakt, som betonar vikten av noggranna säkerhetsrevisioner och pentesting av smarta kontraktVad är smarta kontrakt? Ett smart kontrakt är ett datorpro ... Snarare.
En tidslinje för oändlig prägling
Den ursprungliga angriparens tidslinje
- New Balancer likviditetspool var lagt till till Blacksmith.sol-avtalet.
- Angripare insättningar 1,326,879.99 XNUMX XNUMX BPT-tokens till Blacksmith.sol-kontraktet.
- Samma angripare då exekveras utnyttja, genom att ta ut medel från kontraktet.
- Angriparen kunde fortsätta prissätta belöningar och ta ut medel som uppgår till ungefär $ 4.4 miljoner.
I en intressant vändning utnyttjade påstådda ”vita hackare” kopplade till Grap Finance också felet för att mynta cirka 4 miljoner dollar i COVER-tokens. Grap Finance gav så småningom tillbaka pengarna till Cover Protocol.
Grap Finance Deployer EOA-tidslinje (Externally Owned Account)
- Ny likviditetspool var godkänd för brytning av likviditet.
- Grap Finance Deployer EOA avsatt 15,255.55 XNUMX BPT (DAI / Basis) i poolen på Cover via Blacksmith.sol-kontraktet.
- Ungefär fyra minuter senare var medlen kallas på Cover lämnar 1 Wei i Grap Finance Deployers EOA-saldo.
- En annan extern användare återtog det mesta av deras saldo från Blacksmith.sol-kontraktet vid samma tid som ledde Grap Finance med all likviditet för DAI / Basis-poolen på Blacksmith.sol-kontraktet.
- Grap Finance Deployer avsatt tillbaka 15,255.55 XNUMX BPT (DAI / Basis) i poolen.
- Sedan Grap Finance Deployer hävdar belöningarna och, på grund av exploateringen, myntar 40,796,131,214,802,500,000.21 TÄCK.
- Efter en del bränning av de präglade tokens, Grap Finance Deployer sänder tillbaka Ether to Cover "Ta hand om din egen skit nästa gång."
Hur man myntar oändliga token - En teknisk analys
Bakgrund
Denna exploatering tar oss tillbaka till grunderna i soliditetsprogrammeringsspråket, som används för att implementera smarta kontrakt inom Ethereum. När dessa kontrakt har sammanställts kommer Ethereum Virtual Machine (EVM) att kunna förstå instruktionerna (dvs. opkoder) som används för att utföra olika funktioner och manipulera minne och lagring. EVM har tre olika områden där den kan lagra data: minne, lagring och stacken. Att förstå dessa områden är viktigt för att förstå hur felet utnyttjades.
Liknar RAM-minne (Random Access Memory) på en datoranordning, ”minne”Nyckelordet inom soliditet tilldelar minne för en specifik variabel. I detta fall omfattas den variabeln till en specifik funktion. Minnet rensas när funktionen har exekverats, men kan förbli om innehållet i minnet skjuts in i lagring innan funktionen återvänder.
Den "förvaring”Nyckelord inom Solidity tillåter variabler att fungera som en pekare i lagring av data i mappningar eller datastrukturer. Lagringsdata är beständiga mellan funktionssamtal och transaktioner. Under huven är lagring i huvudsak en nyckel-värdebutik som mappar 256-bitars ord till 256-bitars ord.
Observera att EVM inte är en registermaskin utan en stackmaskin - all beräkning utförs alltså på ett dataområde som kallas stapeln. Stapeln har en maximal kapacitet på 1024 objekt, men endast topp 16 är lättillgängliga som kan användas för att byta det översta elementet med ett av de 16 elementen nedanför och mer.
Buggen
Hackare utnyttjade Cover Protocols Blacksmith.sol - ett Shield Mining Contract som gör det möjligt för spelare att belönas i tokens för det specifika projektet eller poolen, såsom CLAIM- och NOCLAIM-tokens, inom Cover Protocol.
För att bättre förstå felet, låt oss först titta på allmänheten pooler variabel som är en kartläggning (dvs. lagring av data):
At linje 118, ser vi att kontraktet cachar pooldata i minnet via nyckelordet "minne".
Sen på linje 121, uppdaterar kontraktet poolen i lagring som updatePool (adress _lpToken) fungera använder a Pool förvaring pool variabel.
Men om du tittar längre ner i insättning (adress _lpToken, uint256 _belopp) funktion använder den samma poolen variabel från rad 118 som cachades i minnet i funktionen för beräkningar för pool.accRewardsPerToken. Vid denna punkt, poolen variabel kopierades från pooler och sparades i minnet.
Som ett resultat, ändringar som gjorts i poolen variabel inom insättning (adress _lpToken, uint256 _belopp) funktionen kommer inte att ändra pooler kartläggning i kontraktets lagring på nätet på grund av det faktum att variabler som använder nyckelordet "minne" endast omfattas av själva funktionen. Därifrån uppdaterar kontraktet pool.accRewardsPerToken inom updatePool (adress _lpToken) funktion, som använder lagring. Så nu, inom updatePool (adress _lpToken) fungera pool.accRewardsPerToken som uppdateras ökar kraftigt eftersom det tekniskt sett var en ny pool och inte associerad med poolen i minne.
Efter denna sårbarhet och missbruk mellan minne och lagring, har gruvarbetare. belöningWriteoff inom insättning (adress _lpToken, uint256 _belopp) funktion beräknas felaktigt och använder fel pool.accRewardsPerToken, eftersom vi fortfarande är inom insättningsfunktionen som hanterar en minnescachad instans av poolen.
Förutom insättningsfunktionen kan vem som helst, såsom Grap Finance, få en vansinnig mängd myntade tokens när de utför claimRewards (adress _lpToken) fungera. Den här funktionen, som används för att få sina belöningar, slutar ringa _claimCoverRewards (Pool-minnespool, Miner-minne-gruvarbetare) som refererar till gruvarbetare. belöningWriteoff som vi belyste ovan. Eftersom den variabeln är mycket mindre än den faktiska pool.accRewardsPerToken, kontraktet resulterar i prägling av ett överflöd av tokens.
Key Takeaways
CipherTrace hoppas att denna bakgrund i det exploaterade felet lyfter fram vikten av noggranna säkerhetsrevisioner och pentesting av smarta kontrakt, beroende på vilket blockchainEn blockkedja - tekniken bakom bitcoin och andra ... Snarare man väljer att distribuera till. Medan Grap Finance returnerade de medel de fick genom exploateringen kunde den ursprungliga hackaren fortfarande netto över 4 miljoner dollar från DeFi-protokollet, och COVER-tokens värde har sedan dess sjunkit med nästan 99%.
Källa: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/