macOS Sensitive Locations & Interesting Daemons
Κωδικοί Πρόσβασης
Κωδικοί Σκιάς
Ο κωδικός σκιάς αποθηκεύεται με τη διαμόρφωση του χρήστη σε plist που βρίσκονται στο /var/db/dslocal/nodes/Default/users/
.
Η παρακάτω εντολή μπορεί να χρησιμοποιηθεί για να εξάγει όλες τις πληροφορίες σχετικά με τους χρήστες (συμπεριλαμβανομένων των πληροφοριών hash):
Σενάρια όπως αυτό ή αυτό μπορούν να χρησιμοποιηθούν για να μετατρέψουν το hash σε μορφή hashcat.
Μια εναλλακτική one-liner που θα εξάγει τα creds όλων των μη υπηρεσιακών λογαριασμών σε μορφή hashcat -m 7100
(macOS PBKDF2-SHA512):
Keychain Dump
Σημειώστε ότι όταν χρησιμοποιείτε το δυαδικό αρχείο security για να εκφορτώσετε τους αποκρυπτογραφημένους κωδικούς πρόσβασης, αρκετές προτροπές θα ζητήσουν από τον χρήστη να επιτρέψει αυτή τη λειτουργία.
Βασισμένο σε αυτό το σχόλιο juuso/keychaindump#10 (comment), φαίνεται ότι αυτά τα εργαλεία δεν λειτουργούν πια στο Big Sur.
Keychaindump Overview
Ένα εργαλείο που ονομάζεται 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
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 θα εμφανίσει όλες τις άλλες διαθέσιμες πληροφορίες.
Dump keychain keys
Εξαγωγή κλειδιών keychain (με κωδικούς πρόσβασης) με το SystemKey
Εξαγωγή κλειδιών keychain (με κωδικούς πρόσβασης) σπάζοντας το hash
Εξαγωγή κλειδιών keychain (με κωδικούς πρόσβασης) με dump μνήμης
Ακολουθήστε αυτά τα βήματα για να εκτελέσετε ένα memory dump
Εξαγωγή κλειδιών keychain (με κωδικούς πρόσβασης) χρησιμοποιώντας τον κωδικό πρόσβασης του χρήστη
Αν γνωρίζετε τον κωδικό πρόσβασης του χρήστη, μπορείτε να τον χρησιμοποιήσετε για να εξάγετε και να αποκρυπτογραφήσετε τα keychains που ανήκουν στον χρήστη.
kcpassword
Το αρχείο kcpassword είναι ένα αρχείο που περιέχει τον κωδικό πρόσβασης του χρήστη, αλλά μόνο αν ο ιδιοκτήτης του συστήματος έχει ενεργοποιήσει την αυτόματη σύνδεση. Επομένως, ο χρήστης θα συνδέεται αυτόματα χωρίς να του ζητείται κωδικός πρόσβασης (το οποίο δεν είναι πολύ ασφαλές).
Ο κωδικός πρόσβασης αποθηκεύεται στο αρχείο /etc/kcpassword
xored με το κλειδί 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Αν ο κωδικός πρόσβασης του χρήστη είναι μεγαλύτερος από το κλειδί, το κλειδί θα επαναχρησιμοποιηθεί.
Αυτό καθιστά τον κωδικό πρόσβασης αρκετά εύκολο να ανακτηθεί, για παράδειγμα χρησιμοποιώντας σενάρια όπως αυτό.
Interesting Information in Databases
Messages
Notifications
Μπορείτε να βρείτε τα δεδομένα 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
και μπορεί να κληθεί για να εκτελέσει ενέργειες όπως η τροποποίηση προτιμήσεων.
Συστήματα Ειδοποιήσεων
Ειδοποιήσεις Darwin
Ο κύριος δαίμονας για τις ειδοποιήσεις είναι /usr/sbin/notifyd
. Για να λάβουν ειδοποιήσεις, οι πελάτες πρέπει να εγγραφούν μέσω της Mach θύρας com.apple.system.notification_center
(ελέγξτε τις με sudo lsmp -p <pid notifyd>
). Ο δαίμονας είναι ρυθμιζόμενος με το αρχείο /etc/notify.conf
.
Τα ονόματα που χρησιμοποιούνται για τις ειδοποιήσεις είναι μοναδικές αντίστροφες σημειώσεις DNS και όταν μια ειδοποίηση αποστέλλεται σε ένα από αυτά, οι πελάτες που έχουν δηλώσει ότι μπορούν να την χειριστούν θα την λάβουν.
Είναι δυνατόν να εκφορτωθεί η τρέχουσα κατάσταση (και να δουν όλα τα ονόματα) στέλνοντας το σήμα SIGUSR2 στη διαδικασία notifyd και διαβάζοντας το παραγόμενο αρχείο: /var/run/notifyd_<pid>.status
:
Distributed Notification Center
Το Distributed Notification Center του οποίου το κύριο δυαδικό είναι /usr/sbin/distnoted
, είναι ένας άλλος τρόπος αποστολής ειδοποιήσεων. Εκθέτει ορισμένες υπηρεσίες XPC και εκτελεί κάποιους ελέγχους για να προσπαθήσει να επαληθεύσει τους πελάτες.
Apple Push Notifications (APN)
Σε αυτή την περίπτωση, οι εφαρμογές μπορούν να εγγραφούν για topics. Ο πελάτης θα δημιουργήσει ένα 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 και τις συνδέσεις χρησιμοποιώντας:
User Notifications
Αυτές είναι οι ειδοποιήσεις που θα πρέπει να βλέπει ο χρήστης στην οθόνη:
CFUserNotification
: Αυτή η API παρέχει έναν τρόπο να εμφανίζεται στην οθόνη ένα αναδυόμενο παράθυρο με ένα μήνυμα.The Bulletin Board: Αυτό εμφανίζει σε iOS μια διαφήμιση που εξαφανίζεται και θα αποθηκευτεί στο Κέντρο Ειδοποιήσεων.
NSUserNotificationCenter
: Αυτό είναι το bulletin board iOS στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Last updated