Πράγματα που πρέπει να γνωρίζετε: |
– Η δημιουργία Seed του Trust Wallet ήταν εσφαλμένη, η συνολική εντροπία ήταν μόνο 32 bit. Έχουμε δημιουργήσει ένα αρχείο που περιέχει όλους τους πιθανούς σπόρους.
– Ευτυχώς, ο Ledger Donjon ανακάλυψε την ευπάθεια πολύ γρήγορα και πιθανότατα απέφυγε ένα από τα μεγαλύτερα hack στο οικοσύστημα κρυπτογράφησης. |
Στις 14 Νοεμβρίου 2022, το Trust Wallet, ένα ευρέως χρησιμοποιούμενο πορτοφόλι λογισμικού, ανακοίνωσε την κυκλοφορία της επέκτασης του προγράμματος περιήγησής του. Επιτρέπει την πρόσβαση σε ψηφιακά στοιχεία σε πολλά blockchains απευθείας από το πρόγραμμα περιήγησης και είναι μια πολυαναμενόμενη προσθήκη στις υπάρχουσες εφαρμογές iOS και Android.
Το Ledger Donjon ανακάλυψε πρόσφατα μια κρίσιμη ευπάθεια σε αυτήν την επέκταση του προγράμματος περιήγησης, που επιτρέπει σε έναν εισβολέα να κλέψει όλα τα περιουσιακά στοιχεία οποιουδήποτε πορτοφολιού που δημιουργήθηκε με αυτήν την επέκταση, χωρίς καμία αλληλεπίδραση με τον χρήστη. Γνωρίζοντας τη διεύθυνση ενός λογαριασμού, είναι δυνατό να υπολογίσετε αμέσως το ιδιωτικό του κλειδί και μετά να αποκτήσετε πρόσβαση σε όλα τα κεφάλαιά του. Ακολουθούν λεπτομέρειες για την ευπάθεια, πώς την ανακάλυψε η Ledger Donjon, τον αντίκτυπό της με την πάροδο του χρόνου, μια εκτίμηση των ευάλωτων περιουσιακών στοιχείων και πώς αντέδρασε το Trust Wallet για να το διορθώσει. Ας ξεκινήσουμε όμως υπενθυμίζοντας τα βασικά.
Πώς δημιουργούνται τα πορτοφόλια
Η δημιουργία εντροπίας είναι δύσκολη. Ως επιστήμονες, μας αρέσει η αναπαραγωγιμότητα και το να μπορούμε να εξηγούμε φαινόμενα με αρχές αιτίου-αποτελέσματος. Έτσι, γενικά, είναι δύσκολο να δημιουργηθεί τυχαιότητα. Επιπλέον, είναι δύσκολο να αποδείξουμε ότι οι τυχαίοι αριθμοί είναι σωστοί και μια κακή, αλλά όχι τελείως ατελής γεννήτρια τυχαίων αριθμών μπορεί εύκολα να ξεγελάσει τον παρατηρητή. Για καλή τυχαιότητα, χρειαζόμαστε ομοιόμορφη κατανομή των bit και των byte (ακόμα και όλων των μεγεθών των κομματιών) και απρόβλεπτο. Για έναν παρατηρητή μιας ακολουθίας, πρέπει να είναι αδύνατο να έχει οποιαδήποτε πληροφορία για το επόμενο μέρος της ακολουθίας που θα δημιουργηθεί.
Καθώς αυτές οι ιδιότητες είναι απίστευτα δύσκολο να επιτευχθούν, ο χώρος των κρυπτονομισμάτων προσπαθεί να αποφύγει να βασίζεται στην τυχαιότητα όσο το δυνατόν περισσότερο – αλλά το χρειαζόμαστε ακόμα σε ένα στάδιο: όταν δημιουργούμε ένα νέο πορτοφόλι.
Πιθανότατα είστε ήδη εξοικειωμένοι με το μνημονικό σας, τις 12 έως 24 αγγλικές λέξεις που σας επιτρέπουν να δημιουργήσετε αντίγραφα ασφαλείας του πορτοφολιού σας (αν όχι, μπορείτε να ελέγξετε Ακαδημία Ledger άρθρο για αυτό ακριβώς το θέμα).
Αυτό το μνημονικό κωδικοποιεί 16 έως 32 byte εντροπίας, σύμφωνα με το Πρότυπο BIP 39 – η ποιότητα αυτής της εντροπίας είναι κρίσιμη, καθώς θα είναι ο σπόρος όλων των κλειδιών που χρησιμοποιούνται από το πορτοφόλι σας σε όλες τις αλυσίδες, ακολουθώντας μια ντετερμινιστική διαδικασία παραγωγής που ορίζεται από το BEEP 32 και BEEP 44 πρότυπα.
Αυτό το ιεραρχικό ντετερμινιστικό σχήμα είναι σχεδόν πανταχού παρόν σήμερα, λαμβάνοντας υπόψη πόσο εύκολο είναι για τους χρήστες να δημιουργήσουν ένα αντίγραφο ασφαλείας ενός άπειρου κλειδιού και τη φορητότητά του (παρόλο που το BIP 39 "ομόφωνα αποθαρρύνεται για εφαρμογή"). Η περιαγωγή Signer είναι μια ισχυρή δυνατότητα – όταν το αγαπημένο σας πορτοφόλι αποτυγχάνει ή απογοητεύει, μπορείτε απλώς να πάρετε μαζί σας το μνημονικό σας (ή ακόμα καλύτερα, τη συσκευή Ledger), να μεταβείτε σε άλλη, να διατηρήσετε την οικονομική σας ελευθερία και να περιορίσετε τυχόν επιπτώσεις του χρόνου διακοπής λειτουργίας του.
Αλλά και πάλι, απαιτεί μια άψογη πηγή εντροπίας.
Επισκόπηση της ευπάθειας
Το Trust Wallet βασίζεται σε Trust Wallet Core, μια βιβλιοθήκη πολλαπλών πλατφορμών που εφαρμόζει κρυπτογραφική λειτουργία πορτοφολιού χαμηλού επιπέδου για πολλά blockchains. Ήταν επικεντρωμένο σε κινητά, αλλά στοχεύει επίσης το Wasm από τον Απρίλιο του 2022 (βλ #2132).
Ενώ το μεγαλύτερο μέρος του Trust Wallet Core είναι φορητό, μερικές ενότητες και λειτουργίες είναι πολύ συγκεκριμένες για έναν στόχο. Αυτό ισχύει κυρίως για το τμήμα ασφαλούς τυχαίας παραγωγής, που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού, όπως ιδιωτικά κλειδιά, και μνημονικό για πορτοφόλια HD. Κάθε υλοποίηση αξιοποιεί τη γεννήτρια ψευδοτυχαίων αριθμών (PRNG) που προσφέρεται από το λειτουργικό σύστημα:
- Για iOS,
SecRandomCopyBytes
χρησιμοποιείται. - Για Android, η εντροπία παρέχεται από μια παρουσία του
java.security.SecureRandom
.
Αυτή είναι συνήθως μια καλή πρακτική, καθώς αυτά τα πρωτόγονα υποτίθεται ότι είναι ασφαλή.
Wasm backend
Υπάρχει διαφορά με τον στόχο Wasm. Αυτή η λειτουργική μονάδα μπορεί να εκτελεστεί σε πολλά περιβάλλοντα, όπως οποιοδήποτε πρόγραμμα περιήγησης που υποστηρίζει Wasm ή Node.js. Αυτές οι πλατφόρμες δεν παρέχουν ένα κοινό ισχυρό PRNG και δεν μπορεί κανείς να αποκτήσει πρόσβαση στις «κλασικές» διεπαφές συστήματος από αυτά τα περιβάλλοντα. Για παράδειγμα, μια λειτουργική μονάδα Wasm που εκτελείται στο Chrome για Linux δεν μπορούσε να διαβάσει απευθείας /dev/urandom
.
Για να αντιμετωπιστεί αυτό, μια αποκλειστική λεγόμενη «ασφαλής τυχαία γεννήτρια» έχει εφαρμοστεί στο #2240. Βασίζεται σε ένα PR που γίνεται στο emscripten (βλ. PR #12240 in emscripten) γραμμένο ακριβώς για να αποφευχθεί η ανάγνωση /dev/urandom
.
Σύμφωνα με τον συγγραφέα:
Αυτό που κάνουμε εδώ είναι απλό, τυλίγουμε std::random_device
με std::mt19937
και επιστρέψτε μια τυχαία τιμή uint32, εμπνευσμένη από emscripten-core/emscripten#12240.
Υπάρχει ένα σημαντικό πρόβλημα εδώ, το οποίο οδηγεί σε μια κρίσιμη ευπάθεια για το wallet-core για το Wasm και για οποιοδήποτε προϊόν βασίζεται σε αυτό: το PRNG που χρησιμοποιείται είναι ένα Mersenne Twister και δεν πρέπει να χρησιμοποιείται για κρυπτογραφικούς σκοπούς. Επιπλέον, η εξειδικευμένη έκδοση mt19937 λαμβάνει μια τιμή 32-bit ως αρχικό στοιχείο εισόδου.
Ποιες είναι οι συνέπειες εδώ; Η προσαρμοσμένη μονάδα Random για το Wasm υλοποιεί δύο λειτουργίες: random32
που εξάγει μια τυχαία τιμή 32-bit και random_buffer
που γεμίζει ένα buffer αυθαίρετου μεγέθους με τυχαία δεδομένα. Στο έργο Wallet Core, αυτές οι λειτουργίες χρησιμοποιούνται αποκλειστικά από την trezor-crypto, την κρυπτογραφική βιβλιοθήκη που αναπτύχθηκε από την Trezor για να εξασφαλίσει ασφαλή κρυπτογράφηση στα πορτοφόλια υλικού της.
Τώρα, ας δούμε πώς δημιουργούνται πορτοφόλια HD:
- Το σημείο εισόδου είναι το HDWallet. Χρειάζεται μια δύναμη και μια φράση πρόσβασης για να το προστατέψετε αργότερα:
https://github.com/trustwallet/wallet-core/blob/3.1.0/src/HDWallet.cpp#L45
Αυτή η λειτουργία στη συνέχεια καλεί mnemonic_generate
για να δημιουργήσετε ένα μνημονικό BIP-39:
https://github.com/trustwallet/wallet-core/blob/3.1.0/trezor-crypto/crypto/bip39.c#L55
mnemonic_generate
κλήσεις random_buffer
, το οποίο εξάγει ένα τυχαίο buffer γεμάτο με χρήση ενός Mersenne twister PRNG, του οποίου το παράδειγμα έχει μόλις δημιουργηθεί:
https://github.com/trustwallet/wallet-core/blob/3.1.0/wasm/src/Random.cpp#L19
Καθώς το seed είναι μόλις 32 bit, η έκδοση Wasm του wallet-core επιτρέπει τη δημιουργία μόνο 2^32 (~4 δισεκατομμυρίων) πιθανών μνημονικών. Όλα αυτά τα μνημονικά μπορούν να δημιουργηθούν σε μερικές ώρες σε έναν μόνο υπολογιστή.
Από εκεί, ένας εισβολέας είναι σε θέση:
- Υπολογίστε όλους τους σπόρους, τα ιδιωτικά κλειδιά και, στη συνέχεια, τις διευθύνσεις κάθε κρυπτονομίσματος που χειρίζεται το Trust Wallet.
- Σαρώστε τις σχετικές αλυσίδες μπλοκ για να εξαγάγετε όλες τις χρησιμοποιούμενες διευθύνσεις.
- Υπολογίστε τη διασταύρωση για να λάβετε όλες τις διευθύνσεις των πορτοφολιών που δημιουργήθηκαν από το Trust Wallet για το Wasm και να κλέψετε τα χρήματά τους.
Η εκτέλεση μιας τέτοιας επίθεσης διαρκεί πολύ περισσότερες από μερικές ώρες, αλλά είναι εφικτή με μερικές GPU σε λιγότερο από μία ημέρα (βλ. medium.com/@johncantrell97/how-i-checked-over-1-trillion-mnemonics-in-30-hours-to-win-a-bitcoin για μια εκτίμηση κόστους. Η επίθεση είναι 256 φορές πιο εύκολη εδώ).
Εφαρμογή στην επέκταση προγράμματος περιήγησης Trust Wallet
Η Επέκταση προγράμματος περιήγησης Trust Wallet είναι μια επέκταση για προγράμματα περιήγησης που βασίζονται στο Chromium. Είναι ξεκάθαρα ανταγωνιστής της MetaMask και χαρακτηρίζεται ως «ασφαλές κρυπτογραφικό πορτοφόλι πολλαπλών αλυσίδων και πύλη σε χιλιάδες αποκεντρωμένες εφαρμογές Web3 (dApps).»
Η επέκταση είναι κλειστού κώδικα, αλλά ο κώδικάς της μπορεί εύκολα να αναλυθεί. Βασίζεται στην ευάλωτη εφαρμογή Wasm του Trust Wallet Core.
Όταν δημιουργείται ένα πορτοφόλι, η επέκταση δημιουργεί ένα μνημονικό 12 λέξεων από έναν τυχαίο σπόρο 128 bit. Το Mnemonic δημιουργείται ως εξής:
HDWallet.create
είναι το Wrapper Wasm που δημιουργείται αυτόματα για τον κατασκευαστή HDWallet που περιγράφεται παραπάνω. Αυτό σημαίνει τους ευάλωτους random_buffer
χρησιμοποιείται η συνάρτηση, επομένως τα μνημονικά μπορούν να ανακτηθούν από τη διεύθυνση χρήστη με μια επίθεση ωμής βίας.
Αυτή η επέκταση χειρίζεται τα ακόλουθα στοιχεία ενεργητικού: AVAX, BNB, ETH, MATIC, SOL και TWT.
- Οι διευθύνσεις είναι πανομοιότυπες για ETH, BNB, MATIC, AVAX και TWT. Αυτές είναι τυπικές διευθύνσεις Ethereum, που μοιράζονται την ίδια διαδρομή παραγωγής (m/44'/60'/0'/0/0).
- Ο Σολάνα χρησιμοποιεί μια διαφορετική διαδρομή παραγωγής: m/44'/501'/0'/0'.
Για να εξαντλήσει τα χρήματα όλων των χρηστών της επέκτασης Πορτοφολιού Trust, ο εισβολέας μπορεί:
- Υπολογίστε και αποθηκεύστε κάθε πιθανό μνημονικό, στη συνέχεια ιδιωτικό κλειδί Ethereum και διεύθυνση Ethereum, που μπορεί να δημιουργηθεί από αυτήν την επέκταση.
- Συγκεντρώστε όλες τις χρησιμοποιημένες διευθύνσεις Ethereum που δημιουργήθηκαν από την πρώτη κυκλοφορία της επέκτασης προγράμματος περιήγησης Trust Wallet και αποθηκεύστε τις τοπικά.
- Εκτελέστε μια αναζήτηση στη βάση δεδομένων διευθύνσεων.
- Αδειάστε το πορτοφόλι με το ιδιωτικό κλειδί, εάν έχει χρησιμοποιηθεί η διεύθυνση.
Αυτά τα βήματα μπορούν να αναπαραχθούν για κάθε αλυσίδα. Αναλύουμε τώρα πώς το Ledger Donjon υλοποίησε αυτήν την επίθεση στο Ethereum και το Binance Smart Chain, χωρίς φυσικά να στραγγίσει τα πορτοφόλια.
Επίθεση στο Πορτοφόλι Trust
Η ευπάθεια επιτρέπει σε έναν εισβολέα να υπολογίζει τη μνημονική από οποιαδήποτε διεύθυνση ενός πορτοφολιού που δημιουργείται από την επέκταση του προγράμματος περιήγησης. Για αυτό, χρειάζεται να υπολογίσετε μια αντιστοίχιση μεταξύ των πιθανών μνημονικών και της διεύθυνσης που προκύπτει.
Δημιουργία όλων των διευθύνσεων που μπορεί να δημιουργήσει η επέκταση Trust Wallet
Με βάση την ευπάθεια στο PRNG που εξηγήθηκε προηγουμένως, είναι δυνατό να απαριθμηθούν όλες οι διευθύνσεις (και τα σχετικά ιδιωτικά κλειδιά) που μπορεί να δημιουργήσει η επέκταση Trust Wallet. Η ιδέα μου ήταν να αποθηκεύσω κάθε δυνατή διεύθυνση σε ένα μεγάλο τραπέζι. Στη συνέχεια, από μια λίστα διευθύνσεων που εξάγονται από το blockchain Ethereum, μπορεί κανείς να ελέγξει εάν υπάρχουν ορισμένες διευθύνσεις σε αυτόν τον πίνακα. Εάν ναι, το ιδιωτικό του κλειδί μπορεί να υπολογιστεί.
Η εξαγωγή από την εντροπία στη μνημονική και στη συνέχεια στη διεύθυνση Ethereum χρησιμοποιεί τον τυπικό μηχανισμό παραγωγής BIP-32, BIP-39, και το BIP-44 ιεραρχία λογαριασμού.
Πρώτη δυσκολία ήταν να απαριθμήσω όλες αυτές τις διευθύνσεις. Η μετατροπή από σπόρο PRNG σε διεύθυνση απαιτεί τα ακόλουθα βήματα:
- Δημιουργία εντροπίας: αρχικοποιήστε το Mersenne Twister με τον σπόρο και καλέστε το 16 φορές για να συγκεντρώσετε την αρχική εντροπία.
- Εντροπία προς μνημονική: ένα SHA-256 για τον υπολογισμό του τελικού αθροίσματος ελέγχου που είναι ενσωματωμένο στην τελευταία λέξη.
- Μνημονικό προς σπόρο: τα μνημονικά μετατρέπονται σε σπόρο 512 bit χρησιμοποιώντας PKBDF2-HMAC-SHA512 με 2048 επαναλήψεις. Υπάρχουν 2 υπολογισμοί SHA-512 ανά επανάληψη, επομένως το συνολικό κόστος είναι 4096 υπολογισμοί SHA-512.
- Seed to BIP-32 master key: 1 HMAC SHA-512 με κόστος 2 υπολογισμούς SHA-512.
- Κύριο κλειδί για το ιδιωτικό κλειδί Ethereum: το κύριο κλειδί προέρχεται στο m/44'/60'/0'/0/0. Αυτό απαιτεί 3 σκληρυμένες παράγωγες ιδιωτικού κλειδιού θυγατρικών και 2 κανονικές παράγωγες θυγατρικών κλειδιών.
- Κάθε σκληρυμένη παραγωγή θυγατρικού ιδιωτικού κλειδιού απαιτεί έναν υπολογισμό HMAC SHA-512 (2 SHA-512) και μία προσθήκη στο secp256k1.
- Κάθε κανονική παραγωγή θυγατρικού ιδιωτικού κλειδιού απαιτεί μια παραγωγή θυγατρικού ιδιωτικού κλειδιού και έναν βαθμωτό πολλαπλασιασμό στο secp256k1 για τη μετατροπή του ιδιωτικού κλειδιού που παρέχεται στην είσοδο σε δημόσιο κλειδί.
- Ιδιωτικό κλειδί Ethereum για διεύθυνση: αυτό το τελευταίο βήμα απαιτεί μετατροπή από ιδιωτικό σε δημόσιο κλειδί, άρα έναν άλλο βαθμωτό πολλαπλασιασμό και έναν κατακερματισμό Keccak-256.
Το συνολικό κόστος για όλα αυτά τα βήματα είναι τότε:
- Αρχικοποίηση και 16 κλήσεις στο Mersenne Twister
- 1 SHA-256
- 4108 SHA-512
- Προσθήκες 5 βαθμών
- 2 βαθμωτοί πολλαπλασιασμοί στο secp256k1
Τα πιο ακριβά βήματα είναι οι υπολογισμοί SHA-512 και οι βαθμωτοί πολλαπλασιασμοί. Για να το κάνουμε σύντομο, η συνολική διαδικασία μετατροπής του σπόρου PRNG σε διεύθυνση Ethereum είναι αργή. Η εκτέλεση τέτοιων υπολογισμών σε μία μόνο CPU θα χρειαζόταν μήνες και πιθανώς αρκετές εβδομάδες στις CPU που ήταν διαθέσιμες στο Donjon. Έτσι, το εφαρμόσαμε χρησιμοποιώντας OpenCL (με βάση GPU επίλυσης BIP39) και το έτρεξε σε 2 GPU NVIDIA GeForce GTX 1080 Ti.
Η έξοδος αυτού του εργαλείου είναι ένα μεγάλο αρχείο που περιέχει όλες τις διευθύνσεις Ethereum που μπορεί να δημιουργήσει η επέκταση. Καθώς υπάρχουν 2^32 πιθανοί σπόροι και κάθε διεύθυνση έχει μήκος 20 byte, αυτός ο πίνακας χρειάζεται 80 Gb.
Από εκεί, οι αναζητήσεις πινάκων είναι αργές: για να ταιριάζει με μια διεύθυνση, θα απαιτούσε επανάληψη σε όλο αυτό το μεγάλο τραπέζι.
Για να επιταχύνουμε αυτές τις αναζητήσεις, χωρίζουμε τον πίνακα σε 256 μικρότερους πίνακες, σύμφωνα με το πρώτο byte της διεύθυνσης Ethereum. Κάθε πίνακας περιέχει ζεύγη σπόρων PRNG και τη διεύθυνση Ethereum που προκύπτει.
Τέλος, για να μπορούμε να κάνουμε γρήγορες αναζητήσεις σε κάθε πίνακα, τις ταξινομήσαμε σύμφωνα με τη διεύθυνση Ethereum. Είναι πλέον δυνατό να κάνετε δυαδικές αναζητήσεις σε αυτούς τους πίνακες: οι αναζητήσεις σε αυτούς τους ταξινομημένους πίνακες είναι πολύ φθηνές.
Για να εξοικονομήσουμε χώρο στο δίσκο, αποθηκεύσαμε τον σπόρο PRNG και μόνο τα πρώτα 8 byte κάθε διεύθυνσης Ethereum. Τα τελευταία 12 byte δεν είναι απαραίτητα, καθώς οι συγκρούσεις είναι αμελητέες στην περίπτωσή μου. Κάθε καταχώρηση παίρνει τότε 12 byte. Στη συνέχεια, ολόκληρα τραπέζια παίρνουν 48 Gb.
Ακολουθούν οι χρόνοι για κάθε βήμα:
Χρησιμοποιώντας αυτούς τους πίνακες, είναι δυνατή η άμεση ανάκτηση των μνημονικών που χρησιμοποιούνται για τη δημιουργία μιας διεύθυνσης. Για να εκτιμήσει τον αντίκτυπο της ευπάθειας, το Binance μου ζήτησε το μνημονικό 3 διευθύνσεων δοκιμής που παρείχαν. Ιδού το αποτέλεσμα:
Η ανάκτηση των 3 μνημονικών και ιδιωτικών κλειδιών χρειάστηκε μερικές εκατοντάδες χιλιοστά του δευτερολέπτου. Σύμφωνα με τις δοκιμές μας, η διαδικασία είναι πραγματικά αρκετά γρήγορη για να επεξεργαστεί σε πραγματικό χρόνο όλες τις συναλλαγές στο blockchain Ethereum και να σπάσει όλες τις ευάλωτες διευθύνσεις αμέσως μόλις χρησιμοποιηθούν. Με την προσωρινή αποθήκευση διευθύνσεων που έχουν ήδη δοκιμαστεί, το ίδιο ισχύει και για άλλες αλυσίδες μπλοκ όπως το BSC. Σε αυτό το σενάριο επίθεσης, θα μπορούσε κανείς να παρακολουθεί τις συναλλαγές όταν φτάνουν στο mempool και να υπολογίζει τα ιδιωτικά κλειδιά αποστολέα ή παραλήπτη σε πραγματικό χρόνο.
Παραθέτοντας όλες τις χρησιμοποιημένες διευθύνσεις Ethereum
Αυτό που θα θέλαμε είναι να εκτιμήσουμε τον πραγματικό αριθμό των ευάλωτων πορτοφολιών και το υπόλοιπό τους. Αυτό ακούγεται εύκολο, καθώς όλες οι συναλλαγές είναι δημόσιες, επομένως όλες οι διευθύνσεις είναι διαθέσιμες στο blockchain. Ωστόσο, δεν υπάρχει τρόπος άμεσης ανάκτησης της λίστας των χρησιμοποιούμενων διευθύνσεων.
Εφαρμόσαμε μια μέθοδο που επαναλαμβάνεται σε κάθε μπλοκ της αλυσίδας μπλοκ Ethereum. Εξάγαμε τις διευθύνσεις αποστολέα και παραλήπτη όλων των συναλλαγών και τις παραμέτρους διεύθυνσης κάθε κλήσης σε συμβόλαια ERC-20.
Σημειώστε ότι με αυτήν τη μέθοδο, μπορούν να εντοπιστούν μόνο χρησιμοποιημένα πορτοφόλια: ορισμένα ευάλωτα πορτοφόλια που δεν έλαβαν στοιχεία δεν έχουν ποτέ αλληλεπιδράσει με το blockchain.
Σαρώσαμε την αλυσίδα μπλοκ Ethereum μεταξύ των μπλοκ 14820000 και 16096000. Το μπλοκ 14820000 δημιουργήθηκε στις 21 Μαΐου 2022, ως εκ τούτου ακριβώς πριν από το αίτημα έλξης που προσέθεσε τον ευάλωτο κώδικα στο Trust Wallet Core. Το 16096000 ήταν το τελευταίο μπλοκ όταν έγραψα αυτήν την ανάρτηση.
Οι δημόσιοι κόμβοι φαίνεται να έχουν όριο ρυθμού, γι' αυτό ζήτησα από πολλούς δημόσιους κόμβους παράλληλα για να συγκεντρώσω συνολικά 147,910,120 διευθύνσεις κατά τη διάρκεια αρκετών δεκάδων ωρών. Αφού αφαιρεθούν τα διπλότυπα, λαμβάνουμε μια λίστα με 32,613,317 μοναδικές διευθύνσεις.
Η ίδια μέθοδος έχει χρησιμοποιηθεί για το Binance Smart Chain. Οι δημόσιοι κόμβοι BSC έχουν σαρωθεί.
Εκτίμηση του αριθμού των ευάλωτων λογαριασμών
Τέλος, έχει γραφτεί ένα εργαλείο για να ελέγξετε εάν έχει δημιουργηθεί μια διεύθυνση από την επέκταση Trust Wallet. Κάνει μια αναζήτηση στους πίνακες που δημιουργούνται, λαμβάνει τον σπόρο PRNG και από εκεί υπολογίζει το μνημονικό, το ιδιωτικό κλειδί Ethereum και τη σχετική διεύθυνση.
Ο υπολογισμός είναι πολύ γρήγορος. Οι διευθύνσεις υποψηφίων ταξινομήθηκαν εκ των προτέρων για να ελαχιστοποιηθούν οι εισόδους/εξόδους και να πραγματοποιηθεί μια ένθετη δυαδική αναζήτηση. Οι αναζητήσεις στα 32 εκατομμύρια διευθύνσεις χρειάζονται λίγα λεπτά χρησιμοποιώντας ένα απλό σενάριο Python.
Ακολουθεί ένα παράδειγμα με μια διεύθυνση που λαμβάνεται από το a δημόσιο tweet απαντώντας στην ανακοίνωση της επέκτασης Trust Wallet. Πήρα αυτό ως παράδειγμα όπως έχει αυτή η διεύθυνση δεν χρησιμοποιήθηκε ποτέ, επομένως τα χρήματα των χρηστών δεν κινδυνεύουν.
Το εργαλείο έχει εκτελεστεί στο σύνολο δεδομένων 1,873,720 που περιγράφεται παραπάνω. Η δοκιμή όλων των διευθύνσεων και ο υπολογισμός των ιδιωτικών κλειδιών των ευάλωτων λογαριασμών χρειάστηκαν 4 λεπτά 22 δευτερόλεπτα, επομένως είναι πολύ φθηνό.
Με αυτήν τη λίστα των ευάλωτων ιδιωτικών κλειδιών, είναι δυνατό να παραθέσουμε όλες τις αντίστοιχες διευθύνσεις, τα υπόλοιπά τους και προφανώς να τα εξαντλήσουμε… Κατά τη διάρκεια των ερευνών μας, περίπου 30 εκατομμύρια δολάρια κινδύνευαν κάποια στιγμή, αλλά δεν παρακολουθήσαμε όλες τις αλυσίδες και τις μάρκες υπερωρίας .
Αποκατάσταση
2022, 17 Νοεμβρίου
Έχει αναφερθεί ευπάθεια στην Binance χρησιμοποιώντας το δικό τους πρόγραμμα bug bounty στις 2022 Νοεμβρίου 17.
Για να επιβεβαιώσει την ευπάθεια, το Binance μας έστειλε 3 διευθύνσεις και τους ζήτησε να παρέχουν μνημονικά:
Μπορείτε να δοκιμάσετε να εκτελέσετε το εργαλείο σας και να παρέχετε μνημονικά για αυτές τις 3 διευθύνσεις;
Wallet 1 – 0xdf6D9547e163D5E7eafBe2FeB24Bfa12A4C913C0
Wallet 2 – 0xE1E0580cb5eA0c0FD034FF2cdfc872ce4493676C
Wallet 3 – 0x02b2Ae981b138F066344774A2AD75225A046c377
Ευχαριστώ!
Με φιλικούς χαιρετισμούς.
Μόλις προυπολογιστούν όλες οι πιθανές διευθύνσεις, η ανάκτηση του μνημονικού από μια διεύθυνση είναι τόσο απλή όσο μια αναζήτηση σε έναν πίνακα καταχωρήσεων 4 δισεκατομμυρίων. Τα τρία μνημονικά έχουν ανακτηθεί σε 0.2 δευτερόλεπτα:
2022, 21 Νοεμβρίου
Λίγες μέρες μετά, στις 21 Νοεμβρίου, η ομάδα Trustwallet δημόσια δεσμευμένη στο Github η επιδιόρθωση αποφεύγοντας τη δημιουργία νέων ελαττωματικών σπόρων. Ανησυχούσαμε ότι κάποιος θα το προσέξει και θα εκμεταλλευτεί την ευπάθεια.
2022, Νοέμβριος
Η ομάδα του Trustwallet ενημέρωσε την εφαρμογή για να προειδοποιήσει τους χρήστες της, να τους αποτρέψει από τη δημιουργία νέων ελαττωματικών σπόρων και αφαίρεσε τις ροές λήψης.
Από εκεί παρακολουθήσαμε την κατάσταση και τα κεφάλαια που κινδυνεύουν. Μόνο λίγες μέρες μετά την κυκλοφορία αυτών των ευάλωτων πορτοφολιών, περίπου 30 εκατομμύρια δολάρια κινδύνευαν.
2023, τον Μάρτιο
Η ομάδα της Trustwallet μας χορήγησε το υψηλότερο μπόνους που προσφέρει: $100
2023, 22 Απριλίου
Μετά από μήνες αναμονής για τους χρήστες να μετεγκαταστήσουν τα χρήματά τους, η ομάδα του Trustwallet αποκάλυψε την ευπάθεια και έγραψε ένα μετά θάνατον. Προς το παρόν, υπάρχουν ακόμα πορτοφόλια με τα υπόλοιπα χρήματα που μπορούν να κλαπούν (~ 100 χιλιάδες $). Η Trust Wallet υποσχέθηκε την επιστροφή των κλεμμένων κεφαλαίων.
Συμπέρασμα
Αυτή η ευπάθεια απεικονίζει το χειρότερο σενάριο ενός σφάλματος κρυπτογράφησης - λογαριασμοί σε κίνδυνο για πάντα.
Η δημιουργία καλής τυχαιότητας είναι μια αποθαρρυντική εργασία – Οι συσκευές Ledger βασίζονται σε αποκλειστική λογική πυριτίου στα πιστοποιημένα τσιπ έξυπνων καρτών μας που αποτελούν το χρυσό πρότυπο των ασφαλών βιομηχανιών τα τελευταία 40 χρόνια για να εγγυώνται τυχαιότητα υψηλής ποιότητας και αντοχή σε παραβίαση.
Δεδομένης της πολυπλοκότητας της επικοινωνίας με τους κατόχους αυτών των λογαριασμών και της δυνατότητας χρήσης αυτών των παραβιασμένων λογαριασμών σε όλα τα είδη διαφορετικών πορτοφολιών λογισμικού και υλικού, το TrustWallet έκανε πολύ καλή δουλειά μειώνοντας τον κίνδυνο για τους χρήστες του.
Στο (πολύ) (εγγύς) μέλλον είναι πιθανό τα ρομπότ να παλέψουν να είναι τα πρώτα που θα κλέψουν κεφάλαια που κατατίθενται σε αυτές τις διευθύνσεις, παρόμοια με τι συνέβη με τα εγκεφαλικά πορτοφόλια στο παρελθόν.
Ιδιαίτερες ευχαριστίες στον Jean-Baptiste Bédrune που έσωσε τον κόσμο. Μόνο λίγες μέρες μετά την κυκλοφορία της επέκτασης του Trust Wallet, κινδύνευαν σχεδόν 30 εκατομμύρια δολάρια. Θα μπορούσε να είχε συμβεί ένα εφιαλτικό σενάριο εάν ένας εισβολέας βρήκε την ευπάθεια μετά από μερικούς μήνες.
Κατά τη διάρκεια των ερευνών μας, παρατηρήσαμε επίσης ότι ορισμένες διευθύνσεις ήταν ευάλωτες, ενώ είχαν δημιουργηθεί πολύ καιρό πριν από την κυκλοφορία του Trust Wallet. Αυτό πιθανώς σημαίνει ότι αυτή η ευπάθεια υπάρχει σε ορισμένες άλλες υλοποιήσεις πορτοφολιού που αφορά…
- SEO Powered Content & PR Distribution. Ενισχύστε σήμερα.
- PlatoAiStream. Web3 Data Intelligence. Ενισχύθηκε η γνώση. Πρόσβαση εδώ.
- Minting the Future με την Adryenn Ashley. Πρόσβαση εδώ.
- Αγορά και πώληση μετοχών σε εταιρείες PRE-IPO με το PREIPO®. Πρόσβαση εδώ.
- πηγή: https://www.ledger.com/blog/funds-of-every-wallet-created-with-the-trust-wallet-browser-extension-could-have-been-stolen
- :έχει
- :είναι
- :δεν
- $UP
- 1
- 12
- 13
- 14
- 15%
- 2022
- 23
- 24
- 30
- 39
- 40
- 49
- 8
- a
- Ικανός
- πάνω από
- πρόσβαση
- Σύμφωνα με
- Λογαριασμός
- Λογαριασμοί
- Κατορθώνω
- πραγματικά
- προστιθέμενη
- Επιπλέον
- διεύθυνση
- διευθύνσεις
- Μετά το
- πάλι
- Όλα
- επιτρέπουν
- Επιτρέποντας
- επιτρέπει
- ήδη
- Επίσης
- an
- και
- android
- ανακοίνωσε
- Ανακοίνωσεις
- Άλλος
- κάθε
- app
- εφαρμογές
- Εφαρμογές (DApps)
- εφαρμογές
- Απρίλιος
- ΕΙΝΑΙ
- γύρω
- άρθρο
- AS
- Ενεργητικό
- συσχετισμένη
- At
- επίθεση
- συγγραφέας
- διαθέσιμος
- AVAX
- αποφύγετε
- αποφεύγεται
- αποφεύγοντας
- εφεδρικός
- Κακός
- Υπόλοιπο
- ισορροπίες
- βασίζονται
- Βασικά
- BE
- ήταν
- πριν
- είναι
- παρακάτω
- Καλύτερα
- μεταξύ
- Μεγάλος
- Μεγαλύτερη
- Δισεκατομμύριο
- Binance
- Έξυπνη αλυσίδα Binance
- μπιπ
- Αποκλεισμός
- blockchain
- μπλοκ αλυσίδες
- Μπλοκ
- BNB
- bots
- γενναιοδωρία
- Εγκέφαλος
- σεσημασμένος
- Διακοπή
- πρόγραμμα περιήγησης
- browsers
- ωμή βία
- BSC
- ρυθμιστικό
- Έντομο
- αλλά
- by
- κλήση
- κλήσεις
- CAN
- υποψήφιος
- δεν μπορώ
- περίπτωση
- Πιστοποίηση
- αλυσίδα
- αλυσίδες
- φθηνά
- έλεγχος
- παιδί
- τσιπ
- Chrome
- σαφώς
- κωδικός
- Κοινός
- ανταγωνιστής
- περίπλοκο
- Συμβιβασμένος
- υπολογισμός
- υπολογισμοί
- Υπολογίστε
- υπολογιστή
- χρήση υπολογιστή
- Επιβεβαιώνω
- Συνέπειες
- θεωρώντας
- Περιέχει
- συμβάσεις
- Μετατροπή
- μετατρέψετε
- μετατρέπονται
- πυρήνας
- διορθώσει
- Αντίστοιχος
- Κόστος
- θα μπορούσε να
- Ζευγάρι
- πορεία
- CPU
- δημιουργία
- δημιουργήθηκε
- δημιουργεί
- κρίσιμης
- cross-platform
- κρυπτο
- Crypto οικοσύστημα
- Crypto πορτοφόλι
- cryptocurrency
- κρυπτογραφικό
- κρυπτογράφηση
- έθιμο
- dapps
- ημερομηνία
- βάση δεδομένων
- ημέρα
- Ημ.
- Αποκεντρωμένη
- Αποκεντρωμένες Εφαρμογές
- αφιερωμένο
- ορίζεται
- αποδεικνύουν
- κατατεθεί
- Συμπληρωματικός
- περιγράφεται
- Παρά
- λεπτομέρεια
- λεπτομερής
- καθέκαστα
- εντοπιστεί
- αναπτύχθηκε
- συσκευή
- Συσκευές
- DID
- διαφορά
- διαφορετικές
- δύσκολος
- Δυσκολία
- ψηφιακό
- Ψηφιακά περιουσιακά στοιχεία
- κατευθείαν
- αποθαρρύνονται
- ανακάλυψαν
- διανομή
- do
- downtime
- δωδεκάδα
- αποστράγγιση
- αντίγραφα
- κατά την διάρκεια
- κάθε
- ευκολότερη
- εύκολα
- εύκολος
- οικοσύστημα
- ενσωματωμένο
- Αγγλικά
- αρκετά
- εξασφαλίζω
- καταχώριση
- περιβάλλοντα
- ERC-20
- εκτίμηση
- ETH
- ethereum
- Εγκάρσια αλυσίδα
- Even
- Κάθε
- παράδειγμα
- αποκλειστικά
- υφιστάμενα
- υπάρχει
- ακριβά
- Εξηγήστε
- εξήγησε
- Εκμεταλλεύομαι
- επέκταση
- εκχύλισμα
- αποτυγχάνει
- οικείος
- FAST
- Αγαπημένα
- Χαρακτηριστικό
- λίγοι
- την καταπολέμηση της
- Αρχεία
- γεμάτο
- τελικός
- οικονομικός
- οικονομική ελευθερία
- τέλος
- Όνομα
- σταθερός
- ελαττωματική
- Ροές
- Εξής
- Για
- Δύναμη
- για πάντα
- Ευτυχώς
- Βρέθηκαν
- Ελευθερία
- από
- λειτουργία
- λειτουργικότητα
- λειτουργίες
- χρήματα
- μελλοντικός
- πύλη
- συγκεντρώνουν
- γενικά
- παράγουν
- παράγεται
- παραγωγής
- γενεά
- γεννήτρια
- παίρνω
- GitHub
- Χρυσό
- Χρυσός κανόνας
- καλός
- GPU
- χορηγείται
- εγγύηση
- σιδηροπρίονο
- είχε
- Handles
- συνέβη
- Σκληρά
- υλικού
- Πορτοφόλια υλικού
- χασίσι
- Έχω
- ως εκ τούτου
- εδώ
- ιεραρχία
- Ψηλά
- υψηλότερο
- ΩΡΕΣ
- Πως
- Ωστόσο
- HTTPS
- εκατό
- i
- ιδέα
- identiques
- if
- απεικονίζει
- αμέσως
- Επίπτωση
- εκτέλεση
- εφαρμοστεί
- υλοποιεί
- σημαντικό
- αδύνατος
- in
- απίστευτα
- βιομηχανίες
- Άπειρο
- πληροφορίες
- αρχικός
- εισαγωγή
- εμπνευσμένος
- παράδειγμα
- αλληλεπίδραση
- διεπαφές
- διασταύρωση
- σε
- Διερευνήσεις
- iOS
- IT
- επανάληψη
- επαναλήψεις
- ΤΟΥ
- Δουλειά
- μόλις
- Διατήρηση
- Κλειδί
- πλήκτρα
- Ξέρω
- Γνωρίζοντας
- Επίθετο
- αργότερα
- αργότερο
- Οδηγεί
- Καθολικό
- αριστερά
- μείον
- μόχλευσης
- Βιβλιοθήκη
- Μου αρέσει
- Πιθανός
- LIMIT
- linux
- Λίστα
- τοπικά
- λογική
- Μακριά
- πολύς καιρός
- πολυαναμενόμενο
- αναζήτηση
- που
- κάνω
- ΚΑΝΕΙ
- πολοί
- χαρτης
- κύριος
- Ταίριασμα
- υλικό
- Matic
- max-width
- Ενδέχεται..
- μέσα
- Μέμπουλ
- MetaMask
- μέθοδος
- μεταναστεύσουν
- εκατομμύριο
- εκατομμύρια
- πρακτικά
- πρακτικά
- βελτίωση της μνήμης
- ενότητα
- ενότητες
- Παρακολούθηση
- παρακολούθηση
- μήνες
- περισσότερο
- Εξάλλου
- πλέον
- πολύ
- πολυ-αλυσίδα
- πρέπει
- my
- Κοντά
- απαραίτητος
- Ανάγκη
- ανάγκες
- ποτέ
- Νέα
- επόμενη
- Όχι.
- κόμβος
- Node.js
- κόμβων
- κανονικός
- ιδιαίτερα
- Ειδοποίηση..
- Νοέμβριος
- τώρα
- αριθμός
- αριθμοί
- Nvidia
- αποκτήσει
- συνέβη
- of
- προσφορά
- προσφέρονται
- on
- ONE
- αποκλειστικά
- λειτουργίας
- το λειτουργικό σύστημα
- or
- ΑΛΛΑ
- δικός μας
- παραγωγή
- επί
- φόρμες
- ιδιοκτήτες
- ζεύγη
- Παράλληλο
- παράμετροι
- μέρος
- Το παρελθόν
- μονοπάτι
- εκτελέσει
- Πλατφόρμες
- Πλάτων
- Πληροφορία δεδομένων Plato
- Πλάτωνα δεδομένα
- σας παρακαλούμε
- Σημείο
- δυνατότητα
- δυνατός
- Θέση
- ισχυρός
- pr
- πρακτική
- ακριβώς
- παρόν
- αρκετά
- πρόληψη
- προηγουμένως
- αρχές
- ιδιωτικός
- ιδιωτικού κλειδιού
- Ιδιωτικά κλειδιά
- πιθανώς
- Πρόβλημα
- διαδικασια μας
- Προϊόν
- σχέδιο
- υποσχόμενος
- ιδιότητες
- προστασία
- παρέχουν
- παρέχεται
- δημόσιο
- δημόσιο κλειδί
- σκοποί
- Python
- ποιότητα
- γρήγορα
- τυχαίος
- τυχαία
- Τιμή
- φθάσουν
- πραγματικός
- σε πραγματικό χρόνο
- λαμβάνω
- λήψη
- πρόσφατα
- μείωση
- αφορά
- σχετίζεται με
- απελευθερώνουν
- βασίζονται
- υπόλοιπα
- Καταργήθηκε
- αναφέρθηκαν
- ζητήσει
- απαιτούν
- Απαιτεί
- Αντίσταση
- αποτέλεσμα
- με αποτέλεσμα
- απόδοση
- Κίνδυνος
- τρέξιμο
- τρέξιμο
- ένα ασφαλές
- ίδιο
- Αποθήκευση
- οικονομία
- σενάριο
- σχέδιο
- επιστήμονες
- Αναζήτηση
- προστατευμένο περιβάλλον
- ασφάλεια
- δείτε
- σπόρος
- σπόροι
- φαίνομαι
- αποστέλλει
- αποστέλλονται
- Ακολουθία
- διάφοροι
- μοιράζονται
- Κοντά
- θα πρέπει να
- Πυρίτιο
- παρόμοιες
- Απλούς
- αφού
- ενιαίας
- κατάσταση
- Μέγεθος
- επιβραδύνουν
- μικρότερος
- έξυπνος
- Έξυπνη αλυσίδα
- So
- λογισμικό
- SOL
- μερικοί
- Κάποιος
- Σύντομα
- Πηγή
- Χώρος
- ομιλία
- ειδικευμένος
- συγκεκριμένες
- ταχύτητα
- διαίρεση
- Στάδιο
- πρότυπο
- πρότυπα
- Εκκίνηση
- Βήμα
- Βήματα
- Ακόμη
- κλαπεί
- κλεμμένα κεφάλαια
- κατάστημα
- αποθηκεύονται
- δύναμη
- ισχυρός
- τέτοιος
- Στήριξη
- υποτιθεμένος
- διακόπτης
- σύστημα
- τραπέζι
- ανυψωτήρ
- Πάρτε
- παίρνει
- στόχος
- στόχους
- Έργο
- δοκιμή
- Δοκιμές
- δοκιμές
- από
- ευχαριστώ
- ότι
- Η
- Τα Βασικά
- ο κόσμος
- τους
- Τους
- τότε
- Εκεί.
- Αυτοί
- αυτοί
- αυτό
- εκείνοι
- χιλιάδες
- τρία
- Μέσω
- ώρα
- φορές
- προς την
- σήμερα
- κουπόνια
- πήρε
- εργαλείο
- τοπικός
- Σύνολο
- Συναλλαγές
- Μεταμορφώστε
- Μεταμόρφωση
- θησαυροφυλάκιο
- Εμπιστευθείτε
- Πορτοφόλι εμπιστοσύνης
- προσπαθώ
- δύο
- TWT
- πανταχού παρών
- μοναδικός
- μοναδικές διευθύνσεις
- ενημερώθηκε
- us
- χρήση
- μεταχειρισμένος
- Χρήστες
- κεφάλαια χρηστών
- Χρήστες
- χρησιμοποιώντας
- συνήθως
- αξία
- εκδοχή
- πολύ
- ευπάθεια
- Ευάλωτες
- Αναμονή
- Πορτοφόλι
- Πορτοφόλια
- ήταν
- Τρόπος..
- we
- Web3
- Εβδ.
- ήταν
- πότε
- Ποιό
- ενώ
- ολόκληρο
- του οποίου
- ευρέως
- θα
- με
- χωρίς
- λέξη
- λόγια
- κόσμος
- ανήσυχος
- χειρότερη
- θα
- γραπτή
- χρόνια
- εσείς
- Σας
- zephyrnet