Tööriist metamorfsete nutikate lepingute tuvastamiseks PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Tööriist metamorfsete nutikate lepingute tuvastamiseks

Kriitiline Ethereumi turvaeeldus on see, et nutika lepingu kood on muutumatu ja seetõttu ei saa seda pärast plokiahelas kasutuselevõttu muuta. Praktikas mõned nutikad lepingud võimalik muuta – isegi pärast nende kasutuselevõttu. Mõne nutika nipi abil saate luua metamorfseid nutikaid lepinguid, mis "metamorfoos” millekski muuks – ja kui mõistad, mis need võimalikuks teeb, saad need tuvastada.

Metamorfsed nutikad lepingud on muudetavad, mis tähendab, et arendajad saavad nende sees olevat koodi muuta. Need nutikad lepingud kujutavad tõsist ohtu web3 kasutajatele, kes usaldavad koodi, mida nad eeldavad absoluutse järjekindlusega, eriti kuna halvad näitlejad võivad seda kuju muutmise võimet ära kasutada. Kujutage ette ründajat, kes kasutab seda tehnikat inimeste „vaipamiseks”, kes panevad žetoone nutikasse lepingusse, millest nad aru ei saa, et see on moondunud. Sellel ja sarnastel alustel põhinevad rünnakud võivad anda petturid inimeste saagiks ja üldiselt õõnestada usaldust detsentraliseeritud süsteemide täieliku lubaduse vastu.

Et analüüsida, kas nutikas leping sisaldab metamorfseid omadusi, Ehitasin lihtsa Metamorfse lepingu detektor (inspireeritud ja tuginedes originaaltööle Jason nikerdaja, 0aja teised). Igaüks saab tööriista kasutada selleks, et kontrollida, kas antud lepingul on punased lipud, mis võivad viidata moondepotentsiaalile. Meetod ei ole lollikindel: see, et nutikas lepingus on lipp, ei tähenda, et see oleks tingimata moondunud; ja see, et see nii ei ole, ei tähenda, et see on ohutu. Kontrollija pakub lihtsalt kiiret esialgset hinnangut lepingu sõlmimisele võib olla moondunud võimalike näitajate alusel. 

Web3 kasutajad peaksid end kurssi viima moondelepingutest tulenevate ohtudega, et nad saaksid võimalikke ründeid jälgida ja vältida. Rahakotid ja plokiahela indekseerijad võivad aidata, hoiatades kasutajaid enne, kui nad suhtlevad nutika lepinguga, mis võib sisaldada metamorfseid omadusi. See tööriist on mõeldud nii inimeste harimisel selle võimaliku ohu osas… kui ka selle eest kaitsmisel.

Metamorfsete nutikate lepingute tuvastamine

. Metamorfse lepingu detektor Koostasin kuue atribuudi analüüsid, mis võivad näidata, kas nutikas leping on moondunud.

    1. Kas lepingu juurutamiseks kasutati teadaolevat metamorfset koodi? Kui teadaolev metamorfne baitkood – madalama taseme virtuaalne masinloetav kood, milleks Ethereumi nutilepingud, mis tavaliselt Soliditys kirjutatud, muutuvad pärast kompileerimist – kuvatakse antud nutika lepingu juurutamise tehingus, on see oluline punane lipp. Järgmistes jaotistes käsitleme üht sellist 0age poolt välja töötatud metamorfse baitkoodi näidet. Oluline hoiatus: metamorfse baitkoodi variatsioone võib olla lugematu arv, mis muudab kõigi sortide tuvastamise keeruliseks. Tuntud juhtumeid otsides kõrvaldab detektor aga madalalt rippuvad viljad ründajate jaoks, kes lihtsalt kopeerivad ja kleebivad olemasolevaid näiteid.
    2. Kas nutikas lepingukood võib ennast hävitada? Lepingus oleva koodi asendamiseks – mis on moondelepingu loomise põhietapp – peab arendaja esmalt kustutama olemasoleva koodi. Ainus viis seda teha on kasutada SELFEDSTRUCT opkood, käsk, mis teeb täpselt nii, nagu see kõlab – see kustutab kogu koodi ja salvestusruumi antud lepinguaadressil. Isehävitava koodi olemasolu lepingus ei tõenda, et see on moondeline; see aga annab vihje, et leping võib olla moondunud ja igal juhul tasub teada, kas lepingud, millele tuginete, võivad end tuumastada.
    3. Kas nutikas leping kutsub mujalt koodi sisse? Kui kõnealune nutikas leping ei saa otseselt ennast hävitada, võib see siiski olla võimeline end kustutama, kasutades selleks DELEGATECALL opkood. See opkood võimaldab nutikal lepingul dünaamiliselt laadida ja käivitada koodi, mis asub teises nutikas lepingus. Isegi kui nutikas leping ei sisalda SELFDESTRUCT opkoodi, saab see kasutada DELEGATECALL-i, et laadida ennasthävitava koodi kusagilt mujalt. Kuigi DELEGATECALLi funktsionaalsus ei näita otseselt, kas nutikas leping on moondunud, on see võimalik vihje ja võimalik turvaprobleem, mis väärib märkimist. Hoiatage, et see näitaja võib tekitada palju valepositiivseid tulemusi. 
    4. Kas seda lepingut rakendas mõni muu leping? Saab kasutusele võtta metamorfsed lepingud ainult muude nutikate lepingutega. Selle põhjuseks on asjaolu, et moondelepinguid lubab teine ​​opkood, mida saavad kasutada ainult teised nutikad lepingud, nimega CREATE2. (Arutleme teemal CREATE2 – kuidas see töötab ja miks see oluline on – pikemalt hilisemas osas.) See tunnus on üks kõige vähem silmatorkavamaid võimaliku metamorfismi näitajaid; see on vajalik, kuid ebapiisav eeltingimus. Selle tunnuse skannimine toob tõenäoliselt esile palju valepositiivseid tulemusi, kuid see on väärtuslik teave, kuna see võib tekitada kahtlusi ja anda põhjust lepingut täiendavalt uurida, eriti kui nutikas leping sisaldab järgmises kirjeldatud opkoodi.
    5. Kas juurutajaleping sisaldab opkoodi CREATE2? Nagu eespool mainitud, on juurutamine CREATE2 kaudu metamorfismi oluline eeltingimus. Kui juurutusleping sisaldab opkoodi CREATE2, võib see viidata sellele, et see kasutas kõnealuse lepingu juurutamiseks CREATE2. Kui juurutaja tõepoolest kasutas nimetatud lepingu juurutamiseks CREATE2, kuigi see ei tähenda, et leping oleks tingimata moondunud, tähendab see siiski, et võib olla moondunud ja võib olla mõistlik olla ettevaatlik ja uurida edasi. Jällegi olge valed valepositiivsed: LOO 2 on palju õiguspärased kasutused, sealhulgas tugevdamine "Layer 2" skaleerimislahendused ja nutikate lepinguliste rahakottide loomise hõlbustamine, mis võivad veebi3 täiustada kasutajaga liitumine ja võtmete taastamise valikud.
    6. Kas kood muutus? See on kõige ilmsem ütlus, kuid see ilmub alles pärast seda, kui metamorfne leping on juba muutunud. Kui nutika lepingu koodiräsi – ainulaadne krüptograafiline identifikaator – erineb lepingu algse juurutamise ajal olnud koodist, siis tõenäoliselt kood eemaldati, asendati või muudeti. Kui räsid enam ei ühti, on midagi koodis muutunud ja leping võib olla moondunud. See lipp on metamorfismi kindlaim indikaator, kuid see ei aita ennustada ega ennetada morfimist, kuna see kontrollib ainult, kas see on juba toimunud.

Lisaks moondelepingu tuvastaja jaoks lihtsa käsurea tööriista loomisele koostasin mõned nutikate lepingute näited, mis demonstreerivad pettuse moondelepingu panuse stsenaariumi, mida kirjeldan järgmises jaotises. Kogu kood on siin saadaval GitHubi hoidla

Kuidas pahatahtlik näitleja saab kasutada moondelepinguid, et varastada inimeste raha

Siit saate teada, kuidas keegi võib kelmuse osana kasutada metamorfset nutikat lepingut. 

Esiteks on seadistamise etapp. Ründaja juurutab nutika lepingu plokiahelas kindlal aadressil, kasutades kahte tööriista: metamorfset baitkoodi ja CREATE2 opkoodi. (Laiendame mõlemat mõistet hiljem.) Seejärel teeb metamorfne baitkood seda, mida tema nimi viitab ja „morfeerib”. Siin muutub see a panustamisleping kus kasutajad saavad panustada ERC-20 märke. (Jällegi, me arutame selle morfimise triki üksikasju hiljem. Luba!)

Järgmiseks tuleb sööt ja lüliti. Pahaaimamatud kasutajad panustavad sellesse lepingusse oma žetoonid, olles meelitatud võimalusest teenida tulu või mõnda muud hüve. Seejärel kustutab ründaja sellel nutika lepingu aadressil kogu mängukoodi ja „oleku” – plokiahela salvestusruumi või mälu – kasutades SELFEDSTRUCT opkood käsitletud eelmises jaotises. (Tuleb märkida, et märgid – mis eksisteerivad eraldi ERC-20 lepingu osana – püsivad, isehävitatud leping neid ei mõjuta.)

Lõpuks vaibatõmbamine. Ründaja kasutab uue lepingu "ümberpaigutamiseks" sama metamorfset baitkoodi, mida kasutati häälestusfaasis. See uus leping rakendatakse samale aadressile, mis hiljuti vabanes isehävitava lepingu tõttu. Seekord aga "moondub" baitkood (taas selgitame, kuidas hiljem) pahatahtlikuks lepinguks, mis võib varastada kõik lepingu aadressile pandud märgid. Pettus lõpetatud. 

Riskid, mida metamorfsed arukad lepingud endast kujutavad, on praeguseks ilmselged. Kuid võite ikkagi küsida, kuidas see metamorfismitrikk tegelikult töötab? Selle mõistmiseks peate uurima sügavamalt, baitkoodi tasemele. 

Kuidas CREATE2 avab metamorfismi võimaluse 

LOO 2 on opkoodi täiendus, tutvustati Ethereumi 2019. aasta veebruaris pakub see uut viisi nutikate lepingute juurutamiseks. 

CREATE2 annab arendajatele suurema kontrolli oma nutikate lepingute juurutamise üle, kui neil varem oli. Algne CREATE opkood muudab arendajatel keeruliseks juurutava nutika lepingu sihtkoha aadressi juhtimise. CREATE2 abil saavad inimesed enne selle plokiahelasse juurutamist kontrollida ja teada konkreetse nutika lepingu aadressi. See eelteadmine – pluss mõned nutikad nipid – on see, mis võimaldab inimestel luua metamorfseid nutikaid lepinguid. 

Kuidas saab CREATE2 tulevikku ennustada? Opkoodi arvutus on deterministlik: seni, kuni sisendid ei muutu, ei muutu CREATE2 määratud aadress. (Isegi väikseim muudatus põhjustab juurutamise kusagil mujal.)

Täpsemalt on CREATE2 funktsioon, mis kombineerib ja räsib kokku mõned elemendid. Esiteks sisaldab see juurutaja (või saatja) aadressi: algatava nutika lepingu, mis toimib loodava lepingu vanemana. Järgmisena lisab see saatja antud suvalise numbri (või "soola"), mis võimaldab arendajal juurutada sama koodi erinevatele aadressidele (muutes soola) ja takistab olemasolevate identsete lepingute ülekirjutamist. Lõpuks kasutab see mõne nutika lepingu initsialiseerimise (init) baitkoodi keccak256 räsi, mis on seeme, mis muutub uueks nutikaks lepinguks. See räsikombinatsioon määrab Ethereumi aadressi ja seejärel juurutab antud baitkoodi sellele aadressile. Nii kaua kui baitkood jääb täpselt samaks, CREATE2 juurutab antud baitkoodi alati plokiahelas samale aadressile.

Valem CREATE2 näeb välja järgmine. (Märkus: allolevas näites märkate veel üht elementi, "0xFF". See on lihtsalt pidev CREATE2, mida kasutab vältida kokkupõrkeid eelneva CREATE opkoodiga.)

Nüüd, kui meil on viis koodi juurutamiseks deterministlikule aadressile, kuidas on see võimalik muutma kood samal aadressil? Alguses võib see tunduda võimatu. Kui soovite juurutada uut koodi kasutades CREATE2, peab baitkood muutuma ja seetõttu juurutatakse CREATE2 teisele aadressile. Aga mis siis, kui arendaja koostaks baitkoodi nii, et CREATE2 nutika lepingu juurutamisel võiks see muutuda erinevaks koodiks?

Kuidas moondeleping tegelikult toimib

Nutilepingu moondelepinguks muutmise retsept nõuab kokku kolme nutikat lepingut, millest igaühel on ainulaadne roll.

Üks neist vajalikest komponentidest on Metamorphic Contract Factory, operatsiooni aju. See "tehas" vastutab nii moondelepingu kui ka teise nutika lepingu, mida nimetatakse rakenduslepinguks, juurutamise eest, kuna selle kood rakendatakse lõpuks moondelepingus. Nende kolme lepingu vaheline peen koreograafia toob kaasa metamorfismi, nagu on kujutatud alloleval diagrammil.

Tööriist metamorfsete nutikate lepingute tuvastamiseks PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Arutagem üksikasjalikult iga sammu 1–7, et valgustada töötoiminguid.

1. samm: arendaja paneb kõik liikuma

Kodeerija kujundab nutika lepingukoodi – juurutuslepingu baitkoodi –, mis lõpuks jõuab moondelepingusse. Arendaja saadab selle koodi Metamorphic Contract Factoryle, nutikale lepingule, mille põhieesmärk on juurutada teisi nutikaid lepinguid. See toiming paneb käima kogu metamorfse lepingu loomise protsessi.

Kõik järgnev on selle esialgse sammu tulemus. Tõepoolest, Sammud 1 kuni 6 toimuvad plokiahela ühes aatomitehingus, mis tähendab peaaegu kõike korraga. Neid samme saab korrata ikka ja jälle, lõpmatuseni, et asendada moondelepingus olev kood ja hoida seda pidevalt muutumas.

2. samm: tehas võtab kasutusele rakenduslepingu

Esimene leping, mille tehas juurutab, on rakendusleping, mis sisaldab rakenduskoodi. (Loov, me teame.) Mõelge rakenduslepingule kui laadimisdokile või teekonnapunktile, mis hoiab enne lõppsihtkohta saatmist teatud koodi, mis on antud juhul moondelepingu sees. 

3. samm: tehase kauplustes juurutuslepingu aadress

Pärast selle kasutuselevõttu plokiahelas eksisteerib rakendusleping tingimata mõnel plokiahela aadressil. Tehas salvestab selle lepingu aadressi oma mällu (kasutamiseks hiljem, 5. sammus). 

4. samm: tehas juurutab metamorfse lepingu

Tehas juurutab metamorfse lepingu, kasutades CREATE2 ja metamorfset baitkoodi. Siit leiate tehnilise ja põhjaliku ülevaate metamorfse baitkoodi toimimisest siin, kuid piisab, kui öelda, et kui metamorfne baitkood käivitub, kopeerib see koodi mõnest teisest ahelasisesest asukohast – antud juhul rakenduslepingust – moondelepingusse. Nagu me rääkisime viimases jaotises, kuna CREATE2 on deterministlik - seni, kuni kasutatakse sama saatjat, soola ja baitkoodi -, jääb metamorfse lepingu aadress samaks, olenemata sellest, mitu korda neid samme korratakse.

Allpool on näide sellest, kuidas näeb välja metamorfne baitkood, alates metamorfne repo 0 vanuse järgi. See on vaid üks näide metamorfsest baitkoodist – potentsiaalselt on olemas lugematu arv variatsioone, mis raskendavad oluliselt moondelepingute tuvastamist.

Tööriist metamorfsete nutikate lepingute tuvastamiseks PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

5. samm: metamorfse baitkoodi päringud tehase juurutamise lepingu aadressi kohta

Metamorfne baitkood küsib tehaselt juurutuslepingu aadressi (nagu on salvestatud etapis 3). Vahet pole, kui rakenduslepingu aadress muutub seni, kuni aadressi küsiv metamorfne baitkood jääb samaks. Tõepoolest, kui arendaja juurutab hiljem uue rakenduslepingu – näiteks pahatahtliku lepingu, mis on mõeldud žetoonide varastamiseks –, juurutatakse see 2. toimingu kohaselt tingimata teisele plokiahela aadressile. See ei mõjuta moondelepingu loomist.

Samm 6: Rakenduslepingu kood kopeeritakse moondelepingusse

Kasutades 5. sammus õpitud plokiahela aadressi, otsib metamorfne baitkood koodi juurutuslepingus ja kopeerib selle koodi metamorfse lepingu kohalikku salvestusruumi. Nii muutub moondeleping kuju: kopeerides koodi rakenduslepingust. 

7. samm: loputage ja korrake

Arendaja saab samme 1–6 ikka ja jälle korrata ja asendada moondelepingu koodi uue rakenduslepinguga sellega, mis neile meeldib. Kõik, mida on vaja, on kasutada SELFDESTRUCT opkoodi – või, mis kavalam, DELEGATECALLi operatsioonikoode, mille tulemuseks on SELFDESTRUCT –, et eemaldada metamorfsest lepingust juba olemasolev kood. Korrates tsüklit uue juurutuslepingu baitkoodiga, teeb metamorfne leping nagu võlu morph!

Kasutades seda metamorfsete lepingute loomise tehnikat, saab nutikas arendaja pidevalt web3 kasutajate jalge all maad nihutada. Mõelge uuesti näiteks kelmuse stsenaariumile. Arendaja võib esmalt juurutada juurutamislepingu koos žetoonide panuse koodiga, mis graafikul kujutatud ja ülaltoodud sammudes välja töötatud ringtee kaudu jõuab moondelepingusse. Pettur võib hiljem selle koodi ise hävitada ja asendada uue juurutuslepinguga, mis sisaldab lubavarastamine kood. 

Kõik, mis rakendatakse rakenduslepingus, jõuab lõpuks moondelepingusse. See on triki olemus. 

***

Metamorfsed nutikad lepingud rikuvad kaudse web3 sotsiaalse lepingu, et see, mida näete, on see, mida saate. Sarnaselt sellele, kuidas kestamäng kasutab palli peitmiseks kolme liikuvat tassi, muudab kolme lepingu koosmõju moondelepingu loomisel raskeks lepingu tegeliku funktsiooni järgimise. Shellimäng on eriti tabav võrdlus, sest enesekindluse trikitajad kasutavad võidu tagamiseks sageli kavalust ja valet suunda. Web3 versioonis võivad metamorfsete lepingute kirjutajad samamoodi panna “palli” – rakenduskoodi – kaduma (loe: ennast hävitama) ja asendada sellega, mis neile meeldib.

Metamorfsete lepingute olemasolu tähendab, et web3 kasutajatel on võimalik sõlmida lepinguid, mis võivad oma äranägemise järgi muutuda – seepärast on seda ohtu nii oluline mõista ja selle eest kaitsta. Minu metamorfse lepingu detektor pakub vaid esimest sammu moondelepingute tuvastamisel nende poolt kasutatavate kätega. Tulevikus saab detektorit täiustada mitmel viisil. Näiteks moondelepingu loonud tehast (või juurutajalepingut) rekursiivselt kontrollides saab näha, kas tehas ise on moonde. See funktsioon oleks kasulik täiendus detektori täiendatud versioonile 2.

Tasub veel kord üle korrata: see detektori tööriist ei ole lollikindel. Lipud, mille see kinni püüab, ei ole kõik moondepotentsiaali märguanded, kuid need pakuvad vihjeid. Nende lippude tuvastamine on alles põhjalikuma uurimise algus. Seetõttu laiendasime detektorit, et otsida lippe, mis võivad kergesti genereerida valepositiivseid tulemusi, näiteks operatsioonikoodide CREATE2 või DELEGATECALL olemasolu. Kui teil on ettepanekuid tööriista täiustamiseks või soovite esialgset tööd edasi arendada või seda täiendada, võtke minuga ühendust aadressil .

Analüüsige nutikaid lepinguid metamorfsete tunnuste osas kasutades detektori tööriista ja külastada GitHub repo rohkem

Toimetaja: Robert Hackett @rhhackett

***

Tänuavaldused: Soovin avaldada SUUR sõnavõttu ja tänada Robert Hackettit, Eddy Lazzarinit, Sam Ragsdale'i, Riyaz Faizullabhoyd, Noah Citronit, Mason Halli ja Daejun Parki väärtusliku tagasiside ja nõuannete eest selle postituse ja tööriista ellu viimisel. 

***

Siin väljendatud seisukohad on tsiteeritud AH Capital Management, LLC (“a16z”) üksikute töötajate seisukohad, mitte a16z ega tema sidusettevõtete seisukohad. Teatud siin sisalduv teave on saadud kolmandate osapoolte allikatest, sealhulgas a16z hallatavate fondide portfelliettevõtetelt. Kuigi a16z on võetud usaldusväärsetest allikatest, ei ole a16z sellist teavet sõltumatult kontrollinud ega kinnita teabe püsivat täpsust ega selle sobivust antud olukorras. Lisaks võib see sisu sisaldada kolmandate isikute reklaame; aXNUMXz ei ole selliseid reklaame üle vaadanud ega toeta neis sisalduvat reklaamisisu.

See sisu on esitatud ainult informatiivsel eesmärgil ja sellele ei tohiks tugineda kui juriidilisele, äri-, investeerimis- ega maksunõustamisele. Nendes küsimustes peaksite konsulteerima oma nõustajatega. Viited mis tahes väärtpaberitele või digitaalsetele varadele on illustratiivse tähendusega ega kujuta endast investeerimissoovitust ega investeerimisnõustamisteenuste pakkumist. Lisaks ei ole see sisu suunatud ega mõeldud kasutamiseks ühelegi investorile ega potentsiaalsetele investoritele ning sellele ei tohi mingil juhul tugineda, kui tehakse otsus investeerida a16z hallatavasse fondi. (A16z fondi investeerimise pakkumine tehakse ainult sellise fondi erainvesteeringute memorandumi, märkimislepingu ja muu asjakohase dokumentatsiooni alusel ning neid tuleks lugeda tervikuna.) Kõik mainitud, viidatud investeeringud või portfelliettevõtted või kirjeldatud ei esinda kõiki a16z hallatavatesse sõidukitesse tehtud investeeringuid ning ei saa olla kindlust, et investeeringud on tulusad või et teised tulevikus tehtavad investeeringud on sarnaste omaduste või tulemustega. Andreessen Horowitzi hallatavate fondide tehtud investeeringute loend (v.a investeeringud, mille kohta emitent ei ole andnud A16z-le luba avalikustada, samuti etteteatamata investeeringud avalikult kaubeldavatesse digitaalvaradesse) on saadaval aadressil https://a16z.com/investments /.

Siin esitatud diagrammid ja graafikud on üksnes informatiivsel eesmärgil ja neile ei tohiks investeerimisotsuse tegemisel tugineda. Varasemad tulemused ei näita tulevasi tulemusi. Sisu räägib ainult märgitud kuupäeva seisuga. Kõik nendes materjalides väljendatud prognoosid, hinnangud, prognoosid, eesmärgid, väljavaated ja/või arvamused võivad muutuda ilma ette teatamata ning võivad erineda või olla vastuolus teiste väljendatud arvamustega. Olulist lisateavet leiate aadressilt https://a16z.com/disclosures.

Ajatempel:

Veel alates Andreessen Horowitz