Belkin Wemo Smart Plug V2 – η υπερχείλιση buffer που δεν θα διορθωθεί

Belkin Wemo Smart Plug V2 – η υπερχείλιση buffer που δεν θα διορθωθεί

Κόμβος πηγής: 2657924

Ερευνητές στην εταιρεία ασφάλειας IoT Sternum έσκαψαν ένα δημοφιλές βύσμα οικιακού αυτοματισμού από τη γνωστή μάρκα συσκευών Belkin.

Το μοντέλο που κοίταξαν, το Έξυπνο βύσμα Wemo Mini (F7C063) προφανώς πλησιάζει το τέλος της διάρκειας ζωής του, αλλά βρήκαμε πολλά από αυτά προς πώληση στο διαδίκτυο, μαζί με λεπτομερείς συμβουλές και οδηγίες στον ιστότοπο της Belkin για το πώς να τα ρυθμίσετε.

Όσο παλιά (με τη βραχυπρόθεσμη σύγχρονη έννοια) κι αν είναι, οι ερευνητές σημείωσαν ότι:

Το αρχικό μας ενδιαφέρον για τη συσκευή προήλθε από το γεγονός ότι πολλά από αυτά βρίσκονται γύρω από το εργαστήριό μας και χρησιμοποιούνται στα σπίτια μας, οπότε θέλαμε απλώς να δούμε πόσο ασφαλή (ή όχι) ήταν η χρήση τους. [… T]φαίνεται ότι είναι μια αρκετά δημοφιλής συσκευή για καταναλωτές[; β]με βάση αυτούς τους αριθμούς, είναι ασφαλές να υπολογίσουμε ότι οι συνολικές πωλήσεις μόνο στο Amazon θα πρέπει να είναι εκατοντάδες χιλιάδες.

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

Ένα "έξυπνο βύσμα", με απλά λόγια, είναι μια πρίζα που συνδέετε σε μια υπάρχουσα πρίζα και που παρεμβάλλει έναν διακόπτη ελεγχόμενο από Wi-Fi μεταξύ της πρίζας στο μπροστινό μέρος της πρίζας και μιας πρίζας με την ίδια εμφάνιση. το μπροστινό μέρος του έξυπνου βύσματος. Σκεφτείτε το σαν ένα τροφοδοτικό που αντί να μετατρέπει, ας πούμε, μια στρογγυλή πρίζα ευρώ σε μια τριγωνική βρετανική πρίζα, μετατρέπει, ας πούμε, μια πρίζα ΗΠΑ με χειροκίνητη εναλλαγή σε μια πρίζα ΗΠΑ με ηλεκτρονική μεταγωγή που μπορεί να ελεγχθεί εξ αποστάσεως μέσω μιας εφαρμογής ή μια διεπαφή τύπου web.

Το S στο IoT…

Το πρόβλημα με πολλές συσκευές που ονομάζονται Internet of Things (IoT), όπως λέει το παλιό αστείο, είναι ότι το γράμμα «S» στο «IoT» σημαίνει ασφάλεια…

…που σημαίνει, φυσικά, ότι συχνά δεν υπάρχει τόσο μεγάλη ασφάλεια στον κυβερνοχώρο όσο θα περίμενε κανείς, ή ακόμη και καθόλου.

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

Έχουμε γράψει για την ανασφάλεια του IoT σε μια μεγάλη γκάμα διαφορετικών προϊόντων στο παρελθόν, από βραστήρες internet (ναι, πραγματικά) που θα μπορούσε να διαρρεύσει τον κωδικό πρόσβασης Wi-Fi του σπιτιού σας, σε κάμερες ασφαλείας που μπορούν να χρησιμοποιήσουν οι απατεώνες για να διατηρήσουν μάτι σε σένα αντί για το αντίστροφο, σε μονάδες δίσκων συνδεδεμένων στο δίκτυο που κινδυνεύουν να πάρουν πιτσιλισμένο από ransomware απευθείας μέσω του Διαδικτύου.

Σε αυτήν την περίπτωση, οι ερευνητές βρήκαν μια τρύπα απομακρυσμένης εκτέλεσης κώδικα στο Wemo Mini Smart Plug τον Ιανουάριο του 2023, την ανέφεραν τον Φεβρουάριο του 2023 και έλαβαν έναν αριθμό CVE για αυτό τον Μάρτιο του 2023 (CVE-2023-27217).

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

(Δεν είμαστε σίγουροι πόσο αποδεκτή θα ήταν αυτό το είδος απόρριψης «τέλους ζωής» εάν η συσκευή αποδεικνύεται ότι έχει ένα ελάττωμα στο ηλεκτρικό κύκλωμα 120 V AC ή 230 V AC, όπως η πιθανότητα υπερθέρμανσης και εκπομπής επιβλαβών χημικών ουσιών ή ρύθμιση φλέγεται, αλλά φαίνεται ότι τα σφάλματα στα ψηφιακά ηλεκτρονικά χαμηλής τάσης ή στο υλικολογισμικό της συσκευής μπορούν να αγνοηθούν, ακόμα κι αν θα μπορούσαν να οδηγήσουν σε έναν κυβερνοεπίθεση που αναβοσβήνει επανειλημμένα το διακόπτη τροφοδοσίας στη συσκευή και απενεργοποιεί επανειλημμένα κατά βούληση.)

Όταν τα φιλικά ονόματα είναι εχθροί σου

Το πρόβλημα που ανακάλυψαν οι ερευνητές ήταν παλιό υπερχείλιση buffer στοίβας στο τμήμα του λογισμικού της συσκευής που σας επιτρέπει να αλλάξετε το λεγόμενο FriendlyName της συσκευής – η συμβολοσειρά κειμένου που εμφανίζεται όταν συνδέεστε σε αυτήν με μια εφαρμογή στο τηλέφωνό σας.

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

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

Αλλά πιθανότατα θα θελήσετε να τα μετονομάσετε αργότερα, ώστε να είναι πιο εύκολο να τα ξεχωρίσετε στο μέλλον, ορίζοντας στη συνέχεια φιλικά ονόματα όπως π.χ. TV power, Laptop charger και Raspberry Pi server.

Οι προγραμματιστές της Belkin (ή, πιο συγκεκριμένα, οι προγραμματιστές του κώδικα που κατέληξαν σε αυτές τις συσκευές με την επωνυμία Belkin, οι οποίοι μπορεί να παρείχαν λογισμικό έξυπνου βύσματος και σε άλλες επωνυμίες) προφανώς κράτησαν 68 byte προσωρινής αποθήκευσης για να παρακολουθούν την νέο όνομα κατά τη διαδικασία μετονομασίας.

Αλλά ξέχασαν να ελέγξουν ότι το όνομα που παρείχατε θα ταιριάζει σε αυτήν την υποδοχή των 68 byte.

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

Κατά ειρωνικό τρόπο, φρόντισαν όχι απλώς να σας κρατήσουν στο όριο των 68 byte που απαιτείται για τη σωστή συμπεριφορά της ίδιας της συσκευής, αλλά ακόμη και να σας περιορίσουν στην πληκτρολόγηση μόλις 30 χαρακτήρων.

Όλοι γνωρίζουμε γιατί το να αφήσουμε την πλευρά του πελάτη να κάνει τον έλεγχο σφαλμάτων, αντί να τον ελέγξει (ή, ακόμα καλύτερα, επίσης) από την πλευρά του διακομιστή, είναι μια τρομερή ιδέα:

  • Ο κωδικός πελάτη και ο κώδικας διακομιστή ενδέχεται να μην συμμορφώνονται. Οι μελλοντικές εφαρμογές πελατών ενδέχεται να αποφασίσουν ότι τα ονόματα 72 χαρακτήρων θα ήταν μια καλή επιλογή και να αρχίσουν να στέλνουν περισσότερα δεδομένα στον διακομιστή από όσα μπορεί να χειριστεί με ασφάλεια. Οι μελλοντικοί κωδικοποιητές από την πλευρά του διακομιστή μπορεί να παρατηρήσουν ότι κανένας δεν φαινόταν ποτέ να χρησιμοποιεί τα πλήρη 68 byte που έχουν δεσμευτεί και να αποφασίσουν αμελητέα ότι τα 24 θα ήταν υπεραρκετά.
  • Ένας εισβολέας θα μπορούσε να επιλέξει να μην ασχοληθεί με την εφαρμογή. Δημιουργώντας και διαβιβάζοντας τα δικά τους αιτήματα στη συσκευή, θα παρακάμπτουν επιπόλαια όλους τους ελέγχους ασφαλείας που βασίζονται μόνο στην εφαρμογή.

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

Καταστρέφοντας τη στοίβα

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

Τεχνικά, αυτά τα κομμάτια δεδομένων «πού να πάω μετά» είναι γνωστά ως διευθύνσεις επιστροφής, και αποθηκεύονται αυτόματα όταν ένα πρόγραμμα καλεί αυτό που είναι γνωστό ως a λειτουργία, ή υπορουτίνα, που είναι ένα κομμάτι κώδικα (για παράδειγμα, "εκτυπώστε αυτό το μήνυμα" ή "αναδυόμενο παράθυρο διαλόγου προειδοποίησης") που θέλετε να μπορείτε να χρησιμοποιήσετε σε πολλά μέρη του προγράμματός σας.

Η διεύθυνση επιστροφής καταγράφεται με μαγικό τρόπο στη στοίβα κάθε φορά που χρησιμοποιείται η υπορουτίνα, έτσι ώστε ο υπολογιστής να μπορεί αυτόματα να «ξετυλίξει» τη διαδρομή του για να επιστρέψει στο σημείο από το οποίο κλήθηκε η υπορουτίνα, η οποία θα μπορούσε να είναι διαφορετική κάθε φορά που ενεργοποιείται.

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

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

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

Αντί απλώς να διακοπεί, το πρόγραμμα που κατευθύνεται εσφαλμένα θα μπορούσε να εξαπατηθεί για να εκτελέσει κώδικα της επιλογής του εισβολέα, προκαλώντας έτσι αυτό που είναι γνωστό ως απομακρυσμένη εκτέλεση κώδικα exploit ή RCE.

Δύο κοινές άμυνες βοηθούν στην προστασία από εκμεταλλεύσεις αυτού του είδους:

  • Τυχαιοποίηση διάταξης χώρου διευθύνσεων, γνωστή και ως ASLR. Το λειτουργικό σύστημα φορτώνει σκόπιμα προγράμματα σε ελαφρώς διαφορετικές θέσεις μνήμης κάθε φορά που εκτελούνται. Αυτό καθιστά πιο δύσκολο για τους επιτιθέμενους να μαντέψουν πώς να κατευθύνουν εσφαλμένα προγράμματα με σφάλματα με τρόπο που τελικά αποκτά και διατηρεί τον έλεγχο αντί απλώς να καταρρίπτει τον κώδικα.
  • Στοίβα καναρίνια, πήρε το όνομά του από τα πουλιά που οι ανθρακωρύχοι έπαιρναν μαζί τους υπόγεια επειδή λιποθυμούσαν παρουσία μεθανίου, παρέχοντας έτσι μια σκληρή αλλά αποτελεσματική έγκαιρη προειδοποίηση για τον κίνδυνο έκρηξης. Το πρόγραμμα εισάγει σκόπιμα ένα γνωστό, αλλά τυχαίο μπλοκ δεδομένων ακριβώς μπροστά από τη διεύθυνση επιστροφής κάθε φορά που καλείται μια υπορουτίνα, έτσι ώστε μια υπερχείλιση buffer αναπόφευκτα και ανιχνεύσιμα θα αντικαταστήσει πρώτα το "καναρίνι", προτού υπερβεί αρκετά ώστε να καταπατηθεί. στην πολύ σημαντική διεύθυνση επιστροφής.

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

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

(Τα προγράμματα που προστατεύονται από το Canary είναι συνήθως ελαφρώς μεγαλύτερα και πιο αργά από τα μη προστατευμένα λόγω του επιπλέον κωδικού που απαιτείται σε κάθε υπορουτίνα για να γίνουν οι έλεγχοι ασφαλείας.)

Τι να κάνω;

  • Εάν είστε κάτοχος Wemo Smart Plug V2, βεβαιωθείτε ότι δεν έχετε διαμορφώσει τον οικιακό δρομολογητή σας ώστε να επιτρέπει την πρόσβαση στη συσκευή από "έξω", μέσω του Διαδικτύου. Αυτό μειώνει αυτό που στην ορολογία είναι γνωστό ως δικό σας επιφάνειας επίθεσης.
  • Εάν έχετε δρομολογητή που υποστηρίζει Universal Plug and Play, γνωστό και ως UPnP, βεβαιωθείτε ότι είναι απενεργοποιημένο. Το UPnP καθιστά εμφανώς εύκολο για τις εσωτερικές συσκευές να ανοίγουν ακούσια σε τρίτους.
  • Αν είσαι προγραμματιστής, αποφύγετε την απενεργοποίηση των λειτουργιών ασφαλείας λογισμικού (όπως προστασία στοίβας ή έλεγχος καναρινιών στοίβας) μόνο για να εξοικονομήσετε μερικά byte. Εάν η μνήμη σας τελειώνει πραγματικά, προσπαθήστε να μειώσετε το αποτύπωμά σας βελτιώνοντας τον κώδικά σας ή αφαιρώντας λειτουργίες αντί να μειώνοντας την ασφάλεια, ώστε να μπορείτε να στριμώξετε περισσότερο.

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

Περισσότερα από Γυμνή ασφάλεια