AppArmor - μια βελτίωση του πυρήνα για να περιορίζει τα προγράμματα σε ένα περιορισμένο σύνολο πόρων.
ΠΕΡΙΓΡΑΦΗ
Το AppArmor είναι μια βελτίωση του πυρήνα για να περιορίζει τα προγράμματα σε ένα περιορισμένο σύνολο πόρων. Το μοναδικό μοντέλο ασφαλείας του AppArmor είναι να συνδέει χαρακτηριστικά ελέγχου πρόσβασης στα προγράμματα και όχι στους χρήστες.
Η εφαρμογή του AppArmor παρέχεται μέσω προφίλ που φορτώνονται στον πυρήνα μέσω του apparmor_parser(8), συνήθως μέσω της μονάδας συστήματος systemd apparmor.service, η οποία χρησιμοποιείται ως εξής:
# systemctl start apparmor
# systemctl reload apparmor
Το AppArmor μπορεί να λειτουργεί σε δύο λειτουργίες: επιβολή και καταγραφή ή εκμάθηση:
Επιβολή - Τα προφίλ που φορτώνονται σε λειτουργία επιβολής θα έχουν ως αποτέλεσμα την επιβολή της πολιτικής που ορίζεται στο προφίλ, καθώς και την αναφορά των προσπαθειών παραβίασης πολιτικής στο syslogd.
Καταγραφή - Τα προφίλ που φορτώνονται σε λειτουργία «καταγραφής» δεν θα επιβάλλουν πολιτική. Αντ' αυτού, θα αναφέρουν τις προσπάθειες παραβίασης πολιτικής. Αυτή η λειτουργία είναι βολική για την ανάπτυξη προφίλ. Για να διαχειριστείτε τη λειτουργία καταγραφής για μεμονωμένα προφίλ, μπορείτε να χρησιμοποιήσετε τις βοηθητικές εφαρμογές aa-complain(8) και aa-enforce(8). Αυτές οι βοηθητικές εφαρμογές παίρνουν το όνομα ενός προγράμματος ως όρισμα.
Τα προφίλ αποθηκεύονται παραδοσιακά σε αρχεία στο /etc/apparmor.d/ με συμβάσεις ονομασίας που αντικαθιστούν το / στις διαδρομές με . (εκτός από το root /), έτσι ώστε τα προφίλ να είναι ευκολότερα στη διαχείριση (π.χ., το προφίλ /usr/sbin/nscd θα έχει το όνομα usr.sbin.nscd).
Τα προφίλ εφαρμόζονται σε μια διαδικασία κατά την εκτέλεση (όπως φαίνεται στην κλήση συστήματος execve(2)): μόλις φορτωθεί ένα προφίλ για ένα πρόγραμμα, αυτό το πρόγραμμα θα περιορίζεται στην επόμενη εκτέλεση. Εάν μια διαδικασία εκτελείται ήδη υπό ένα προφίλ, όταν αντικατασταθεί αυτό το προφίλ στον πυρήνα, το ενημερωμένο προφίλ εφαρμόζεται αμέσως σε αυτήν τη διαδικασία. Από την άλλη πλευρά, μια διαδικασία που εκτελείται ήδη χωρίς περιορισμούς δεν μπορεί να περιοριστεί.
Το AppArmor υποστηρίζει το σύστημα αρχείων ασφαλείας του πυρήνα Linux και καθιστά διαθέσιμη τη λίστα των προφίλ που έχουν φορτωθεί: για να συνδέσετε το σύστημα αρχείων:
# mount -tsecurityfs securityfs /sys/kernel/security
$ cat /sys/kernel/security/apparmor/profiles
/usr/bin/mutt
/usr/bin/gpg
...
Συνήθως, το σενάριο εκκίνησης θα συνδέσει το securityfs εάν δεν έχει ήδη γίνει.
Το AppArmor περιορίζει επίσης ποιες προνομιακές λειτουργίες μπορεί να εκτελέσει μια περιορισμένη διαδικασία, ακόμη και αν η διαδικασία εκτελείται ως root. Μια περιορισμένη διαδικασία δεν μπορεί να καλέσει τις ακόλουθες κλήσεις συστήματος:
create_module(2) delete_module(2) init_module(2) ioperm(2) iopl(2) ptrace(2) reboot(2) setdomainname(2) sethostname(2) swapoff(2) swapon(2) sysctl(2)
Λειτουργία καταγραφής παραβιάσεων
Αντί να αρνείται την πρόσβαση σε πόρους για τους οποίους το προφίλ δεν διαθέτει κανόνα, το AppArmor μπορεί να "επιτρέψει" την πρόσβαση και να καταγράψει ένα μήνυμα για τη λειτουργία που την προκαλεί. Αυτό ονομάζεται λειτουργία καταγραφής παραβιάσεων. Είναι σημαντικό να σημειωθεί ότι οι κανόνες που υπάρχουν στο προφίλ εξακολουθούν να εφαρμόζονται, επομένως οι κανόνες επιτρεψιμότητας θα εξακολουθούν να καταστέλλουν ή να επιβάλλουν μηνύματα ελέγχου, και οι κανόνες άρνησης θα εξακολουθούν να έχουν ως αποτέλεσμα τις αρνήσεις και την καταστολή των μηνυμάτων άρνησης (δείτε Απενεργοποιήστε την καταστολή των μηνυμάτων άρνησης εάν αυτό αποτελεί πρόβλημα).
Η λειτουργία καταγραφής παραβιάσεων μπορεί να χρησιμοποιηθεί για την σταδιακή ανάπτυξη προφίλ καθώς μια εφαρμογή εκτελείται. Οι καταγεγραμμένες προσβάσεις μπορούν να προστεθούν στο προφίλ και στη συνέχεια η εφαρμογή μπορεί να εκτελεστεί περαιτέρω για να ανακαλυφθούν περαιτέρω προσθήκες που απαιτούνται. Επειδή το AppArmor επιτρέπει τις προσβάσεις, η εφαρμογή θα συμπεριφέρεται όπως θα συμπεριφερόταν εάν το AppArmor δεν την περιόριζε.
Προειδοποίηση: η λειτουργία καταγραφής παραβιάσεων δεν παρέχει καμία ασφάλεια, μόνο έλεγχο, ενώ είναι ενεργοποιημένη. Δεν θα πρέπει να χρησιμοποιείται σε ένα εχθρικό περιβάλλον, διαφορετικά μπορεί να καταγραφούν κακόβουλες συμπεριφορές και να προστεθούν στο προφίλ σαν να ήταν προσβάσεις σε πόρους που θα πρέπει να χρησιμοποιούνται από την εφαρμογή.
Σημείωση: η λειτουργία καταγραφής παραβιάσεων μπορεί να δημιουργεί μεγάλο όγκο καταγραφών για νέα ή άδεια προφίλ, αλλά με αναπτυγμένα προφίλ, ενδέχεται να μην καταγράφει τίποτα εάν το προφίλ καλύπτει καλά τη συμπεριφορά της εφαρμογής. Δείτε τον Περιορισμό του ρυθμού ελέγχου εάν η λειτουργία καταγραφής παραβιάσεων δημιουργεί πάρα πολλά μηνύματα καταγραφής.
Για να οριστεί ένα προφίλ και οποιαδήποτε θυγατρικά ή προφίλ "καπέλου" που μπορεί να περιέχει το προφίλ σε λειτουργία καταγραφής παραβιάσεων, χρησιμοποιήστε:
aa-complain /etc/apparmor.d/<η-εφαρμογή>
Για να οριστεί χειροκίνητα ένα συγκεκριμένο προφίλ σε λειτουργία καταγραφής παραβιάσεων, προσθέστε τη σημαία "complain" και, στη συνέχεια, επαναφορτώστε χειροκίνητα το προφίλ:
profile foo flags=(complain) { ... }
Σημειώστε ότι η σημαία "complain" πρέπει επίσης να προστεθεί χειροκίνητα σε οποιαδήποτε προφίλ "καπέλου" ή θυγατρικά προφίλ του προφίλ, διαφορετικά θα συνεχίσουν να χρησιμοποιούν την προηγούμενη λειτουργία.
Για να ενεργοποιήσετε τη λειτουργία καταγραφής παραβιάσεων σε επίπεδο συστήματος, εκτελέστε:
echo -n complain > /sys/module/apparmor/parameters/mode
ή για να το ορίσετε κατά την εκκίνηση, προσθέστε:
apparmor.mode=complain
ως παράμετρο εκκίνησης του πυρήνα.
Προειδοποίηση: η ρύθμιση της λειτουργίας καταγραφής παραβιάσεων σε επίπεδο συστήματος απενεργοποιεί όλες τις προστασίες ασφαλείας του AppArmor. Μπορεί να είναι χρήσιμη κατά την αποσφαλμάτωση ή την ανάπτυξη προφίλ, αλλά η ρύθμισή της επιλεκτικά σε επίπεδο προφίλ είναι ασφαλέστερη.
Σφάλματα
Όταν μια περιορισμένη διαδικασία προσπαθεί να αποκτήσει πρόσβαση σε ένα αρχείο στο οποίο δεν έχει άδεια πρόσβασης, ο πυρήνας θα αναφέρει ένα μήνυμα μέσω του ελέγχου, παρόμοιο με:
audit(1386511672.612:238): apparmor="DENIED" operation="exec"
parent=7589 profile="/tmp/sh" name="/bin/uname" pid=7605
comm="sh" requested_mask="x" denied_mask="x" fsuid=0 ouid=0
audit(1386511672.613:239): apparmor="DENIED" operation="open"
parent=7589 profile="/tmp/sh" name="/bin/uname" pid=7605
comm="sh" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
audit(1386511772.804:246): apparmor="DENIED" operation="capable"
parent=7246 profile="/tmp/sh" pid=7589 comm="sh" pid=7589
comm="sh" capability=2 capname="dac_override"
Οι άδειες που ζητά η διαδικασία περιγράφονται στις λειτουργίες= και στην άρνηση_μάσκα= (για αρχεία - οι δυνατότητες χρησιμοποιούν μια ελαφρώς διαφορετική μορφή καταγραφής). Τα "όνομα" και το αναγνωριστικό διαδικασίας του προγράμματος που εκτελείται αναφέρονται, καθώς και το όνομα του προφίλ, συμπεριλαμβανομένου οποιουδήποτε "καπέλου" που μπορεί να είναι ενεργό, διαχωρισμένα με "//". ("Όνομα" βρίσκεται σε εισαγωγικά, επειδή το όνομα της διαδικασίας περιορίζεται σε 15 byte· είναι το ίδιο με αυτό που αναφέρεται μέσω της καταγραφής διεργασιών Berkeley).
Για περιορισμένες διεργασίες που εκτελούνται υπό ένα προφίλ που έχει φορτωθεί σε λειτουργία καταγγελίας, η επιβολή δεν θα πραγματοποιηθεί και τα μηνύματα καταγραφής που θα αναφέρονται στο audit θα έχουν τη μορφή:
audit(1386512577.017:275): apparmor="ALLOWED" operation="open"
parent=8012 profile="/usr/bin/du" name="/etc/apparmor.d/tunables/"
pid=8049 comm="du" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
audit(1386512577.017:276): apparmor="ALLOWED" operation="open"
parent=8012 profile="/usr/bin/du" name="/etc/apparmor.d/tunables/"
pid=8049 comm="du" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Εάν το auditd του χώρου χρήστη δεν εκτελείται, ο πυρήνας θα στέλνει συμβάντα audit στο klogd. το klogd θα στέλνει τα μηνύματα στο syslog, το οποίο θα καταγράφει τα μηνύματα με την εγκατάσταση KERN. Έτσι, τα μηνύματα ΑΠΟΡΡΙΨΗΣ και ΑΠΟΔΟΧΗΣ ενδέχεται να μεταδοθούν είτε στο /var/log/audit/audit.log είτε στο /var/log/messages, ανάλογα με τη τοπική διαμόρφωση.
ΑΠΟΜΥΖΙΩΣΗ ΣΦΑΛΜΑΤΩΝ
Το AppArmor παρέχει ορισμένες δυνατότητες για την καταγραφή περισσότερων πληροφοριών, οι οποίες μπορούν να βοηθήσουν στην απομυζίωση σφαλμάτων στα προφίλ.
Ενεργοποίηση της λειτουργίας απομυζίωσης σφαλμάτων
Όταν η λειτουργία απομυζίωσης σφαλμάτων είναι ενεργοποιημένη, το AppArmor θα καταγράφει μερικά επιπλέον μηνύματα στο dmesg (όχι μέσω του υποσυστήματος audit). Για παράδειγμα, τα αρχεία καταγραφής θα δείχνουν εάν έχει εφαρμοστεί η απομάκρυνση περιβάλλοντος.
Για να ενεργοποιήσετε τη λειτουργία απομυζίωσης σφαλμάτων, εκτελέστε:
echo 1 > /sys/module/apparmor/parameters/debug
ή για να το ορίσετε κατά την εκκίνηση, προσθέστε:
apparmor.debug=1
ως παράμετρο εκκίνησης του πυρήνα.
Απενεργοποίηση της καταστολής ελέγχου απορρίψεων
Από προεπιλογή, οι λειτουργίες που ενεργοποιούν κανόνες "απόρριψης" δεν καταγράφονται. Αυτό ονομάζεται καταστολή ελέγχου απορρίψεων.
Για να απενεργοποιήσετε την καταστολή ελέγχου απορρίψεων, εκτελέστε:
echo -n noquiet >/sys/module/apparmor/parameters/audit
ή για να το ορίσετε κατά την εκκίνηση, προσθέστε:
apparmor.audit=noquiet
ως παράμετρο εκκίνησης του πυρήνα.
Εξαναγκαστική λειτουργία ελέγχου
Το AppArmor μπορεί να καταγράψει ένα μήνυμα για κάθε λειτουργία που ενεργοποιεί έναν κανόνα που έχει διαμορφωθεί στην πολιτική. Αυτό ονομάζεται εξαναγκαστική λειτουργία ελέγχου.
Προσοχή! Η εξαναγκαστική λειτουργία ελέγχου μπορεί να είναι εξαιρετικά θορυβώδης ακόμη και για ένα μόνο προφίλ, πόσο μάλλον όταν είναι ενεργοποιημένη παγκοσμίως.
Για να ορίσετε ένα συγκεκριμένο προφίλ σε εξαναγκαστική λειτουργία ελέγχου, προσθέστε τη σημαία "audit":
profile foo flags=(audit) { ... }
Για να ενεργοποιήσετε την εξαναγκαστική λειτουργία ελέγχου παγκοσμίως, εκτελέστε:
echo -n all > /sys/module/apparmor/parameters/audit
ή για να το ορίσετε κατά την εκκίνηση, προσθέστε:
apparmor.audit=all
ως παράμετρο εκκίνησης του πυρήνα.
Περιορισμός Ρυθμού Ελέγχου
Εάν το auditd δεν εκτελείται, για να αποφύγετε την απώλεια πάρα πολλών από τα επιπλέον μηνύματα καταγραφής, πιθανότατα θα πρέπει να απενεργοποιήσετε τον περιορισμό ρυθμού εκτελώντας:
echo 0 > /proc/sys/kernel/printk_ratelimit
Αλλά ακόμα και τότε, ο δακτύλιος μνήμης του πυρήνα ενδέχεται να υπερχειλίσει και ενδέχεται να χάσετε μηνύματα.
Διαφορετικά, εάν το auditd εκτελείται, δείτε τα auditd(8) και auditd.conf(5).
ΑΡΧΕΙΑ
/etc/apparmor.d/
/var/cache/apparmor/
/var/log/audit/audit.log
/var/log/messages
ΔΕΙΤΕ ΕΠΙΣΗΣ
apparmor_parser(8), aa_change_hat(2), apparmor.d(5), aa-autodep(1), clean(1), auditd(8), aa-unconfined(8), aa-enforce(1), aa-complain(1), και [https://wiki.apparmor.net].