Το 70% των προβλημάτων ασφαλείας στο Chromium προκαλούνται από σφάλματα μνήμης

Προγραμματιστές του έργου Chromium αναλύονται Εντοπίστηκαν 912 υψηλού κινδύνου και κρίσιμα τρωτά σημεία σε σταθερές εκδόσεις του Chrome από το 2015 και συμπέραναν ότι το 70% από αυτά προκλήθηκαν από ανασφάλεια μνήμης (λάθη κατά την εργασία με δείκτες στον κώδικα C/C++). Τα μισά από αυτά τα προβλήματα (36.1%) προκαλούνται από προσβάσεις στο buffer μετά την απελευθέρωση της μνήμης που σχετίζεται με αυτό (χρήση-μετά-δωρεάν).

Το 70% των προβλημάτων ασφαλείας στο Chromium προκαλούνται από σφάλματα μνήμης

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

Για να διατηρήσει την ασφάλεια της βάσης κωδικών, η Google επιβάλλει επίσης "κανόνας των δύο», σύμφωνα με την οποία οποιοσδήποτε προστιθέμενος κώδικας δεν πρέπει να πληροί περισσότερες από δύο από τρεις προϋποθέσεις: εργασία με μη επικυρωμένα δεδομένα εισόδου, χρήση μη ασφαλούς γλώσσας προγραμματισμού (C/C++) και εκτέλεση με αυξημένα προνόμια. Αυτός ο κανόνας υπονοεί ότι ο κώδικας για την επεξεργασία εξωτερικών δεδομένων πρέπει είτε να μειωθεί σε ελάχιστα προνόμια (απομονωμένος) είτε να γραφτεί σε μια ασφαλή γλώσσα προγραμματισμού.

Για περαιτέρω ενίσχυση της ασφάλειας της βάσης κώδικα, έχει ξεκινήσει ένα έργο για την αποφυγή εμφάνισης σφαλμάτων μνήμης στη βάση κώδικα. Υπάρχουν τρεις κύριες προσεγγίσεις: δημιουργία βιβλιοθηκών C++ με λειτουργίες για ασφαλή λειτουργία της μνήμης και επέκταση του πεδίου εφαρμογής του σκουπιδιού, χρησιμοποιώντας μηχανισμούς προστασίας υλικού MTE (Επέκταση ετικετών μνήμης) και εγγραφή στοιχείων σε γλώσσες που εξασφαλίζουν ασφαλή εργασία με τη μνήμη (Java, Kotlin, JavaScript, Rust, Swift).

Αναμένεται ότι οι εργασίες θα επικεντρωθούν σε δύο τομείς:

  • Σημαντική αλλαγή στη διαδικασία ανάπτυξης της C++, η οποία δεν αποκλείει αρνητικό αντίκτυπο στην απόδοση (πρόσθετοι έλεγχοι ορίων και συλλογή σκουπιδιών). Αντί για ακατέργαστους δείκτες, προτείνεται η χρήση του τύπου MiraclePtr, το οποίο σας επιτρέπει να μειώσετε τα εκμεταλλεύσιμα σφάλματα χωρίς χρήση σε σφάλματα που δεν αποτελούν απειλή για την ασφάλεια, χωρίς αξιοσημείωτο αρνητικό αντίκτυπο στην απόδοση, την κατανάλωση μνήμης και τη σταθερότητα.
  • Η χρήση γλωσσών που έχουν σχεδιαστεί για την εκτέλεση ελέγχων ασφάλειας της μνήμης κατά το χρόνο μεταγλώττισης (θα εξαλείψει τον αρνητικό αντίκτυπο στην απόδοση που είναι εγγενής σε τέτοιους ελέγχους κατά την εκτέλεση κώδικα, αλλά θα οδηγήσει σε πρόσθετο κόστος για την οργάνωση της αλληλεπίδρασης του κώδικα σε μια νέα γλώσσα με τον κώδικα σε C++).

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

Το 70% των προβλημάτων ασφαλείας στο Chromium προκαλούνται από σφάλματα μνήμης

Πηγή: opennet.ru

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