Ker se protokoli DeFi v ekosistemu Ethereum še naprej segrevajo, CipherTrace opaža vse več izkoriščanj in vektorjev napadov. Prejšnji teden, 28. decembra 2020, je bila izkoriščena pogodba Cover Protocol za rudarjenje ščita, Blacksmith. Hekerji so uporabili napako v pogodbi o rudarjenju, da so skovali neskončno količino žetonov COVER in iz projekta izčrpali več kot 4.4 milijona dolarjev.
Pokrivni protokol sprosti njihov včerajšnji post-mortem, v katerem je navedeno, da je bil hrošč prisoten od prve uvedbe pogodbe Blacksmith, kar razvijalcem ni bilo znano, in poudaril pomen temeljitih varnostnih pregledov in pentestiranja pametne pogodbeKaj so pametne pogodbe? Pametna pogodba je računalniški pro… Več.
Časovnica neskončnega kovanja
Časovnica začetnega napadalca
- New Balancer likvidnostni sklad je bil dodano k pogodbi Blacksmith.sol.
- Napadalec vloge 1,326,879.99 žetonov BPT v pogodbo Blacksmith.sol.
- Torej isti napadalec izvršuje exploit, z dvigom sredstev iz pogodbe.
- Napadalec je lahko naprej kovanje nagrad in dvig sredstev v višini približno 4.4 milijona USD.
V zanimivem obratu dogodkov so domnevni "beli hekerji", povezani z Grap Finance, prav tako izkoristili hrošč za kovanje žetonov COVER v vrednosti približno 4 milijonov USD. Grap Finance so sredstva na koncu vrnile podjetju Cover Protocol.
Časovnica računa Grap Finance Deployer v zunanji lasti (EOA).
- Nov likvidnostni sklad je bil odobren za rudarjenje likvidnosti.
- Grap Finance Deployer EOA deponiran 15,255.55 BPT (DAI/Basis) v sklad na naslovnici prek pogodbe Blacksmith.sol.
- Približno štiri minute pozneje so bila sredstva umaknjena na naslovnici ostane 1 Wei v stanju EOA Grap Finance Deployer.
- Še en zunanji uporabnik se je umaknil večina njihovega stanja iz pogodbe Blacksmith.sol približno v istem času, kar je vodilo Grap Finance z vso likvidnostjo za sklad DAI/Basis na pogodbi Blacksmith.sol.
- Grap Finance Deployer deponiran nazaj 15,255.55 BPT (DAI/osnova) v sklad.
- Nato Grap Finance Deployer terjatve nagrade in, zaradi izkoriščanja, kovnice 40,796,131,214,802,500,000.21 COVER.
- Po nekaj sežiganju kovanih žetonov je Grap Finance Deployer pošlje nazaj Ether to Cover navaja "Naslednjič poskrbi za svoje sranje."
Kako kovati neskončne žetone – tehnična analiza
Ozadje
Ta podvig nas popelje nazaj k osnovam programskega jezika Solidity, ki se uporablja za izvajanje pametnih pogodb znotraj Ethereuma. Ko bodo te pogodbe sestavljene, bo virtualni stroj Ethereum (EVM) lahko razumel navodila (tj. opcijske kode), ki se uporabljajo za izvajanje različnih funkcij ter manipulacijo pomnilnika in shranjevanja. EVM ima tri različna področja, kjer lahko shranjuje podatke: pomnilnik, shranjevanje in sklad. Razumevanje teh področij je pomembno za razumevanje, kako je bil hrošč izkoriščen.
Podobno kot pomnilnik z naključnim dostopom (RAM) v računalniški napravi, "spomin” ključna beseda znotraj Solidityja dodeli pomnilnik določeni spremenljivki. V tem primeru je ta spremenljivka omejena na določeno funkcijo. Pomnilnik se izbriše, ko se funkcija izvede, vendar lahko ostane, če se vsebina tega pomnilnika potisne v shrambo, preden se funkcija vrne.
"shranjevanje” ključna beseda znotraj Solidity omogoča spremenljivkam, da delujejo kot kazalec v shranjevanje podatkov v preslikavah ali podatkovnih strukturah. Podatki o shranjevanju so trajni med klici funkcij in transakcijami. Pod pokrovom je shramba v bistvu shramba ključev in vrednosti, ki preslika 256-bitne besede v 256-bitne besede.
Upoštevajte, da EVM ni registrski stroj, temveč skladovni stroj – zato se vsi izračuni izvajajo na podatkovnem območju, imenovanem kup. Sklad ima največjo zmogljivost 1024 elementov, vendar je lahko dostopnih le zgornjih 16, ki jih je mogoče uporabiti za zamenjavo najvišjega elementa z enim od 16 elementov pod njim in več.
Hrošč
Hekerji so izkoristili Blacksmith.sol podjetja Cover Protocol—Shield Mining Contract, ki omogoča, da so vložniki nagrajeni v žetonih določenega projekta ali skupine, kot so žetoni CLAIM in NOCLAIM, v okviru Cover Protocol.
Da bi bolje razumeli napako, najprej poglejmo javnost bazeni spremenljivka, ki je preslikava (tj. shranjevanje podatkov):
At 118. vrstica, vidimo, da pogodba predpomni podatke bazena v pomnilnik prek ključne besede »pomnilnik«.
Nato naprej 121. vrstica, pogodba posodablja bazen v shrambi kot updatePool(naslov _lpToken) funkcija uporablja a Bazen za shranjevanje bazena spremenljivka.
Vendar, če pogledate dlje v depozit(naslov _lpToken, uint256 _znesek) funkcijo, uporablja isto bazen spremenljivka iz vrstice 118, ki je bila predpomnjena v pomnilnik znotraj funkcije za izračune za pool.accRewardsPerToken. Na tej točki bazen spremenljivka je bila kopirana iz bazeni preslikavo in je bil shranjen v pomnilnik.
Posledično vse spremembe v bazen spremenljivka znotraj depozit(naslov _lpToken, uint256 _znesek) funkcija ne bo spremenila bazeni preslikavo v shrambo v verigi pogodbe zaradi dejstva, da so spremenljivke, ki uporabljajo ključno besedo »pomnilnik«, omejene samo znotraj same funkcije. Od tam naprej pogodba posodablja pool.accRewardsPerToken znotraj updatePool(naslov _lpToken) funkcijo, ki uporablja shranjevanje. Torej zdaj, znotraj updatePool(naslov _lpToken) delujejo pool.accRewardsPerToken ki je posodobljen, se močno poveča, saj je bil tehnično nov bazen in ni bil povezan z bazen v spomin.
Po tej ranljivosti in zlorabi med pomnilnikom in shranjevanjem je miner.rewardWriteoff znotraj depozit(naslov _lpToken, uint256 _znesek) funkcija napačno izračunana, pa tudi uporaba nepravilne pool.accRewardsPerToken, saj smo še vedno znotraj funkcije depozita, ki obravnava predpomnjeni primerek bazen.
Poleg funkcije depozita lahko vsak, kot je Grap Finance, pridobi noro količino kovanih žetonov, ko izvede zahtevekRewards(naslov _lpToken) funkcijo. Ta funkcija, ki se uporablja za pridobivanje njihovih nagrad, na koncu kliče _claimCoverRewards(pomnilniško področje bazena, rudar pomnilnika rudarja) ki se sklicuje na miner.rewardWriteoff ki smo jih poudarili zgoraj. Ker je ta spremenljivka veliko manjša od dejanske pool.accRewardsPerToken, posledica pogodbe je kovanje obilice žetonov.
Ključni izdelki
CipherTrace upa, da bo to ozadje izkoriščenega hrošča razkrilo pomen temeljitih varnostnih revizij in pentestiranja pametnih pogodb na katerem koli blockchainBlockchain - tehnologija, na kateri temeljijo bitcoini in druge c ... Več eden se odloči za napotitev. Medtem ko je Grap Finance vrnil sredstva, ki jih je prejel z izkoriščanjem, je prvotni heker še vedno lahko iztržil več kot 4 milijone $ iz protokola DeFi, vrednost žetona COVER pa je od takrat padla za skoraj 99 %.
Vir: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/