macOS Sensitive Locations & Interesting Daemons
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ο κωδικός σκιάς αποθηκεύεται με τη διαμόρφωση του χρήστη σε plist που βρίσκονται στο /var/db/dslocal/nodes/Default/users/
.
Η παρακάτω εντολή μπορεί να χρησιμοποιηθεί για να εξάγει όλες τις πληροφορίες σχετικά με τους χρήστες (συμπεριλαμβανομένων των πληροφοριών hash):
Σενάρια όπως αυτό ή αυτό μπορούν να χρησιμοποιηθούν για να μετατρέψουν το hash σε μορφή hashcat.
Μια εναλλακτική one-liner που θα εξάγει τα creds όλων των μη υπηρεσιακών λογαριασμών σε μορφή hashcat -m 7100
(macOS PBKDF2-SHA512):
Ένας άλλος τρόπος για να αποκτήσετε το ShadowHashData
ενός χρήστη είναι χρησιμοποιώντας το dscl
: sudo dscl . -read /Users/`whoami` ShadowHashData
Αυτό το αρχείο χρησιμοποιείται μόνο όταν το σύστημα εκτελείται σε λειτουργία ενός χρήστη (οπότε όχι πολύ συχνά).
Σημειώστε ότι όταν χρησιμοποιείτε το εκτελέσιμο security για να εκχυλίσετε τους αποκρυπτογραφημένους κωδικούς πρόσβασης, αρκετές προτροπές θα ζητήσουν από τον χρήστη να επιτρέψει αυτή τη λειτουργία.
Βασισμένο σε αυτό το σχόλιο juuso/keychaindump#10 (comment), φαίνεται ότι αυτά τα εργαλεία δεν λειτουργούν πια στο Big Sur.
Ένα εργαλείο που ονομάζεται keychaindump έχει αναπτυχθεί για να εξάγει κωδικούς πρόσβασης από τα keychains του macOS, αλλά αντιμετωπίζει περιορισμούς σε νεότερες εκδόσεις του macOS όπως το Big Sur, όπως αναφέρεται σε μια συζήτηση. Η χρήση του keychaindump απαιτεί από τον επιτιθέμενο να αποκτήσει πρόσβαση και να αναβαθμίσει τα δικαιώματα σε root. Το εργαλείο εκμεταλλεύεται το γεγονός ότι το keychain είναι ξεκλείδωτο από προεπιλογή κατά την είσοδο του χρήστη για ευκολία, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε αυτό χωρίς να απαιτείται επανειλημμένα ο κωδικός πρόσβασης του χρήστη. Ωστόσο, αν ένας χρήστης επιλέξει να κλειδώσει το keychain του μετά από κάθε χρήση, το keychaindump καθίσταται αναποτελεσματικό.
Keychaindump λειτουργεί στοχεύοντας μια συγκεκριμένη διαδικασία που ονομάζεται securityd, την οποία περιγράφει η Apple ως ένα daemon για εξουσιοδότηση και κρυπτογραφικές λειτουργίες, κρίσιμη για την πρόσβαση στο keychain. Η διαδικασία εξαγωγής περιλαμβάνει την αναγνώριση ενός Master Key που προέρχεται από τον κωδικό πρόσβασης του χρήστη. Αυτό το κλειδί είναι απαραίτητο για την ανάγνωση του αρχείου keychain. Για να εντοπίσει το Master Key, το keychaindump σαρώνει την μνήμη του securityd χρησιμοποιώντας την εντολή vmmap
, αναζητώντας πιθανά κλειδιά σε περιοχές που έχουν σημαδευτεί ως MALLOC_TINY
. Η ακόλουθη εντολή χρησιμοποιείται για να επιθεωρήσει αυτές τις τοποθεσίες μνήμης:
Μετά την αναγνώριση πιθανών κύριων κλειδιών, το keychaindump αναζητά μέσα στους σωρούς για ένα συγκεκριμένο μοτίβο (0x0000000000000018
) που υποδεικνύει έναν υποψήφιο για το κύριο κλειδί. Απαιτούνται περαιτέρω βήματα, συμπεριλαμβανομένης της αποσυμπίεσης, για να χρησιμοποιηθεί αυτό το κλειδί, όπως περιγράφεται στον πηγαίο κώδικα του keychaindump. Οι αναλυτές που εστιάζουν σε αυτόν τον τομέα θα πρέπει να σημειώσουν ότι τα κρίσιμα δεδομένα για την αποκρυπτογράφηση του keychain αποθηκεύονται μέσα στη μνήμη της διαδικασίας securityd. Ένα παράδειγμα εντολής για να εκτελέσετε το keychaindump είναι:
Chainbreaker μπορεί να χρησιμοποιηθεί για την εξαγωγή των παρακάτω τύπων πληροφοριών από ένα OSX keychain με εγκληματολογικά σωστό τρόπο:
Hashed Keychain password, κατάλληλο για cracking με hashcat ή John the Ripper
Internet Passwords
Generic Passwords
Private Keys
Public Keys
X509 Certificates
Secure Notes
Appleshare Passwords
Δεδομένου του κωδικού ξεκλειδώματος του keychain, ένα master key που αποκτήθηκε χρησιμοποιώντας volafox ή volatility, ή ένα αρχείο ξεκλειδώματος όπως το SystemKey, το Chainbreaker θα παρέχει επίσης plaintext passwords.
Χωρίς μία από αυτές τις μεθόδους ξεκλειδώματος του Keychain, το Chainbreaker θα εμφανίσει όλες τις άλλες διαθέσιμες πληροφορίες.
Ακολουθήστε αυτά τα βήματα για να εκτελέσετε ένα memory dump
Αν γνωρίζετε τον κωδικό πρόσβασης του χρήστη, μπορείτε να τον χρησιμοποιήσετε για να εξάγετε και να αποκρυπτογραφήσετε τα keychains που ανήκουν στον χρήστη.
Το αρχείο kcpassword είναι ένα αρχείο που περιέχει τον κωδικό πρόσβασης του χρήστη, αλλά μόνο αν ο ιδιοκτήτης του συστήματος έχει ενεργοποιήσει την αυτόματη σύνδεση. Επομένως, ο χρήστης θα συνδέεται αυτόματα χωρίς να του ζητείται κωδικός πρόσβασης (το οποίο δεν είναι πολύ ασφαλές).
Ο κωδικός πρόσβασης αποθηκεύεται στο αρχείο /etc/kcpassword
xored με το κλειδί 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Αν ο κωδικός πρόσβασης του χρήστη είναι μεγαλύτερος από το κλειδί, το κλειδί θα επαναχρησιμοποιηθεί.
Αυτό καθιστά τον κωδικό πρόσβασης αρκετά εύκολο να ανακτηθεί, για παράδειγμα χρησιμοποιώντας σενάρια όπως αυτό.
Μπορείτε να βρείτε τα δεδομένα Notifications στο $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
Οι περισσότερες από τις ενδιαφέρουσες πληροφορίες θα βρίσκονται στο blob. Έτσι, θα χρειαστεί να εξαγάγετε αυτό το περιεχόμενο και να το μετατρέψετε σε ανθρώπινα αναγνώσιμα ή να χρησιμοποιήσετε strings
. Για να έχετε πρόσβαση σε αυτό, μπορείτε να κάνετε:
Οι σημειώσεις των χρηστών μπορούν να βρεθούν στο ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Στις εφαρμογές macOS, οι προτιμήσεις βρίσκονται στο $HOME/Library/Preferences
και στο iOS είναι στο /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
.
Στο macOS, το εργαλείο cli defaults
μπορεί να χρησιμοποιηθεί για να τροποποιήσει το αρχείο Προτιμήσεων.
/usr/sbin/cfprefsd
διεκδικεί τις υπηρεσίες XPC com.apple.cfprefsd.daemon
και com.apple.cfprefsd.agent
και μπορεί να κληθεί για να εκτελέσει ενέργειες όπως η τροποποίηση προτιμήσεων.
Το αρχείο /System/Library/OpenDirectory/permissions.plist
περιέχει δικαιώματα που εφαρμόζονται σε χαρακτηριστικά κόμβων και προστατεύεται από το SIP.
Αυτό το αρχείο παραχωρεί δικαιώματα σε συγκεκριμένους χρήστες με UUID (και όχι uid) ώστε να μπορούν να έχουν πρόσβαση σε συγκεκριμένες ευαίσθητες πληροφορίες όπως ShadowHashData
, HeimdalSRPKey
και KerberosKeys
μεταξύ άλλων:
Ο κύριος δαίμονας για τις ειδοποιήσεις είναι /usr/sbin/notifyd
. Για να λάβουν ειδοποιήσεις, οι πελάτες πρέπει να εγγραφούν μέσω του Mach port com.apple.system.notification_center
(ελέγξτε τους με sudo lsmp -p <pid notifyd>
). Ο δαίμονας είναι ρυθμιζόμενος με το αρχείο /etc/notify.conf
.
Τα ονόματα που χρησιμοποιούνται για τις ειδοποιήσεις είναι μοναδικές αντίστροφες σημειώσεις DNS και όταν μια ειδοποίηση αποστέλλεται σε ένα από αυτά, οι πελάτες που έχουν δηλώσει ότι μπορούν να την χειριστούν θα την λάβουν.
Είναι δυνατόν να εκφορτώσετε την τρέχουσα κατάσταση (και να δείτε όλα τα ονόματα) στέλνοντας το σήμα SIGUSR2 στη διαδικασία notifyd και διαβάζοντας το παραγόμενο αρχείο: /var/run/notifyd_<pid>.status
:
Το Distributed Notification Center του οποίου το κύριο δυαδικό είναι /usr/sbin/distnoted
, είναι ένας άλλος τρόπος αποστολής ειδοποιήσεων. Εκθέτει ορισμένες υπηρεσίες XPC και εκτελεί κάποιους ελέγχους για να προσπαθήσει να επαληθεύσει τους πελάτες.
Σε αυτή την περίπτωση, οι εφαρμογές μπορούν να εγγραφούν για θέματα. Ο πελάτης θα δημιουργήσει ένα token επικοινωνώντας με τους διακομιστές της Apple μέσω του apsd
.
Στη συνέχεια, οι πάροχοι θα έχουν επίσης δημιουργήσει ένα token και θα μπορούν να συνδεθούν με τους διακομιστές της Apple για να στείλουν μηνύματα στους πελάτες. Αυτά τα μηνύματα θα γίνονται τοπικά δεκτά από το apsd
το οποίο θα προωθήσει την ειδοποίηση στην εφαρμογή που την περιμένει.
Οι προτιμήσεις βρίσκονται στο /Library/Preferences/com.apple.apsd.plist
.
Υπάρχει μια τοπική βάση δεδομένων μηνυμάτων που βρίσκεται στο macOS στο /Library/Application\ Support/ApplePushService/aps.db
και στο iOS στο /var/mobile/Library/ApplePushService
. Έχει 3 πίνακες: incoming_messages
, outgoing_messages
και channel
.
Είναι επίσης δυνατό να αποκτήσετε πληροφορίες σχετικά με τον daemon και τις συνδέσεις χρησιμοποιώντας:
Αυτές είναι οι ειδοποιήσεις που θα πρέπει να βλέπει ο χρήστης στην οθόνη:
CFUserNotification
: Αυτή η API παρέχει έναν τρόπο να εμφανίζεται στην οθόνη ένα αναδυόμενο παράθυρο με ένα μήνυμα.
The Bulletin Board: Αυτό εμφανίζει σε iOS μια διαφήμιση που εξαφανίζεται και θα αποθηκευτεί στο Κέντρο Ειδοποιήσεων.
NSUserNotificationCenter
: Αυτό είναι το bulletin board iOS στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο /var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)