hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries
2024-04-26 20:59:00 +00:00
..
macos-bundles.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-03-28 11:31:12 +00:00
macos-installers-abuse.md Translated ['binary-exploitation/common-binary-protections-and-bypasses/ 2024-04-23 19:40:27 +00:00
macos-memory-dumping.md Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-04-18 07:07:09 +00:00
macos-sensitive-locations.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-04-24 23:53:35 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-04-24 23:53:35 +00:00
universal-binaries-and-mach-o-format.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-04-26 20:59:00 +00:00

macOS Αρχεία, Φάκελοι, Δυαδικά & Μνήμη

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

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

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