Στις 2 Νοεμβρίου, το Axion Network κυκλοφόρησε το νέο διακριτικό του, γνωστό ως AXN. Το έργο χαρακτήρισε το περιουσιακό στοιχείο ως νέο επενδυτικό όχημα, υποστηρίζοντας ότι θα ήταν το πιο κερδοφόρο blockchain του είδους του μέχρι σήμερα. Κατά τη διάρκεια της ενδιάμεσης προόδου στο airdrop του AXN, πέντε ξεχωριστές ομάδες φέρεται να εξέτασαν τον κωδικό του διακριτικού. Αγαπητοί της βιομηχανίας όπως η CertiK και ο Hacken ήταν μεταξύ εκείνων που διενήργησαν τους ελέγχους.
Λίγες ώρες μετά το συμβάν της δωρεάν αξίωσης του πρωτοκόλλου, ωστόσο, έγινε σαφές ότι κάτι πήγε στραβά. Ένας μη εξουσιοδοτημένος ηθοποιός κόβει απροσδόκητα 79 δισεκατομμύρια AXN και τα εκφόρτωσε στην αγορά. Η τιμή κατέρρευσε πάνω από 99%, συμψηφίζοντας τους επιτιθέμενους με ένα δροσερό 1300 ETH – αξίας περίπου 500.000 $ κατά τη δημοσίευση.
Τις επόμενες ώρες, η ομάδα πίσω από το έργο Axion ενθάρρυνε τους συμμετέχοντες να μείνουν μακριά από τις συναλλαγές ή να αλληλεπιδράσουν με το στοιχείο, δηλώνοντας μέσω του επίσημου καναλιού Telegram της πλατφόρμας:
“Μην αγοράζετε το AXN αυτήν τη στιγμή, μην αλληλεπιδράτε με το ταμπλό”
Ο λογαριασμός Twitter του Axion Network συνέχισε να δημοσιεύει ενημερώσεις, όπως:
Είμαστε ακόμα εδώ.
Όλα τα άτομα AXN / HEX2T που κρατούσαν τη στιγμή της εκμετάλλευσης θα πιστωθούν.
Θα ξεκινήσουμε μια πύλη επιβράβευσης ρευστότητας για να δημιουργήσουμε και αντίγραφα ασφαλείας.
Εργαζόμαστε σκληρά για την επανέναρξη του AXN το συντομότερο δυνατό.
– Axion (@axion_network) 2 Νοεμβρίου 2020
Παρά αυτές τις διαβεβαιώσεις, η CertiK προχωρά προς τα εμπρός για να προσφέρει στην κοινότητα μια σαφέστερη εξήγηση για το τι θεωρούν ότι έχει πάει στραβά, και να κατανοήσει πώς θα μπορούσαν να προληφθούν παρόμοιες επιθέσεις στο μέλλον. Ο Cointelegraph επικοινωνούσε μέσω email στον “Jack Durden”, ο οποίος μας περιγράφηκε ως Διευθύνων Σύμβουλος του Axion Network, αλλά δεν έλαβε άμεση απάντηση. Κανένα μέλος της ομάδας δεν αναφέρεται στη λευκή βίβλο του έργου ή στον ιστότοπο και το όνομα “Jack Durden” κοινοποιείται στον αόρατο αφηγητή της ταινίας Fight Club.
Λάβετε υπόψη ότι το υπόλοιπο αυτού του άρθρου αναπαράγεται λέξη-προς-λέξη, με ευγενική παραχώρηση του CertiK, ως δημόσια υπηρεσία για την εκπαίδευση των αναγνωστών σχετικά με την κατανόηση του τι συνέβη από την ομάδα ελέγχου. Η Cointelegraph δεν έχει ελέγξει τον κωδικό και οι απόψεις που αναφέρονται παρακάτω είναι επομένως αποκλειστικά αυτές της CertiK.
Αναφορά προσωπικού της CertiK σχετικά με τη συντριβή της τιμής Axion
Στις 2 Νοεμβρίου 2020 στις περίπου 11:00 π.μ. + UTC ένας χάκερ κατάφερε να κόψει περίπου 80 δισεκατομμύρια μάρκες AXN, χρησιμοποιώντας την αδιάκοπη λειτουργία του συμβολαίου Axion Staking.
Ο χάκερ προχώρησε στη συνέχεια να ρίξει τα κουπόνια στο χρηματιστήριο Uniswap AXN για την Ether, επαναλαμβάνοντας αυτήν τη διαδικασία έως ότου εξαντλήθηκε η ανταλλαγή Uniswap και η τιμή του διακριτικού αυξήθηκε στο 0.
Μας ενημερώθηκαν για το συμβάν μέσα σε λίγα λεπτά από την επίθεση και οι αναλυτές ασφαλείας μας άρχισαν να αξιολογούν την κατάσταση αμέσως.
Καταλήξαμε στο συμπέρασμα ότι η επίθεση ήταν πιθανότατα προγραμματισμένη από το εσωτερικό, η οποία περιελάμβανε ένεση κακόβουλου κώδικα τη στιγμή που ο κώδικας αναπτύχθηκε αλλάζοντας κώδικα από τις εξαρτήσεις OpenZeppelin.
Η εκμεταλλευόμενη συνάρτηση δεν ήταν μέρος του ελέγχου που διενεργήσαμε καθώς προστέθηκε μετά τη σύνδεση του κώδικα της Axion με τον κώδικα του OpenZeppelin μέσω της «ισοπέδωσης» και της ένεσης στον κώδικα του OpenZeppelin πριν από την ανάπτυξη.
Σχεδίαση
Ο χάκερ χρησιμοποίησε ανώνυμα χρήματα που προήλθαν από ανεμοστρόβιλος την προηγούμενη μέρα που έγινε το χάκερ, υπαινιγμός για μια προ-διαλογισμένη επίθεση. Πιθανότατα για εξοικονόμηση χρημάτων σε περίπτωση αποτυχίας της επίθεσης, 2.1 Ether κυκλοφόρησαν ξανά στο tornado.cash αμέσως μετά τον λογαριασμό που έλαβε τα χρήματα.
Για να οριστικοποιηθεί η εγκατάσταση της επίθεσης, ο χάκερ αγόρασε περίπου ~ 700k διακριτικά HEX2T από την ανταλλαγή Uniswap. Ωστόσο, αυτά τα κεφάλαια τελικά δεν ήταν μέρος της επίθεσης και χρησίμευσαν ως οθόνη καπνού σχετικά με το πώς ξετυλίχθηκε η επίθεση.
Ρύθμιση
Ο χάκερ ξεκίνησε τον δρόμο του για να ενεργοποιήσει την επίθεσή του δημιουργώντας ένα «κενό» στοίχημα στο συμβόλαιο Staking του Axion Network επικαλούμενος τη λειτουργία πονταρίσματος με ποσό 0 και διάρκεια πονταρίσματος 1 ημέρας στο περίπου 09:00 π.μ. + UTC. Αυτό δημιούργησε μια καταχώριση περιόδου σύνδεσης για τον εισβολέα με 0 ποσό και 0 τιμές μετοχών στο αναγνωριστικό περιόδου σύνδεσης 6.
Στη συνέχεια, ο εισβολέας προεγκρίνει απεριόριστο ποσό AXN στο χρηματιστήριο Uniswap εν αναμονή της επιτυχίας της επίθεσης. Κατά συνέπεια, ενέκριναν τη σύμβαση NativeSwap της Axion για το ποσό των χρημάτων που σκόπευαν να μετατρέψουν σε μάρκες AXN.
Επικαλέστηκαν τη λειτουργία κατάθεσης του συμβολαίου NativeSwap στις περίπου 10:00 π.μ. + UTC, Ωστόσο, ο χάκερ δεν κάλεσε ποτέ τη λειτουργία ανάληψης του συμβολαίου για να διεκδικήσει το ανταλλαγμένο AXN του ως προφανές στη λειτουργία swapTokenBalanceOf του συμβολαίου NativeSwap. Στη συνέχεια, πραγματοποίησαν μια ακόμη κλήση λειτουργίας αποτυχημένης κατάθεσης πριν εκτελέσουν την επίθεση.
Εκτέλεση
Αυτές οι συναλλαγές ήταν απλώς οθόνες καπνού για το πώς πραγματοποιήθηκε η επίθετη επίθεση. Καθώς οι συναλλαγές που πραγματοποίησε ο εισβολέας δεν οδήγησαν σε αλλαγή στην αντιστοίχιση sessionDataOf, καταλήξαμε στο συμπέρασμα ότι αυτή ήταν μια επίθεση πολλαπλών διευθύνσεων.
Διερευνήσαμε τον πηγαίο κώδικα της σύμβασης στο αποθετήριο GitHub που είχε κοινοποιηθεί σε εμάς για να εντοπίσει ένα ελάττωμα που θα είχε ως αποτέλεσμα να επηρεαστεί η αντιστοίχιση sessionDataOf.
Δεν μπορέσαμε να εντοπίσουμε οποιεσδήποτε αναθέσεις σε αυτήν ή μέλη της εκτός των λειτουργιών πονταρίσματος που μας ώθησαν να αναρωτηθούμε αν η ανάπτυξη των συμβάσεων πραγματοποιήθηκε σωστά.
Διάνυσμα επίθεσης
Αφού αναλύσαμε τον πηγαίο κώδικα του αναπτυσσόμενου συμβολαίου Staking, εντοπίσαμε μια έγχυση κώδικα στη βιβλιοθήκη AccessControl OpenZeppelin μεταξύ L665-L671 του αναπτυγμένος πηγαίος κώδικας της σύμβασης στοιχήματος. Η συνδεδεμένη λειτουργία checkRole δεν αποτελεί μέρος του την εφαρμογή OpenZeppelin v3.0.1, που αναφέρθηκε ως εξάρτηση στο αποθετήριο GitHub του έργου.
Στη λειτουργία checkRole, υπάρχει το ακόλουθο μπλοκ συναρμολόγησης:
Αυτή η συγκεκριμένη λειτουργία επιτρέπει σε μια συγκεκριμένη διεύθυνση να πραγματοποιεί αυθαίρετη εγγραφή στο συμβόλαιο με βάση τις μεταβλητές εισόδου που συμπληρώνει μέσω κλήσεων χαμηλού επιπέδου. Σχολιασμένο, το μπλοκ συναρμολόγησης θα μοιάζει με αυτό:
Αυτή η λειτουργία εγχύθηκε κατά την ανάπτυξη καθώς δεν υπάρχει στην εφαρμογή OpenZeppelin AccessControl, που σημαίνει ότι τα μέλη του Axion Network που συμμετείχαν στην ανάπτυξη του διακριτικού ενήργησαν κακόβουλα..
συμπέρασμα
Η επίθεση χρησιμοποίησε κώδικα που εγχύθηκε σκόπιμα πριν από την ανάπτυξη του πρωτοκόλλου. Αυτο το ΓΕΓΟΝΟΣ δεν έχει καμία σχέση με τους ελέγχους που διενήργησε η CertiK και το μέρος που ήταν υπεύθυνο για την επίθεση ήταν ένα άτομο που φάνηκε να εμπλέκεται με την ανάπτυξη των συμβάσεων του Δικτύου Axion.
Ως πρόσθετος βαθμός ασφάλειας, οι αναφορές ελέγχου θα πρέπει να τυποποιηθούν ώστε να περιλαμβάνουν διευρυμένες διευθύνσεις έξυπνων συμβάσεων των οποίων ο πηγαίος κώδικας έχει επαληθευτεί ότι είναι ο ίδιος με αυτόν που ελέγχθηκε.
ο Ασφάλεια Oracle χρησιμεύει ως επιμελητής αναμετάδοσης πληροφοριών ασφαλείας, διενεργώντας ελέγχους ασφαλείας που περιλαμβάνουν την επαλήθευση των έξυπνων συμβάσεων που έχουν αναπτυχθεί για να ταιριάζουν με τις ελεγμένες εκδόσεις.