AppArmor
Basic Information
Το AppArmor είναι μια βελτίωση του πυρήνα που έχει σχεδιαστεί για να περιορίζει τους πόρους που είναι διαθέσιμοι σε προγράμματα μέσω προφίλ ανά πρόγραμμα, εφαρμόζοντας αποτελεσματικά τον Υποχρεωτικό Έλεγχο Πρόσβασης (MAC) συνδέοντας τα χαρακτηριστικά ελέγχου πρόσβασης απευθείας σε προγράμματα αντί για χρήστες. Αυτό το σύστημα λειτουργεί με φόρτωση προφίλ στον πυρήνα, συνήθως κατά την εκκίνηση, και αυτά τα προφίλ καθορίζουν ποιους πόρους μπορεί να έχει πρόσβαση ένα πρόγραμμα, όπως συνδέσεις δικτύου, πρόσβαση σε ακατέργαστους υποδοχείς και άδειες αρχείων.
Υπάρχουν δύο λειτουργικά modes για τα προφίλ του AppArmor:
Λειτουργία Επιβολής: Αυτή η λειτουργία επιβάλλει ενεργά τις πολιτικές που ορίζονται μέσα στο προφίλ, αποκλείοντας ενέργειες που παραβιάζουν αυτές τις πολιτικές και καταγράφοντας οποιαδήποτε προσπάθεια παραβίασης τους μέσω συστημάτων όπως το syslog ή το auditd.
Λειτουργία Καταγγελίας: Σε αντίθεση με τη λειτουργία επιβολής, η λειτουργία καταγγελίας δεν αποκλείει ενέργειες που παραβιάζουν τις πολιτικές του προφίλ. Αντίθετα, καταγράφει αυτές τις προσπάθειες ως παραβιάσεις πολιτικής χωρίς να επιβάλλει περιορισμούς.
Components of AppArmor
Module Πυρήνα: Υπεύθυνο για την επιβολή πολιτικών.
Πολιτικές: Καθορίζουν τους κανόνες και τους περιορισμούς για τη συμπεριφορά του προγράμματος και την πρόσβαση στους πόρους.
Αναλυτής: Φορτώνει πολιτικές στον πυρήνα για επιβολή ή αναφορά.
Εργαλεία: Αυτά είναι προγράμματα σε λειτουργία χρήστη που παρέχουν μια διεπαφή για αλληλεπίδραση και διαχείριση του AppArmor.
Profiles path
Τα προφίλ του AppArmor αποθηκεύονται συνήθως στο /etc/apparmor.d/
Με το sudo aa-status
θα μπορείτε να καταγράψετε τα δυαδικά αρχεία που περιορίζονται από κάποιο προφίλ. Αν αλλάξετε το χαρακτήρα "/" με μια τελεία στο μονοπάτι κάθε καταγεγραμμένου δυαδικού αρχείου, θα αποκτήσετε το όνομα του προφίλ του AppArmor μέσα στον αναφερόμενο φάκελο.
Για παράδειγμα, ένα προφίλ apparmor για το /usr/bin/man θα βρίσκεται στο /etc/apparmor.d/usr.bin.man
Commands
Δημιουργία προφίλ
Για να υποδείξετε το επηρεαζόμενο εκτελέσιμο, επιτρέπονται απόλυτες διαδρομές και wildcard για τον καθορισμό αρχείων.
Για να υποδείξετε την πρόσβαση που θα έχει το δυαδικό αρχείο σε αρχεία, μπορούν να χρησιμοποιηθούν οι εξής έλεγχοι πρόσβασης:
r (ανάγνωση)
w (εγγραφή)
m (χάρτης μνήμης ως εκτελέσιμο)
k (κλείδωμα αρχείων)
l (δημιουργία σκληρών συνδέσμων)
ix (για να εκτελέσετε ένα άλλο πρόγραμμα με την πολιτική του νέου προγράμματος να κληρονομείται)
Px (εκτέλεση υπό άλλο προφίλ, μετά τον καθαρισμό του περιβάλλοντος)
Cx (εκτέλεση υπό ένα παιδικό προφίλ, μετά τον καθαρισμό του περιβάλλοντος)
Ux (εκτέλεση χωρίς περιορισμούς, μετά τον καθαρισμό του περιβάλλοντος)
Μεταβλητές μπορούν να οριστούν στα προφίλ και μπορούν να χειριστούν από έξω από το προφίλ. Για παράδειγμα: @{PROC} και @{HOME} (προσθέστε #include <tunables/global> στο αρχείο προφίλ)
Οι κανόνες άρνησης υποστηρίζονται για να παρακάμπτουν τους κανόνες επιτρεπόμενης πρόσβασης.
aa-genprof
Για να ξεκινήσετε εύκολα τη δημιουργία ενός προφίλ, το apparmor μπορεί να σας βοηθήσει. Είναι δυνατόν να κάνετε το apparmor να επιθεωρήσει τις ενέργειες που εκτελεί ένα δυαδικό αρχείο και στη συνέχεια να σας αφήσει να αποφασίσετε ποιες ενέργειες θέλετε να επιτρέψετε ή να αρνηθείτε. Απλά χρειάζεται να εκτελέσετε:
Στη συνέχεια, σε μια διαφορετική κονσόλα εκτελέστε όλες τις ενέργειες που θα εκτελεί συνήθως το δυαδικό αρχείο:
Στη συνέχεια, στην πρώτη κονσόλα πατήστε "s" και στη συνέχεια στις καταγεγραμμένες ενέργειες υποδείξτε αν θέλετε να αγνοήσετε, να επιτρέψετε ή οτιδήποτε άλλο. Όταν τελειώσετε πατήστε "f" και το νέο προφίλ θα δημιουργηθεί στο /etc/apparmor.d/path.to.binary
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/αρνηθείτε/οτιδήποτε άλλο
aa-easyprof
Μπορείτε επίσης να δημιουργήσετε ένα πρότυπο ενός προφίλ apparmor ενός δυαδικού με:
Σημειώστε ότι από προεπιλογή σε ένα δημιουργημένο προφίλ τίποτα δεν επιτρέπεται, οπότε όλα απορρίπτονται. Θα χρειαστεί να προσθέσετε γραμμές όπως /etc/passwd r,
για να επιτρέψετε την ανάγνωση του δυαδικού αρχείου /etc/passwd
, για παράδειγμα.
Μπορείτε στη συνέχεια να επιβάλετε το νέο προφίλ με
Modifying a profile from logs
Το παρακάτω εργαλείο θα διαβάσει τα αρχεία καταγραφής και θα ρωτήσει τον χρήστη αν θέλει να επιτρέψει ορισμένες από τις ανιχνευθείσες απαγορευμένες ενέργειες:
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/αρνηθείτε/οτιδήποτε
Διαχείριση ενός Προφίλ
Logs
Παράδειγμα AUDIT και DENIED logs από το /var/log/audit/audit.log του εκτελέσιμου service_bin
:
Μπορείτε επίσης να αποκτήσετε αυτές τις πληροφορίες χρησιμοποιώντας:
Apparmor in Docker
Σημειώστε πώς το προφίλ docker-profile του docker φορτώνεται από προεπιλογή:
Κατά προεπιλογή, το προφίλ docker-default του Apparmor δημιουργείται από https://github.com/moby/moby/tree/master/profiles/apparmor
Περίληψη προφίλ docker-default:
Πρόσβαση σε όλο το δικτύωμα
Καμία ικανότητα δεν έχει οριστεί (Ωστόσο, κάποιες ικανότητες θα προέρχονται από την συμπερίληψη βασικών κανόνων, δηλαδή #include <abstractions/base>)
Εγγραφή σε οποιοδήποτε /proc αρχείο δεν επιτρέπεται
Άλλες υποκαταλόγους/αρχεία του /proc και /sys έχουν αρνηθεί πρόσβαση σε ανάγνωση/εγγραφή/κλείδωμα/σύνδεση/εκτέλεση
Σύνδεση δεν επιτρέπεται
Ptrace μπορεί να εκτελείται μόνο σε μια διαδικασία που περιορίζεται από το ίδιο προφίλ apparmor
Μόλις τρέξετε ένα κοντέινερ docker, θα πρέπει να δείτε την παρακάτω έξοδο:
Σημειώστε ότι το apparmor θα μπλοκάρει ακόμη και τα δικαιώματα ικανοτήτων που παραχωρούνται στο κοντέινερ από προεπιλογή. Για παράδειγμα, θα είναι σε θέση να μπλοκάρει την άδεια εγγραφής μέσα στο /proc ακόμη και αν η ικανότητα SYS_ADMIN παραχωρείται επειδή από προεπιλογή το προφίλ apparmor του docker αρνείται αυτή την πρόσβαση:
Πρέπει να απενεργοποιήσετε το apparmor για να παρακάμψετε τους περιορισμούς του:
Σημειώστε ότι από προεπιλογή, το AppArmor θα απαγορεύει επίσης στο κοντέινερ να προσαρτήσει φακέλους από το εσωτερικό ακόμη και με ικανότητα SYS_ADMIN.
Σημειώστε ότι μπορείτε να προσθέσετε/αφαιρέσετε ικανότητες στο κοντέινερ docker (αυτό θα είναι ακόμα περιορισμένο από μεθόδους προστασίας όπως το AppArmor και το Seccomp):
--cap-add=SYS_ADMIN
δίνει ικανότηταSYS_ADMIN
--cap-add=ALL
δίνει όλες τις ικανότητες--cap-drop=ALL --cap-add=SYS_PTRACE
αφαιρεί όλες τις ικανότητες και δίνει μόνοSYS_PTRACE
Συνήθως, όταν ανακαλύπτετε ότι έχετε μια προνομιακή ικανότητα διαθέσιμη μέσα σε ένα docker κοντέινερ αλλά κάποιο μέρος της εκμετάλλευσης δεν λειτουργεί, αυτό θα είναι επειδή το docker apparmor θα το αποτρέπει.
Παράδειγμα
(Παράδειγμα από εδώ)
Για να απεικονίσω τη λειτουργικότητα του AppArmor, δημιούργησα ένα νέο προφίλ Docker “mydocker” με την παρακάτω γραμμή προστιθέμενη:
Για να ενεργοποιήσουμε το προφίλ, πρέπει να κάνουμε τα εξής:
Για να καταγράψουμε τα προφίλ, μπορούμε να εκτελέσουμε την παρακάτω εντολή. Η παρακάτω εντολή καταγράφει το νέο μου προφίλ AppArmor.
Όπως φαίνεται παρακάτω, λαμβάνουμε σφάλμα όταν προσπαθούμε να αλλάξουμε το “/etc/” καθώς το προφίλ AppArmor εμποδίζει την πρόσβαση εγγραφής στο “/etc”.
AppArmor Docker Bypass1
Μπορείτε να βρείτε ποιο προφίλ apparmor εκτελεί ένα κοντέινερ χρησιμοποιώντας:
Τότε, μπορείτε να εκτελέσετε την παρακάτω γραμμή για να βρείτε το ακριβές προφίλ που χρησιμοποιείται:
In την περίεργη περίπτωση που μπορείτε να τροποποιήσετε το προφίλ apparmor docker και να το επαναφορτώσετε. Μπορείτε να αφαιρέσετε τους περιορισμούς και να τους "παρακάμψετε".
AppArmor Docker Bypass2
Το AppArmor είναι βασισμένο σε διαδρομές, αυτό σημαίνει ότι ακόμη και αν μπορεί να προστατεύει αρχεία μέσα σε έναν φάκελο όπως το /proc
, αν μπορείτε να ρυθμίσετε πώς θα εκτελείται το κοντέινερ, μπορείτε να τοποθετήσετε τον φάκελο proc του host μέσα σε /host/proc
και δεν θα προστατεύεται πλέον από το AppArmor.
AppArmor Shebang Bypass
Στο αυτό το σφάλμα μπορείτε να δείτε ένα παράδειγμα του πώς ακόμη και αν αποτρέπετε την εκτέλεση του perl με ορισμένους πόρους, αν απλώς δημιουργήσετε ένα shell script καθορίζοντας στην πρώτη γραμμή #!/usr/bin/perl
και εκτελέσετε το αρχείο απευθείας, θα μπορείτε να εκτελέσετε ό,τι θέλετε. Π.χ.:
Last updated