macOS Files, Folders, Binaries & Memory

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του 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 αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε διάφορα μέρη:

pagemacOS Sensitive Locations & Interesting Daemons

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

pagemacOS 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).

pagemacOS Bundles

Δυναμική Κοινή Βιβλιοθήκη Dyld (SLC)

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

Αυτό βρίσκεται στο macOS στο /System/Volumes/Preboot/Cryptexes/OS/System/Library/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 δεν λειτουργεί, μπορείτε να περάσετε το shared 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) όπου μπορούν να ανατεθούν πιο λεπτομερείς άδειες σε διαφορετικούς χρήστες.

Είναι δυνατό να χορηγηθούν σε έναν κατάλογο αυτές οι άδειες: list, search, add_file, add_subdirectory, delete_child, delete_child. Και σε ένα αρχείο: read, write, append, execute.

Όταν το αρχείο περιέχει 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 συνήθως μεταγλωττίζονται ως παγκόσμια δυαδικά. Ένα παγκόσμιο δυαδικό μπορεί να υποστηρίζει πολλές αρχιτεκτονικές στο ίδιο αρχείο.

pagemacOS Universal binaries & Mach-O Format

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

pagemacOS 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