macOS Apps - Inspecting, debugging and Fuzzing
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μπορείτε να κατεβάσετε το disarm από εδώ.
Μπορείτε να κατεβάσετε το jtool2 εδώ ή να το εγκαταστήσετε με brew
.
Το jtool είναι απαρχαιωμένο υπέρ του disarm
Codesign
μπορεί να βρεθεί σε macOS ενώ ldid
μπορεί να βρεθεί σε iOS
SuspiciousPackage είναι ένα εργαλείο χρήσιμο για την επιθεώρηση .pkg αρχείων (εγκαταστάτες) και για να δούμε τι περιέχουν πριν την εγκατάσταση.
Αυτοί οι εγκαταστάτες έχουν preinstall
και postinstall
bash scripts που οι συγγραφείς κακόβουλου λογισμικού συνήθως εκμεταλλεύονται για να persist the malware.
Αυτό το εργαλείο επιτρέπει να mount εικόνες δίσκων της Apple (.dmg) για να τις επιθεωρήσουμε πριν τρέξουμε οτιδήποτε:
It will be mounted in /Volumes
Έλεγχος για υψηλή εντροπία
Έλεγχος των συμβολοσειρών (αν δεν υπάρχει σχεδόν καμία κατανοητή συμβολοσειρά, είναι συμπιεσμένο)
Ο συμπιεστής UPX για MacOS δημιουργεί μια ενότητα που ονομάζεται "__XHDR"
Σημειώστε ότι τα προγράμματα που έχουν γραφτεί σε Objective-C διατηρούν τις δηλώσεις κλάσης τους όταν μεταγλωττίζονται σε Mach-O binaries. Τέτοιες δηλώσεις κλάσης περιλαμβάνουν το όνομα και τον τύπο των:
Των διεπαφών που ορίζονται
Των μεθόδων διεπαφής
Των μεταβλητών στιγμής διεπαφής
Των πρωτοκόλλων που ορίζονται
Σημειώστε ότι αυτά τα ονόματα θα μπορούσαν να είναι κρυπτογραφημένα για να καταστήσουν την αναστροφή του δυαδικού πιο δύσκολη.
Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει objc_msgSend
. Αυτό θα καλέσει τη τελική συνάρτηση:
Οι παράμετροι που αναμένει αυτή η συνάρτηση είναι:
Η πρώτη παράμετρος (self) είναι "ένας δείκτης που δείχνει στην περίπτωση της κλάσης που θα λάβει το μήνυμα". Ή πιο απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μέθοδος κλάσης, αυτό θα είναι μια περίπτωση του αντικειμένου κλάσης (ως σύνολο), ενώ για μια μέθοδο στιγμής, το self θα δείχνει σε μια δημιουργημένη περίπτωση της κλάσης ως αντικείμενο.
Η δεύτερη παράμετρος, (op), είναι "ο επιλεγέας της μεθόδου που χειρίζεται το μήνυμα". Και πάλι, πιο απλά, αυτό είναι απλώς το όνομα της μεθόδου.
Οι υπόλοιπες παράμετροι είναι οποιεσδήποτε τιμές απαιτούνται από τη μέθοδο (op).
Δείτε πώς να πάρετε αυτές τις πληροφορίες εύκολα με lldb
σε ARM64 σε αυτή τη σελίδα:
x64:
Argument
Register
(for) objc_msgSend
1st argument
rdi
self: object that the method is being invoked upon
2nd argument
rsi
op: name of the method
3rd argument
rdx
1st argument to the method
4th argument
rcx
2nd argument to the method
5th argument
r8
3rd argument to the method
6th argument
r9
4th argument to the method
7th+ argument
rsp+ (on the stack)
5th+ argument to the method
Dynadump είναι ένα εργαλείο για την εξαγωγή κλάσεων από δυαδικά Objective-C. Το github καθορίζει dylibs αλλά αυτό λειτουργεί επίσης με εκτελέσιμα.
Στη στιγμή που γράφεται αυτό, αυτό είναι αυτή τη στιγμή η καλύτερη επιλογή.
class-dump είναι το αρχικό εργαλείο που δημιουργεί δηλώσεις για τις κλάσεις, κατηγορίες και πρωτόκολλα σε κώδικα μορφής ObjetiveC.
Είναι παλιό και δεν συντηρείται, οπότε πιθανότατα δεν θα λειτουργήσει σωστά.
iCDump είναι ένα σύγχρονο και διαλειτουργικό εργαλείο απόρριψης κλάσεων Objective-C. Σε σύγκριση με τα υπάρχοντα εργαλεία, το iCDump μπορεί να εκτελείται ανεξάρτητα από το οικοσύστημα της Apple και εκθέτει Python bindings.
Με τα Swift binaries, καθώς υπάρχει συμβατότητα με το Objective-C, μερικές φορές μπορείτε να εξάγετε δηλώσεις χρησιμοποιώντας το class-dump αλλά όχι πάντα.
Με τις εντολές jtool -l
ή otool -l
είναι δυνατόν να βρείτε αρκετές ενότητες που ξεκινούν με το πρόθεμα __swift5
:
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις πληροφορίες που αποθηκεύονται σε αυτήν την ενότητα σε αυτήν την ανάρτηση ιστολογίου.
Επιπλέον, τα Swift binaries μπορεί να έχουν σύμβολα (για παράδειγμα, οι βιβλιοθήκες χρειάζονται να αποθηκεύουν σύμβολα ώστε οι συναρτήσεις τους να μπορούν να καλούνται). Τα σύμβολα συνήθως έχουν τις πληροφορίες σχετικά με το όνομα της συνάρτησης και τα attr με άσχημο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "demanglers" που μπορούν να πάρουν το αρχικό όνομα:
Σημειώστε ότι για να αποσφαλματώσετε δυαδικά αρχεία, η SIP πρέπει να είναι απενεργοποιημένη (csrutil disable
ή csrutil enable --without debug
) ή να αντιγράψετε τα δυαδικά αρχεία σε έναν προσωρινό φάκελο και να αφαιρέσετε την υπογραφή με codesign --remove-signature <binary-path>
ή να επιτρέψετε την αποσφαλμάτωση του δυαδικού αρχείου (μπορείτε να χρησιμοποιήσετε αυτό το σενάριο)
Σημειώστε ότι για να εργαστείτε με δυαδικά αρχεία συστήματος, (όπως το cloudconfigurationd
) στο macOS, η SIP πρέπει να είναι απενεργοποιημένη (απλώς η αφαίρεση της υπογραφής δεν θα λειτουργήσει).
Το macOS εκθέτει μερικά ενδιαφέροντα APIs που παρέχουν πληροφορίες σχετικά με τις διαδικασίες:
proc_info
: Αυτό είναι το κύριο που παρέχει πολλές πληροφορίες για κάθε διαδικασία. Πρέπει να είστε root για να αποκτήσετε πληροφορίες για άλλες διαδικασίες, αλλά δεν χρειάζεστε ειδικά δικαιώματα ή mach ports.
libsysmon.dylib
: Επιτρέπει την απόκτηση πληροφοριών σχετικά με τις διαδικασίες μέσω εκτεθειμένων συναρτήσεων XPC, ωστόσο, απαιτείται να έχετε το δικαίωμα com.apple.sysmond.client
.
Stackshotting είναι μια τεχνική που χρησιμοποιείται για την καταγραφή της κατάστασης των διαδικασιών, συμπεριλαμβανομένων των στοίβων κλήσεων όλων των εκτελούμενων νημάτων. Αυτό είναι ιδιαίτερα χρήσιμο για αποσφαλμάτωση, ανάλυση απόδοσης και κατανόηση της συμπεριφοράς του συστήματος σε μια συγκεκριμένη χρονική στιγμή. Στο iOS και το macOS, το stackshotting μπορεί να πραγματοποιηθεί χρησιμοποιώντας διάφορα εργαλεία και μεθόδους όπως τα εργαλεία sample
και spindump
.
Αυτό το εργαλείο (/usr/bini/ysdiagnose
) συλλέγει βασικά πολλές πληροφορίες από τον υπολογιστή σας εκτελώντας δεκάδες διαφορετικές εντολές όπως ps
, zprint
...
Πρέπει να εκτελείται ως root και η διεργασία /usr/libexec/sysdiagnosed
έχει πολύ ενδιαφέροντα δικαιώματα όπως com.apple.system-task-ports
και get-task-allow
.
Η plist του βρίσκεται στο /System/Library/LaunchDaemons/com.apple.sysdiagnose.plist
που δηλώνει 3 MachServices:
com.apple.sysdiagnose.CacheDelete
: Διαγράφει παλιές αρχειοθετήσεις στο /var/rmp
com.apple.sysdiagnose.kernel.ipc
: Ειδική θύρα 23 (kernel)
com.apple.sysdiagnose.service.xpc
: Διεπαφή χρήστη μέσω της κλάσης Libsysdiagnose
Obj-C. Τρία επιχειρήματα σε ένα dict μπορούν να περαστούν (compress
, display
, run
)
Το macOS παράγει πολλές καταγραφές που μπορεί να είναι πολύ χρήσιμες κατά την εκτέλεση μιας εφαρμογής προσπαθώντας να κατανοήσει τι κάνει.
Επιπλέον, υπάρχουν κάποιες καταγραφές που θα περιέχουν την ετικέτα <private>
για να κρύψουν κάποιες χρήστη ή υπολογιστή αναγνωρίσιμες πληροφορίες. Ωστόσο, είναι δυνατό να εγκαταστήσετε ένα πιστοποιητικό για να αποκαλύψετε αυτές τις πληροφορίες. Ακολουθήστε τις εξηγήσεις από εδώ.
Στο αριστερό πάνελ του Hopper είναι δυνατό να δείτε τα σύμβολα (Labels) του δυαδικού αρχείου, τη λίστα διαδικασιών και συναρτήσεων (Proc) και τις συμβολοσειρές (Str). Αυτές δεν είναι όλες οι συμβολοσειρές αλλά αυτές που ορίζονται σε διάφορα μέρη του αρχείου Mac-O (όπως cstring ή objc_methname
).
Στο μεσαίο πάνελ μπορείτε να δείτε τον αποσυναρμολογημένο κώδικα. Και μπορείτε να τον δείτε σε ακατέργαστη αποσυναρμολόγηση, ως γράφημα, ως αποκωδικοποιημένο και ως δυαδικό κάνοντας κλικ στο αντίστοιχο εικονίδιο:
Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε αναφορές προς/από αυτό το αντικείμενο ή ακόμα και να αλλάξετε το όνομά του (αυτό δεν λειτουργεί σε αποκωδικοποιημένο ψευδοκώδικα):
Επιπλέον, στο κάτω μέρος του μεσαίου πάνελ μπορείτε να γράψετε εντολές python.
Στο δεξί πάνελ μπορείτε να δείτε ενδιαφέρουσες πληροφορίες όπως το ιστορικό πλοήγησης (έτσι ξέρετε πώς φτάσατε στην τρέχουσα κατάσταση), το γράφημα κλήσεων όπου μπορείτε να δείτε όλες τις συναρτήσεις που καλούν αυτή τη συνάρτηση και όλες τις συναρτήσεις που καλεί αυτή η συνάρτηση, και πληροφορίες για τοπικές μεταβλητές.
Επιτρέπει στους χρήστες πρόσβαση σε εφαρμογές σε εξαιρετικά χαμηλό επίπεδο και παρέχει έναν τρόπο για τους χρήστες να ιχνηλατούν προγράμματα και ακόμη και να αλλάζουν τη ροή εκτέλεσής τους. Το Dtrace χρησιμοποιεί probes που είναι τοποθετημένα σε όλο τον πυρήνα και βρίσκονται σε θέσεις όπως η αρχή και το τέλος των κλήσεων συστήματος.
Το DTrace χρησιμοποιεί τη συνάρτηση dtrace_probe_create
για να δημιουργήσει ένα probe για κάθε κλήση συστήματος. Αυτά τα probes μπορούν να ενεργοποιηθούν στο σημείο εισόδου και εξόδου κάθε κλήσης συστήματος. Η αλληλεπίδραση με το DTrace συμβαίνει μέσω του /dev/dtrace που είναι διαθέσιμο μόνο για τον χρήστη root.
Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP μπορείτε να εκτελέσετε σε λειτουργία ανάκτησης: csrutil enable --without dtrace
Μπορείτε επίσης να χρησιμοποιήσετε τα δυαδικά αρχεία dtrace
ή dtruss
που έχετε συντάξει.
Οι διαθέσιμες probes του dtrace μπορούν να αποκτηθούν με:
Το όνομα της πρόβας αποτελείται από τέσσερα μέρη: τον πάροχο, το module, τη λειτουργία και το όνομα (fbt:mach_kernel:ptrace:entry
). Αν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα εφαρμόσει αυτό το μέρος ως wildcard.
Για να ρυθμίσουμε το DTrace να ενεργοποιεί τις πρόβες και να καθορίσουμε ποιες ενέργειες να εκτελούνται όταν ενεργοποιούνται, θα χρειαστεί να χρησιμοποιήσουμε τη γλώσσα D.
Μια πιο λεπτομερής εξήγηση και περισσότερα παραδείγματα μπορούν να βρεθούν στο https://illumos.org/books/dtrace/chp-intro.html
Εκτελέστε man -k dtrace
για να καταγράψετε τα διαθέσιμα σενάρια DTrace. Παράδειγμα: sudo dtruss -n binary
Στη γραμμή
σενάριο
Είναι μια εγκατάσταση παρακολούθησης πυρήνα. Οι τεκμηριωμένοι κωδικοί μπορούν να βρεθούν στο /usr/share/misc/trace.codes
.
Εργαλεία όπως το latency
, sc_usage
, fs_usage
και trace
το χρησιμοποιούν εσωτερικά.
Για να αλληλεπιδράσετε με το kdebug
, χρησιμοποιείται το sysctl
πάνω από το namespace kern.kdebug
και οι MIBs που πρέπει να χρησιμοποιηθούν μπορούν να βρεθούν στο sys/sysctl.h
, έχοντας τις συναρτήσεις υλοποιημένες στο bsd/kern/kdebug.c
.
Για να αλληλεπιδράσετε με το kdebug με έναν προσαρμοσμένο πελάτη, αυτά είναι συνήθως τα βήματα:
Αφαιρέστε τις υπάρχουσες ρυθμίσεις με KERN_KDSETREMOVE
Ρυθμίστε την παρακολούθηση με KERN_KDSETBUF και KERN_KDSETUP
Χρησιμοποιήστε KERN_KDGETBUF για να αποκτήσετε τον αριθμό των εγγραφών του buffer
Αποκτήστε τον δικό σας πελάτη από την παρακολούθηση με KERN_KDPINDEX
Ενεργοποιήστε την παρακολούθηση με KERN_KDENABLE
Διαβάστε το buffer καλώντας KERN_KDREADTR
Για να αντιστοιχίσετε κάθε νήμα με τη διαδικασία του, καλέστε KERN_KDTHRMAP.
Για να αποκτήσετε αυτές τις πληροφορίες, είναι δυνατόν να χρησιμοποιήσετε το εργαλείο της Apple trace
ή το προσαρμοσμένο εργαλείο kDebugView (kdv).
Σημειώστε ότι το Kdebug είναι διαθέσιμο μόνο για 1 πελάτη τη φορά. Έτσι, μόνο ένα εργαλείο που υποστηρίζεται από k-debug μπορεί να εκτελείται ταυτόχρονα.
Οι APIs ktrace_*
προέρχονται από το libktrace.dylib
, το οποίο περιτυλίγει αυτά του Kdebug
. Στη συνέχεια, ένας πελάτης μπορεί απλά να καλέσει ktrace_session_create
και ktrace_events_[single/class]
για να ορίσει callbacks σε συγκεκριμένους κωδικούς και στη συνέχεια να το ξεκινήσει με ktrace_start
.
Μπορείτε να το χρησιμοποιήσετε ακόμη και με SIP ενεργοποιημένο
Μπορείτε να χρησιμοποιήσετε ως πελάτες το εργαλείο ktrace
:
Or tailspin
.
Αυτό χρησιμοποιείται για να γίνει προφίλ σε επίπεδο πυρήνα και είναι κατασκευασμένο χρησιμοποιώντας κλήσεις Kdebug
.
Βασικά, ελέγχεται η παγκόσμια μεταβλητή kernel_debug_active
και αν είναι ενεργοποιημένη καλεί τον kperf_kdebug_handler
με τον κωδικό Kdebug
και τη διεύθυνση του πλαισίου πυρήνα που καλεί. Αν ο κωδικός Kdebug
ταιριάζει με έναν επιλεγμένο, αποκτά τις "ενέργειες" που έχουν ρυθμιστεί ως bitmap (ελέγξτε το osfmk/kperf/action.h
για τις επιλογές).
Το kperf έχει επίσης έναν πίνακα MIB sysctl: (ως root) sysctl kperf
. Αυτοί οι κωδικοί μπορούν να βρεθούν στο osfmk/kperf/kperfbsd.c
.
Επιπλέον, ένα υποσύνολο της λειτουργικότητας του Kperf βρίσκεται στο kpc
, το οποίο παρέχει πληροφορίες σχετικά με τους μετρητές απόδοσης της μηχανής.
ProcessMonitor είναι ένα πολύ χρήσιμο εργαλείο για να ελέγξετε τις ενέργειες που σχετίζονται με τη διαδικασία που εκτελεί μια διαδικασία (για παράδειγμα, να παρακολουθήσετε ποιες νέες διαδικασίες δημιουργεί μια διαδικασία).
SpriteTree είναι ένα εργαλείο που εκτυπώνει τις σχέσεις μεταξύ διαδικασιών.
Πρέπει να παρακολουθήσετε το mac σας με μια εντολή όπως sudo eslogger fork exec rename create > cap.json
(ο τερματικός που εκκινεί αυτό απαιτεί FDA). Και στη συνέχεια μπορείτε να φορτώσετε το json σε αυτό το εργαλείο για να δείτε όλες τις σχέσεις:
FileMonitor επιτρέπει την παρακολούθηση γεγονότων αρχείων (όπως δημιουργία, τροποποιήσεις και διαγραφές) παρέχοντας λεπτομερείς πληροφορίες σχετικά με αυτά τα γεγονότα.
Crescendo είναι ένα εργαλείο GUI με την εμφάνιση και την αίσθηση που μπορεί να γνωρίζουν οι χρήστες Windows από το Procmon της Microsoft Sysinternal. Αυτό το εργαλείο επιτρέπει την καταγραφή διαφόρων τύπων γεγονότων να ξεκινά και να σταματά, επιτρέπει τη φιλτράρισή τους κατά κατηγορίες όπως αρχείο, διαδικασία, δίκτυο κ.λπ., και παρέχει τη δυνατότητα αποθήκευσης των καταγεγραμμένων γεγονότων σε μορφή json.
Apple Instruments είναι μέρος των εργαλείων προγραμματιστών του Xcode – χρησιμοποιούνται για την παρακολούθηση της απόδοσης εφαρμογών, την αναγνώριση διαρροών μνήμης και την παρακολούθηση της δραστηριότητας του συστήματος αρχείων.
Επιτρέπει την παρακολούθηση ενεργειών που εκτελούνται από διαδικασίες:
Taskexplorer είναι χρήσιμο για να δείτε τις βιβλιοθήκες που χρησιμοποιούνται από ένα δυαδικό αρχείο, τα αρχεία που χρησιμοποιεί και τις συνδέσεις δικτύου. Επίσης ελέγχει τις διαδικασίες του δυαδικού αρχείου σε σχέση με το virustotal και δείχνει πληροφορίες για το δυαδικό αρχείο.
Στο αυτό το blog post μπορείτε να βρείτε ένα παράδειγμα για το πώς να αποσφαλματώσετε έναν εκτελούμενο δαίμονα που χρησιμοποίησε PT_DENY_ATTACH
για να αποτρέψει την αποσφαλμάτωση ακόμη και αν το SIP ήταν απενεργοποιημένο.
lldb είναι το de facto εργαλείο για αποσφαλμάτωση δυαδικών αρχείων macOS.
Μπορείτε να ορίσετε τη γεύση intel όταν χρησιμοποιείτε lldb δημιουργώντας ένα αρχείο με το όνομα .lldbinit
στον φάκελο του σπιτιού σας με την εξής γραμμή:
Μέσα στο lldb, εκτελέστε μια διαδικασία με process save-core
(lldb) Εντολή
Περιγραφή
run (r)
Ξεκινά την εκτέλεση, η οποία θα συνεχιστεί αδιάκοπα μέχρι να χτυπήσει ένα breakpoint ή να τερματιστεί η διαδικασία.
process launch --stop-at-entry
Ξεκινά την εκτέλεση σταματώντας στο σημείο εισόδου
continue (c)
Συνεχίζει την εκτέλεση της διαδικασίας που αποσφαλματώνεται.
nexti (n / ni)
Εκτελεί την επόμενη εντολή. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.
stepi (s / si)
Εκτελεί την επόμενη εντολή. Σε αντίθεση με την εντολή nexti, αυτή η εντολή θα εισέλθει στις κλήσεις συναρτήσεων.
finish (f)
Εκτελεί τις υπόλοιπες εντολές στην τρέχουσα συνάρτηση (“frame”) και επιστρέφει και σταματά.
control + c
Παύει την εκτέλεση. Εάν η διαδικασία έχει εκτελεστεί (r) ή συνεχιστεί (c), αυτό θα προκαλέσει την παύση της διαδικασίας ...όπου κι αν εκτελείται αυτή τη στιγμή.
breakpoint (b)
b main
#Οποιαδήποτε συνάρτηση ονομάζεται main
b <binname>`main
#Κύρια συνάρτηση του bin
b set -n main --shlib <lib_name>
#Κύρια συνάρτηση του υποδεικνυόμενου bin
breakpoint set -r '\[NSFileManager .*\]$'
#Οποιαδήποτε μέθοδος NSFileManager
breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'
break set -r . -s libobjc.A.dylib
# Σπάσιμο σε όλες τις συναρτήσεις αυτής της βιβλιοθήκης
b -a 0x0000000100004bd9
br l
#Λίστα breakpoint
br e/dis <num>
#Ενεργοποίηση/Απενεργοποίηση breakpoint
breakpoint delete <num>
help
help breakpoint #Λάβετε βοήθεια για την εντολή breakpoint
help memory write #Λάβετε βοήθεια για να γράψετε στη μνήμη
reg
x/s <reg/memory address>
Εμφανίζει τη μνήμη ως μια null-terminated συμβολοσειρά.
x/i <reg/memory address>
Εμφανίζει τη μνήμη ως εντολή assembly.
x/b <reg/memory address>
Εμφανίζει τη μνήμη ως byte.
print object (po)
Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο
po $raw
{
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
Σημειώστε ότι οι περισσότερες από τις APIs ή μεθόδους Objective-C της Apple επιστρέφουν αντικείμενα, και επομένως θα πρέπει να εμφανίζονται μέσω της εντολής “print object” (po). Εάν το po δεν παράγει μια χρήσιμη έξοδο, χρησιμοποιήστε x/b
memory
memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #Γράψτε AAAA σε αυτή τη διεύθυνση memory write -f s $rip+0x11f+7 "AAAA" #Γράψτε AAAA στη διεύθυνση
disassembly
dis #Αποσυναρμολόγηση τρέχουσας συνάρτησης
dis -n <funcname> #Αποσυναρμολόγηση συνάρτησης
dis -n <funcname> -b <basename> #Αποσυναρμολόγηση συνάρτησης dis -c 6 #Αποσυναρμολόγηση 6 γραμμών dis -c 0x100003764 -e 0x100003768 # Από μία προσθήκη μέχρι την άλλη dis -p -c 4 # Ξεκινήστε στην τρέχουσα διεύθυνση αποσυναρμολόγησης
parray
parray 3 (char **)$x1 # Ελέγξτε τον πίνακα 3 στοιχείων στο x1 reg
image dump sections
Εκτυπώνει το χάρτη της μνήμης της τρέχουσας διαδικασίας
image dump symtab <library>
image dump symtab CoreNLP
#Λάβετε τη διεύθυνση όλων των συμβόλων από το CoreNLP
Όταν καλείτε τη συνάρτηση objc_sendMsg
, το rsi καταχωρητής περιέχει το όνομα της μεθόδου ως μια null-terminated (“C”) συμβολοσειρά. Για να εκτυπώσετε το όνομα μέσω lldb κάντε:
(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"
(lldb) print (char*)$rsi:
(char *) $1 = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"
(lldb) reg read $rsi: rsi = 0x00000001000f1576 "startMiningWithPort:password:coreCount:slowMemory:currency:"
Η εντολή sysctl hw.model
επιστρέφει "Mac" όταν ο φιλοξενούμενος είναι MacOS αλλά κάτι διαφορετικό όταν είναι VM.
Παίζοντας με τις τιμές των hw.logicalcpu
και hw.physicalcpu
ορισμένα κακόβουλα λογισμικά προσπαθούν να ανιχνεύσουν αν είναι VM.
Ορισμένα κακόβουλα λογισμικά μπορούν επίσης να ανιχνεύσουν αν η μηχανή είναι VMware με βάση τη διεύθυνση MAC (00:50:56).
Είναι επίσης δυνατό να βρείτε αν μια διαδικασία αποσφαλματώνεται με έναν απλό κώδικα όπως:
if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //η διαδικασία αποσφαλματώνεται }
Μπορεί επίσης να καλέσει την κλήση συστήματος ptrace
με την σημαία PT_DENY_ATTACH
. Αυτό αποτρέπει έναν αποσφαλματωτή από το να συνδεθεί και να παρακολουθήσει.
Μπορείτε να ελέγξετε αν η λειτουργία sysctl
ή ptrace
εισάγεται (αλλά το κακόβουλο λογισμικό θα μπορούσε να την εισάγει δυναμικά)
Όπως σημειώνεται σε αυτή την αναφορά, “Defeating Anti-Debug Techniques: macOS ptrace variants” : “Το μήνυμα Process # exited with status = 45 (0x0000002d) είναι συνήθως ένα προειδοποιητικό σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί PT_DENY_ATTACH”
Τα core dumps δημιουργούνται αν:
kern.coredump
sysctl είναι ρυθμισμένο σε 1 (κατά προεπιλογή)
Αν η διαδικασία δεν ήταν suid/sgid ή kern.sugid_coredump
είναι 1 (κατά προεπιλογή είναι 0)
Ο περιορισμός AS_CORE
επιτρέπει τη λειτουργία. Είναι δυνατό να καταστείλετε τη δημιουργία core dumps καλώντας ulimit -c 0
και να τις επανενεργοποιήσετε με ulimit -c unlimited
.
Σε αυτές τις περιπτώσεις, το core dumps δημιουργείται σύμφωνα με το kern.corefile
sysctl και αποθηκεύεται συνήθως στο /cores/core/.%P
.
Το ReportCrash αναλύει τις διαδικασίες που καταρρέουν και αποθηκεύει μια αναφορά σφάλματος στο δίσκο. Μια αναφορά σφάλματος περιέχει πληροφορίες που μπορούν να βοηθήσουν έναν προγραμματιστή να διαγνώσει την αιτία ενός σφάλματος.
Για εφαρμογές και άλλες διαδικασίες που εκτελούνται στο πλαίσιο launchd ανά χρήστη, το ReportCrash εκτελείται ως LaunchAgent και αποθηκεύει τις αναφορές σφαλμάτων στους ~/Library/Logs/DiagnosticReports/
του χρήστη.
Για δαίμονες, άλλες διαδικασίες που εκτελούνται στο πλαίσιο launchd του συστήματος και άλλες προνομιακές διαδικασίες, το ReportCrash εκτελείται ως LaunchDaemon και αποθηκεύει τις αναφορές σφαλμάτων στα /Library/Logs/DiagnosticReports
του συστήματος.
Εάν ανησυχείτε για τις αναφορές σφαλμάτων που αποστέλλονται στην Apple, μπορείτε να τις απενεργοποιήσετε. Αν όχι, οι αναφορές σφαλμάτων μπορεί να είναι χρήσιμες για να καταλάβετε πώς κατέρρευσε ένας διακομιστής.
Κατά τη διάρκεια του fuzzing σε MacOS είναι σημαντικό να μην επιτρέπεται στον Mac να κοιμηθεί:
systemsetup -setsleep Never
pmset, System Preferences
Αν κάνετε fuzzing μέσω σύνδεσης SSH είναι σημαντικό να διασφαλίσετε ότι η συνεδρία δεν θα αποσυνδεθεί. Έτσι, αλλάξτε το αρχείο sshd_config με:
TCPKeepAlive Yes
ClientAliveInterval 0
ClientAliveCountMax 0
Δείτε την παρακάτω σελίδα για να μάθετε πώς μπορείτε να βρείτε ποια εφαρμογή είναι υπεύθυνη για τη διαχείριση της καθορισμένης κλίμακας ή πρωτοκόλλου:
macOS File Extension & URL scheme app handlersΑυτό είναι ενδιαφέρον για να βρείτε διαδικασίες που διαχειρίζονται δεδομένα δικτύου:
Ή χρησιμοποιήστε netstat
ή lsof
Λειτουργεί για εργαλεία CLI
Λειτουργεί "απλά" με εργαλεία GUI macOS. Σημειώστε ότι ορισμένες εφαρμογές macOS έχουν συγκεκριμένες απαιτήσεις όπως μοναδικά ονόματα αρχείων, τη σωστή επέκταση, χρειάζεται να διαβάσουν τα αρχεία από το sandbox (~/Library/Containers/com.apple.Safari/Data
)...
Ορισμένα παραδείγματα:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)