AppArmor
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Το AppArmor είναι μια βελτίωση του πυρήνα που έχει σχεδιαστεί για να περιορίζει τους πόρους που είναι διαθέσιμοι σε προγράμματα μέσω προφίλ ανά πρόγραμμα, εφαρμόζοντας αποτελεσματικά τον Υποχρεωτικό Έλεγχο Πρόσβασης (MAC) συνδέοντας τα χαρακτηριστικά ελέγχου πρόσβασης απευθείας σε προγράμματα αντί για χρήστες. Αυτό το σύστημα λειτουργεί φορτώνοντας προφίλ στον πυρήνα, συνήθως κατά την εκκίνηση, και αυτά τα προφίλ καθορίζουν ποιους πόρους μπορεί να έχει πρόσβαση ένα πρόγραμμα, όπως συνδέσεις δικτύου, πρόσβαση σε ακατέργαστους υποδοχείς και άδειες αρχείων.
Υπάρχουν δύο λειτουργικά modes για τα προφίλ του AppArmor:
Λειτουργία Επιβολής: Αυτή η λειτουργία επιβάλλει ενεργά τις πολιτικές που ορίζονται μέσα στο προφίλ, αποκλείοντας ενέργειες που παραβιάζουν αυτές τις πολιτικές και καταγράφοντας οποιαδήποτε προσπάθεια παραβίασης τους μέσω συστημάτων όπως το syslog ή το auditd.
Λειτουργία Καταγγελίας: Σε αντίθεση με τη λειτουργία επιβολής, η λειτουργία καταγγελίας δεν αποκλείει ενέργειες που αντιβαίνουν στις πολιτικές του προφίλ. Αντίθετα, καταγράφει αυτές τις προσπάθειες ως παραβιάσεις πολιτικής χωρίς να επιβάλλει περιορισμούς.
Module Πυρήνα: Υπεύθυνο για την επιβολή των πολιτικών.
Πολιτικές: Καθορίζουν τους κανόνες και τους περιορισμούς για τη συμπεριφορά του προγράμματος και την πρόσβαση στους πόρους.
Αναλυτής: Φορτώνει τις πολιτικές στον πυρήνα για επιβολή ή αναφορά.
Εργαλεία: Αυτά είναι προγράμματα σε λειτουργία χρήστη που παρέχουν μια διεπαφή για αλληλεπίδραση και διαχείριση του AppArmor.
Τα προφίλ του AppArmor αποθηκεύονται συνήθως στο /etc/apparmor.d/
Με το sudo aa-status
θα μπορείτε να καταγράψετε τα δυαδικά αρχεία που περιορίζονται από κάποιο προφίλ. Αν αλλάξετε το χαρακτήρα "/" με μια τελεία στο μονοπάτι κάθε καταγεγραμμένου δυαδικού αρχείου, θα αποκτήσετε το όνομα του προφίλ του AppArmor μέσα στον αναφερόμενο φάκελο.
Για παράδειγμα, ένα προφίλ apparmor για το /usr/bin/man θα βρίσκεται στο /etc/apparmor.d/usr.bin.man
Για να υποδείξετε το επηρεαζόμενο εκτελέσιμο, επιτρέπονται απόλυτες διαδρομές και wildcard για τον καθορισμό αρχείων.
Για να υποδείξετε την πρόσβαση που θα έχει το δυαδικό αρχείο σε αρχεία, μπορούν να χρησιμοποιηθούν οι εξής έλεγχοι πρόσβασης:
r (ανάγνωση)
w (εγγραφή)
m (χάρτης μνήμης ως εκτελέσιμο)
k (κλείδωμα αρχείων)
l (δημιουργία σκληρών συνδέσμων)
ix (για να εκτελέσετε ένα άλλο πρόγραμμα με την πολιτική του νέου προγράμματος να κληρονομείται)
Px (εκτέλεση υπό άλλο προφίλ, μετά τον καθαρισμό του περιβάλλοντος)
Cx (εκτέλεση υπό προφίλ παιδιού, μετά τον καθαρισμό του περιβάλλοντος)
Ux (εκτέλεση χωρίς περιορισμούς, μετά τον καθαρισμό του περιβάλλοντος)
Μεταβλητές μπορούν να οριστούν στα προφίλ και μπορούν να χειριστούν από έξω από το προφίλ. Για παράδειγμα: @{PROC} και @{HOME} (προσθέστε #include <tunables/global> στο αρχείο προφίλ)
Οι κανόνες άρνησης υποστηρίζονται για να παρακάμψουν τους κανόνες επιτρεπόμενης πρόσβασης.
Για να ξεκινήσετε εύκολα τη δημιουργία ενός προφίλ, το apparmor μπορεί να σας βοηθήσει. Είναι δυνατόν να κάνετε το apparmor να επιθεωρήσει τις ενέργειες που εκτελεί ένα δυαδικό αρχείο και στη συνέχεια να σας αφήσει να αποφασίσετε ποιες ενέργειες θέλετε να επιτρέψετε ή να αρνηθείτε. Απλώς χρειάζεται να εκτελέσετε:
Τότε, σε μια διαφορετική κονσόλα εκτελέστε όλες τις ενέργειες που θα εκτελεί συνήθως το δυαδικό αρχείο:
Στη συνέχεια, στην πρώτη κονσόλα πατήστε "s" και στη συνέχεια στις καταγεγραμμένες ενέργειες υποδείξτε αν θέλετε να αγνοήσετε, να επιτρέψετε ή οτιδήποτε άλλο. Όταν τελειώσετε πατήστε "f" και το νέο προφίλ θα δημιουργηθεί στο /etc/apparmor.d/path.to.binary
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/αρνηθείτε/οτιδήποτε άλλο
Μπορείτε επίσης να δημιουργήσετε ένα πρότυπο ενός προφίλ apparmor ενός δυαδικού με:
Σημειώστε ότι από προεπιλογή σε ένα δημιουργημένο προφίλ τίποτα δεν επιτρέπεται, οπότε όλα απορρίπτονται. Θα χρειαστεί να προσθέσετε γραμμές όπως /etc/passwd r,
για να επιτρέψετε την ανάγνωση του δυαδικού /etc/passwd
, για παράδειγμα.
Μπορείτε στη συνέχεια να επιβάλετε το νέο προφίλ με
Το παρακάτω εργαλείο θα διαβάσει τα αρχεία καταγραφής και θα ρωτήσει τον χρήστη αν θέλει να επιτρέψει ορισμένες από τις ανιχνευθείσες απαγορευμένες ενέργειες:
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/αρνηθείτε/οτιδήποτε
Παράδειγμα AUDIT και DENIED logs από το /var/log/audit/audit.log του εκτελέσιμου service_bin
:
Μπορείτε επίσης να αποκτήσετε αυτές τις πληροφορίες χρησιμοποιώντας:
Σημειώστε πώς το προφίλ 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 container, θα πρέπει να δείτε την παρακάτω έξοδο:
Σημειώστε ότι το 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 εκτελεί ένα κοντέινερ χρησιμοποιώντας:
Τότε, μπορείτε να εκτελέσετε την παρακάτω γραμμή για να βρείτε το ακριβές προφίλ που χρησιμοποιείται:
In the weird case you can modify the apparmor docker profile and reload it. You could remove the restrictions and "bypass" them.
AppArmor είναι βασισμένο σε διαδρομές, αυτό σημαίνει ότι ακόμα και αν μπορεί να προστατεύει αρχεία μέσα σε έναν φάκελο όπως /proc
αν μπορείς να ρυθμίσεις πώς θα εκτελείται το κοντέινερ, θα μπορούσες να τοποθετήσεις τον φάκελο proc του host μέσα σε /host/proc
και δεν θα προστατεύεται πλέον από το AppArmor.
In this bug you can see an example of how even if you are preventing perl to be run with certain resources, if you just create a a shell script specifying in the first line #!/usr/bin/perl
and you execute the file directly, you will be able to execute whatever you want. E.g.:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)