macOS FS Tricks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Δικαιώματα σε έναν φάκελο:
ανάγνωση - μπορείτε να καταγράψετε τις καταχωρήσεις του φακέλου
εγγραφή - μπορείτε να διαγράψετε/γράψετε αρχεία στον φάκελο και μπορείτε να διαγράψετε άδειους φακέλους.
Αλλά δεν μπορείτε να διαγράψετε/τροποποιήσετε μη άδειους φακέλους εκτός αν έχετε δικαιώματα εγγραφής σε αυτόν.
Δεν μπορείτε να τροποποιήσετε το όνομα ενός φακέλου εκτός αν τον κατέχετε.
εκτέλεση - σας επιτρέπεται να περπατήσετε στον φάκελο - αν δεν έχετε αυτό το δικαίωμα, δεν μπορείτε να έχετε πρόσβαση σε κανένα αρχείο μέσα σε αυτόν, ή σε οποιουσδήποτε υποφακέλους.
Πώς να αντικαταστήσετε ένα αρχείο/φάκελο που ανήκει στον root, αλλά:
Ένας γονικός ιδιοκτήτης φακέλου στη διαδρομή είναι ο χρήστης
Ένας γονικός ιδιοκτήτης φακέλου στη διαδρομή είναι μια ομάδα χρηστών με δικαιώματα εγγραφής
Μια ομάδα χρηστών έχει δικαιώματα εγγραφής στο αρχείο
Με οποιονδήποτε από τους προηγούμενους συνδυασμούς, ένας επιτιθέμενος θα μπορούσε να εισάγει έναν συμβολικό/σκληρό σύνδεσμο στην αναμενόμενη διαδρομή για να αποκτήσει μια προνομιακή αυθαίρετη εγγραφή.
Αν υπάρχουν αρχεία σε έναν φάκελο όπου μόνο ο root έχει πρόσβαση R+X, αυτά είναι μη προσβάσιμα σε κανέναν άλλο. Έτσι, μια ευπάθεια που επιτρέπει να μετακινήσετε ένα αρχείο που είναι αναγνώσιμο από έναν χρήστη, το οποίο δεν μπορεί να διαβαστεί λόγω αυτού του περιορισμού, από αυτόν τον φάκελο σε έναν διαφορετικό, θα μπορούσε να καταχραστεί για να διαβάσει αυτά τα αρχεία.
Παράδειγμα σε: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Αν μια προνομιακή διαδικασία γράφει δεδομένα σε αρχείο που θα μπορούσε να ελεγχθεί από έναν χρήστη με χαμηλότερα προνόμια, ή που θα μπορούσε να έχει δημιουργηθεί προηγουμένως από έναν χρήστη με χαμηλότερα προνόμια. Ο χρήστης θα μπορούσε απλά να δείξει σε ένα άλλο αρχείο μέσω ενός Συμβολικού ή Σκληρού συνδέσμου, και η προνομιακή διαδικασία θα γράψει σε αυτό το αρχείο.
Ελέγξτε σε άλλες ενότητες όπου ένας επιτιθέμενος θα μπορούσε να καταχραστεί μια αυθαίρετη εγγραφή για να κλιμακώσει τα προνόμια.
Αρχεία με κατάληξη .fileloc
μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά αρχεία, έτσι όταν ανοίγονται, η εφαρμογή/δυαδικό αρχείο θα είναι αυτό που θα εκτελείται.
Παράδειγμα:
Αν μπορείτε να κάνετε μια διαδικασία να ανοίξει ένα αρχείο ή έναν φάκελο με υψηλά δικαιώματα, μπορείτε να εκμεταλλευτείτε το crontab
για να ανοίξετε ένα αρχείο στο /etc/sudoers.d
με EDITOR=exploit.py
, έτσι ώστε το exploit.py
να αποκτήσει το FD στο αρχείο μέσα στο /etc/sudoers
και να το εκμεταλλευτεί.
Για παράδειγμα: https://youtu.be/f1HA5QhLQ7Y?t=21098
Αν ένα αρχείο/φάκελος έχει αυτό το αμετάβλητο χαρακτηριστικό, δεν θα είναι δυνατή η προσθήκη xattr σε αυτό.
Ένα devfs mount δεν υποστηρίζει xattr, περισσότερες πληροφορίες στο CVE-2023-32364
Αυτή η ACL αποτρέπει την προσθήκη xattrs
στο αρχείο
AppleDouble μορφή αρχείου αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACEs του.
Στον κώδικα πηγής είναι δυνατόν να δούμε ότι η κείμενη αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται com.apple.acl.text
θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου AppleDouble με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή:
Έλεγξε την αρχική αναφορά για περισσότερες πληροφορίες.
Για να το αναπαραγάγουμε, πρώτα πρέπει να αποκτήσουμε τη σωστή συμβολοσειρά acl:
(Note that even if this works the sandbox write the quarantine xattr before)
Not really needed but I leave it there just in case:
macOS xattr-acls extra stuffΤα πακέτα περιέχουν το αρχείο _CodeSignature/CodeResources
το οποίο περιέχει το hash κάθε μεμονωμένου αρχείου στο πακέτο. Σημειώστε ότι το hash του CodeResources είναι επίσης ενσωματωμένο στο εκτελέσιμο, οπότε δεν μπορούμε να ασχοληθούμε με αυτό.
Ωστόσο, υπάρχουν κάποια αρχεία των οποίων η υπογραφή δεν θα ελεγχθεί, αυτά έχουν το κλειδί omit στο plist, όπως:
Είναι δυνατόν να υπολογίσετε την υπογραφή ενός πόρου από το cli με:
Ένας χρήστης μπορεί να τοποθετήσει ένα προσαρμοσμένο dmg που έχει δημιουργηθεί ακόμη και πάνω από ορισμένους υπάρχοντες φακέλους. Έτσι μπορείτε να δημιουργήσετε ένα προσαρμοσμένο πακέτο dmg με προσαρμοσμένο περιεχόμενο:
Συνήθως, το macOS τοποθετεί δίσκους επικοινωνώντας με την υπηρεσία Mach com.apple.DiskArbitration.diskarbitrationd
(παρέχεται από το /usr/libexec/diskarbitrationd
). Αν προσθέσετε την παράμετρο -d
στο plist αρχείο των LaunchDaemons και επανεκκινήσετε, θα αποθηκεύσει τα logs στο /var/log/diskarbitrationd.log
.
Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε εργαλεία όπως το hdik
και το hdiutil
για να επικοινωνήσετε απευθείας με το kext com.apple.driver.DiskImages
.
Αν το script σας μπορεί να ερμηνευθεί ως shell script, μπορείτε να αντικαταστήσετε το /etc/periodic/daily/999.local
shell script που θα ενεργοποιείται κάθε μέρα.
Μπορείτε να προσομοιώσετε μια εκτέλεση αυτού του script με: sudo periodic daily
Γράψτε μια αυθαίρετη LaunchDaemon όπως /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
με ένα plist που εκτελεί ένα αυθαίρετο script όπως:
Απλά δημιουργήστε το σενάριο /Applications/Scripts/privesc.sh
με τις εντολές που θα θέλατε να εκτελέσετε ως root.
Εάν έχετε τυχαία εγγραφή, μπορείτε να δημιουργήσετε ένα αρχείο μέσα στον φάκελο /etc/sudoers.d/
που να σας παραχωρεί sudo δικαιώματα.
Το αρχείο /etc/paths
είναι ένα από τα κύρια μέρη που γεμίζουν τη μεταβλητή περιβάλλοντος PATH. Πρέπει να είστε root για να το αντικαταστήσετε, αλλά αν ένα σενάριο από privileged process εκτελεί κάποια εντολή χωρίς την πλήρη διαδρομή, μπορεί να μπορείτε να το παρακάμψετε τροποποιώντας αυτό το αρχείο.
Μπορείτε επίσης να γράψετε αρχεία στο /etc/paths.d
για να φορτώσετε νέους φακέλους στη μεταβλητή περιβάλλοντος PATH
.
Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον root και είναι εγγράψιμο από εμένα (κώδικας από εδώ). Αυτό μπορεί επίσης να λειτουργήσει ως privesc:
Η κοινή μνήμη POSIX επιτρέπει στις διεργασίες σε λειτουργικά συστήματα συμβατά με POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διεργασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός αντικειμένου κοινής μνήμης με shm_open()
, την ρύθμιση του μεγέθους του με ftruncate()
, και την αντιστοίχιση του στη διεύθυνση μνήμης της διεργασίας χρησιμοποιώντας mmap()
. Οι διεργασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για τη διαχείριση ταυτόχρονων προσβάσεων και την αποφυγή διαφθοράς δεδομένων, χρησιμοποιούνται συχνά μηχανισμοί συγχρονισμού όπως οι mutexes ή οι semaphores. Τέλος, οι διεργασίες αποδεσμεύουν και κλείνουν την κοινή μνήμη με munmap()
και close()
, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με shm_unlink()
. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποδοτική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διεργασίες χρειάζεται να έχουν γρήγορη πρόσβαση σε κοινά δεδομένα.
macOSCguarded descriptors είναι μια λειτουργία ασφαλείας που εισήχθη στο macOS για να ενισχύσει την ασφάλεια και την αξιοπιστία των λειτουργιών περιγραφής αρχείων σε εφαρμογές χρήστη. Αυτοί οι προστατευμένοι περιγραφείς παρέχουν έναν τρόπο για να συσχετίσουν συγκεκριμένους περιορισμούς ή "φύλακες" με περιγραφείς αρχείων, οι οποίοι επιβάλλονται από τον πυρήνα.
Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφαλείας όπως η μη εξουσιοδοτημένη πρόσβαση σε αρχεία ή οι συνθήκες αγώνα. Αυτές οι ευπάθειες συμβαίνουν όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας σε ένα άλλο ευάλωτο νήμα πρόσβαση σε αυτήν ή όταν ένας περιγραφέας αρχείου κληρονομείται από μια ευάλωτη διεργασία παιδί. Ορισμένες συναρτήσεις που σχετίζονται με αυτή τη λειτουργικότητα είναι:
guarded_open_np
: Άνοιγμα ενός FD με έναν φύλακα
guarded_close_np
: Κλείσιμο του
change_fdguard_np
: Αλλαγή σημαιών φύλακα σε έναν περιγραφέα (ακόμη και αφαίρεση της προστασίας φύλακα)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)