„BSC Flash Attack Attack“: blynų zuikis

2021 m. Gegužę mes matėme kelis „BSC DeFi“ taikinius. Konkrečiai, spraga, susijusi su atlygio kaldinimu pajamingumo kaupiklyje „Pancake Bunny“, buvo panaudota ~ 7M BUNNY žetonų kaldinimui iš visiškai nieko, o tai sukėlė milžiniškus 45 mln. Dolerių piniginius nuostolius. Po kruvino įsilaužimo 3 šakotos užduotys - „AutoShark“, „Merlin Labs“ ir „Pancake Hunny“ - buvo užpultos panašiais metodais. „Amber Group“ & rsquo; „Blockchain Security“ grupė, kuriai vadovauja DrChiachih Wu, išsamiai aprašo spragą ir pateikia išsamią informaciją apie naudojimąsi, atkartojant ataką ir blynų zuikį.

Paslėptos atakos paviršius: balanceOf ()

Daugelis žmonių mano, kad kompaktiškumas yra svarbus „DeFi“ sėkmei. Žetonų susitarimai (pvz., ERC20) atlieka gyvybiškai svarbią funkciją apatiniame „DeFi“ lego sluoksnyje. Tačiau įtraukdami ERC20 į savo „DeFi“ užduotis dizaineriai gali nepaisyti kai kurių nevaldomų ir nenuspėjamų sąlygų. Pavyzdžiui, galite '& rsquo; nenumatykite, kada ir kiek žetonų gausite, kai atgausite esamą žetonų likutį. Dėl šio nenuspėjamumo susidaro slaptas atakos paviršiaus plotas.

Daugeliu atvejų išmintingose ​​sutartyse ERC20 balansas nurodomas jų paslaugų samprotavimuose. Pvz., Kai vartotojas perkelia kai kuriuos XYZ žetonus į protingą susitarimą, užburiama XYZ.balanceOf (), kad būtų galima ištirti, kiek pinigų gauta. Jei jūs & rsquo; iš naujo susipažinęs su „Uniswap“ kodų baze, greičiausiai suprantate, kad „Uniswap V2Pair“ sutartyje yra daug „balanceOf“ () skambučių.

Kodo bite „Uniswap V2Pair.mint“ () naudoja esamus likučius (likutis0, likutis1) ir buhalterinę informaciją (suma0, suma1), kad gautų vartotojo perduotus kiekius (suma0, suma1). Tačiau, jei bloga žvaigždė perkelia kai kurias savybes (žetonas1 arba žetonas2) prieš pat kalyklos () skambutį, auka pasiūlytų daugiau likvidumo nei tikėtasi, ty nukaldinta daugiau LP žetonų. Jei nauda nustatoma remiantis LP žetonų kiekiu, blogoji žvaigždė gali gauti naudos, kai nauda viršija išlaidas.

„Uniswap V2Pair.burn“ () turi panašią grėsmę. „Mint“) skambintojas gali sau grasinti, nesuvokdamas išsamaus supratimo apie grėsmes. Tai įvyko kalbant apie „Blynų zuikį“.

Gaukite 110 USDT ateities premiją visiškai nemokamai!

Aukščiau esančiame kodo bite 140 eilutė gauna LP žetono likutį per „balanceOf“ () ir kaupia jį likvidumu. 144–145 eilutėse naudojama „Uniswap V2Pair“ priklausanti LP žetonų dalis (t. Y. Likvidumas iš _ totalSupply) naudojama norint gauti (suma0, suma1) su esamais likučiais (likutis0, likutis1) iš 2 savybių (t. Y. , token0 ir token1). Vėliau (suma0, suma1) iš 2 savybių perkeliama į adresą 148–149 eilutėse.

Čia bloga žvaigždė gali kontroliuoti (balansas0, balansas1) ir likvidumą, išsiųsdamas tam tikrą simbolį0 + žetoną1 arba LP žetoną į „Uniswap V2Pair“ sutartį prieš pat sukurdamas funkciją „Mint“), kad skambintojas gautų daugiau žetono0 + žetonas1 . Mes & rsquo; Pasivaikščiosiu per „Bancake Bunny“ kodą ir atskleisiu, kaip bloga žvaigždė gali užsidirbti pinigų.

Kiaurymių analizė: „BunnyMinterV2“

„Blynų zuikio“ šaltinio kode funkcija „BunnyMinterV2.mintFor V2 ()“ prižiūri BUNNY žetonų kaldinimą kaip naudą. Konkrečiai, visa suma, kurią reikia nukaldinti (ty „MintBunny“), nustatoma pagal įvesties kriterijus, _ atsiėmimo mokesčius ir _ veiklos mokestį. Skaičiavimas susietas su 3 funkcijomis: _ zapAs setsTo BunnyBNB () (213 eilutė), priceCalculator.valueOfAs set () (219 eilutė) ir sumąBunnyTo Mint () (221 eilutė). Kadangi bloga žvaigždė gali nukaldinti didelį kiekį BUNNY, klausimas priklauso nuo 3 aukščiau nurodytų funkcijų.

Perskaityk straipsnį:  ŽMOGAUS protokolas (HMT) skelbia sąrašą „Bitfinex“

Tegul '& rsquo; s prasideda funkcija _ zapAs set To BunnyBNB (). Kai perduodama nuosavybė yra „aCake-LP“ (267 eilutė), tam tikras LP žetonų kiekis naudojamas likvidumui pašalinti ir iš (žetono0, žetono1) iš likvidumo baseino (eilutė) 0). Pasinaudojant „zapBSC“ sutartimi, šios savybės pakeičiamos „BUNNY-BNB LP“ žetonams (1–278 eilutės). Tada atitinkamas kiekis BUNNY-BNB LP žetonų grąžinamas skambinančiajam (287 eilutė). Čia mes turime problemą.Ar kiekis atitinka LP žetonų kiekį, kurį, jūsų manymu, sudeginsite? (*)

V2Router.removeLiquidity (), LP žetonų likvidumas (kiekis „zapPancake“ rinkiniuose, kaip „BunnyBNB“ ()) bus išsiųstas į „Pora“ sutartį (500 eilutė), o „Blynas Pair.burn“) bus užburtas. Blynas esamas LP žetonų balansas, jei „Pair“ yra didesnis nei 0, tikrasis bendras įrašytinas kiekis bus didesnis nei kiekis, o tai netiesiogiai padidina BUNNY sumą iki nukaldinimo. Blynų problema _ zap

Kitas rinkinysKaip „BunnyBNB“ () yra skambutis „zapBSC.zapTo“ (). Kalbant apie tai kalbama, reikia iškeisti 2 ypatybes, kurias surinko „removeLiquidity ()“ į „BUNNY-BNB LP“ žetonus. „ZapBSC“ keičia savybes per „Since Swap“, bloga žvaigždė gali naudoti greitas paskolas, kad valdytų perjungto BUNNY-BNB kiekį. Blynas „BunnyMinterV2.mint“.

Atgal V2 (), zupFor sets grąžinamas zuikisBNBA </b> Kaip BunnyBNB () būtų įvesta priceCalculator.valueOfTo set (), kad būtų galima apskaičiuoti vertę pagal BNB (ty vauleAs BNB), palyginamą su orakulo sistema.

Tačiau priceCalculator.valueOf rinkinys () rekomenduoja BNB ir BUNNY kiekį (rezervas0, rezervas1) BUNNY_BNB As Pair kaip sąnaudų šaltinį „Blynas“, kuris suteikia galimybę blogajai žvaigždei panaudoti greitas paskolas kontroliuojant nukaldintų BUNNY žetonų kiekį. sumaZuikis

Mint () funkcija yra pagrindinis matematikos įvertinimas. Įnašas padidėja 5 (bunnyPerProfitBNB = 5e18), kuris pats neturi atakos paviršiaus ploto, tačiau stiprinimas sustiprina aukščiau nurodytą valdymą. Kova

Nuo

Kadangi ataką suaktyvina „getReward“ (), turime būti sertifikuoti, kad gautume naudą. Kiti gali būti rodomi aukščiau esančiame „Blynas“ ekrano kopijoje, „To Bunny“ įsilaužėlis užbūrė „init“) funkciją, kad būtų naudojamasi susitarimu 1 WBNB pakeisti į WBNB- USDT-LP žetonus ir įneškite () juos į „VaultFlip“

Kaip „Flip“ susitarimą, kad jis gautų tam tikrų pranašumų sukurdamas „getReward“ (). Aukščiau atskleista „Exp“, naudodami funkciją „Paruošti ()“ atkūrėme „vaultFlipWe Flip.deposit ()“ skambutį (62 eilutė). Tačiau taip pat naudojosi „ZapBSC“ sutartimi, kad supaprastintų LP žetonų gavimą (54–57 eilutės). Blynas, vienas nėra 'rsquo; Negalėsite gauti išmokų, kol „For Bunny“ laikytojas pateiks kitą derliaus () skambutį. Blynas šis faktorius

Zuikyje įsilaužėlis nepadarė „& rsquo; t ataka puolė iki pat pirmojo derliaus () sandorio, įvykusio po „init“ („deal“) susitarimo. Todėl mūsų modeliuojant, nė vienas laikytojas negali atiduoti derliaus ().

Rekursinės greitosios paskolos

Norėdami, mes apsimetame laikytoju ir rankomis pradedame derliaus nuėmimą (25 eilutė), mes naudojame „eth-brownie“ funkciją. „Blynas“ naudoja lėšas, „Blynų zuikio“ išnaudotojas panaudojo 8 įvairius fondo baseinus, susidedančius iš 7, skirtų poroms sudaryti. ir „Bank TubeHere Amber Group“, „Blockchain Security“ & rsquo; „s“ (*) grupė ką tik panaudojo šias 7 „Blynų porų“ sutartis '& rsquo; „flash-swap“ funkcija paskolinti 2.3 M WBNB:

Norėdami supaprastinti „flash-swap“ skambučius, į ketvirtojo „Pancake Pair.swap“) skambučių įvesties argumentą (2 eilutė arba 4 eilutė) įkėlėme 72 kriterijus: lygis ir ypatybė. Lygio kintamasis rodo, kurį apsikeitimo () lygį mes vadiname & rsquo; vėl įeiti; ypatybės kintamasis yra 74 arba 0, o tai reiškia, kad mes turime gauti token1 arba token0.

Perskaityk straipsnį:  Morgan Stanley teigimu, „Metaverse“ yra kita didelė investicijų tema

Naudodami atgalinio skambinimo funkciją „pancakeCall“ (), mes rekursyviai vadiname „Pancake Pair.swap ()“ su +1 lygiu, kol pasieksime septintą lygį. Pirmajame lygyje mes užburiame „shellcode“ (), kad atliktume tikrą veiksmą 98 eilutėje. Kai „shellcode“) grįžta, ypatybių kintamasis grąžina gautą savybę kiekviename atitikimo lygyje (102–104 eilutės).

Paspausk gaiduką

„Shellcode“ () funkcija, kurią užburia septintasis „pancakeCall“ () lygis, yra tikrasis kodo panaudojimas. Pirma, mes išlaikome esamą WBNB likutį „wbnbAmount“ (108 eilutė), 15,000 112 WBNB keičiame į WBNB-USDT-LP žetonus (113 eilutė) ir siunčiame juos į susitarimą, kuriame buvo nukaldinti tie LP žetonai (ty „Blynų poros“ sutartis). Šiuo veiksmu ketinama kontroliuoti iškvietimą „RemoveLiquidity ()“ funkcijos _ zapAs setsTo BunnyBNB () viduje, kaip buvo įvertinta aukščiau, leidžiant mums gauti daugiau WBNB + USDT, nei tikėtasi.

Antrasis veiksmas yra kontroliuoti USDT kainą, nurodytą _ zapAs setsTo BunnyBNB (), kad USDT būtų perjungtas į WBNB. Kadangi _ zapAs setTo BunnyBNB () naudoja WBNB-USDT blynų porą, kad USDT pakeistų į WBNB, mes galime pakeisti likusią „Flash“ paskolintą WBNB į USDT „Blynų apsikeitimo sandoryje“. Tai padarius, WBNB būtų nepaprastai nebrangus, o „zapAs“ rinkiniai „BunnyBNB“ () gautų neproporcingai didelį WBNB kiekį, kai būtų pereita nuo USDT. Atkreipkite dėmesį, kad čia išlaidų kontrolė vyksta „Pancake V1“ baseine, o ne „Pancake V2“ & rsquo; s Blynų pora, kaip ir ankstesniame veiksme.

Paskutinis veiksmas yra getReward () skambutis. Pagrindinio susitarimo skambutis gali nukaldinti 6.9 M BUNNY žetonus (125 eilutė). Tada „BUNNY“ žetonai gali būti pakeisti į „WBNB“ „Blynų apsikeitimo“ tinkle, kad būtų grąžinta greita paskola.

Mūsų simuliacijoje blogoji žvaigždė moka 1 WBNB ir laimi 104 tūkst. WBNB + 3.8 M USDT (palyginama su ~ 45 mln. USD).

Apie „Amber Group“

„Amber Group“ yra pirmaujanti tarptautinė šifravimo finansavimo įmonė, veikianti visame pasaulyje ir nuolat veikianti Honkonge, Taipėjuje, Seule ir Vankuveryje. 2017 m. Įkurta „Amber Group“ aptarnauja daugiau nei 500 institucinių klientų ir iš tikrųjų daugiau nei 500 mlrd. biržų, valdant daugiau nei 100 mlrd. USD nuosavybės. 1.5 m. „Amber Group“ surinko 2021 milijonų JAV dolerių B serijos finansavimą ir tapo naujausia „FinTech“ vienaragiu, kurio vertė viršijo 100 milijardą dolerių. Norėdami gauti daugiau informacijos, apsilankykite: www.ambergroup.io.

Kiekvienas prekiautojas, prekiaujantis kriptovaliutomis „Binance“ biržoje, nori sužinoti apie artėjančius įvykius pumpmonetų vertės, kad per trumpą laiką gautumėte didžiulį pelną.
Šiame straipsnyje pateikiamos instrukcijos kaip sužinoti, kada ir kuri moneta dalyvaus kitame „Pump“. Kiekvieną dieną bendruomenė veikia Telegramos kanalas Crypto Pump Signals for Binance Signalai Binance skelbia 10 nemokamų signalų apie būsimą “Pump"Ir praneša apie sėkmingą"Pumps “, kuriuos sėkmingai užbaigė VIP bendruomenės organizatoriai.
Žiūrėkite vaizdo įrašą kaip sužinoti apie būsimą kriptovaliutą pump ir uždirbti didžiulį pelną.
Šie prekybos signalai padeda uždirbti didžiulį pelną vos per kelias valandas po to, kai įsigijote „Telegram“ kanale paskelbtas monetas. Ar jau uždirbate pelno naudodamiesi šiais prekybos signalais? Jei ne, tada išbandykite! Linkime sėkmės prekiaujant kriptovaliutomis ir norime gauti tokį patį pelną kaip VIP abonentai. Crypto Pump Signals for Binance Binance kanalo signalai.
Johnas Lesley/ straipsnio autorius

Johnas Lesley yra patyręs prekybininkas, kurio specializacija yra kriptovaliutų rinkos techninė analizė ir prognozavimas. Jis turi daugiau nei 10 metų patirtį įvairiose rinkose ir turtuose - valiutose, indeksuose ir žaliavose. Johnas yra populiarių temų svarbiausiuose forumuose, iš kurių milijonai peržiūrų, autorius ir dirba tiek analitiku, tiek profesionaliu prekybininku tiek klientams, tiek klientams. pats.

Palikti atsakymą