Ένα εργαλείο για την ανίχνευση μεταμορφικών έξυπνων συμβάσεων PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ένα εργαλείο για την ανίχνευση μεταμορφωτικών έξυπνων συμβάσεων

Μια κρίσιμη υπόθεση ασφάλειας του Ethereum είναι ότι ο κώδικας έξυπνου συμβολαίου είναι αμετάβλητος και επομένως δεν μπορεί να αλλάξει μόλις αναπτυχθεί στο blockchain. Στην πράξη, μερικά έξυπνα συμβόλαια κουτί αλλάζουν – ακόμα και μετά την ανάπτυξή τους. Με μερικά έξυπνα κόλπα, μπορείτε να δημιουργήσετε μεταμορφικά έξυπνα συμβόλαια που «μεταμορφώνω» σε κάτι άλλο – και κατανοώντας τι τα καθιστά δυνατά, μπορείτε να τα εντοπίσετε.

Τα μεταμορφικά έξυπνα συμβόλαια είναι μεταβλητά, που σημαίνει ότι οι προγραμματιστές μπορούν να αλλάξουν τον κώδικα μέσα σε αυτά. Αυτά τα έξυπνα συμβόλαια αποτελούν σοβαρό κίνδυνο για τους χρήστες web3 που εμπιστεύονται τον κώδικα που αναμένουν να εκτελείται με απόλυτη συνέπεια, ειδικά καθώς οι κακοί ηθοποιοί μπορούν να εκμεταλλευτούν αυτήν την ικανότητα αλλαγής σχήματος. Φανταστείτε έναν επιτιθέμενο να χρησιμοποιεί την τεχνική για να «χαλί» ανθρώπους που ποντάρουν μάρκες σε ένα έξυπνο συμβόλαιο που δεν αντιλαμβάνονται ότι είναι μεταμορφωμένο. Οι επιθέσεις που βασίζονται σε αυτήν και σε παρόμοιες εγκαταστάσεις θα μπορούσαν να εξοπλίσουν τους απατεώνες για να λεηλατήσουν ανθρώπους και γενικά να υπονομεύσουν την εμπιστοσύνη στην πλήρη υπόσχεση των αποκεντρωμένων συστημάτων.

Για να αναλύσουμε εάν ένα έξυπνο συμβόλαιο περιέχει μεταμορφικές ιδιότητες, έφτιαξα ένα απλό Μεταμορφικός ανιχνευτής συμβάσεων (εμπνευσμένο και βασισμένο στο πρωτότυπο έργο του Τζέισον χαράκτης, 0age, να άλλοι). Οποιοσδήποτε μπορεί να χρησιμοποιήσει το εργαλείο για να ελέγξει εάν ένα δεδομένο συμβόλαιο εμφανίζει κόκκινες σημαίες που θα μπορούσαν να υποδεικνύουν την πιθανότητα μεταμόρφωσης. Η μέθοδος δεν είναι ανόητη: μόνο και μόνο επειδή ένα έξυπνο συμβόλαιο δείχνει μια σημαία, δεν σημαίνει ότι είναι απαραίτητα μεταμορφωμένο. και επειδή δεν το κάνει, δεν σημαίνει ότι είναι ασφαλές. Το πούλι προσφέρει απλώς μια γρήγορη αρχική εκτίμηση ότι ένα συμβόλαιο ενδέχεται να να είναι μεταμορφωμένο με βάση πιθανούς δείκτες. 

Οι χρήστες του Web3 θα πρέπει να εξοικειωθούν με τις απειλές που θέτουν τα μεταμορφωμένα συμβόλαια, ώστε να μπορούν να προσέχουν και να αποφύγουν πιθανές επιθέσεις. Τα πορτοφόλια και τα ευρετήρια blockchain μπορούν να βοηθήσουν προειδοποιώντας τους χρήστες προτού αλληλεπιδράσουν με ένα έξυπνο συμβόλαιο που μπορεί να περιέχει μεταμορφωτικές ιδιότητες. Αυτό το εργαλείο προορίζεται να βοηθήσει τόσο στην εκπαίδευση των ανθρώπων σχετικά με αυτήν την πιθανή απειλή… όσο και στην άμυνα εναντίον της.

Ανίχνευση μεταμορφωμένων έξυπνων συμβάσεων

Η Μεταμορφικός ανιχνευτής συμβάσεων Έφτιαξα αναλύσεις έξι ιδιοτήτων που μπορεί να υποδεικνύουν εάν ένα έξυπνο συμβόλαιο είναι μεταμορφωμένο.

    1. Χρησιμοποιήθηκε γνωστός μεταμορφικός κώδικας για την ανάπτυξη της σύμβασης; Εάν ο γνωστός μεταμορφικός bytecode – ο χαμηλότερος, αναγνώσιμος από εικονικές μηχανές κώδικας στον οποίο μετατρέπεται το Ethereum smart contracts, συνήθως γραμμένο σε Solidity, μετά τη μεταγλώττιση – εμφανίζεται σε μια συναλλαγή για την ανάπτυξη ενός δεδομένου έξυπνου συμβολαίου, αυτό είναι μια σημαντική κόκκινη σημαία. Στις ενότητες που ακολουθούν, θα συζητήσουμε ένα τέτοιο παράδειγμα μεταμορφικού bytecode που αναπτύχθηκε από το 0age. Μια σημαντική προειδοποίηση: Υπάρχουν δυνητικά αναρίθμητες παραλλαγές του μεταμορφωμένου bytecode, γεγονός που καθιστά δύσκολη την ανίχνευση όλων των ποικιλιών. Ωστόσο, σαρώνοντας για γνωστές περιπτώσεις, ο ανιχνευτής εξαλείφει τα χαμηλά φρούτα για τους εισβολείς που απλώς αντιγράφουν και επικολλούν υπάρχοντα παραδείγματα.
    2. Μπορεί ο κώδικας έξυπνης σύμβασης να αυτοκαταστραφεί; Για να αντικαταστήσει τον κώδικα σε ένα συμβόλαιο – ένα βασικό βήμα για τη δημιουργία ενός μεταμορφωμένου συμβολαίου – ένας προγραμματιστής πρέπει πρώτα να διαγράψει τον προϋπάρχοντα κώδικα. Ο μόνος τρόπος για να γίνει αυτό είναι χρησιμοποιώντας το ΑΥΤΟΚΑΤΑΣΤΡΟΦΗ opcode, μια εντολή που κάνει ακριβώς αυτό που ακούγεται - διαγράφει όλο τον κώδικα και την αποθήκευση σε μια δεδομένη διεύθυνση σύμβασης. Η παρουσία αυτοκαταστροφικού κώδικα σε ένα συμβόλαιο δεν αποδεικνύει ότι είναι μεταμορφωμένο. Ωστόσο, προσφέρει μια ένδειξη ότι η σύμβαση ενδέχεται να να είστε μεταμορφωμένοι και αξίζει να γνωρίζετε, ούτως ή άλλως, εάν τα συμβόλαια στα οποία βασίζεστε μπορούν να εκτοξευτούν πυρηνικά.
    3. Το έξυπνο συμβόλαιο καλεί κωδικό από αλλού; Εάν το εν λόγω έξυπνο συμβόλαιο δεν μπορεί να αυτοκαταστραφεί απευθείας, μπορεί και πάλι να μπορεί να διαγραφεί χρησιμοποιώντας το Ο κωδικός DELEGATECALL. Αυτός ο opcode επιτρέπει σε ένα έξυπνο συμβόλαιο να φορτώνει και να εκτελεί δυναμικά κώδικα που βρίσκεται μέσα σε ένα άλλο έξυπνο συμβόλαιο. Ακόμα κι αν το έξυπνο συμβόλαιο δεν περιέχει τον κωδικό λειτουργίας SELFDESTRUCT, μπορεί να χρησιμοποιήσει το DELEGATECALL για να φορτώσει τον αυτοκαταστροφικό κώδικα από κάπου αλλού. Αν και η λειτουργία DELEGATECALL δεν υποδεικνύει άμεσα εάν ένα έξυπνο συμβόλαιο είναι μεταμορφωμένο, είναι μια πιθανή ένδειξη –και πιθανό ζήτημα ασφάλειας– που αξίζει να σημειωθεί. Προειδοποιήστε ότι αυτός ο δείκτης έχει τη δυνατότητα να αυξήσει πολλά ψευδώς θετικά αποτελέσματα. 
    4. Άλλη σύμβαση ανέπτυξε αυτή τη σύμβαση; Μπορούν να αναπτυχθούν μεταμορφικά συμβόλαια αποκλειστικά από άλλα έξυπνα συμβόλαια. Αυτό συμβαίνει επειδή τα μεταμορφικά συμβόλαια ενεργοποιούνται από έναν άλλο κωδικό λειτουργίας, ο οποίος μπορεί να χρησιμοποιηθεί μόνο από άλλα έξυπνα συμβόλαια, που ονομάζεται CREATE2. (Θα συζητήσουμε το CREATE2 – πώς λειτουργεί και γιατί έχει σημασία – περισσότερα σε επόμενη ενότητα.) Αυτό το χαρακτηριστικό είναι ένας από τους λιγότερο εμφανείς δείκτες πιθανής μεταμόρφωσης. είναι απαραίτητη αλλά ανεπαρκής προϋπόθεση. Η σάρωση για αυτό το χαρακτηριστικό είναι πιθανό να προκαλέσει πολλά ψευδώς θετικά - αλλά είναι πολύτιμες πληροφορίες, καθώς μπορεί να εγείρει υποψίες και να δώσει έναν λόγο για περαιτέρω έλεγχο ενός συμβολαίου, ειδικά εάν το έξυπνο συμβόλαιο περιέχει τον κωδικό που περιγράφεται παρακάτω.
    5. Η σύμβαση προγραμματιστή περιέχει τον κωδικό CREATE2; Όπως αναφέρθηκε παραπάνω, η ανάπτυξη μέσω του CREATE2 είναι βασική προϋπόθεση για τη μεταμόρφωση. Εάν μια σύμβαση προγραμματιστή περιέχει τον κωδικό πρόσβασης CREATE2, αυτό μπορεί να υποδηλώνει ότι χρησιμοποίησε το CREATE2 για την ανάπτυξη της εν λόγω σύμβασης. Εάν ο προγραμματιστής όντως χρησιμοποίησε το CREATE2 για να αναπτύξει το εν λόγω συμβόλαιο, ενώ αυτό δεν σημαίνει ότι το συμβόλαιο είναι απαραίτητα μεταμορφωμένο, σημαίνει ότι ενδέχεται να είναι μεταμορφωμένο και ίσως είναι σοφό να προχωρήσετε με προσοχή και να διερευνήσετε περαιτέρω. Και πάλι, προσέξτε τα ψευδώς θετικά: ΔΗΜΙΟΥΡΓΙΑ2 έχει πολλά νόμιμες χρήσεις, συμπεριλαμβανομένης της ενίσχυσης Λύσεις κλιμάκωσης «Layer 2». και διευκολύνει τη δημιουργία πορτοφολιών έξυπνων συμβολαίων που μπορούν να βελτιώσουν το web3 ενσωμάτωση χρήστη και βασικές επιλογές ανάκτησης.
    6. Άλλαξε ο κωδικός; Αυτή είναι η πιο προφανής ένδειξη, αλλά θα εμφανιστεί μόνο αφού έχει ήδη μεταμορφωθεί ένα μεταμορφωμένο συμβόλαιο. Εάν ο κατακερματισμός κώδικα του έξυπνου συμβολαίου – ένα μοναδικό, κρυπτογραφικό αναγνωριστικό – είναι διαφορετικό από ό,τι ήταν κατά την αρχική ανάπτυξη του συμβολαίου, τότε είναι πιθανό ο κωδικός να αφαιρέθηκε, να αντικατασταθεί ή να τροποποιηθεί. Εάν οι κατακερματισμοί δεν ταιριάζουν πλέον, τότε κάτι σχετικά με τον κώδικα έχει αλλάξει και το συμβόλαιο μπορεί να είναι μεταμορφωμένο. Αυτή η σημαία είναι ο πιο σίγουρος δείκτης μεταμόρφωσης, αλλά δεν θα βοηθήσει στην πρόβλεψη ή στην πρόληψη της μεταμόρφωσης, καθώς ελέγχει μόνο ότι έχει ήδη συμβεί.

Εκτός από τη δημιουργία ενός απλού εργαλείου γραμμής εντολών για τον ανιχνευτή μεταμορφωτικών συμβάσεων, κατασκεύασα μερικά παραδείγματα έξυπνων συμβολαίων που παρουσιάζουν ένα σενάριο στοιχηματισμού μεταμορφωτικών συμβολαίων απάτης, το οποίο περιγράφω στην επόμενη ενότητα. Όλος ο κώδικας είναι διαθέσιμος σε αυτό Αποθετήριο GitHub

Πώς ένας κακόβουλος ηθοποιός μπορεί να χρησιμοποιήσει μεταμορφωτικά συμβόλαια για να κλέψει τα χρήματα των ανθρώπων

Δείτε πώς κάποιος μπορεί να χρησιμοποιήσει ένα μεταμορφωμένο έξυπνο συμβόλαιο ως μέρος μιας απάτης. 

Πρώτα είναι η φάση της εγκατάστασης. Ο εισβολέας αναπτύσσει ένα έξυπνο συμβόλαιο σε μια συγκεκριμένη διεύθυνση στο blockchain χρησιμοποιώντας δύο εργαλεία: τον μεταμορφικό bytecode και τον κωδικό CREATE2. (Θα επεκταθούμε και στις δύο αυτές έννοιες αργότερα.) Ο μεταμορφικός bytecode κάνει ό,τι υποδηλώνει το όνομά του και «μορφοποιείται». Εδώ, μετατρέπεται σε α σύμβαση στοιχήματος όπου οι χρήστες μπορούν να ποντάρουν μάρκες ERC-20. (Και πάλι, θα συζητήσουμε τις λεπτομέρειες αυτού του κόλπου μεταμόρφωσης αργότερα. Υπόσχεση!)

Ακολουθεί το δόλωμα και ο διακόπτης. Οι ανυποψίαστοι χρήστες ποντάρουν τα κουπόνια τους σε αυτό το συμβόλαιο, παρασυρόμενοι από την πιθανότητα να κερδίσουν μια απόδοση ή κάποιο άλλο προνόμιο. Στη συνέχεια, ο εισβολέας διαγράφει όλο τον κώδικα πονταρίσματος και την "κατάσταση" - αποθήκευση ή μνήμη blockchain - σε αυτήν τη διεύθυνση έξυπνης σύμβασης χρησιμοποιώντας το ΑΥΤΟΚΑΤΑΣΤΡΟΦΗ opcode συζητήθηκε στην προηγούμενη ενότητα. (Θα πρέπει να σημειωθεί ότι τα διακριτικά – τα οποία υπάρχουν ως μέρος ξεχωριστού συμβολαίου ERC-20 – επιμένουν, ανεπηρέαστα από το συμβόλαιο που καταστράφηκε.)

Τέλος, το χαλί-τράβηγμα. Ο εισβολέας επαναχρησιμοποιεί τον ίδιο μεταμορφικό bytecode που χρησιμοποιήθηκε στη φάση εγκατάστασης για να «αναδιατάξει» ένα νέο συμβόλαιο. Αυτή η νέα σύμβαση αναπτύσσεται στην ίδια διεύθυνση που εκκενώθηκε πρόσφατα από το συμβόλαιο αυτοκαταστροφής. Αυτή τη φορά, ωστόσο, ο bytecode «μορφοποιείται» (και πάλι, θα εξηγήσουμε πώς αργότερα) σε ένα κακόβουλο συμβόλαιο που μπορεί να κλέψει όλα τα tokens που στοιχηματίζονται στη διεύθυνση του συμβολαίου. Η απάτη ολοκληρώθηκε. 

Οι κίνδυνοι που εγκυμονούν τα έξυπνα συμβόλαια μεταμόρφωσης είναι πλέον προφανείς. Αλλά ίσως εξακολουθείτε να αναρωτιέστε, πώς λειτουργεί πραγματικά αυτό το τέχνασμα μεταμόρφωσης; Για να το καταλάβετε αυτό, πρέπει να διερευνήσετε βαθύτερα, στο επίπεδο του bytecode. 

Πώς το CREATE2 ανοίγει την πιθανότητα μεταμόρφωσης 

ΔΗΜΙΟΥΡΓΙΑ2 είναι μια αναβάθμιση opcode, εισήχθη στο Ethereum τον Φεβρουάριο του 2019, που προσφέρει έναν νέο τρόπο ανάπτυξης έξυπνων συμβολαίων. 

Το CREATE2 δίνει στους προγραμματιστές περισσότερο έλεγχο στην ανάπτυξη των έξυπνων συμβολαίων τους από ό,τι είχαν στο παρελθόν. Ο αρχικός κωδικός CREATE καθιστά δύσκολο για τους προγραμματιστές να ελέγξουν τη διεύθυνση προορισμού για ένα έξυπνο συμβόλαιο που πρόκειται να αναπτυχθεί. Με το CREATE2, οι άνθρωποι μπορούν να ελέγχουν και να γνωρίζουν τη διεύθυνση ενός συγκεκριμένου έξυπνου συμβολαίου εκ των προτέρων, προτού το αναπτύξουν πραγματικά στο blockchain. Αυτή η πρόγνωση – συν μερικά έξυπνα κόλπα – είναι που επιτρέπει στους ανθρώπους να δημιουργούν μεταμορφικά έξυπνα συμβόλαια. 

Πώς μπορεί το CREATE2 να προβλέψει το μέλλον; Ο υπολογισμός του opcode είναι ντετερμινιστικός: όσο οι είσοδοι δεν αλλάζουν, η διεύθυνση που καθορίζεται από το CREATE2 δεν θα αλλάξει. (Ακόμη και η πιο μικρή αλλαγή θα προκαλέσει την ανάπτυξη κάπου αλλού.)

Πιο αναλυτικά, το CREATE2 είναι μια συνάρτηση που συνδυάζει και κατακερματίζει μερικά στοιχεία. Πρώτον, ενσωματώνει τη διεύθυνση του προγραμματιστή (ή του αποστολέα): το αρχικό έξυπνο συμβόλαιο που λειτουργεί ως γονέας σε αυτόν που θα δημιουργηθεί. Στη συνέχεια, προσθέτει έναν αυθαίρετο αριθμό που παρέχεται από τον αποστολέα (ή "salt"), ο οποίος επιτρέπει στον προγραμματιστή να αναπτύξει τον ίδιο κώδικα σε διαφορετικές διευθύνσεις (αλλάζοντας το αλάτι) και αποτρέπει την αντικατάσταση υπαρχόντων, πανομοιότυπων συμβολαίων. Τέλος, χρησιμοποιεί τον κατακερματισμό keccak256 κάποιου bytecode αρχικοποίησης έξυπνων συμβολαίων ("init"), ο οποίος είναι ο σπόρος που μετατρέπεται σε ένα νέο έξυπνο συμβόλαιο. Αυτός ο συνδυασμός hash-together καθορίζει μια διεύθυνση Ethereum και στη συνέχεια αναπτύσσει τον δεδομένο bytecode σε αυτήν τη διεύθυνση. Οσο ο bytecode παραμένει ακριβώς ο ίδιος, το CREATE2 θα αναπτύσσει πάντα τον δεδομένο bytecode στην ίδια διεύθυνση στο blockchain.

Δείτε πώς φαίνεται ο τύπος CREATE2. (Σημείωση: θα παρατηρήσετε ένα άλλο στοιχείο, ένα "0xFF", στο παρακάτω παράδειγμα. Αυτό είναι απλώς μια σταθερή που χρησιμοποιεί το CREATE2 αποτρέψει τις συγκρούσεις με τον προηγούμενο κωδικό CREATE.)

Τώρα που έχουμε έναν τρόπο να αναπτύξουμε κώδικα σε μια ντετερμινιστική διεύθυνση, πώς είναι δυνατόν αλλαγή ο κωδικός στην ίδια διεύθυνση; Στην αρχή, αυτό μπορεί να φαίνεται αδύνατο. Εάν θέλετε να αναπτύξετε νέο κώδικα χρησιμοποιώντας το CREATE2, ο bytecode πρέπει να αλλάξει και επομένως, το CREATE2 θα αναπτυχθεί σε διαφορετική διεύθυνση. Τι θα γινόταν όμως αν ένας προγραμματιστής κατασκεύαζε τον bytecode με τέτοιο τρόπο ώστε να μπορεί να «μορφοποιείται» σε διαφορετικό κώδικα όταν το CREATE2 αναπτύσσει ένα έξυπνο συμβόλαιο;

Πώς λειτουργεί πραγματικά ένα μεταμορφικό συμβόλαιο

Η συνταγή για τη μετατροπή ενός έξυπνου συμβολαίου σε ένα μεταμορφωμένο συμβόλαιο απαιτεί τρία έξυπνα συμβόλαια συνολικά, καθένα από τα οποία παίζει μοναδικό ρόλο.

Ένα από αυτά τα απαραίτητα συστατικά είναι το Metamorphic Contract Factory, ο εγκέφαλος της επιχείρησης. Αυτό το «Εργοστάσιο» είναι υπεύθυνο για την ανάπτυξη του Μεταμορφικού Συμβολαίου καθώς και ενός άλλου έξυπνου συμβολαίου που ονομάζεται Συμβόλαιο Υλοποίησης, που ονομάζεται έτσι επειδή ο κώδικάς του τελικά υλοποιείται μέσα στο Μεταμορφικό Συμβόλαιο. Μια λεπτή χορογραφία μεταξύ αυτών των τριών συμβάσεων οδηγεί σε μεταμόρφωση, όπως φαίνεται στο παρακάτω διάγραμμα.

Ένα εργαλείο για την ανίχνευση μεταμορφικών έξυπνων συμβάσεων PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Ας συζητήσουμε κάθε βήμα, 1-7, λεπτομερώς για να φωτίσουμε τις λειτουργίες στην εργασία.

Βήμα 1: Ένας προγραμματιστής θέτει τα πάντα σε κίνηση

Ένας κωδικοποιητής σχεδιάζει κάποιο έξυπνο κώδικα συμβολαίου – τον ​​bytecode του Συμβόλαίου Υλοποίησης – που τελικά θα καταλήξει στο Μεταμορφικό Συμβόλαιο. Ο προγραμματιστής στέλνει αυτόν τον κώδικα στο Metamorphic Contract Factory, ένα έξυπνο συμβόλαιο του οποίου ο κύριος σκοπός είναι να αναπτύξει άλλα έξυπνα συμβόλαια. Αυτή η ενέργεια θέτει σε κίνηση ολόκληρη τη διαδικασία δημιουργίας του Μεταμορφικού Συμβολαίου.

Όλα όσα ακολουθούν είναι αποτέλεσμα αυτού του αρχικού βήματος. Πράγματι, Τα βήματα 1 έως 6 συμβαίνουν σε μία ατομική συναλλαγή στο blockchain, δηλαδή σχεδόν όλα ταυτόχρονα. Αυτά τα βήματα μπορούν να επαναληφθούν ξανά και ξανά, επ' άπειρον, για να αντικατασταθεί ο κώδικας μέσα στο Μεταμορφικό Συμβόλαιο και να διατηρηθεί η διαρκής μεταμόρφωσή του.

Βήμα 2: Το εργοστάσιο αναπτύσσει τη σύμβαση υλοποίησης

Το πρώτο συμβόλαιο που αναπτύσσει το Εργοστάσιο είναι το Συμβόλαιο Υλοποίησης, το οποίο περιέχει κώδικα υλοποίησης. (Δημιουργικό, ξέρουμε.) Σκεφτείτε το Συμβόλαιο Υλοποίησης ως αποβάθρα φόρτωσης ή σημείο διαδρομής, που περιέχει κάποιο κωδικό πριν αποσταλεί στον τελικό του προορισμό, ο οποίος θα είναι, σε αυτήν την περίπτωση, μέσα στο Μεταμορφικό Συμβόλαιο. 

Βήμα 3: Καταστήματα εργοστασίων Διεύθυνση Συμβολαίου Υλοποίησης

Μετά την ανάπτυξή του στο blockchain, το Συμβόλαιο Υλοποίησης θα υπάρχει αναγκαστικά σε κάποια διεύθυνση blockchain. Το Εργοστάσιο αποθηκεύει αυτήν τη διεύθυνση σύμβασης στη μνήμη του (για να χρησιμοποιηθεί αργότερα, στο Βήμα 5). 

Βήμα 4: Το εργοστάσιο αναπτύσσει το Metamorphic Contract

Το Εργοστάσιο αναπτύσσει το Μεταμορφικό Συμβόλαιο χρησιμοποιώντας CREATE2 και μεταμορφικό bytecode. Μπορείτε να βρείτε μια τεχνική, σε βάθος περιγραφή του τρόπου λειτουργίας του μεταμορφωμένου bytecode εδώ, αλλά αρκεί να πούμε ότι όταν εκτελείται ο μεταμορφωμένος bytecode, αντιγράφει τον κώδικα από κάποια άλλη θέση στην αλυσίδα – σε αυτήν την περίπτωση, από το Συμβόλαιο Υλοποίησης – στο Μεταμορφικό Συμβόλαιο. Όπως είπαμε στην τελευταία ενότητα, εφόσον το CREATE2 είναι ντετερμινιστικό – εφόσον χρησιμοποιούνται ο ίδιος αποστολέας, αλάτι και bytecode – τότε η διεύθυνση του Μεταμορφικού Συμβολαίου παραμένει η ίδια όσες φορές κι αν επαναληφθούν αυτά τα βήματα.

Παρακάτω είναι ένα παράδειγμα της εμφάνισης του μεταμορφωμένου bytecode, από το μεταμορφωμένο ρεπό κατά 0 ηλικία. Αυτό είναι μόνο ένα παράδειγμα μεταμορφικού bytecode – υπάρχουν δυνητικά αναρίθμητες παραλλαγές, που περιπλέκουν πολύ την ανίχνευση μεταμορφωτικών συμβάσεων.

Ένα εργαλείο για την ανίχνευση μεταμορφικών έξυπνων συμβάσεων PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Βήμα 5: Ερωτήματα μεταμορφωτικού bytecode Διεύθυνση σύμβασης εργοστασίου για υλοποίηση

Ο μεταμορφωμένος bytecode ζητά από το Factory τη διεύθυνση της σύμβασης υλοποίησης (όπως είναι αποθηκευμένη στο Βήμα 3). Δεν έχει σημασία αν αλλάξει η διεύθυνση της Σύμβασης Υλοποίησης, εφόσον ο μεταμορφικός bytecode που ζητά τη διεύθυνση παραμένει ο ίδιος. Πράγματι, εάν ο προγραμματιστής αναπτύξει αργότερα ένα νέο Συμβόλαιο Υλοποίησης – όπως ένα κακόβουλο που έχει σχεδιαστεί για να κλέβει μάρκες – θα αναπτυχθεί απαραίτητα σε διαφορετική διεύθυνση blockchain, ανά Βήμα 2. Αυτό δεν έχει καμία επίδραση στη δημιουργία του Μεταμορφικού Συμβολαίου.

Βήμα 6: Ο κώδικας σύμβασης υλοποίησης αντιγράφεται στο Metamorphic Contract

Χρησιμοποιώντας τη διεύθυνση blockchain που μάθαμε στο Βήμα 5, ο μεταμορφικός bytecode εντοπίζει τον κώδικα στο Implementation Contract και αντιγράφει αυτόν τον κώδικα στην τοπική αποθήκευση του Metamorphic Contract. Έτσι αλλάζει σχήμα το Μεταμορφικό Συμβόλαιο: αντιγράφοντας κώδικα από το Συμβόλαιο Υλοποίησης. 

Βήμα 7: Ξεπλύνετε και επαναλάβετε

Ένας προγραμματιστής μπορεί να επαναλάβει τα Βήματα 1 έως 6 ξανά και ξανά και να αντικαταστήσει τον κώδικα στο Μεταμορφικό Συμβόλαιο με ό,τι του αρέσει μέσω ενός νέου Συμβολαίου Υλοποίησης. Το μόνο που χρειάζεται είναι να χρησιμοποιήσετε τον κωδικό ΑΥΤΟΚΑΤΑΣΤΡΟΦΗΣ – ή, πιο δόλια, τους κωδικούς πρόσβασης DELEGATECALL που τελικά καταλήγουν σε ΑΥΤΟΚΑΤΑΣΤΡΟΦΗ – για να αφαιρέσετε τον προϋπάρχοντα κώδικα στο Μεταμορφικό Συμβόλαιο. Επαναλαμβάνοντας τον κύκλο με νέο bytecode Συμβόλαιο Υλοποίησης, το Μεταμορφικό Συμβόλαιο θα, σαν μαγικό, μορφολογία!

Χρησιμοποιώντας αυτήν την τεχνική για τη δημιουργία μεταμορφωτικών συμβολαίων, ένας έξυπνος προγραμματιστής μπορεί συνεχώς να μετατοπίζει το έδαφος κάτω από τα πόδια των χρηστών του web3. Σκεφτείτε, για παράδειγμα, ξανά το σενάριο απάτης. Ένας προγραμματιστής μπορεί πρώτα να αναπτύξει το Συμβόλαιο Υλοποίησης με κωδικό στοιχηματισμού που, μέσω της κυκλικής διαδρομής που απεικονίζεται στο γράφημα και περιγράφεται στα παραπάνω βήματα, καταλήγει στο Μεταμορφικό Συμβόλαιο. Ο απατεώνας θα μπορούσε αργότερα να αυτοκαταστρέψει αυτόν τον κωδικό και να τον αντικαταστήσει αναπτύσσοντας ένα νέο Συμβόλαιο Υλοποίησης που περιέχει διακριτικό-κλοπή κώδικας. 

Ό,τι αναπτυχθεί στο Συμβόλαιο Υλοποίησης θα καταλήξει τελικά στο Μεταμορφικό Συμβόλαιο. Αυτή είναι η ουσία του κόλπου. 

***

Τα μεταμορφικά έξυπνα συμβόλαια σπάζουν το σιωπηρό κοινωνικό συμβόλαιο web3 ότι αυτό που βλέπετε είναι αυτό που παίρνετε. Παρόμοια με τον τρόπο που το παιχνίδι με κέλυφος χρησιμοποιεί τρία κινούμενα κύπελλα για να κρύψει μια μπάλα, η αλληλεπίδραση των τριών συμβολαίων στη δημιουργία ενός μεταμορφωμένου συμβολαίου καθιστά δύσκολη την παρακολούθηση της πραγματικής λειτουργίας του συμβολαίου. Το παιχνίδι με το κέλυφος είναι μια ιδιαίτερα εύστοχη σύγκριση, επειδή οι απατεώνες αυτοπεποίθησης χρησιμοποιούν συχνά δόλο και λάθος κατεύθυνση για να εξασφαλίσουν ότι θα κερδίσουν. Στην έκδοση web3, οι συγγραφείς μεταμορφωτικών συμβολαίων μπορούν παρομοίως να κάνουν τη «μπάλα» – τον ​​κώδικα υλοποίησης, δηλαδή – να εξαφανιστεί (διαβάστε: αυτοκαταστροφή) και μπορούν να την αντικαταστήσουν με ό,τι θέλουν.

Η ύπαρξη μεταμορφωτικών συμβολαίων σημαίνει ότι είναι δυνατό για τους χρήστες του web3 να συνάπτουν συμβάσεις που μπορούν να αλλάξουν κατά βούληση – γι' αυτό είναι τόσο σημαντικό να κατανοήσουμε και να υπερασπιστούμε αυτήν την απειλή. My Metamorphic Contract Detector προσφέρει μόνο ένα πρώτο βήμα προς τον προσδιορισμό των μεταμορφωτικών συμβάσεων με το δόλο που χρησιμοποιούν. Υπάρχουν διάφοροι τρόποι με τους οποίους θα μπορούσε να βελτιωθεί ο ανιχνευτής στο μέλλον. Για παράδειγμα, ελέγχοντας αναδρομικά το Factory (ή το συμβόλαιο προγραμματιστή) που δημιούργησε το Metamorphic Contract, θα μπορούσε κανείς να δει αν το ίδιο το Factory είναι μεταμορφωμένο. Αυτή η δυνατότητα θα ήταν μια χρήσιμη προσθήκη σε μια αναβαθμισμένη έκδοση 2 του Ανιχνευτή.

Αξίζει να το επαναλάβουμε για άλλη μια φορά: Αυτό το εργαλείο ανιχνευτή δεν είναι ανόητο. Οι σημαίες που πιάνει δεν είναι όλες ενδεικτικές ενδείξεις μεταμόρφωσης, αλλά προσφέρουν ενδείξεις. Η αναγνώριση αυτών των σημαιών είναι μόνο η αρχή για μια πιο διεξοδική έρευνα. Αυτός είναι ο λόγος για τον οποίο επεκτείναμε τον Ανιχνευτή για αναζήτηση σημαιών που θα μπορούσαν εύκολα να δημιουργήσουν ψευδώς θετικά στοιχεία, όπως η παρουσία κωδικών λειτουργίας CREATE2 ή DELEGATECALL. Εάν έχετε προτάσεις για τη βελτίωση του εργαλείου ή θέλετε να αξιοποιήσετε ή να προσθέσετε σε αυτήν την αρχική εργασία, επικοινωνήστε μαζί μου στο .

Αναλύστε έξυπνα συμβόλαια για μεταμορφικά χαρακτηριστικά χρησιμοποιώντας το εργαλείο Ανιχνευτής και να επισκεφθείτε το GitHub repo για περισσότερες

Επιμέλεια: Robert Hackett @rhhackett

***

Ευχαριστίες: Θέλω να εκφράσω ένα ΤΕΡΑΣΤΙΟ μήνυμα και να ευχαριστήσω τον Robert Hackett, τον Eddy Lazzarin, τον Sam Ragsdale, τον Riyaz Faizulabhoy, τον Noah Citron, τον Mason Hall και το Daejun Park για τα πολύτιμα σχόλια και τις συμβουλές για την πραγματοποίηση αυτής της ανάρτησης και του εργαλείου. 

***

Οι απόψεις που εκφράζονται εδώ είναι αυτές του μεμονωμένου προσωπικού της AH Capital Management, LLC (“a16z”) που αναφέρεται και δεν είναι απόψεις της a16z ή των θυγατρικών της. Ορισμένες πληροφορίες που περιέχονται εδώ έχουν ληφθεί από τρίτες πηγές, συμπεριλαμβανομένων των εταιρειών χαρτοφυλακίου κεφαλαίων που διαχειρίζεται η a16z. Αν και λαμβάνεται από πηγές που πιστεύεται ότι είναι αξιόπιστες, το a16z δεν έχει επαληθεύσει ανεξάρτητα τέτοιες πληροφορίες και δεν κάνει δηλώσεις σχετικά με τη διαρκή ακρίβεια των πληροφοριών ή την καταλληλότητά τους για μια δεδομένη κατάσταση. Επιπλέον, αυτό το περιεχόμενο μπορεί να περιλαμβάνει διαφημίσεις τρίτων. Η a16z δεν έχει ελέγξει τέτοιες διαφημίσεις και δεν υποστηρίζει κανένα διαφημιστικό περιεχόμενο που περιέχεται σε αυτές.

Αυτό το περιεχόμενο παρέχεται μόνο για ενημερωτικούς σκοπούς και δεν θα πρέπει να βασίζεται ως νομική, επιχειρηματική, επενδυτική ή φορολογική συμβουλή. Θα πρέπει να συμβουλευτείτε τους δικούς σας συμβούλους για αυτά τα θέματα. Οι αναφορές σε οποιουσδήποτε τίτλους ή ψηφιακά περιουσιακά στοιχεία είναι μόνο για ενδεικτικούς σκοπούς και δεν αποτελούν επενδυτική σύσταση ή προσφορά για παροχή επενδυτικών συμβουλευτικών υπηρεσιών. Επιπλέον, αυτό το περιεχόμενο δεν απευθύνεται ούτε προορίζεται για χρήση από επενδυτές ή υποψήφιους επενδυτές και δεν μπορεί σε καμία περίπτωση να γίνει επίκληση του κατά τη λήψη απόφασης για επένδυση σε οποιοδήποτε αμοιβαίο κεφάλαιο που διαχειρίζεται η a16z. (Μια προσφορά για επένδυση σε ένα αμοιβαίο κεφάλαιο a16z θα γίνει μόνο από το μνημόνιο ιδιωτικής τοποθέτησης, τη συμφωνία εγγραφής και άλλη σχετική τεκμηρίωση οποιουδήποτε τέτοιου κεφαλαίου και θα πρέπει να διαβαστεί στο σύνολό τους.) Τυχόν επενδύσεις ή εταιρείες χαρτοφυλακίου που αναφέρονται, αναφέρονται ή που περιγράφονται δεν είναι αντιπροσωπευτικές όλων των επενδύσεων σε οχήματα που διαχειρίζεται η a16z και δεν μπορεί να υπάρξει διαβεβαίωση ότι οι επενδύσεις θα είναι κερδοφόρες ή ότι άλλες επενδύσεις που θα πραγματοποιηθούν στο μέλλον θα έχουν παρόμοια χαρακτηριστικά ή αποτελέσματα. Μια λίστα με επενδύσεις που πραγματοποιήθηκαν από αμοιβαία κεφάλαια που διαχειρίζεται ο Andreessen Horowitz (εξαιρουμένων των επενδύσεων για τις οποίες ο εκδότης δεν έχει παράσχει άδεια για δημοσιοποίηση της a16z καθώς και των απροειδοποίητων επενδύσεων σε δημόσια διαπραγματεύσιμα ψηφιακά περιουσιακά στοιχεία) είναι διαθέσιμη στη διεύθυνση https://a16z.com/investments /.

Τα γραφήματα και τα γραφήματα που παρέχονται εντός προορίζονται αποκλειστικά για ενημερωτικούς σκοπούς και δεν θα πρέπει να βασίζονται σε αυτά όταν λαμβάνεται οποιαδήποτε επενδυτική απόφαση. Οι προηγούμενες αποδόσεις δεν είναι ενδεικτικές των μελλοντικών αποτελεσμάτων. Το περιεχόμενο μιλά μόνο από την ημερομηνία που υποδεικνύεται. Οποιεσδήποτε προβλέψεις, εκτιμήσεις, προβλέψεις, στόχοι, προοπτικές και/ή απόψεις που εκφράζονται σε αυτό το υλικό υπόκεινται σε αλλαγές χωρίς προειδοποίηση και μπορεί να διαφέρουν ή να είναι αντίθετες με τις απόψεις που εκφράζονται από άλλους. Ανατρέξτε στη διεύθυνση https://a16z.com/disclosures για πρόσθετες σημαντικές πληροφορίες.

Σφραγίδα ώρας:

Περισσότερα από Andreessen Horowitz