Η εκμετάλλευση του σφάλματος Lightning ήταν η ηθική επιλογή Η ευφυΐα δεδομένων PlatoBlockchain. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Η εκμετάλλευση του σφάλματος Lightning ήταν η ηθική επιλογή

Αυτό είναι ένα άρθρο γνωμοδότησης από τον Shinobi, έναν αυτοδίδακτο εκπαιδευτικό στον χώρο του Bitcoin και οικοδεσπότη podcast Bitcoin με προσανατολισμό την τεχνολογία.

Για δεύτερη φορά μέσα σε περίπου ένα μήνα, οι btcd/LND έχουν εκμεταλλευτεί ένα σφάλμα που τους έκανε να αποκλίνουν σε συναίνεση από το Bitcoin Core. Για άλλη μια φορά, ο Burak ήταν ο προγραμματιστής που ενεργοποίησε αυτήν την ευπάθεια - αυτή τη φορά ήταν σαφώς σκόπιμη - και για άλλη μια φορά, ήταν ένα πρόβλημα με τον κώδικα για την ανάλυση των συναλλαγών Bitcoin πάνω από το επίπεδο συναίνεσης. Όπως συζήτησα στο δικό μου κομμάτι στο προηγούμενο σφάλμα που ενεργοποίησε ο Burak, πριν από το Taproot υπήρχαν όρια στο πόσο μεγάλα θα μπορούσαν να είναι τα δεδομένα του σεναρίου και των μαρτύρων σε μια συναλλαγή. Με την ενεργοποίηση του Taproot, αυτά τα όρια αφαιρέθηκαν αφήνοντας μόνο τους περιορισμούς στο ίδιο το όριο μεγέθους μπλοκ για τον περιορισμό αυτών των τμημάτων των μεμονωμένων συναλλαγών. Το πρόβλημα με το τελευταίο σφάλμα ήταν ότι παρά το γεγονός ότι ο κώδικας συναίνεσης στο btcd αναβαθμίστηκε σωστά για να αντικατοπτρίζει αυτήν την αλλαγή, ο κώδικας που χειρίζεται τη μετάδοση peer-to-peer - συμπεριλαμβανομένης της ανάλυσης δεδομένων πριν από την αποστολή ή κατά τη λήψη - δεν αναβαθμίστηκε σωστά. Έτσι, τα μπλοκ και οι συναλλαγές επεξεργασίας κώδικα πριν περάσουν στην πραγματικότητα για επικύρωση για συναίνεση απέτυχαν τα δεδομένα, δεν τα πέρασαν ποτέ στη λογική επικύρωσης συναίνεσης και το εν λόγω μπλοκ απέτυχε ποτέ να επικυρωθεί.

Κάτι παρόμοιο συνέβη και αυτή τη φορά. Ένα άλλο όριο στην ενότητα peer-to-peer της βάσης κωδικών ήταν η εσφαλμένη επιβολή περιορισμού στα δεδομένα μάρτυρα, περιορίζοντας το μέγιστο στο 1/8 του μεγέθους του μπλοκ σε αντίθεση με το πλήρες μέγεθος του μπλοκ. Ο Burak φιλοτεχνήθηκε α συναλλαγή με δεδομένα μαρτύρων μόνο μία μονάδα βάρους πάνω από το αυστηρό όριο και για άλλη μια φορά στάσιμους κόμβους btcd και LND σε αυτό το ύψος του μπλοκ. Αυτή η συναλλαγή ήταν μια μη τυπική συναλλαγή, πράγμα που σημαίνει ότι, παρόλο που είναι απολύτως έγκυρη από τους κανόνες συναίνεσης, δεν είναι έγκυρη σύμφωνα με την προεπιλεγμένη πολιτική του mempool και επομένως οι κόμβοι δεν θα την αναμεταδώσουν στο δίκτυο. Είναι απολύτως δυνατό να το εξορύξετε σε ένα μπλοκ, αλλά ο μόνος τρόπος για να το κάνετε είναι να το παρέχετε απευθείας σε έναν εξορύκτη, κάτι που έκανε ο Burak με τη βοήθεια του F2Pool.

Αυτό καθοδηγεί πραγματικά το σημείο ότι κάθε κομμάτι κώδικα του οποίου ο σκοπός είναι η ανάλυση και η επικύρωση δεδομένων Bitcoin πρέπει να ελέγχεται σε μεγάλο βαθμό προκειμένου να διασφαλιστεί ότι είναι σύμφωνο με αυτό που θα κάνει το Bitcoin Core. Δεν έχει σημασία αν αυτός ο κώδικας είναι η μηχανή συναίνεσης για την υλοποίηση ενός κόμβου ή απλώς ένα κομμάτι κώδικα που διαβιβάζει συναλλαγές για έναν κόμβο Lightning. Αυτό το δεύτερο σφάλμα ήταν κυριολεκτικά πάνω από αυτό του προηγούμενου μήνα στη βάση κωδικών. Δεν ανακαλύφθηκε καν από κανέναν στο Lightning Labs. Η AJ Towns το ανέφερε στις 11 Οκτωβρίου, δύο ημέρες μετά την ενεργοποίηση του αρχικού σφάλματος από τη συναλλαγή πολλαπλών σημείων 998-από-999 του Burak. Δημοσιεύτηκε δημόσια στο Github για 10 ώρες πριν διαγραφεί. Στη συνέχεια έγινε μια επιδιόρθωση, αλλά δεν κυκλοφόρησε, με σκοπό να επιδιορθωθεί ήσυχα το ζήτημα στην επόμενη έκδοση του LND.

Τώρα, αυτή είναι μια αρκετά τυπική διαδικασία για μια σοβαρή ευπάθεια, ειδικά με ένα έργο όπως το Bitcoin Core όπου μια τέτοια ευπάθεια μπορεί πραγματικά να προκαλέσει σοβαρή ζημιά στο δίκτυο/πρωτόκολλο του βασικού επιπέδου. Αλλά στη συγκεκριμένη περίπτωση, παρουσίαζε σοβαρό κίνδυνο για τα κεφάλαια των χρηστών LND και δεδομένου του γεγονότος ότι ήταν κυριολεκτικά δίπλα στο προηγούμενο σφάλμα που είχε τους ίδιους κινδύνους, οι πιθανότητες να βρεθεί και να εκμεταλλευτεί ήταν πολύ μεγάλες, όπως έδειξε ο Burak. Αυτό εγείρει το ερώτημα εάν η προσέγγιση αθόρυβης ενημέρωσης κώδικα είναι η σωστή προσέγγιση όταν πρόκειται για τρωτά σημεία όπως αυτή που μπορούν να αφήσουν τους χρήστες ανοιχτούς στην κλοπή κεφαλαίων (επειδή ο κόμβος τους δεν μπορεί να εντοπίσει παλιές καταστάσεις καναλιού και να τους τιμωρήσει σωστά).

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

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

Το LND δεν ήταν επίσης το μόνο που επηρεάστηκε. Υγρό Η διαδικασία στερέωσης ήταν επίσης σπασμένη, απαιτώντας ενημερώσεις από τα στελέχη της ομοσπονδίας για να το διορθώσουν. Παλαιότερες εκδόσεις του Rust Bitcoin επηρεάστηκαν επίσης, γεγονός που προκάλεσε το stall να επηρεάσει ορισμένες παρουσίες εξερευνητών μπλοκ και ηλεκτρονικών (μια υλοποίηση του διακομιστή υποστήριξης για το Electrum Wallet). Τώρα, με εξαίρεση το Liquid's peg που τελικά εκθέτει κεφάλαια στα κλειδιά ανάκτησης έκτακτης ανάγκης που κατέχει η Blockstream μετά από μια χρονική λήξη — και, ρεαλιστικά στην πλοκή της ταινίας τύπου ληστείας όπου η Blockstream έκλεψε αυτά τα χρήματα, όλοι ξέρουν ακριβώς ποιον να ακολουθήσουν — αυτά τα άλλα Τα ζητήματα δεν θέτουν ποτέ σε κίνδυνο τα κεφάλαια κανενός σε κανένα σημείο. Επίσης, το Rust Bitcoin είχε όντως επιδιορθώσει αυτό το συγκεκριμένο σφάλμα σε νεότερες εκδόσεις, κάτι που προφανώς δεν οδήγησε σε καμία επικοινωνία με συντηρητές άλλων βάσεων κωδικών για να τονίσει την πιθανότητα τέτοιων ζητημάτων. Μόνο η ενεργή εκμετάλλευση του σφάλματος ζωντανά στο δίκτυο αποκάλυψε ευρέως ότι το ζήτημα υπήρχε σε πολλαπλές βάσεις κώδικα.

Αυτό φέρνει ορισμένα μεγάλα ζητήματα όταν πρόκειται για τρωτά σημεία όπως αυτό στο λογισμικό Layer 2 στο Bitcoin. Πρώτον, η σοβαρότητα με την οποία ελέγχονται αυτές οι βάσεις κωδικών για σφάλματα ασφαλείας και πώς δίνεται προτεραιότητα σε σχέση με την ενσωμάτωση νέων λειτουργιών. Νομίζω ότι είναι πολύ ενδεικτικό ότι η ασφάλεια δεν έχει πάντα προτεραιότητα, δεδομένου ότι αυτό το δεύτερο σφάλμα δεν βρέθηκε καν από τους συντηρητές της βάσης κωδικών όπου ήταν παρόν, παρόλο που ήταν κυριολεκτικά δίπλα στο αρχικό σφάλμα που ανακαλύφθηκε τον περασμένο μήνα. Μετά από ένα σημαντικό σφάλμα που έθεσε σε κίνδυνο τα χρήματα των χρηστών, δεν έγινε εσωτερικός έλεγχος αυτής της βάσης κωδικών; Χρειάστηκε κάποιος εκτός του έργου για να το ανακαλύψει; Αυτό δεν καταδεικνύει προτεραιότητα στη διασφάλιση των κεφαλαίων των χρηστών έναντι της δημιουργίας νέων λειτουργιών για την προσέλκυση περισσότερων χρηστών. Δεύτερον, το γεγονός ότι αυτό το ζήτημα είχε ήδη διορθωθεί στο Rust Bitcoin καταδεικνύει έλλειψη επικοινωνίας μεταξύ των συντηρητών διαφορετικών βάσεων κωδικών σε σχέση με σφάλματα όπως αυτό. Αυτό είναι αρκετά κατανοητό, καθώς η ύπαρξη εντελώς διαφορετικών βάσεων κώδικα δεν κάνει κάποιον που εντόπισε σφάλμα σε μία να σκεφτεί αμέσως: «Θα πρέπει να επικοινωνήσω με άλλες ομάδες που γράφουν παρόμοιο λογισμικό σε εντελώς διαφορετικές γλώσσες προγραμματισμού για να τις προειδοποιήσω για την πιθανότητα ενός τέτοιου σφάλματος». Δεν βρίσκετε ένα σφάλμα στα Windows και μετά σκέφτεστε αμέσως να αναφέρετε το σφάλμα στους συντηρητές του πυρήνα του Linux. Το Bitcoin ως πρωτόκολλο για κατανεμημένη συναίνεση σε ένα παγκόσμιο δίκτυο είναι ένα πολύ διαφορετικό θηρίο, ωστόσο. Ίσως οι προγραμματιστές του Bitcoin θα πρέπει να αρχίσουν να σκέφτονται προς αυτήν την κατεύθυνση όταν πρόκειται για τρωτά σημεία στο λογισμικό Bitcoin. Ειδικά όταν πρόκειται για ανάλυση και ερμηνεία δεδομένων που σχετίζονται με τη συναίνεση.

Τέλος, ίσως όταν πρόκειται για πρωτόκολλα όπως το Lightning, τα οποία εξαρτώνται από την παρατήρηση του blockchain ανά πάσα στιγμή για να μπορούν να αντιδρούν σε παλιές καταστάσεις καναλιού προκειμένου να διατηρηθεί η ασφάλεια, η ανεξάρτητη ανάλυση και επαλήθευση δεδομένων θα πρέπει να διατηρούνται στο απόλυτο ελάχιστο — εάν δεν έχει αφαιρεθεί εξ ολοκλήρου και δεν έχει ανατεθεί στο Bitcoin Core ή δεδομένα που προέρχονται απευθείας από αυτόν. Το Core Lightning έχει σχεδιαστεί με αυτόν τον τρόπο, συνδέεται με μια παρουσία του Bitcoin Core και εξαρτάται αποκλειστικά από αυτό για την επικύρωση μπλοκ και συναλλαγών. Εάν το LND λειτουργούσε με τον ίδιο τρόπο, κανένα από αυτά τα σφάλματα στο btcd δεν θα είχε επηρεάσει τους χρήστες LND με τρόπο που να θέτει σε κίνδυνο τα χρήματά τους.

Με όποιον τρόπο και αν χειριστούν τα πράγματα - είτε με εξωτερική ανάθεση εξ ολοκλήρου είτε απλά ελαχιστοποιώντας την εσωτερική επικύρωση και προσεγγίζοντάς την με πολύ μεγαλύτερη προσοχή - αυτό το περιστατικό δείχνει ότι κάτι πρέπει να αλλάξει στην προσέγγιση του θέματος του τρόπου με τον οποίο το λογισμικό Layer 2 χειρίζεται την αλληλεπίδραση με δεδομένα που σχετίζονται με τη συναίνεση. Για άλλη μια φορά, όλοι είναι πολύ τυχεροί που αυτό δεν το εκμεταλλεύτηκε ένας κακόβουλος ηθοποιός, αλλά αντίθετα από έναν προγραμματιστή που αποδεικνύει κάτι. Τούτου λεχθέντος, το Bitcoin δεν μπορεί να υπολογίζει στο να σταθεί τυχερός ή να ελπίζει ότι δεν υπάρχουν κακόβουλοι ηθοποιοί.

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

Αυτή είναι μια φιλοξενούμενη ανάρτηση από τον Shinobi. Οι απόψεις που εκφράζονται είναι εξ ολοκλήρου δικές τους και δεν αντικατοπτρίζουν απαραίτητα αυτές της BTC Inc ή του περιοδικού Bitcoin.

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

Περισσότερα από Bitcoin Magazine