macOS Files, Folders, Binaries & Memory

Υποστήριξε το HackTricks

Διάταξη Ιεραρχίας Αρχείων

  • /Applications: Οι εγκατεστημένες εφαρμογές πρέπει να βρίσκονται εδώ. Όλοι οι χρήστες θα έχουν πρόσβαση σε αυτές.

  • /bin: Δυαδικά αρχεία γραμμής εντολών

  • /cores: Αν υπάρχει, χρησιμοποιείται για την αποθήκευση απορρίμματος πυρήνα

  • /dev: Όλα θεωρούνται ως αρχεία, οπότε μπορείτε να δείτε συσκευές υλικού που αποθηκεύονται εδώ.

  • /etc: Αρχεία ρυθμίσεων

  • /Library: Μπορείτε να βρείτε πολλούς υποφακέλους και αρχεία που σχετίζονται με προτιμήσεις, caches και 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 ... όπου το πρώτο νούμερο είναι ο αριθμός id του όγκου όπου υπάρχει το αρχείο και το δεύτερο είναι ο αριθμός inode. Μπορείτε να έχετε πρόσβαση στο περιεχόμενο αυτού του αρχείου μέσω του /.vol/ με αυτές τις πληροφορίες εκτελώντας cat /.vol/16777223/7545753

Φάκελοι Εφαρμογών

  • Εφαρμογές συστήματος βρίσκονται στο /System/Applications

  • Εγκατεστημένες εφαρμογές συνήθως εγκαθίστανται στο /Applications ή στο ~/Applications

  • Δεδομένα εφαρμογής μπορούν να βρεθούν στο /Library/Application Support για τις εφαρμογές που τρέχουν ως ρίζα και στο ~/Library/Application Support για εφαρμογές που τρέχουν ως χρήστης.

  • Οι δαίμονες τρίτων εφαρμογών που χρειάζονται να τρέχουν ως ρίζα συνήθως βρίσκονται στο /Library/PrivilegedHelperTools/

  • Οι εφαρμογές με αμμοθάλασσα αντιστοιχίζονται στον φάκελο ~/Library/Containers. Κάθε εφαρμογή έχει ένα φάκελο με το όνομα του αναλόγως με το ID δέματος της εφαρμογής (com.apple.Safari).

  • Ο πυρήνας βρίσκεται στο /System/Library/Kernels/kernel

  • Οι επεκτάσεις πυρήνα της Apple βρίσκονται στο /System/Library/Extensions

  • Οι επεκτάσεις πυρήνα τρίτων αποθηκεύονται στο /Library/Extensions

Αρχεία με Ευαίσθητες Πληροφορίες

Το MacOS αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε διάφορα μέρη:

macOS Sensitive Locations & Interesting Daemons

Ευάλωτοι εγκαταστάτες pkg

macOS Installers Abuse

Ειδικές Επεκτάσεις OS X

  • .dmg: Τα αρχεία Apple Disk Image είναι πολύ συχνά για εγκαταστάτες.

  • .kext: Πρέπει να ακολουθεί μια συγκεκριμένη δομή και είναι η έκδοση του OS X ενός προγράμματος οδήγησης. (είναι ένα δέμα)

  • .plist: Επίσης γνωστό ως λίστα ιδιοτήτων αποθηκεύει πληροφορίες σε μορφή 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 που ακολουθούν δομή καταλόγου (Είναι ένα δέμα).

  • .dylib: Δυναμικές βιβλιοθήκες (όπως τα αρχεία DLL των Windows)

  • .pkg: Είναι ίδια με τα xar (eXtensible Archive format). Η εντολή installer μπορεί να χρησιμοποιηθεί για να εγκαταστήσει τα περιεχόμενα αυτών των αρχείων.

  • .DS_Store: Αυτό το αρχείο υπάρχει σε κάθε φάκελο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του φακέλου.

  • .Spotlight-V100: Αυτός ο φάκελος εμφανίζεται στο ριζικό φάκελο κάθε όγκου στο σύστημα.

  • .metadata_never_index: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός όγκου, το Spotlight δεν θα ευρετηριάσει αυτόν τον όγκο.

  • .noindex: Τα αρχεία και οι φάκελοι με αυτή την επέκταση δεν θα ευρετηριαστούν από το Spotlight.

  • .sdef: Αρχεία μέσα σε δέματα που καθορίζουν πώς είναι δυνατή η αλληλεπίδραση με την εφαρμογή από ένα AppleScript.

Δέματα macOS

Ένα δέμα είναι ένα κατάλογος που μοιάζει με αντικείμενο στο Finder (ένα παράδειγμα δέματος είναι τα αρχεία *.app).

macOS Bundles

Κοινόχρηστη Βιβλιοθήκη Cache Dyld (SLC)

Στο macOS (και iOS) όλες οι κοινόχρηστες βιβλιοθήκες συστήματος, όπως πλαίσια και dylibs, συνδυάζονται σε ένα μόνο αρχείο, που ονομάζεται κοινόχρηστη βιβλιοθήκη dyld. Αυτό βελτιώνει την απόδοση, αφού ο κώδικας μπορεί να φορτωθεί πιο γρήγορα.

Αυτό βρίσκεται στο macOS στο /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/ και σε παλαιότερες εκδόσεις μπορείτε να βρείτε τη κοινόχρηστη cache στο /System/Library/dyld/. Στο iOS μπορείτε να τα βρείτε στο /System/Library/Caches/com.apple.dyld/.

Παρόμοια με την κοινόχρηστη cache dyld, ο πυρήνας και

# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e

# dyldextractor
dyldex -l [dyld_shared_cache_path] # List libraries
dyldex_all [dyld_shared_cache_path] # Extract all
# More options inside the readme

Σημειώστε ότι ακόμα κι αν το εργαλείο dyld_shared_cache_util δεν λειτουργεί, μπορείτε να περάσετε το κοινό dyld binary στο Hopper και το Hopper θα είναι σε θέση να αναγνωρίσει όλες τις βιβλιοθήκες και να σας επιτρέψει να επιλέξετε ποια θέλετε να ερευνήσετε:

Κάποιοι εξαγωγείς δεν θα λειτουργήσουν καθώς οι dylibs είναι προ-συνδεδεμένες με σκληρούς κωδικούς διευθύνσεων και επομένως ενδέχεται να μεταβαίνουν σε άγνωστες διευθύνσεις

Είναι επίσης δυνατό να κατεβάσετε την Κοινόχρηστη Βιβλιοθήκη 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

Χαρτογράφηση SLC

Το dyld χρησιμοποιεί την κλήση συστήματος shared_region_check_np για να γνωρίζει αν έχει γίνει χαρτογράφηση του SLC (η οποία επιστρέφει τη διεύθυνση) και shared_region_map_and_slide_np για να χαρτογραφήσει το SLC.

Σημειώστε ότι ακόμα κι αν το SLC έχει μετακινηθεί στην πρώτη χρήση, όλες οι διεργασίες χρησιμοποιούν το ίδιο αντίγραφο, το οποίο αποκλείει την προστασία ASLR εάν ο επιτιθέμενος μπορούσε να εκτελέσει διεργασίες στο σύστημα. Αυτό εκμεταλλεύτηκε πραγματικά στο παρελθόν και διορθώθηκε με τον κοινόχρηστο περιοχή pager.

Οι ομάδες κλαδιών είναι μικρές Mach-O dylibs που δημιουργούν μικρούς χώρους μεταξύ των αντιστοιχίσεων εικόνων κάνοντας αδύνατη την ενδιάμεση εισαγωγή των λειτουργιών.

Αντικατάσταση SLCs

Χρησιμοποιώντας τις μεταβλητές περιβάλλοντος:

  • DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1 -> Αυτό θα επιτρέψει τη φόρτωση μιας νέας κοινόχρηστης βιβλιοθήκης cache

  • DYLD_SHARED_CACHE_DIR=avoid και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με συμβολικούς συνδέσμους στην κοινόχρηστη μνήμη cache με τις πραγματικές (θα χρειαστεί να τις εξάγετε)

Ειδικές Αδειες Αρχείων

Δικαιώματα Φακέλου

Σε έναν φάκελο, το read επιτρέπει να καταλογογραφήσετε τον φάκελο, το write επιτρέπει να διαγράψετε και να γράψετε αρχεία σε αυτόν, και το execute επιτρέπει να διασχίσετε τον κατάλογο. Έτσι, για παράδειγμα, ένας χρήστης με δικαίωμα ανάγνωσης σε ένα αρχείο μέσα σε έναν κατάλογο όπου δεν έχει δικαίωμα εκτέλεσης δεν θα μπορεί να διαβάσει το αρχείο.

Τροποποιητές σημαιών

Υπάρχουν μερικές σημαίες που μπορούν να οριστούν στα αρχεία που θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να ελέγξετε τις σημαίες των αρχείων μέσα σε έναν φάκελο με ls -lO /path/directory

  • uchg: Γνωστή ως σημαία uchange θα εμποδίσει οποιαδήποτε ενέργεια αλλαγής ή διαγραφής του αρχείου. Για να το ορίσετε: chflags uchg file.txt

  • Ο χρήστης ρίζα μπορεί να αφαιρέσει τη σημαία και να τροποποιήσει το αρχείο

  • restricted: Αυτή η σημαία κάνει το αρχείο να είναι προστατευμένο από το SIP (δεν μπορείτε να προσθέσετε αυτή τη σημαία σε ένα αρχείο).

  • Sticky bit: Εάν ένας φάκελος έχει sticky bit, μόνο ο ιδιοκτήτης του φακέλου ή η ρίζα μπορεί να μετονομάσει ή να διαγράψει αρχεία. Συνήθως αυτό ορίζεται στον φάκελο /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: Υπόδειξη ότι αυτό το στοιχείο δεν πρέπει να εμφανίζεται σε μια γραφική διεπαφή.

  • SF_SUPPORTED 0x009f0000: Μάσκα των σημαιών που υποστηρίζονται από τον υπερχρήστη.

  • SF_SETTABLE 0x3fff0000: Μάσκα των επεξεργάσιμων σημαιών υπερχρήστη.

  • SF_SYNTHETIC 0xc0000000: Μάσκα συστημικών σημαιών μόνο για ανάγνωση.

  • SF_ARCHIVED 0x00010000: Το αρχείο είναι αρχειοθετημένο.

  • SF_IMMUTABLE 0x00020000: Το αρχείο δεν μπορεί να αλλάξει.

  • SF_APPEND 0x00040000: Οι εγγραφές στο αρχείο μπορούν να προστεθούν μόνο.

  • SF_RESTRICTED 0x00080000: Απαιτείται εξουσιοδότηση για εγγραφή.

  • SF_NOUNLINK 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, να μετονομαστεί ή να τοποθετηθεί.

  • SF_FIRMLINK 0x00800000: Το αρχείο είναι σύνδεσμος σταθερού συνδέσμου.

  • SF_DATALESS 0x40000000: Το αρχείο είναι αντικείμενο χωρίς δεδομένα.

ACLs Αρχείων

Τα ACLs αρχείων περιέχουν ACE (Access Control Entries) όπου μπορούν να ανατεθούν πιο λεπτομερή δικαιώματα σε διαφορετικούς χρήστες.

Είναι δυνατό να χορηγηθούν σε έναν φάκελο αυτά τα δικαιώματα: κατάλογος, αναζήτηση, προσθήκη_αρχείου, προσθήκη_υποκαταλόγου, διαγραφή_παιδιού. Και σε ένα αρχείο: ανάγνωση, εγγραφή, προσάρτηση, εκτέλεση.

Όταν το αρχείο περιέχει ACLs θα **βρείτε ένα "+" κ

ls -ld Movies
drwx------+   7 username  staff     224 15 Apr 19:42 Movies

Μπορείτε να διαβάσετε τα ACLs του αρχείου με:

ls -lde Movies
drwx------+ 7 username  staff  224 15 Apr 19:42 Movies
0: group:everyone deny delete

Μπορείτε να βρείτε όλα τα αρχεία με ACLs με (αυτό είναι πολύ αργό):

ls -RAle / 2>/dev/null | grep -E -B1 "\d: "

Επεκτεινόμενα Χαρακτηριστικά

Τα επεκτεινόμενα χαρακτηριστικά έχουν ένα όνομα και μια επιθυμητή τιμή και μπορούν να βρεθούν χρησιμοποιώντας την εντολή ls -@ και να τροποποιηθούν χρησιμοποιώντας την εντολή xattr. Μερικά κοινά επεκτεινόμενα χαρακτηριστικά είναι:

  • com.apple.resourceFork: Συμβατότητα με το resource fork. Επίσης ορατό ως 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

Resource Forks | macOS ADS

Αυτή είναι μια μέθοδος για να αποκτήσετε Εναλλακτικές Ροές Δεδομένων στα μηχανήματα MacOS. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε ένα επεκτεινόμενο χαρακτηριστικό που ονομάζεται com.apple.ResourceFork μέσα σε ένα αρχείο αποθηκεύοντάς το στο file/..namedfork/rsrc.

echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc

xattr -l a.txt #Read extended attributes
com.apple.ResourceFork: Hello Mac ADS

ls -l a.txt #The file length is still q
-rw-r--r--@ 1 username  wheel  6 17 Jul 01:15 a.txt

Μπορείτε να βρείτε όλα τα αρχεία που περιέχουν αυτό το επεκταμένο χαρακτηριστικό με:

find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork"

decmpfs

Το επεκτεταμένο χαρακτηριστικό com.apple.decmpfs υποδηλώνει ότι το αρχείο είναι αποθηκευμένο κρυπτογραφημένο, το ls -l θα αναφέρει μέγεθος 0 και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτό το χαρακτηριστικό. Κάθε φορά που το αρχείο προσπελαύνεται, θα αποκρυπτογραφείται στη μνήμη.

Αυτό το χαρακτηριστικό μπορεί να εμφανιστεί με την εντολή ls -lO ως συμπιεσμένο επειδή τα συμπιεσμένα αρχεία επισημαίνονται επίσης με τη σημαία UF_COMPRESSED. Αν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η σημαία με chflags nocompressed </path/to/file>, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και συνεπώς δεν θα μπορεί να αποσυμπιέσει και να έχει πρόσβαση στα δεδομένα (θα νομίζει ότι είναι πραγματικά κενό).

Το εργαλείο afscexpand μπορεί να χρησιμοποιηθεί για να αναγκάσει την αποσυμπίεση ενός αρχείου.

Παγκόσμια δυαδικά & Μορφή Mach-o

Τα δυαδικά του Mac OS συνήθως μεταγλωττίζονται ως παγκόσμια δυαδικά. Ένα παγκόσμιο δυαδικό μπορεί να υποστηρίζει πολλές αρχιτεκτονικές στο ίδιο αρχείο.

macOS Universal binaries & Mach-O Format

Μνήμη Διεργασιών macOS

Απορρόφηση μνήμης macOS

macOS Memory Dumping

Αρχεία κατηγορίας κινδύνου Mac OS

Ο κατάλογος /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 που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.

  • $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: Λίστα των απενεργοποιημένων δαίμονων.

Last updated