Ο προσαρμοσμένος πυρήνας Kirisakura για το OnePlus 8 Pro επιτρέπει την ακεραιότητα ροής ελέγχου (CFI) για καλύτερη ασφάλεια

Τεχνικές λεπτομέρειες σχετικά με την ακεραιότητα ροής ελέγχου

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

LLVMΤο CFI του επιχειρεί να μετριάσει αυτές τις επιθέσεις περιορίζοντας έγκυρους στόχους κλήσεων και επιβάλλοντας πανικό στον πυρήνα κατά τον εντοπισμό παραβίασης CFI. Ένας έλεγχος προστίθεται πριν από κάθε έμμεσο κλάδο για να επιβεβαιωθεί ότι η διεύθυνση προορισμού οδηγεί σε μια έγκυρη συνάρτηση με σωστή υπογραφή. Αυτό εμποδίζει έναν έμμεσο κλάδο να μεταπηδήσει σε μια αυθαίρετη θέση κωδικού και ακόμη και περιορίζει τις συναρτήσεις που μπορούν να κληθούν. Ένας εισβολέας θα εξακολουθεί να μπορεί να αλλάξει έναν δείκτη συνάρτησης, εάν ένα σφάλμα επιτρέπει την πρόσβαση. Ωστόσο, το CFI της LLVM περιορίζει το 55% των έμμεσων κλήσεων σε 5 πιθανούς στόχους το πολύ και το 80% σε το πολύ 20 στόχους. Για να προσδιορίσει όλους τους έγκυρους στόχους κλήσεων για κάθε έμμεσο κλάδο, ο μεταγλωττιστής πρέπει να δει όλο τον κώδικα του πυρήνα ταυτόχρονα.

Η χρήση του LTO (Βελτιστοποίηση χρόνου σύνδεσης) το καθιστά δυνατό. Το CFI του LLVM απαιτεί τη χρήση του LTO, όπου ο μεταγλωττιστής παράγει bitcode ειδικό για το LLVM για όλα τα C μονάδες μεταγλώττισης και ένας σύνδεσμος με επίγνωση LTO χρησιμοποιεί το backend LLVM για να συνδυάσει τον bitcode και να τον μεταγλωττίσει σε εγγενής κώδικας.

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

ThinLTO έχει σχεδόν αγγίξει τη βελτίωση της απόδοσης των LTO. Στη λειτουργία ThinLTO, όπως και με το κανονικό LTO, Κλαγγή εκπέμπει bitcode LLVM μετά τη φάση μεταγλώττισης. Ο κωδικός bit ThinLTO επαυξάνεται με μια συμπαγή σύνοψη της ενότητας. Κατά τη διάρκεια του βήματος σύνδεσης, μόνο οι περιλήψεις διαβάζονται και συγχωνεύονται σε ένα συνδυασμένο ευρετήριο σύνοψης, το οποίο περιλαμβάνει ένα ευρετήριο θέσεων συναρτήσεων για μεταγενέστερη εισαγωγή συναρτήσεων μεταξύ μονάδων. Στη συνέχεια πραγματοποιείται γρήγορη και αποτελεσματική ανάλυση ολόκληρου του προγράμματος στον συνδυασμένο συνοπτικό δείκτη. Το ThinLTO επιτρέπει μια διαδικασία σύνδεσης πολλαπλών νημάτων, η οποία οδηγεί σε μειωμένο χρόνο μεταγλώττισης.

Λόγω του CFI που διακόπτει την εκτέλεση του προγράμματος κατά την επίσκεψη σε συγκεκριμένες κατηγορίες σφαλμάτων, ταξινομείται επίσης ως εργαλείο εύρεσης σφαλμάτων, όπως αναφέρθηκε προηγουμένως, όταν χρησιμοποιείται σε επιτρεπτή λειτουργία. Το Permissive CFI θα εμφανίζει παραβιάσεις CFI στο αρχείο καταγραφής του πυρήνα, χωρίς να επιβάλλει πανικό στον πυρήνα. Οι πυρήνες πυρήνα 4.9 (συσκευές γενιάς Pixel 3) και 4.14 (συσκευές γενιάς Pixel 4) είχαν διάφορους τύπους λειτουργιών αναντιστοιχίες που οδηγούν σε παραβιάσεις CFI, οι οποίες αντιμετωπίστηκαν από την Google σε σύνολα ενημερώσεων κώδικα που είναι διαθέσιμα στον πυρήνα/κοινό repos.

Ωστόσο, λόγω της φύσης του οικοσυστήματος Android, αυτές οι αναντιστοιχίες είναι πιθανό να βρεθούν και στον ειδικό κώδικα του κατασκευαστή SoC (στην περίπτωση αυτή, της Qualcomm) ή του OEM (OnePlus). Αρκετές παραβιάσεις CFI στον κώδικα Qualcomm, διαφορετικές από τον πυρήνα 4.19, διορθώθηκαν στον πυρήνα Kirisakura για το OnePlus 8 Pro (παράδειγμα: 1, 2, 3).

Η εκτέλεση του πυρήνα σε επιτρεπτό CFI αποκάλυψε παραβιάσεις CFI σε κώδικα που σχετίζεται με προγράμματα οδήγησης OnePlus (μπορούν να βρεθούν σχετικές δεσμεύσεις εδώ και εδώ). Ο πυρήνας Kirisakura για το OnePlus 8 Pro εκτελείται με επιβολή CFI, προστατεύοντας τους χρήστες του από αυτού του είδους τις επιθέσεις επαναχρησιμοποίησης κώδικα."

Διαβάστε περισσότερα

Λάτρης των DIY (δηλαδή σωτήρας παλαιών εξαρτημάτων υπολογιστή). Φανατικός χρήστης του Android από την εποχή του Eclair, ο Skanda αρέσκεται επίσης να ακολουθεί τις πρόσφατες τάσεις ανάπτυξης στον κόσμο των υπολογιστών με μία πλακέτα.