Το έργο Openwall κυκλοφόρησε την ενότητα πυρήνα LKRG 1.0.0 (Linux Το Kernel Runtime Guard (Kernel Runtime Guard) έχει σχεδιαστεί για να επαληθεύει την ακεραιότητα των δομών του πυρήνα και να εντοπίζει προσπάθειες εκμετάλλευσης τρωτών σημείων του πυρήνα. Η κυκλοφορία της έκδοσης 1.0.0 σηματοδοτεί την ωριμότητα του έργου. Ο κώδικας του έργου διανέμεται με την άδεια GPLv2.
Η ενότητα είναι κατάλληλη και για τα δύο προστασία από επιθέσεις, χειρισμός ήδη γνωστών ευπαθειών στον πυρήνα Linux, για την αντιμετώπιση exploits που εκμεταλλεύονται προηγουμένως άγνωστα τρωτά σημεία, εκτός εάν χρησιμοποιούν ειδικά μέτρα για την παράκαμψη του LKRG. Η προστασία βασίζεται στην ανίχνευση μη εξουσιοδοτημένων αλλαγών στον πυρήνα που εκτελείται (έλεγχος ακεραιότητας) και στην παρακολούθηση αλλαγών στα δικαιώματα διεργασίας χρήστη (ανίχνευση exploit).
Ο έλεγχος ακεραιότητας εκτελείται με βάση τη σύγκριση των hashes που υπολογίζονται για τις πιο σημαντικές περιοχές της μνήμης και των δομών δεδομένων του πυρήνα, όπως το IDT (Πίνακας Περιγραφέα Διακοπών), το MSR, τους πίνακες κλήσεων συστήματος, όλες τις διαδικασίες και τις συναρτήσεις, τους χειριστές διακοπών, τις λίστες των φορτωμένων ενοτήτων, τα περιεχόμενα της ενότητας ".text" των ενοτήτων και τα χαρακτηριστικά της διεργασίας. Η διαδικασία ελέγχου ενεργοποιείται περιοδικά από έναν χρονοδιακόπτη ή όταν συμβαίνουν ορισμένα συμβάντα στον πυρήνα, για παράδειγμα, κατά την εκτέλεση κλήσεων συστήματος setuid, setreuid, fork, exit, execve και do_init_module.
Η αναγνώριση πιθανών exploits και ο αποκλεισμός επιθέσεων πραγματοποιείται στο στάδιο πριν ο πυρήνας παραχωρήσει πρόσβαση σε πόρους (για παράδειγμα, πριν ανοίξει ένα αρχείο), αλλά αφού η διεργασία λάβει μη εξουσιοδοτημένα δικαιώματα (για παράδειγμα, αλλαγή του UID). Όταν εντοπιστεί μη εξουσιοδοτημένη συμπεριφορά διεργασιών, αυτές τερματίζονται αναγκαστικά, κάτι που αρκεί για να αποκλειστούν πολλά exploits. Τα γενικά έξοδα της ενότητας εκτιμώνται σε 2-2.5%.
Οι υποστηριζόμενες αρχιτεκτονικές περιλαμβάνουν τις x86-64, AArch64 (ARM64), ARM32 και x86. Το LKRG 1.0.0 έχει δοκιμαστεί με πυρήνες από διάφορες διανομές, ξεκινώντας με τον πυρήνα 3.10 από το RHEL.CentOS 7 και τελειώνει με την έκδοση 6.17-rc4 από το αποθετήριο όπου προετοιμάζεται η κυκλοφορία του Fedora 44. Διατίθενται πακέτα για διανομές ALT. Linux, Αρχιτεκτονική Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto και OpenBMC. Συλλέγονται για Rocky Linux Τα πακέτα μπορούν να χρησιμοποιηθούν σε RHEL 8/9 και παράγωγες διανομές όπως AlmaLinux 8/9, και πακέτα για το Whonix στο Debian и Ubuntu.
Μεταξύ των αλλαγών στη νέα έκδοση:
- Η συμβατότητα με τους πυρήνες είναι εξασφαλισμένη Linux μέχρι την κυκλοφορία της έκδοσης 6.17-rc4.
- Όταν χρησιμοποιείται με πυρήνες από την έκδοση 6.13 και μετά, η αναχαίτιση απομακρυσμένων κλήσεων στις συναρτήσεις override_creds() και revert_creds() έχει σταματήσει, γεγονός που έχει περιορίσει την ανίχνευση επιθέσεων που επαναπροσδιορίζουν τον δείκτη cred. Έχουν γίνει προσπάθειες για την αντιστάθμιση των περιορισμών προσθέτοντας ελέγχους για την επανεγγραφή του δείκτη cred αλλού στον πυρήνα.
- Σταμάτησε η υπερβολική παρακολούθηση διαπιστευτηρίων που δεν ελέγχονται ως προς την ακεραιότητα. Η αλλαγή μείωσε τη βάση κώδικα κατά περίπου 1500 γραμμές.
- Προστέθηκε υποστήριξη για ό,τι εμφανιζόταν στον πυρήνα Linux Μηχανισμός 6.10 για τη δημιουργία προσωρινών αρχείων στο σύστημα αρχείων OverlayFS χρησιμοποιώντας την επιλογή O_TMPFILE (ovl_tmpfile). Αυτή η υποστήριξη είναι απαραίτητη για την αποτροπή ψευδώς θετικών αποτελεσμάτων που προκύπτουν κατά τη χρήση απομονωμένων κοντέινερ σε συστήματα με πυρήνες 6.10-6.12.
- Για συστήματα x86_64, έχει προστεθεί υποστήριξη για την τεχνολογία Intel CET (Control-flow Enforcement Technology) για την προστασία του εκτελέσιμου κώδικα χρησιμοποιώντας εντολές IBT (indirect branch tracking), καθώς και προστασία λογισμικού kCFI (kernel Control Flow Integrity) για τον αποκλεισμό παραβιάσεων της κανονικής σειράς εκτέλεσης (control flow) ως αποτέλεσμα της χρήσης exploits που αλλάζουν δείκτες σε συναρτήσεις που είναι αποθηκευμένες στη μνήμη.
- Για τη σύνδεση πολλών χειριστών, αντί για kretprobes, χρησιμοποιείται ο μηχανισμός kprobes, ο οποίος απλοποιεί τον κώδικα εγκατάστασης του αγκίστρου και επιτρέπει την επίτευξη υψηλότερης απόδοσης.
- Ο χειρισμός των κλειδωμάτων δεδομένων (locks) που αφορούν συγκεκριμένες διεργασίες στον πυρήνα (shadow data ανά εργασία) έχει αναδιαμορφωθεί. Με την εξάλειψη των περιττών κλειδωμάτων, κατέστη δυνατή η αύξηση της απόδοσης πρόσβασης σε τέτοια δεδομένα.
- Διορθώθηκαν σφάλματα που προκαλούσαν συνθήκες αγώνα, προβλήματα ελέγχου ακεραιότητας και ψευδώς θετικά αποτελέσματα.
- Βελτιωμένη υποστήριξη για κατασκευή χρησιμοποιώντας Clang.
Πηγή: opennet.ru
