Η Microsoft ανοίγει το CHERIOT, μια λύση υλικού για τη βελτίωση της ασφάλειας του κώδικα C

Η Microsoft ανακάλυψε εξελίξεις που σχετίζονται με το έργο CHERIOT (Capability Hardware Extension to RISC-V for Internet of Things), με στόχο τον αποκλεισμό προβλημάτων ασφαλείας στον υπάρχοντα κώδικα σε C και C++. Το CHERIOT προσφέρει μια λύση που σας επιτρέπει να προστατεύσετε τις υπάρχουσες βάσεις κωδικών C/C++ χωρίς να χρειάζεται να τις επεξεργαστείτε ξανά. Η προστασία υλοποιείται μέσω της χρήσης ενός τροποποιημένου μεταγλωττιστή που χρησιμοποιεί ένα ειδικό εκτεταμένο σύνολο εντολών επεξεργαστή (ISA), που παρέχεται από τον επεξεργαστή και σε επίπεδο υλικού παρακολουθεί την πρόσβαση στη μνήμη, ελέγχοντας την ορθότητα της εργασίας με δείκτες και διασφαλίζοντας την απομόνωση των μπλοκ κώδικα.

Το έργο δημιουργήθηκε με γνώμονα το γεγονός ότι η φύση χαμηλού επιπέδου της γλώσσας C γίνεται πηγή σφαλμάτων κατά την εργασία με τη μνήμη, οδηγώντας σε προβλήματα όπως υπερχείλιση buffer, πρόσβαση σε ήδη ελευθερωμένη μνήμη, παραπομπές δείκτη ή διπλές ελευθερώσεις . Η πρακτική δείχνει ότι ακόμη και μεγάλες εταιρείες όπως η Google και η Microsoft, οι οποίες έχουν αυστηρή πολιτική ελέγχου αλλαγών και χρησιμοποιούν σύγχρονες μεθόδους ανάπτυξης και εργαλεία στατικής ανάλυσης, δεν μπορούν να εγγυηθούν την απουσία σφαλμάτων κατά την εργασία με μνήμη (για παράδειγμα, περίπου το 70% των τρωτών σημείων στη Microsoft και Google προκαλούνται από μη ασφαλή χειρισμό μνήμης).

Το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας γλώσσες προγραμματισμού που εγγυώνται την ασφαλή λειτουργία με τη μνήμη ή δεσμεύσεις με πρόσθετους ελέγχους, για παράδειγμα, χρησιμοποιώντας αντί για συνηθισμένους δείκτες όπως το MiraclePtr (raw_ptr), ο οποίος εκτελεί πρόσθετους ελέγχους για πρόσβαση σε ελεύθερες περιοχές μνήμης. Ωστόσο, τέτοιες μέθοδοι είναι πιο κατάλληλες για νέο κώδικα και η επανεπεξεργασία υπαρχόντων έργων C/C++ είναι αρκετά προβληματική, ειδικά εάν έχουν σχεδιαστεί για να εκτελούνται σε περιβάλλοντα με περιορισμούς πόρων, όπως ενσωματωμένα συστήματα και συσκευές Internet of Things.

Τα στοιχεία υλικού CHERIoT έχουν σχεδιαστεί ως μικροελεγκτής με βάση την αρχιτεκτονική RISC-V, εφαρμόζοντας την προστατευμένη αρχιτεκτονική επεξεργαστή CHERI (Capability Hardware Extension to RISC-V), η οποία παρέχει ένα μοντέλο ελεγχόμενης πρόσβασης στη μνήμη με βάση την «ικανότητα» (κάθε ανάγνωση και εγγραφή η λειτουργία στη μνήμη είναι εξουσιοδοτημένη). Με βάση την αρχιτεκτονική συνόλου εντολών (ISA) που παρέχεται στο CHERIOT, έχει κατασκευαστεί ένα μοντέλο λογισμικού που εγγυάται την ασφάλεια της εργασίας με τη μνήμη σε επίπεδο μεμονωμένων αντικειμένων, παρέχει προστασία από την πρόσβαση σε ήδη ελευθερωμένη μνήμη και εφαρμόζει ένα ελαφρύ σύστημα απομόνωσης πρόσβασης στη μνήμη . Το καθορισμένο μοντέλο προστασίας λογισμικού αντικατοπτρίζεται άμεσα στο μοντέλο γλώσσας C/C++, το οποίο επιτρέπει τη χρήση του για την προστασία υπαρχουσών εφαρμογών (απαιτείται μόνο η εκ νέου μεταγλώττιση και η εκτέλεση σε εξοπλισμό που υποστηρίζει το ISA CHERIOT).

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

Το έργο περιλαμβάνει μια προδιαγραφή της εκτεταμένης αρχιτεκτονικής συνόλου εντολών CHERIOT, μια υλοποίηση αναφοράς μιας CPU RISC-V 32-bit που υποστηρίζει το CHERIOT ISA και ένα τροποποιημένο κιτ εργαλείων LLVM. Τα πρωτότυπα διαγράμματα CPU και οι περιγραφές μπλοκ υλικού στο Verilog διανέμονται υπό την άδεια Apache 2.0. Ο πυρήνας Ibex από το έργο lowRISC χρησιμοποιήθηκε ως βάση για την CPU. Το μοντέλο κωδικού CHERIOT ISA ορίζεται στη γλώσσα Sail και αδειοδοτείται βάσει της άδειας BSD.

Επιπλέον, προτείνεται ένα πρωτότυπο του λειτουργικού συστήματος CHERIOT RTOS σε πραγματικό χρόνο, το οποίο παρέχει τη δυνατότητα απομόνωσης διαμερισμάτων ακόμη και σε ενσωματωμένα συστήματα με 256 MB μνήμης RAM. Ο κώδικας CHERIOT RTOS είναι γραμμένος σε C++ και διανέμεται με την άδεια MIT. Τα βασικά στοιχεία του λειτουργικού συστήματος, όπως ο bootloader, ο προγραμματιστής και το σύστημα διανομής μνήμης, έχουν σχεδιαστεί με τη μορφή διαμερισμάτων.

Ένα διαμέρισμα στο CHERIOT RTOS είναι ένας απομονωμένος συνδυασμός κώδικα και καθολικών μεταβλητών που μοιάζει με μια κοινόχρηστη βιβλιοθήκη, αλλά σε αντίθεση με την τελευταία, μπορεί να αλλάξει την κατάστασή της (μεταβλητή) και να εκτελεστεί σε ξεχωριστό περιβάλλον ασφαλείας. Κανένας εξωτερικός κωδικός δεν μπορεί να μεταφέρει τον έλεγχο σε κώδικα σε ένα διαμέρισμα και να έχει πρόσβαση σε αντικείμενα, εκτός από την πρόσβαση σε ειδικά καθορισμένα σημεία εισόδου και τη χρήση δεικτών σε αντικείμενα που μεταβιβάζονται ρητά κατά την κλήση άλλου διαμερίσματος. Η ακεραιότητα και η εμπιστευτικότητα είναι εγγυημένες για τον κώδικα και τα καθολικά αντικείμενα σε ένα διαμέρισμα.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο