macOS Files, Folders, Binaries & Memory
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)
/Applications: Οι εγκατεστημένες εφαρμογές θα πρέπει να βρίσκονται εδώ. Όλοι οι χρήστες θα μπορούν να έχουν πρόσβαση σε αυτές.
/bin: Εκτελέσιμα αρχεία γραμμής εντολών
/cores: Αν υπάρχει, χρησιμοποιείται για την αποθήκευση core dumps
/dev: Όλα αντιμετωπίζονται ως αρχεία, οπότε μπορεί να δείτε υλικοτεχνικές συσκευές αποθηκευμένες εδώ.
/etc: Αρχεία ρυθμίσεων
/Library: Πολλοί υποκατάλογοι και αρχεία που σχετίζονται με προτιμήσεις, cache και logs μπορούν να βρεθούν εδώ. Ένας φάκελος Library υπάρχει στη ρίζα και σε κάθε κατάλογο χρήστη.
/private: Μη τεκμηριωμένο αλλά πολλοί από τους αναφερόμενους φακέλους είναι συμβολικοί σύνδεσμοι προς τον ιδιωτικό κατάλογο.
/sbin: Βασικά εκτελέσιμα συστήματος (σχετικά με τη διαχείριση)
/System: Αρχεία για να λειτουργεί το OS X. Θα βρείτε κυρίως μόνο αρχεία συγκεκριμένα της Apple εδώ (όχι τρίτων).
/tmp: Τα αρχεία διαγράφονται μετά από 3 ημέρες (είναι ένας μαλακός σύνδεσμος προς /private/tmp)
/Users: Κατάλογος αρχικής για τους χρήστες.
/usr: Ρυθμίσεις και εκτελέσιμα συστήματος
/var: Αρχεία καταγραφής
/Volumes: Οι προσαρτημένοι δίσκοι θα εμφανίζονται εδώ.
/.vol: Εκτελώντας stat a.txt
αποκτάτε κάτι σαν 16777223 7545753 -rw-r--r-- 1 username wheel ...
όπου ο πρώτος αριθμός είναι ο αριθμός ταυτότητας του τόμου όπου υπάρχει το αρχείο και ο δεύτερος είναι ο αριθμός inode. Μπορείτε να αποκτήσετε το περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας cat /.vol/16777223/7545753
Οι εφαρμογές συστήματος βρίσκονται κάτω από /System/Applications
Οι εγκατεστημένες εφαρμογές συνήθως εγκαθίστανται στο /Applications
ή στο ~/Applications
Δεδομένα εφαρμογών μπορούν να βρεθούν στο /Library/Application Support
για τις εφαρμογές που εκτελούνται ως root και στο ~/Library/Application Support
για τις εφαρμογές που εκτελούνται ως χρήστης.
Οι daemons τρίτων που χρειάζονται να εκτελούνται ως root συνήθως βρίσκονται στο /Library/PrivilegedHelperTools/
Οι sandboxed εφαρμογές είναι χαρτογραφημένες στον φάκελο ~/Library/Containers
. Κάθε εφαρμογή έχει έναν φάκελο ονομασμένο σύμφωνα με το ID bundle της εφαρμογής (com.apple.Safari
).
Ο kernel βρίσκεται στο /System/Library/Kernels/kernel
Οι επεκτάσεις kernel της Apple βρίσκονται στο /System/Library/Extensions
Οι επεκτάσεις kernel τρίτων αποθηκεύονται στο /Library/Extensions
Το MacOS αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε πολλές θέσεις:
macOS Sensitive Locations & Interesting Daemons.dmg
: Τα αρχεία Apple Disk Image είναι πολύ συχνά για εγκαταστάτες.
.kext
: Πρέπει να ακολουθεί μια συγκεκριμένη δομή και είναι η έκδοση OS X ενός οδηγού. (είναι ένα bundle)
.plist
: Γνωστό και ως property list αποθηκεύει πληροφορίες σε XML ή δυαδική μορφή.
Μπορεί να είναι XML ή δυαδικό. Τα δυαδικά μπορούν να διαβαστούν με:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plsit
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: Εφαρμογές της Apple που ακολουθούν τη δομή καταλόγου (είναι ένα bundle).
.dylib
: Δυναμικές βιβλιοθήκες (όπως τα αρχεία DLL των Windows)
.pkg
: Είναι τα ίδια με το xar (eXtensible Archive format). Η εντολή εγκατάστασης μπορεί να χρησιμοποιηθεί για την εγκατάσταση των περιεχομένων αυτών των αρχείων.
.DS_Store
: Αυτό το αρχείο βρίσκεται σε κάθε κατάλογο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του καταλόγου.
.Spotlight-V100
: Αυτός ο φάκελος εμφανίζεται στον ριζικό κατάλογο κάθε τόμου στο σύστημα.
.metadata_never_index
: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός τόμου, το Spotlight δεν θα ευρετηριάσει αυτόν τον τόμο.
.noindex
: Αρχεία και φάκελοι με αυτήν την επέκταση δεν θα ευρετηριαστούν από το Spotlight.
.sdef
: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατόν να αλληλεπιδράσετε με την εφαρμογή από ένα AppleScript.
Ένα bundle είναι ένας κατάλογος που φαίνεται σαν αντικείμενο στο Finder (ένα παράδειγμα bundle είναι τα αρχεία *.app
).
Στο macOS (και iOS) όλες οι κοινές βιβλιοθήκες συστήματος, όπως τα frameworks και τα dylibs, είναι συνδυασμένες σε ένα μόνο αρχείο, που ονομάζεται dyld shared cache. Αυτό βελτιώνει την απόδοση, καθώς ο κώδικας μπορεί να φορτωθεί πιο γρήγορα.
Αυτό βρίσκεται στο macOS στο /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
και σε παλαιότερες εκδόσεις μπορεί να μπορείτε να βρείτε την shared cache στο /System/Library/dyld/
.
Στο iOS μπορείτε να τα βρείτε στο /System/Library/Caches/com.apple.dyld/
.
Παρόμοια με την dyld shared cache, ο kernel και οι επεκτάσεις kernel είναι επίσης συμπιεσμένες σε μια cache kernel, η οποία φορτώνεται κατά την εκκίνηση.
Για να εξαγάγετε τις βιβλιοθήκες από το ενιαίο αρχείο dylib shared cache, ήταν δυνατό να χρησιμοποιήσετε το εκτελέσιμο dyld_shared_cache_util το οποίο μπορεί να μην λειτουργεί σήμερα, αλλά μπορείτε επίσης να χρησιμοποιήσετε dyldextractor:
Σημειώστε ότι ακόμη και αν το εργαλείο dyld_shared_cache_util
δεν λειτουργεί, μπορείτε να περάσετε το shared dyld binary στο Hopper και ο Hopper θα είναι σε θέση να αναγνωρίσει όλες τις βιβλιοθήκες και να σας επιτρέψει να επιλέξετε ποια θέλετε να εξετάσετε:
Ορισμένοι extractor δεν θα λειτουργήσουν καθώς οι dylibs είναι προ-συνδεδεμένες με σκληρά κωδικοποιημένες διευθύνσεις και επομένως μπορεί να πηδούν σε άγνωστες διευθύνσεις.
Είναι επίσης δυνατό να κατεβάσετε την Shared Library Cache άλλων *OS συσκευών στο macos χρησιμοποιώντας έναν εξομοιωτή στο Xcode. Θα κατεβούν μέσα: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, όπως: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
dyld
χρησιμοποιεί την syscall shared_region_check_np
για να γνωρίζει αν το SLC έχει χαρτογραφηθεί (το οποίο επιστρέφει τη διεύθυνση) και shared_region_map_and_slide_np
για να χαρτογραφήσει το SLC.
Σημειώστε ότι ακόμη και αν το SLC έχει μετατοπιστεί κατά την πρώτη χρήση, όλες οι διεργασίες χρησιμοποιούν το ίδιο αντίγραφο, το οποίο εξαλείφει την προστασία ASLR αν ο επιτιθέμενος ήταν σε θέση να εκτελέσει διεργασίες στο σύστημα. Αυτό εκμεταλλεύτηκε στο παρελθόν και διορθώθηκε με τον pager κοινής περιοχής.
Τα branch pools είναι μικρές Mach-O dylibs που δημιουργούν μικρούς χώρους μεταξύ των χαρτογραφήσεων εικόνας, καθιστώντας αδύνατη την παρεμβολή στις λειτουργίες.
Χρησιμοποιώντας τις μεταβλητές περιβάλλοντος:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Αυτό θα επιτρέψει τη φόρτωση μιας νέας κοινής βιβλιοθήκης cache
DYLD_SHARED_CACHE_DIR=avoid
και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με symlinks στην κοινή cache με τις πραγματικές (θα χρειαστεί να τις εξαγάγετε)
Σε έναν φάκελο, η ανάγνωση επιτρέπει να τον καταγράφετε, η γραφή επιτρέπει να διαγράφετε και να γράφετε αρχεία σε αυτόν, και η εκτέλεση επιτρέπει να περνάτε τον κατάλογο. Έτσι, για παράδειγμα, ένας χρήστης με άδεια ανάγνωσης σε ένα αρχείο μέσα σε έναν κατάλογο όπου δεν έχει άδεια εκτέλεσης δεν θα μπορεί να διαβάσει το αρχείο.
Υπάρχουν ορισμένες σημαίες που μπορούν να οριστούν στα αρχεία που θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να ελέγξετε τις σημαίες των αρχείων μέσα σε έναν κατάλογο με ls -lO /path/directory
uchg
: Γνωστή ως σημαία uchange θα αποτρέψει οποιαδήποτε ενέργεια αλλαγής ή διαγραφής του αρχείου. Για να την ορίσετε κάντε: chflags uchg file.txt
Ο χρήστης root θα μπορούσε να αφαιρέσει τη σημαία και να τροποποιήσει το αρχείο
restricted
: Αυτή η σημαία καθιστά το αρχείο προστατευμένο από SIP (δεν μπορείτε να προσθέσετε αυτή τη σημαία σε ένα αρχείο).
Sticky bit
: Αν ένας κατάλογος έχει sticky bit, μόνο ο ιδιοκτήτης του καταλόγου ή ο root μπορεί να μετονομάσει ή να διαγράψει αρχεία. Συνήθως αυτό ορίζεται στον κατάλογο /tmp για να αποτρέψει τους κανονικούς χρήστες από το να διαγράψουν ή να μετακινήσουν τα αρχεία άλλων χρηστών.
Όλες οι σημαίες μπορούν να βρεθούν στο αρχείο sys/stat.h
(βρείτε το χρησιμοποιώντας mdfind stat.h | grep stat.h
) και είναι:
UF_SETTABLE
0x0000ffff: Μάσκα μεταβλητών που αλλάζουν από τον ιδιοκτήτη.
UF_NODUMP
0x00000001: Μην εκφορτώνετε το αρχείο.
UF_IMMUTABLE
0x00000002: Το αρχείο δεν μπορεί να αλλάξει.
UF_APPEND
0x00000004: Οι εγγραφές στο αρχείο μπορούν να προστίθενται μόνο.
UF_OPAQUE
0x00000008: Ο κατάλογος είναι αδιαφανής σε σχέση με την ένωση.
UF_COMPRESSED
0x00000020: Το αρχείο είναι συμπιεσμένο (ορισμένα συστήματα αρχείων).
UF_TRACKED
0x00000040: Καμία ειδοποίηση για διαγραφές/μετονομασίες για αρχεία με αυτή τη ρύθμιση.
UF_DATAVAULT
0x00000080: Απαιτείται δικαίωμα για ανάγνωση και εγγραφή.
UF_HIDDEN
0x00008000: Υπόδειξη ότι αυτό το στοιχείο δεν πρέπει να εμφανίζεται σε GUI.
SF_SUPPORTED
0x009f0000: Μάσκα υποστηριζόμενων σημάτων superuser.
SF_SETTABLE
0x3fff0000: Μάσκα μεταβλητών που αλλάζουν από superuser.
SF_SYNTHETIC
0xc0000000: Μάσκα συστημικών αναγνωρίσιμων σημάτων μόνο για ανάγνωση.
SF_ARCHIVED
0x00010000: Το αρχείο είναι αρχειοθετημένο.
SF_IMMUTABLE
0x00020000: Το αρχείο δεν μπορεί να αλλάξει.
SF_APPEND
0x00040000: Οι εγγραφές στο αρχείο μπορούν να προστίθενται μόνο.
SF_RESTRICTED
0x00080000: Απαιτείται δικαίωμα για εγγραφή.
SF_NOUNLINK
0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, μετονομαστεί ή τοποθετηθεί.
SF_FIRMLINK
0x00800000: Το αρχείο είναι firmlink.
SF_DATALESS
0x40000000: Το αρχείο είναι αντικείμενο χωρίς δεδομένα.
Οι ACLs αρχείων περιέχουν ACE (Εγγραφές Ελέγχου Πρόσβασης) όπου μπορούν να ανατεθούν πιο λεπτομερείς άδειες σε διαφορετικούς χρήστες.
Είναι δυνατό να παραχωρήσετε σε έναν κατάλογο αυτές τις άδειες: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
Και σε ένα αρχείο: read
, write
, append
, execute
.
Όταν το αρχείο περιέχει ACLs θα βρείτε ένα "+" όταν καταγράφετε τις άδειες όπως σε:
Μπορείτε να διαβάσετε τα ACLs του αρχείου με:
Μπορείτε να βρείτε όλα τα αρχεία με ACLs με (αυτό είναι πολύ αργό):
Οι εκτεταμένες ιδιότητες έχουν ένα όνομα και οποιαδήποτε επιθυμητή τιμή, και μπορούν να προβληθούν χρησιμοποιώντας ls -@
και να τροποποιηθούν χρησιμοποιώντας την εντολή xattr
. Ορισμένες κοινές εκτεταμένες ιδιότητες είναι:
com.apple.resourceFork
: Συμβατότητα πόρου. Επίσης ορατό ως filename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Μηχανισμός καραντίνας Gatekeeper (III/6)
metadata:*
: MacOS: διάφορα μεταδεδομένα, όπως _backup_excludeItem
, ή kMD*
com.apple.lastuseddate
(#PS): Η τελευταία ημερομηνία χρήσης αρχείου
com.apple.FinderInfo
: MacOS: Πληροφορίες Finder (π.χ., χρωματικές ετικέτες)
com.apple.TextEncoding
: Προσδιορίζει την κωδικοποίηση κειμένου των αρχείων ASCII
com.apple.logd.metadata
: Χρησιμοποιείται από το logd σε αρχεία στο /var/db/diagnostics
com.apple.genstore.*
: Γενετική αποθήκευση (/.DocumentRevisions-V100
στη ρίζα του συστήματος αρχείων)
com.apple.rootless
: MacOS: Χρησιμοποιείται από την Προστασία Ακεραιότητας Συστήματος για την επισήμανση αρχείου (III/10)
com.apple.uuidb.boot-uuid
: Σημάνσεις logd των εποχών εκκίνησης με μοναδικό UUID
com.apple.decmpfs
: MacOS: Διαφανής συμπίεση αρχείων (II/7)
com.apple.cprotect
: *OS: Δεδομένα κρυπτογράφησης ανά αρχείο (III/11)
com.apple.installd.*
: *OS: Μεταδεδομένα που χρησιμοποιούνται από το installd, π.χ., installType
, uniqueInstallID
Αυτή είναι μια μέθοδος για να αποκτήσετε Εναλλακτικά Ρεύματα Δεδομένων σε MacOS μηχανές. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε μια εκτεταμένη ιδιότητα που ονομάζεται com.apple.ResourceFork μέσα σε ένα αρχείο αποθηκεύοντάς το σε file/..namedfork/rsrc.
Μπορείτε να βρείτε όλα τα αρχεία που περιέχουν αυτό το επεκταμένο χαρακτηριστικό με:
Η επεκταμένη ιδιότητα com.apple.decmpfs
υποδεικνύει ότι το αρχείο αποθηκεύεται κρυπτογραφημένο, το ls -l
θα αναφέρει μέγεθος 0 και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτή την ιδιότητα. Όποτε το αρχείο προσπελάζεται, θα αποκρυπτογραφείται στη μνήμη.
Αυτή η ιδιότητα μπορεί να φαίνεται με το ls -lO
υποδεικνύοντας ότι είναι συμπιεσμένο επειδή τα συμπιεσμένα αρχεία είναι επίσης επισημασμένα με την ετικέτα UF_COMPRESSED
. Εάν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η ετικέτα με chflags nocompressed </path/to/file>
, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και επομένως δεν θα μπορεί να αποσυμπιέσει και να προσπελάσει τα δεδομένα (θα νομίζει ότι είναι στην πραγματικότητα κενό).
Το εργαλείο afscexpand μπορεί να χρησιμοποιηθεί για να αναγκάσει την αποσυμπίεση ενός αρχείου.
Τα δυαδικά αρχεία Mac OS συνήθως είναι συμπιεσμένα ως universal binaries. Ένα universal binary μπορεί να υποστηρίζει πολλαπλές αρχιτεκτονικές στο ίδιο αρχείο.
macOS Universal binaries & Mach-O FormatΟ κατάλογος /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
είναι όπου αποθηκεύεται πληροφορία σχετικά με τον κίνδυνο που σχετίζεται με διαφορετικές επεκτάσεις αρχείων. Αυτός ο κατάλογος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας το πώς το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής:
LSRiskCategorySafe: Τα αρχεία σε αυτή την κατηγορία θεωρούνται εντελώς ασφαλή. Το Safari θα ανοίξει αυτόματα αυτά τα αρχεία μετά τη λήψη τους.
LSRiskCategoryNeutral: Αυτά τα αρχεία δεν συνοδεύονται από προειδοποιήσεις και δεν ανοίγονται αυτόματα από το Safari.
LSRiskCategoryUnsafeExecutable: Τα αρχεία κάτω από αυτή την κατηγορία προκαλούν μια προειδοποίηση που υποδεικνύει ότι το αρχείο είναι εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη.
LSRiskCategoryMayContainUnsafeExecutable: Αυτή η κατηγορία είναι για αρχεία, όπως τα αρχεία συμπίεσης, που μπορεί να περιέχουν εκτελέσιμο. Το Safari θα προκαλέσει μια προειδοποίηση εκτός αν μπορεί να επαληθεύσει ότι όλα τα περιεχόμενα είναι ασφαλή ή ουδέτερα.
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως τη διεύθυνση URL από όπου λήφθηκαν.
/var/log/system.log
: Κύριο αρχείο καταγραφής των συστημάτων OSX. το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας "com.apple.syslogd" στο launchctl list
.
/private/var/log/asl/*.asl
: Αυτά είναι τα Apple System Logs που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
$HOME/Library/Preferences/com.apple.recentitems.plist
: Αποθηκεύει πρόσφατα προσπελασμένα αρχεία και εφαρμογές μέσω του "Finder".
$HOME/Library/Preferences/com.apple.loginitems.plsit
: Αποθηκεύει στοιχεία για εκκίνηση κατά την εκκίνηση του συστήματος.
$HOME/Library/Logs/DiskUtility.log
: Αρχείο καταγραφής για την εφαρμογή DiskUtility (πληροφορίες σχετικά με δίσκους, συμπεριλαμβανομένων των USB).
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Δεδομένα σχετικά με ασύρματα σημεία πρόσβασης.
/private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Λίστα με απενεργοποιημένα δαίμονα.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)