SELinux

Το Security-Enhanced Linux (SELinux) είναι μια λειτουργική μονάδα ασφαλείας του πυρήνα Linux που παρέχει έναν μηχανισμό για την υποστήριξη πολιτικών ασφαλείας ελέγχου πρόσβασης, συμπεριλαμβανομένων των υποχρεωτικών ελέγχων πρόσβασης (MAC).

Το SELinux είναι ένα σύνολο τροποποιήσεων πυρήνα και εργαλείων χώρου χρήστη που έχουν προστεθεί σε διάφορες διανομές Linux. Η αρχιτεκτονική του προσπαθεί να διαχωρίσει την επιβολή των αποφάσεων ασφαλείας από την πολιτική ασφαλείας και εξορθολογίζει την ποσότητα του λογισμικού που εμπλέκεται στην επιβολή της πολιτικής ασφαλείας. Οι βασικές έννοιες στις οποίες βασίζεται το SELinux μπορούν να ανιχνευθούν σε πολλά προηγούμενα έργα από την Υπηρεσία Εθνικής Ασφάλειας των Ηνωμένων Πολιτειών (NSA).

Επισκόπηση 
Η NSA Security Enhanced Linux Team περιγράφει το NSA SELinux ωςένα σύνολο patches στον πυρήνα του Linux και βοηθητικά προγράμματα για την παροχή μιας ισχυρής, ευέλικτης, υποχρεωτικής αρχιτεκτονικής ελέγχου πρόσβασης (MAC) στα κύρια υποσυστήματα του πυρήνα. Παρέχει έναν βελτιωμένο μηχανισμό για την επιβολή του διαχωρισμού των πληροφοριών με βάση τις απαιτήσεις εμπιστευτικότητας και ακεραιότητας, ο οποίος επιτρέπει την αντιμετώπιση απειλών παραποίησης και παράκαμψης μηχανισμών ασφαλείας εφαρμογών και επιτρέπει τον περιορισμό της ζημίας που μπορεί να προκληθεί από κακόβουλες ή ελαττωματικές εφαρμογές. Περιλαμβάνει ένα σύνολο δειγμάτων αρχείων διαμόρφωσης πολιτικής ασφαλείας που έχουν σχεδιαστεί για να ανταποκρίνονται σε κοινούς στόχους ασφαλείας γενικής χρήσης.Ένας πυρήνας Linux που ενσωματώνει το SELinux επιβάλλει υποχρεωτικές πολιτικές ελέγχου πρόσβασης που περιορίζουν τα προγράμματα χρήστη και τις υπηρεσίες συστήματος, καθώς και την πρόσβαση σε αρχεία και πόρους δικτύου. Ο περιορισμός του προνομίου στο ελάχιστο που απαιτείται για να λειτουργήσει μειώνει ή εξαλείφει την ικανότητα αυτών των προγραμμάτων και δαιμόνων να προκαλούν βλάβη σε περίπτωση ελαττωματικών ή παραβιασμένων (για παράδειγμα μέσω υπερχείλισης buffer ή εσφαλμένων διαμορφώσεων). Αυτός ο μηχανισμός περιορισμού λειτουργεί ανεξάρτητα από τους παραδοσιακούς μηχανισμούς ελέγχου πρόσβασης Linux (διακριτική). Δεν έχει την έννοια του υπερχρήστη "root" και δεν συμμερίζεται τις γνωστές αδυναμίες των παραδοσιακών μηχανισμών ασφαλείας Linux, όπως η εξάρτηση από τα δυαδικά αρχεία setuid/setgid.

Η ασφάλεια ενός «μη τροποποιημένου» συστήματος Linux (ένα σύστημα χωρίς SELinux) εξαρτάται από την ορθότητα του πυρήνα, όλων των προνομιούχων εφαρμογών και κάθε διαμόρφωσης τους. Ένα σφάλμα σε οποιαδήποτε από αυτές τις περιοχές μπορεί να επιτρέψει τον συμβιβασμό ολόκληρου του συστήματος. Αντίθετα, η ασφάλεια ενός "τροποποιημένου" συστήματος (που βασίζεται σε πυρήνα SELinux) εξαρτάται πρωτίστως από την ορθότητα του πυρήνα και τη διαμόρφωση της πολιτικής ασφαλείας του. Ενώ τα προβλήματα με την ορθότητα ή τη διαμόρφωση των εφαρμογών ενδέχεται να επιτρέπουν τον περιορισμένο συμβιβασμό μεμονωμένων προγραμμάτων χρήστη και δαιμόνων συστήματος, δεν αποτελούν απαραίτητα απειλή για την ασφάλεια άλλων προγραμμάτων χρηστών και δαιμόνων συστήματος ή για την ασφάλεια του συστήματος συνολικά.

Από μια καθαρά προοπτική, το SELinux παρέχει ένα υβρίδιο εννοιών και δυνατοτήτων που αντλούνται από υποχρεωτικούς ελέγχους πρόσβασης, υποχρεωτικούς ελέγχους ακεραιότητας, έλεγχο πρόσβασης βάσει ρόλου (RBAC) και αρχιτεκτονική επιβολής τύπου. Τα εργαλεία τρίτων επιτρέπουν σε κάποιον να δημιουργήσει μια ποικιλία πολιτικών ασφαλείας.

Ιστορία 
Η πρώτη εργασία που στοχεύει στην τυποποίηση μιας προσέγγισης που παρέχει υποχρεωτικούς και διακριτικούς ελέγχους πρόσβασης (MAC και DAC) εντός ενός υπολογιστικού περιβάλλοντος UNIX (ακριβέστερα, POSIX) μπορεί να αποδοθεί στην Ομάδα Εργασίας Trusted UNIX (TRUSIX) της Εθνικής Υπηρεσίας Ασφαλείας, η οποία συνεδρίασε από το 1987 έως το 1991 και δημοσίευσε ένα Βιβλίο Ουράνιου Τόξου (#020A), και παρήγαγε ένα επίσημο μοντέλο και ένα σχετικό πρωτότυπο αποδεικτικών στοιχείων αξιολόγησης (#020B) που τελικά δεν δημοσιεύτηκε.

Το SELinux σχεδιάστηκε για να δείξει την αξία των υποχρεωτικών ελέγχων πρόσβασης στην κοινότητα του Linux και πώς θα μπορούσαν να προστεθούν τέτοια στοιχεία στο Linux. Αρχικά, οι ενημερώσεις κώδικα που απαρτίζουν το SELinux έπρεπε να εφαρμοστούν ρητά στην πηγή του πυρήνα του Linux. Το SELinux συγχωνεύτηκε στην κύρια γραμμή του πυρήνα Linux στη σειρά 2.6 του πυρήνα Linux.

Η NSA, ο αρχικός κύριος προγραμματιστής του SELinux, κυκλοφόρησε την πρώτη έκδοση στην κοινότητα ανάπτυξης ανοιχτού κώδικα υπό την GNU GPL στις 22 Δεκεμβρίου 2000. Το λογισμικό συγχωνεύτηκε στον κύριο πυρήνα Linux 2.6.0-test3, που κυκλοφόρησε στις 8 Αυγούστου 2003 Άλλοι σημαντικοί συνεισφέροντες είναι οι Red Hat, Network Associates, Secure Computing Corporation, Tresys Technology και Trusted Computer Solutions. Πειραματικές θύρες της υλοποίησης FLASK/TE έχουν γίνει διαθέσιμες μέσω του TrustedBSD Project για τα λειτουργικά συστήματα FreeBSD και Darwin.

Το Linux με βελτιωμένη ασφάλεια υλοποιεί τον προηγμένο πυρήνα ασφαλείας Flux (FLASK). Ένας τέτοιος πυρήνας περιέχει αρχιτεκτονικά στοιχεία που έχουν προτυποποιηθεί στο λειτουργικό σύστημα Fluke. Αυτά παρέχουν γενική υποστήριξη για την επιβολή πολλών ειδών υποχρεωτικών πολιτικών ελέγχου πρόσβασης, συμπεριλαμβανομένων εκείνων που βασίζονται στις έννοιες της επιβολής τύπου, του ελέγχου πρόσβασης βάσει ρόλων και της ασφάλειας πολλαπλών επιπέδων. Το FLASK, με τη σειρά του, βασίστηκε στο DTOS, ένα κατανεμημένο αξιόπιστο λειτουργικό σύστημα προερχόμενο από Mach, καθώς και στο Trusted Mach, ένα ερευνητικό έργο από τα Trusted Information Systems που είχε επιρροή στο σχεδιασμό και την υλοποίηση του DTOS.

Χαρακτηριστικά 
Τα χαρακτηριστικά του SELinux περιλαμβάνουν:

 Καθαρός διαχωρισμός της πολιτικής από την επιβολή
 Καλά καθορισμένες διεπαφές πολιτικής
 Υποστήριξη για εφαρμογές που υποβάλλουν ερωτήματα για την πολιτική και επιβάλλουν έλεγχο πρόσβασης (για παράδειγμα, crond εκτελούμενες εργασίες στο σωστό πλαίσιο)
 Ανεξαρτησία συγκεκριμένων πολιτικών και γλωσσών πολιτικής
 Ανεξαρτησία συγκεκριμένων μορφών και περιεχομένων ετικετών ασφαλείας
 Μεμονωμένες ετικέτες και στοιχεία ελέγχου για αντικείμενα και υπηρεσίες πυρήνα
 Υποστήριξη για αλλαγές πολιτικής
 Ξεχωριστά μέτρα για την προστασία της ακεραιότητας του συστήματος (τύπος τομέα) και της εμπιστευτικότητας των δεδομένων (πολυεπίπεδη ασφάλεια)
 Ευέλικτη πολιτική
 Ελέγχει την προετοιμασία και την κληρονομικότητα της διαδικασίας και την εκτέλεση του προγράμματος
 Ελέγχει συστήματα αρχείων, καταλόγους, αρχεία και ανοιχτούς περιγραφείς αρχείων
 Ελέγχει τις υποδοχές, τα μηνύματα και τις διεπαφές δικτύου
 Έλεγχοι σχετικά με τη χρήση των «δυνατοτήτων»
 Αποθηκευμένες πληροφορίες σχετικά με τις αποφάσεις πρόσβασης μέσω του Access Vector Cache (AVC)
 Προεπιλεγμένη πολιτική άρνησης (ό,τι δεν προσδιορίζεται ρητά στην πολιτική δεν επιτρέπεται)

Υιοθέτηση 
Το SELinux έχει εφαρμοστεί στο Android από την έκδοση 4.3.

Μεταξύ των δωρεάν διανομών Linux που υποστηρίζονται από την κοινότητα, το Fedora ήταν ένας από τους πρώτους που το υιοθέτησαν, συμπεριλαμβανομένης της υποστήριξης του από προεπιλογή από το Fedora Core 2. Άλλες διανομές περιλαμβάνουν υποστήριξη για αυτό, όπως το Debian από την έκδοση 9 Stretch και το Ubuntu από την 8.04 Hardy Heron. Από την έκδοση 11.1, το openSUSE περιέχει τη "βασική ενεργοποίηση" του SELinux. Το SUSE Linux Enterprise 11 διαθέτει το SELinux ως "προεπισκόπηση τεχνολογίας".

Το SELinux είναι δημοφιλές σε συστήματα που βασίζονται σε κοντέινερ linux, όπως το CoreOS Container Linux και το rkt. Είναι χρήσιμο ως πρόσθετος έλεγχος ασφαλείας για να βοηθήσει στην περαιτέρω επιβολή της απομόνωσης μεταξύ των αναπτυγμένων κοντέινερ και του κεντρικού υπολογιστή τους.

Το SELinux είναι διαθέσιμο από το 2005 ως μέρος της έκδοσης 4 του Red Hat Enterprise Linux (RHEL) και όλων των μελλοντικών εκδόσεων. Αυτή η παρουσία αντικατοπτρίζεται επίσης σε αντίστοιχες εκδόσεις του CentOS και του Scientific Linux. Η υποστηριζόμενη πολιτική στο RHEL4 είναι στοχευμένη πολιτική που στοχεύει στη μέγιστη ευκολία χρήσης και επομένως δεν είναι τόσο περιοριστική όσο θα μπορούσε να είναι. Οι μελλοντικές εκδόσεις της RHEL σχεδιάζονται να έχουν περισσότερους στόχους στη στοχευμένη πολιτική, κάτι που θα σημαίνει πιο περιοριστικές πολιτικές.

Σύγκριση με το AppArmor 

Το SELinux αντιπροσωπεύει μία από τις πολλές πιθανές προσεγγίσεις στο πρόβλημα του περιορισμού των ενεργειών που μπορεί να κάνει το εγκατεστημένο λογισμικό. Μια άλλη δημοφιλής εναλλακτική λύση ονομάζεται AppArmor και είναι διαθέσιμη σε πλατφόρμες SUSE Linux Enterprise Server (SLES), openSUSE και Debian. Το AppArmor αναπτύχθηκε ως στοιχείο της πλέον ανενεργής πλατφόρμας Immunix Linux. Επειδή το AppArmor και το SELinux διαφέρουν ριζικά το ένα από το άλλο, αποτελούν ξεχωριστές εναλλακτικές λύσεις για τον έλεγχο λογισμικού. Ενώ το SELinux επινοεί εκ νέου ορισμένες έννοιες για να παρέχει πρόσβαση σε ένα πιο εκφραστικό σύνολο επιλογών πολιτικής, το AppArmor σχεδιάστηκε να είναι απλό επεκτείνοντας την ίδια διοικητική σημασιολογία που χρησιμοποιείται για το DAC μέχρι το υποχρεωτικό επίπεδο ελέγχου πρόσβασης.

Υπάρχουν πολλές βασικές διαφορές:

 Μια σημαντική διαφορά είναι ότι το AppArmor αναγνωρίζει τα αντικείμενα του συστήματος αρχείων με το όνομα διαδρομής αντί για το inode. Αυτό σημαίνει ότι, για παράδειγμα, ένα αρχείο που δεν είναι προσβάσιμο μπορεί να γίνει προσβάσιμο στο AppArmor όταν δημιουργείται ένας σκληρός σύνδεσμος σε αυτό, ενώ το SELinux θα αρνηθεί την πρόσβαση μέσω του πρόσφατα δημιουργημένου σκληρού συνδέσμου. Ως αποτέλεσμα, το AppArmor μπορεί να ειπωθεί ότι δεν είναι σύστημα επιβολής τύπων, καθώς στα αρχεία δεν εκχωρείται τύπος. Αντίθετα, αναφέρονται απλώς σε ένα αρχείο διαμόρφωσης.
 Το SELinux και το AppArmor διαφέρουν επίσης σημαντικά στον τρόπο διαχείρισής τους και στον τρόπο ενσωμάτωσής τους στο σύστημα.
 Δεδομένου ότι προσπαθεί να αναδημιουργήσει τα παραδοσιακά στοιχεία ελέγχου DAC με επιβολή σε επίπεδο MAC, το σύνολο λειτουργιών του AppArmor είναι επίσης σημαντικά μικρότερο από εκείνα που είναι διαθέσιμα στις περισσότερες εφαρμογές SELinux. Για παράδειγμα, το σύνολο λειτουργιών του AppArmor αποτελείται από: ανάγνωση, εγγραφή, προσάρτηση, εκτέλεση, κλείδωμα και σύνδεση. Οι περισσότερες υλοποιήσεις SELinux θα υποστηρίξουν αριθμούς λειτουργιών τάξεων μεγέθους μεγαλύτερο από αυτό. Για παράδειγμα, το SELinux θα υποστηρίζει συνήθως τα ίδια δικαιώματα, αλλά περιλαμβάνει επίσης στοιχεία ελέγχου για mknod, σύνδεση σε υποδοχές δικτύου, σιωπηρή χρήση των δυνατοτήτων POSIX, φόρτωση και εκφόρτωση λειτουργικών μονάδων πυρήνα, διάφορα μέσα πρόσβασης σε κοινόχρηστη μνήμη κ.λπ.
 Δεν υπάρχουν στοιχεία ελέγχου στο AppArmor για κατηγορηματική οριοθέτηση δυνατοτήτων POSIX. Εφόσον η τρέχουσα υλοποίηση των δυνατοτήτων δεν περιέχει καμία έννοια θέματος για τη λειτουργία (μόνο ο ηθοποιός και η λειτουργία), είναι συνήθως δουλειά του επιπέδου MAC να αποτρέπει προνομιούχες λειτουργίες σε αρχεία εκτός του επιβαλλόμενου πεδίου ελέγχου του ηθοποιού (δηλαδή "Sandbox" ). Το AppArmor μπορεί να αποτρέψει την αλλαγή της δικής του πολιτικής και να αποτρέψει την προσάρτηση/αποπροσάρτηση συστημάτων αρχείων, αλλά δεν κάνει τίποτα για να εμποδίσει τους χρήστες να βγουν έξω από το εγκεκριμένο πεδίο ελέγχου τους.
 Για παράδειγμα, μπορεί να κριθεί ωφέλιμο για τους υπαλλήλους του γραφείου βοήθειας να αλλάξουν την ιδιοκτησία ή τα δικαιώματα σε ορισμένα αρχεία, ακόμη και αν δεν τα κατέχουν (για παράδειγμα, σε ένα κοινόχρηστο αρχείο τμημάτων). Ο διαχειριστής δεν θέλει να δώσει στους χρήστες πρόσβαση root στο πλαίσιο, επομένως τους δίνει CAP_FOWNER ή CAP_DAC_OVERRIDE. Κάτω από το SELinux, ο διαχειριστής (ή ο προμηθευτής πλατφόρμας) μπορεί να ρυθμίσει το SELinux ώστε να αρνείται όλες τις δυνατότητες σε άλλους μη περιορισμένους χρήστες και, στη συνέχεια, να δημιουργήσει περιορισμένους τομείς στους οποίους θα μπορεί ο υπάλληλος να μεταβεί μετά τη σύνδεση, σε έναν τομέα που μπορεί να ασκήσει αυτές τις δυνατότητες, αλλά μόνο σε αρχεία τον κατάλληλο τύπο.
 Δεν υπάρχει έννοια πολυεπίπεδης ασφάλειας με το AppArmor, επομένως δεν υπάρχει διαθέσιμη σκληρή επιβολή BLP ή Biba.
 Η διαμόρφωση του AppArmor πραγματοποιείται χρησιμοποιώντας αποκλειστικά κανονικά επίπεδα αρχεία. Το SELinux (από προεπιλογή στις περισσότερες υλοποιήσεις) χρησιμοποιεί έναν συνδυασμό επίπεδων αρχείων (που χρησιμοποιούνται από διαχειριστές και προγραμματιστές για τη σύνταξη πολιτικής αναγνώσιμης από τον άνθρωπο πριν από τη μεταγλώττιση) και εκτεταμένων χαρακτηριστικών.
 Το SELinux υποστηρίζει την έννοια του "απομακρυσμένου διακομιστή πολιτικών" (με δυνατότητα διαμόρφωσης μέσω /etc/selinux/semanage.conf) ως εναλλακτική πηγή για τη διαμόρφωση πολιτικής. Η κεντρική διαχείριση του AppArmor είναι συνήθως πολύ περίπλοκη, καθώς οι διαχειριστές πρέπει να αποφασίσουν μεταξύ των εργαλείων ανάπτυξης διαμόρφωσης που εκτελούνται ως root (για να επιτρέπονται ενημερώσεις πολιτικής) ή διαμορφώνονται με μη αυτόματο τρόπο σε κάθε διακομιστή.

Παρόμοια συστήματα και βελτιώσεις 
Η απομόνωση των διαδικασιών μπορεί επίσης να επιτευχθεί με μηχανισμούς όπως η εικονικοποίηση. το έργο OLPC, για παράδειγμα, στην πρώτη του εφαρμογή περιέλαβε μεμονωμένες εφαρμογές σε ελαφρούς διακομιστές. Επίσης, η NSA έχει υιοθετήσει ορισμένες από τις έννοιες του SELinux στο Android Enhanced Security.

Η General Dynamics δημιουργεί και διανέμει το PitBull Trusted Operating System, μια βελτίωση πολλαπλών επιπέδων ασφάλειας (MLS) για το Red Hat Enterprise Linux.

Το Multi-Category Security (MCS) είναι μια βελτίωση του SELinux για το Red Hat Enterprise Linux που επιτρέπει στους χρήστες να επισημαίνουν αρχεία με κατηγορίες, προκειμένου να περιορίζουν περαιτέρω την πρόσβαση μέσω διακριτικού ελέγχου πρόσβασης και επιβολής τύπων. Οι κατηγορίες παρέχουν πρόσθετα διαμερίσματα εντός των επιπέδων ευαισθησίας που χρησιμοποιούνται από την ασφάλεια πολλαπλών επιπέδων (MLS).

Παραπομπές

Εξωτερικοί σύνδεσμοι
 

Λογισμικό προστασίας από ιούς
Linux
Ασφάλεια στο διαδίκτυο
Είδη βοηθητικού λογισμικού
Λογισμικό ασφαλείας υπολογιστών
Ασφάλεια υπολογιστών
Δικτύωση υπολογιστών