Το io_uring είναι μια διεπαφή κλήσης συστήματος πυρήνα Linux για ασύγχρονες λειτουργίες I/O συσκευών αποθήκευσης
Η Google αποκάλυψε πρόσφατα μέσω μιας ανάρτησης ιστολογίου που έχει πήρε την απόφαση να απενεργοποιήσει από προεπιλογή το ChromeOS, το Android και τους διακομιστές της παραγωγής, την ασύγχρονη διεπαφή io_uring, αυτό οφείλεται στην άθλια κατάσταση ασφαλείας στο io_uring.
Και κατά την ανάλυση των αποτελεσμάτων του «Προγράμματος επιβράβευσης ευπάθειας» του kCTF, που ισχύει από το 2020, έχει αποδειχθεί ότι το 60% των αιτήσεων που ελήφθησαν στο πλαίσιο του προγράμματος εκμεταλλεύονται αναδυόμενες ευπάθειες και η κατάσταση δεν αλλάζει με την πάροδο του χρόνου, κάτι που είναι αρκετά ανησυχητικό καθώς έχει γίνει ένα σημείο ευάλωτο.
Συνολικά, καταβλήθηκαν περίπου 1 εκατομμύριο δολάρια σε επιδόματα. με κατορθώματα που σχετίζονται με το io_uring, ενώ το συνολικό ποσό των bounties που καταβλήθηκαν για ευπάθειες στον πυρήνα του Linux κατά τη διάρκεια της πρωτοβουλίας ήταν 1,8 εκατομμύρια δολάρια για 42 εκμεταλλεύσεις που προβλέπονται για τρωτά σημεία που δεν έχουν ακόμη διορθωθεί (μέγιστη αμοιβή – 133 χιλιάδες δολάρια).
Δεδομένου ότι ο πυρήνας του Linux είναι ένα βασικό συστατικό όχι μόνο για την Google, αλλά και για το Διαδίκτυο, αρχίσαμε να επενδύουμε σε μεγάλο βαθμό σε αυτόν τον τομέα. Επεκτείναμε την εμβέλεια του VRP και τη μέγιστη ανταμοιβή το 2021 (σε 50 $), μετά ξανά τον Φεβρουάριο του 000 (σε 2022 $) και τέλος τον Αύγουστο του 91 (σε 000 $). Το 2022, συνοψίσαμε επίσης τις μέχρι σήμερα γνώσεις μας στο βιβλίο μαγειρικής μας και παρουσιάσαμε τους πειραματικούς μετριασμούς μας για τις πιο κοινές τεχνικές εξόρυξης.
Πέρυσι, για τη βελτίωση της ασφάλειας του πυρήνα του Linux που χρησιμοποιείται στο περιβάλλον αναφοράς στο οποίο παρήχθη το exploit που διεκδικεί το βραβείο, Η Google εφάρμοσε πρόσθετες τροποποιήσεις και ενημερώσεις κώδικα για να αποκλείσει τυπικές μεθόδους εκμετάλλευσης. Για παράδειγμα, η προστασία από τη διαφθορά προστέθηκε στη δομή Freelist, απαγορεύτηκε η εγγραφή εκτός ορίων στο slab και εφαρμόστηκαν επιθέσεις αποκλεισμού που σχετίζονται με την κοινή χρήση κρυφής μνήμης. Ωστόσο, αυτές οι αλλαγές δεν επηρέασαν τη δυνατότητα εκμετάλλευσης τρωτών σημείων στο io_uring, γεγονός που οδήγησε την Google να σταματήσει να υποστηρίζει το io_uring στα προϊόντα της.
Ενώ το io_uring παρέχει πλεονεκτήματα απόδοσης και αντιδρά γρήγορα σε ζητήματα ασφάλειας με ολοκληρωμένες διορθώσεις ασφαλείας (όπως η backporting 5.15 στο stable δέντρο 5.10), είναι ένα αρκετά νέο μέρος του πυρήνα. Ως εκ τούτου, το io_uring συνεχίζει να αναπτύσσεται ενεργά, αλλά εξακολουθεί να επηρεάζεται από σοβαρά τρωτά σημεία και επίσης παρέχει ισχυρά πρωτόγονα exploit. Για αυτούς τους λόγους, θεωρούμε ότι είναι ασφαλές μόνο για αξιόπιστα εξαρτήματα.
Στο ChromeOS, η υποστήριξη io_uring είναι απενεργοποιημένη κατά τη μεταγλώττιση του πυρήνα (CONIFG_IO_URING στο kernelconfig). Το Android χρησιμοποιεί προσωρινά ένα φίλτρο που βασίζεται σε seccomp-bpf για να αποκλείσει την πρόσβαση στο io_uring και σχεδιάζει να χρησιμοποιήσει το SELinux για να περιορίσει επιλεκτικά την πρόσβαση στο io_uring σε αξιόπιστα στοιχεία συστήματος σε μελλοντική έκδοση.
Ως εκ τούτου, η Google δεν βλέπει αμυδρά το io_uring διεπαφή, παρέχεται από τον πυρήνα του Linux από την έκδοση 5.1, καθώς αναφέρει ότι μεταξύ των θετικών του σημείων, ξεχωρίζει για την υποστήριξή του για ψηφοφορία εισόδου/εξόδου και την ικανότητα εργασίας με ή χωρίς buffering, αλλά ως τέτοιο εξακολουθεί να είναι αρκετά ισχυρό ώστε να συνεχίσει να παίρνει ρίσκα και, κυρίως, να συνεχίσει να επενδύει στην επιδιόρθωση σφαλμάτων και τρωτών σημείων που εμφανίζονται συνεχώς.
Με το io_uring API, οι προγραμματιστές του πυρήνα προσπάθησαν να αντιμετωπίσουν τις ελλείψεις της παλιάς διεπαφής aio.
Όσον αφορά την απόδοση, Το io_uring είναι πολύ κοντά στο SPDK και ξεπερνά σημαντικά το libaio όταν είναι ενεργοποιημένη η ψηφοφορία. Για παράδειγμα, η χρήση του io_uring στη βιβλιοθήκη libuv οδήγησε σε αύξηση της απόδοσης κατά 8 φορές και η συμπερίληψη της ασύγχρονης προσωρινής αποθήκευσης εγγραφής βάσει io_uring στο σύστημα αρχείων XFS οδήγησε σε μείωση 80 φορές στον λανθάνοντα χρόνο και 2,7 φορές αύξηση στη μεταφορά δεδομένων τιμή.
Αξίζει να αναφέρουμε ότι επιπλέον, η Google εξετάζει τη δυνατότητα απενεργοποίησης του io_uring από προεπιλογή στο GKE AutoPilot (Google Kubernetes Engine).
Τέλος, εάν ενδιαφέρεστε να μάθετε περισσότερα σχετικά, μπορείτε να συμβουλευτείτε τις λεπτομέρειες Στον ακόλουθο σύνδεσμο.