25 KiB
macOS Αρχεία, Φάκελοι, Δυαδικά & Μνήμη
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Διάταξη Ιεραρχίας Αρχείων
- /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
. Κάθε εφαρμογή έχει ένα φάκελο με το όνομα που αντιστοιχεί στο bundle ID της εφαρμογής (com.apple.Safari
). - Ο πυρήνας βρίσκεται στο
/System/Library/Kernels/kernel
- Οι επεκτάσεις πυρήνα της Apple βρίσκονται στο
/System/Library/Extensions
- Οι επεκτάσεις πυρήνα τρίτων αποθηκεύονται στο
/Library/Extensions
Αρχεία με Ευαίσθητες Πληροφορίες
Το MacOS αποθηκεύει πληροφορίες όπως κωδικούς πρόσβασης σε διάφορα μέρη:
{% content-ref url="macos-sensitive-locations.md" %} macos-sensitive-locations.md {% endcontent-ref %}
Ευάλωτοι εγκαταστάτες pkg
{% content-ref url="macos-installers-abuse.md" %} macos-installers-abuse.md {% endcontent-ref %}
Ειδικές Επεκτάσεις OS X
.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). Η εντολή installer μπορεί να χρησιμοποιηθεί για να εγκαταστήσει τα περιεχόμενα αυτών των αρχείων..DS_Store
: Αυτό το αρχείο υπάρχει σε κάθε φάκελο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του φακέλου..Spotlight-V100
: Αυτός ο φάκελος εμφανίζεται στο ριζικό φάκελο κάθε όγδοου στο σύστημα..metadata_never_index
: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός όγδοου, το Spotlight δεν θα ευρετηριάσει αυτό το όγδοο..noindex
: Τα αρχεία και οι φάκελοι με αυτή την επέκταση δεν θα ευρετηριαστούν από το Spotlight..sdef
: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατή η αλληλεπίδραση με την εφαρμογή από ένα AppleScript.
Συστήματα Δέσμευσης macOS
Μια δέσμη είναι ένα φάκελος που μοιάζει με ένα αντικείμενο στο Finder (ένα παράδειγμα δέσμης είναι τα αρχεία *.app
).
{% content-ref url="macos-bundles.md" %} macos-bundles.md {% endcontent-ref %}
Κοινόχρηστη Προσωρινή Μνήμη Dyld
Στο macOS (και iOS) όλες οι κοινόχρηστες βιβλιοθήκες συστήματος, όπως πλαίσια και dylibs, συνδυάζονται σε ένα μόνο αρχείο, που ονομάζεται κοινόχρηστη μνήμη dyld. Αυτό βελτιώνει την απόδοση, αφού ο κώδικας μπορεί να φορτωθεί πιο γρήγορα.
Παρόμοια με την κοινόχρηστη μνήμη 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
{% endcode %}
Σε παλαιότερες εκδόσεις μπορείτε να βρείτε τη κοινόχρηστη μνήμη στο /System/Library/dyld/
.
Στο iOS μπορείτε να τις βρείτε στο /System/Library/Caches/com.apple.dyld/
.
{% hint style="success" %}
Σημειώστε ότι ακόμα κι αν το εργαλείο dyld_shared_cache_util
δεν λειτουργεί, μπορείτε να περάσετε το κοινόχρηστο dyld δυαδικό στο Hopper και το Hopper θα είναι σε θέση να αναγνωρίσει όλες τις βιβλιοθήκες και να σας επιτρέψει να επιλέξετε ποια θέλετε να ερευνήσετε:
{% endhint %}
Ειδικές Άδειες Αρχείων
Δικαιώματα Φακέλου
Σε έναν φάκελο, το δικαίωμα ανάγνωσης επιτρέπει τη λίσταρία του, το δικαίωμα εγγραφής επιτρέπει τη διαγραφή και τη εγγραφή αρχείων σε αυτόν, και το δικαίωμα εκτέλεσης επιτρέπει το διάσχιση του φακέλου. Έτσι, για παράδειγμα, ένας χρήστης με δικαίωμα ανάγνωσης πάνω σε ένα αρχείο μέσα σε έναν φάκελο όπου δεν έχει δικαίωμα εκτέλεσης δεν θα μπορεί να διαβάσει το αρχείο.
Τροποποιητές Σημαιών
Υπάρχουν μερικά σημαία που μπορούν να οριστούν στα αρχεία και θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να ελέγξετε τα σημαία των αρχείων μέσα σε έναν φάκελο με 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
: Καθορίζει την κωδικοποίηση κειμένου των αρχείων ASCIIcom.apple.logd.metadata
: Χρησιμοποιείται από το logd σε αρχεία στο/var/db/diagnostics
com.apple.genstore.*
: Γενεαλογική αποθήκευση (/.DocumentRevisions-V100
στη ρίζα του συστήματος αρχείων)com.apple.rootless
: MacOS: Χρησιμοποιείται από την Προστασία Ακεραιότητας Συστήματος για να επισημάνει αρχεία (III/10)com.apple.uuidb.boot-uuid
: Σήμανση των εποχών εκκίνησης από το logd με μοναδικό UUIDcom.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
Μπορείτε να βρείτε όλα τα αρχεία που περιέχουν αυτό το επεκταμένο χαρακτηριστικό με:
{% code overflow="wrap" %}
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"
{% endcode %}
decmpfs
Το επεκτεταμένο χαρακτηριστικό com.apple.decmpfs
υποδηλώνει ότι το αρχείο είναι αποθηκευμένο κρυπτογραφημένο, το ls -l
θα αναφέρει μέγεθος 0 και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτό το χαρακτηριστικό. Κάθε φορά που ανατίθεται το αρχείο, θα αποκρυπτογραφείται στη μνήμη.
Αυτό το χαρακτηριστικό μπορεί να εμφανιστεί με την εντολή ls -lO
ως συμπιεσμένο επειδή τα συμπιεσμένα αρχεία επισημαίνονται επίσης με τη σημαία UF_COMPRESSED
. Αν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η σημαία με chflags nocompressed </path/to/file>
, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και συνεπώς δεν θα μπορεί να αποσυμπιέσει και να έχει πρόσβαση στα δεδομένα (θα νομίζει ότι είναι πραγματικά κενό).
Το εργαλείο afscexpand μπορεί να χρησιμοποιηθεί για να αναγκάσει την αποσυμπίεση ενός αρχείου.
Παγκόσμια δυαδικά & Μορφή Mach-o
Τα δυαδικά του Mac OS συνήθως μεταγλωττίζονται ως παγκόσμια δυαδικά. Ένα παγκόσμιο δυαδικό μπορεί να υποστηρίξει πολλές αρχιτεκτονικές στο ίδιο αρχείο.
{% content-ref url="universal-binaries-and-mach-o-format.md" %} universal-binaries-and-mach-o-format.md {% endcontent-ref %}
Απορρόφηση μνήμης macOS
{% content-ref url="macos-memory-dumping.md" %} macos-memory-dumping.md {% endcontent-ref %}
Αρχεία κατηγορίας κινδύνου 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
: Λίστα των απενεργοποιημένων δαίμονων.