macOS Apps - Inspecting, debugging and Fuzzing

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλων λογισμικών.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.

Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:


Στατική Ανάλυση

otool

otool -L /bin/ls #List dynamically linked libraries
otool -tv /bin/ps #Decompile application

objdump

objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
objdump -m --syms /bin/ls # Check if the symbol table exists to get function names
objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour

jtool2

Το εργαλείο μπορεί να χρησιμοποιηθεί ως αντικατάσταση για τα codesign, otool, και objdump, και παρέχει μερικές επιπλέον λειτουργίες. Κατεβάστε το εδώ ή εγκαταστήστε το με το brew.

# Install
brew install --cask jtool2

jtool2 -l /bin/ls # Get commands (headers)
jtool2 -L /bin/ls # Get libraries
jtool2 -S /bin/ls # Get symbol info
jtool2 -d /bin/ls # Dump binary
jtool2 -D /bin/ls # Decompile binary

# Get signature information
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator

# Get MIG information
jtool2 -d __DATA.__const myipc_server | grep MIG

Codesign / ldid

Codesign μπορεί να βρεθεί στο macOS ενώ το ldid μπορεί να βρεθεί στο iOS

# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app

# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms

# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

# Sign a binary
codesign -s <cert-name-keychain> toolsdemo

# Get signature info
ldid -h <binary>

# Get entitlements
ldid -e <binary>

# Change entilements
## /tmp/entl.xml is a XML file with the new entitlements to add
ldid -S/tmp/entl.xml <binary>

SuspiciousPackage

SuspiciousPackage είναι ένα εργαλείο χρήσιμο για να επιθεωρήσετε αρχεία .pkg (εγκαταστάτες) και να δείτε τι περιέχουν πριν την εγκατάστασή τους. Αυτοί οι εγκαταστάτες έχουν σενάρια bash preinstall και postinstall που οι δημιουργοί κακόβουλου λογισμικού συνήθως καταχρώνται για να διατηρήσουν το κακόβουλο λογισμικό.

hdiutil

Αυτό το εργαλείο επιτρέπει τη σύνδεση των εικόνων δίσκου Apple (.dmg) για να τις επιθεωρήσετε πριν εκτελέσετε οτιδήποτε:

hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg

Θα τοποθετηθεί στο /Volumes

Objective-C

Μεταδεδομένα

Σημειώστε ότι τα προγράμματα που γράφονται σε Objective-C διατηρούν τις δηλώσεις των κλάσεών τους όταν μεταγλωττίζονται σε δυαδικά Mach-O. Τέτοιες δηλώσεις κλάσεων περιλαμβάνουν το όνομα και τον τύπο των:

  • Η κλάση

  • Οι μέθοδοι της κλάσης

  • Οι μεταβλητές της κλάσης

Μπορείτε να λάβετε αυτές τις πληροφορίες χρησιμοποιώντας το class-dump:

class-dump Kindle.app

Κλήση συνάρτησης

Όταν μια συνάρτηση καλείται σε ένα δυαδικό αρχείο που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει το objc_msgSend. Το οποίο θα καλέσει την τελική συνάρτηση:

Τα ορίσματα που αναμένει αυτή η συνάρτηση είναι τα εξής:

  • Το πρώτο όρισμα (self) είναι "ένας δείκτης που δείχνει στη πρόσβαση της κλάσης που πρόκειται να λάβει το μήνυμα". Ή απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Εάν η μέθοδος είναι μια μέθοδος κλάσης, αυτό θα είναι ένα παράδειγμα του αντικειμένου της κλάσης (συνολικά), ενώ για μια μέθοδο παράδειγμα, το self θα δείχνει σε μια επιτεθείσα περίπτωση της κλάσης ως αντικείμενο.

  • Το δεύτερο όρισμα, (op), είναι "ο επιλογέας της μεθόδου που χειρίζεται το μήνυμα". Ξανά, απλά, αυτό είναι απλά το όνομα της μεθόδου.

  • Τα υπόλοιπα ορίσματα είναι οποιεσδήποτε τιμές που απαιτούνται από τη μέθοδο (op).

Δείτε πώς μπορείτε να αποκτήσετε αυτές τις πληροφορίες εύκολα με το lldb σε ARM64 σε αυτήν τη σελίδα:

pageIntroduction to ARM64v8

x64:

Όρισμα

Καταχώρηση

(για) objc_msgSend

1ο όρισμα

rdi

self: αντικείμενο πάνω στο οποίο καλείται η μέθοδος

2ο όρισμα

rsi

op: όνομα της μεθόδου

3ο όρισμα

rdx

1ο όρισμα στη μέθοδο

4ο όρισμα

rcx

2ο όρισμα στη μέθοδο

5ο όρισμα

r8

3ο όρισμα στη μέθοδο

6ο όρισμα

r9

4ο όρισμα στη μέθοδο

7ο+ όρισμα

rsp+ (στη στοίβα)

5ο+ όρισμα στη μέθοδο

Swift

Με δυαδικά αρχεία Swift, αφού υπάρχει συμβατότητα με Objective-C, μερικές φορές μπορείτε να εξάγετε δηλώσεις χρησιμοποιώντας το class-dump αλλά όχι πάντα.

Με τις εντολές γραμμής εντολών jtool -l ή otool -l είναι δυνατό να βρείτε πολλές ενότητες που ξεκινούν με το πρόθεμα __swift5:

jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64              Mem: 0x000000000-0x100000000    __PAGEZERO
LC 01: LC_SEGMENT_64              Mem: 0x100000000-0x100028000    __TEXT
[...]
Mem: 0x100026630-0x100026d54        __TEXT.__swift5_typeref
Mem: 0x100026d60-0x100027061        __TEXT.__swift5_reflstr
Mem: 0x100027064-0x1000274cc        __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608        __TEXT.__swift5_capture
[...]

Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις πληροφορίες που αποθηκεύονται σε αυτή την ενότητα σε αυτή την ανάρτηση στο blog.

Επιπλέον, τα δυαδικά αρχεία Swift μπορεί να έχουν σύμβολα (για παράδειγμα, οι βιβλιοθήκες χρειάζονται να αποθηκεύουν σύμβολα ώστε οι λειτουργίες τους να μπορούν να κληθούν). Τα σύμβολα συνήθως περιέχουν πληροφορίες σχετικά με το όνομα της λειτουργίας και τα χαρακτηριστικά τους με έναν ασχημοδιατυπωμένο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "αποκωδικοποιητές" που μπορούν να ανακτήσουν το πρωτότυπο όνομα:

# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py

# Swift cli
swift demangle

Συσυμπυκνωμένα δυαδικά αρχεία

  • Έλεγχος για υψηλή εντροπία

  • Έλεγχος των συμβολοσειρών (αν υπάρχει σχεδόν καμία κατανοητή συμβολοσειρά, συμπυκνωμένο)

  • Το εργαλείο UPX packer για MacOS δημιουργεί μια ενότητα που ονομάζεται "__XHDR"

Δυναμική Ανάλυση

Σημείωση ότι για να εκτελέσετε αποσφαλμάτωση δυαδικών, πρέπει να απενεργοποιηθεί το SIP (csrutil disable ή csrutil enable --without debug) ή να αντιγράψετε τα δυαδικά σε έναν προσωρινό φάκελο και να αφαιρέσετε την υπογραφή με την εντολή codesign --remove-signature <διαδρομή-δυαδικού> ή να επιτρέψετε την αποσφαλμάτωση του δυαδικού (μπορείτε να χρησιμοποιήσετε αυτό το σενάριο)

Σημείωση ότι για να εργαλεία συστήματος, (όπως cloudconfigurationd) στο macOS, πρέπει να απενεργοποιηθεί το SIP (απλή αφαίρεση της υπογραφής δεν λειτουργεί).

Ενοποιημένα Αρχεία Καταγραφής

Το MacOS δημιουργεί πολλά αρχεία καταγραφής που μπορούν να είναι πολύ χρήσιμα κατά την εκτέλεση μιας εφαρμογής προσπαθώντας να κατανοήσει τι κάνει.

Επιπλέον, υπάρχουν κάποια αρχεία καταγραφής που θα περιέχουν την ετικέτα <private> για να αποκρύψουν ορισμένες προσωπικές ή αναγνωρίσιμες πληροφορίες του χρήστη ή του υπολογιστή. Ωστόσο, είναι δυνατόν να εγκαταστήσετε ένα πιστοποιητικό για να αποκαλύψετε αυτές τις πληροφορίες. Ακολουθήστε τις εξηγήσεις από εδώ.

Hopper

Αριστερό πλαίσιο

Στο αριστερό πλαίσιο του hopper είναι δυνατόν να δείτε τα σύμβολα (Ετικέτες) του δυαδικού, τη λίστα των διαδικασιών και λειτουργιών (Διαδικασίες) και τις συμβολοσειρές (Συμβολοσειρές). Δεν είναι όλες οι συμβολοσειρές αλλά αυτές που έχουν οριστεί σε διάφορα σημεία του αρχείου Mac-O (όπως _cstring ή objc_methname).

Κεντρικό πλαίσιο

Στο κεντρικό πλαίσιο μπορείτε να δείτε το αποσυναρμολογημένο κώδικα. Και μπορείτε να το δείτε ως ακατέργαστο, ως γράφημα, ως αποδιασυναρμολογημένο και ως δυαδικό κάνοντας κλικ στο αντίστοιχο εικονίδιο:

Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε αναφορές προς/από αυτό το αντικείμενο ή ακόμα να αλλάξετε το όνομά του (αυτό δεν λειτουργεί στον αποδιασυναρμολογημένο ψευδοκώδικα):

Επιπλέον, στο κάτω μέρος μπορείτε να γράψετε εντολές python.

Δεξί πλαίσιο

Στο δεξί πλαίσιο μπορείτε να δείτε ενδιαφέρουσες πληροφορίες όπως το ιστορικό πλοήγησης (ώστε να γνωρίζετε πώς φτάσατε στην τρέχουσα κατάσταση), το γράφημα κλήσεων όπου μπορείτε να δείτε όλες τις λειτουργίες που καλούν αυτή τη λειτουργία και όλες τις λειτουργίες που αυτή η λειτουργία καλεί, και πληροφορίες για τις τοπικές μεταβλητές.

dtrace

Σας επιτρέπει να έχετε πρόσβαση σε εφαρμογές σε ένα εξαιρετικά χαμηλό επίπεδο και παρέχει έναν τρόπο στους χρήστες να καταγράφουν προγράμματα και ακόμα και να αλλάξουν τη ροή εκτέλεσής τους. Το Dtrace χρησιμοποιεί σημεία ελέγχου τα οποία τοποθετούνται σε όλο τον πυρήνα και βρίσκονται σε θέσεις όπως η αρχή και το τέλος των κλήσεων συστήματος.

Το DTrace χρησιμοποιεί τη λειτουργία dtrace_probe_create για να δημιουργήσει ένα σημείο ελέγχου για κάθε κλήση συστήματος. Αυτά τα σημεία ελέγχου μπορούν να ενεργοποιηθούν στο σημείο εισόδου και εξόδου κάθε κλήσης συστήματος. Η αλληλεπίδραση με το DTrace γίνεται μέσω του /dev/dtrace το οποίο είναι διαθέσιμο μόνο για το χρήστη root.

Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP μπορείτε να εκτελέσετε σε λειτουργία ανάκαμψης: csrutil enable --without dtrace

Μπορείτε επίσης να dtrace ή dtruss δυαδικά που έχετε συντάξει.

Οι διαθέσιμοι σημεία ελέγχου του dtrace μπορούν να ανακτηθούν με:

dtrace -l | head
ID   PROVIDER            MODULE                          FUNCTION NAME
1     dtrace                                                     BEGIN
2     dtrace                                                     END
3     dtrace                                                     ERROR
43    profile                                                     profile-97
44    profile                                                     profile-199

Το όνομα της έρευνας αποτελείται από τέσσερα μέρη: τον πάροχο, το module, τη λειτουργία και το όνομα (fbt:mach_kernel:ptrace:entry). Εάν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα το εφαρμόσει ως μπαλαντέρ.

Για να ρυθμίσετε το DTrace ώστε να ενεργοποιεί τις έρευνες και να καθορίζετε ποιες ενέργειες να εκτελούνται όταν ενεργοποιούνται, θα πρέπει να χρησιμοποιήσετε τη γλώσσα D.

Μια πιο λεπτομερής εξήγηση και περισσότερα παραδείγματα μπορούν να βρεθούν στο https://illumos.org/books/dtrace/chp-intro.html

Παραδείγματα

Εκτελέστε man -k dtrace για να εμφανιστούν τα διαθέσιμα scripts του DTrace. Παράδειγμα: sudo dtruss -n binary

  • Σειρά

#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
  • σενάριο

syscall:::entry
/pid == $1/
{
}

#Log every syscall of a PID
sudo dtrace -s script.d 1234
syscall::open:entry
{
printf("%s(%s)", probefunc, copyinstr(arg0));
}
syscall::close:entry
{
printf("%s(%d)\n", probefunc, arg0);
}

#Log files opened and closed by a process
sudo dtrace -s b.d -c "cat /etc/hosts"
syscall:::entry
{
;
}
syscall:::return
{
printf("=%d\n", arg1);
}

#Log sys calls with values
sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"

dtruss

dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000

ktrace

Μπορείτε να χρησιμοποιήσετε αυτό ακόμα και με το SIP ενεργοποιημένο

ktrace trace -s -S -t c -c ls | grep "ls("

ProcessMonitor

ProcessMonitor είναι ένα πολύ χρήσιμο εργαλείο για να ελέγξετε τις ενέργειες που σχετίζονται με έναν διεργασία εκτελεί (για παράδειγμα, να παρακολουθείτε ποιες νέες διεργασίες δημιουργεί μια διεργασία).

SpriteTree

SpriteTree είναι ένα εργαλείο που εκτυπώνει τις σχέσεις μεταξύ διεργασιών. Χρειάζεται να παρακολουθείτε το Mac σας με έναν εντολή όπως sudo eslogger fork exec rename create > cap.json (η τερματική που εκκινεί αυτό απαιτεί FDA). Και στη συνέχεια μπορείτε να φορτώσετε το json σε αυτό το εργαλείο για να δείτε όλες τις σχέσεις:

FileMonitor

FileMonitor επιτρέπει την παρακολούθηση γεγονότων αρχείων (όπως δημιουργία, τροποποιήσεις και διαγραφές) παρέχοντας λεπτομερείς πληροφορίες για τέτοια γεγονότα.

Crescendo

Crescendo είναι ένα GUI εργαλείο με την εμφάνιση και την αίσθηση που οι χρήστες των Windows μπορεί να γνωρίζουν από το Procmon της Microsoft Sysinternal. Αυτό το εργαλείο επιτρέπει την εγγραφή διαφόρων τύπων γεγονότων να ξεκινήσουν και να σταματήσουν, επιτρέπει το φιλτράρισμα αυτών των γεγονότων ανά κατηγορίες όπως αρχείο, διεργασία, δίκτυο, κ.λπ., και παρέχει τη δυνατότητα να αποθηκεύσετε τα καταγεγραμμένα γεγονότα σε μορφή json.

Apple Instruments

Apple Instruments είναι μέρος των εργαλείων Ανάπτυξης του Xcode - χρησιμοποιούνται για την παρακολούθηση της απόδοσης εφαρμογών, την εντοπισμό διαρροών μνήμης και την παρακολούθηση της δραστηριότητας του συστήματος αρχείων.

fs_usage

Επιτρέπει να παρακολουθείτε τις ενέργειες που εκτελούν οι διεργασίες:

fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions

TaskExplorer

Το Taskexplorer είναι χρήσιμο για να δείτε τις βιβλιοθήκες που χρησιμοποιεί ένα δυαδικό αρχείο, τα αρχεία που χρησιμοποιεί και τις δικτυακές συνδέσεις. Ελέγχει επίσης τις διεργασίες του δυαδικού αρχείου έναντι του virustotal και εμφανίζει πληροφορίες σχετικά με το δυαδικό αρχείο.

PT_DENY_ATTACH

Σε αυτήν την ανάρτηση στο blog μπορείτε να βρείτε ένα παράδειγμα σχετικά με το πώς να εκτελέσετε αποσφαλμάτωση σε έναν τρέχοντα daemon που χρησιμοποίησε το PT_DENY_ATTACH για να αποτρέψει την αποσφαλμάτωση ακόμα κι αν το SIP ήταν απενεργοποιημένο.

lldb

Το lldb είναι το εργαλείο de facto για την αποσφαλμάτωση δυαδικών αρχείων στο macOS.

lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor

Μπορείτε να ορίσετε το intel flavor όταν χρησιμοποιείτε το lldb δημιουργώντας ένα αρχείο με το όνομα .lldbinit στον φάκελο του αρχικού σας χρήστη με την παρακάτω γραμμή:

settings set target.x86-disassembly-flavor intel

Μέσα στο lldb, αποθηκεύστε ένα διεργασία με την εντολή process save-core

(lldb) Εντολή

Περιγραφή

run (r)

Έναρξη εκτέλεσης, η οποία θα συνεχιστεί μέχρι να εντοπιστεί ένα σημείο διακοπής ή να τερματιστεί η διεργασία.

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

b -[NSDictionary objectForKey:]

b -a 0x0000000100004bd9

br l #Λίστα σημείων διακοπής

br e/dis <num> #Ενεργοποίηση/Απενεργοποίηση σημείου διακοπής

breakpoint delete <num>

help

help breakpoint #Λήψη βοήθειας για την εντολή διακοπής

help memory write #Λήψη βοήθειας για εγγραφή στη μνήμη

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>

Εμφάνιση της μνήμης ως συμβολοσειρά με κενό τερματισμού.

x/i <reg/memory address>

Εμφάνιση της μνήμης ως εντολή συναρμολόγησης.

x/b <reg/memory address>

Εμφάνιση της μνήμης ως byte.

print object (po)

Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Σημειώστε ότι οι περισσότερες Objective-C APIs ή μέθοδοι της Apple επιστρέφουν αντικείμενα και θα πρέπει να εμφανίζονται μέσω της εντολής "εκτύπωση αντικειμένου" (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 στοιχεία στο reg x1

Κατά την κλήση της λειτουργίας objc_sendMsg, το register rsi κρατά το όνομα της μεθόδου ως συμβολοσειρά με κενό τερματισμού ("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" όταν ο host είναι MacOS αλλά κάτι διαφορετικό όταν είναι μια Εικονική Μηχανή.

  • Παίζοντας με τις τιμές των hw.logicalcpu και hw.physicalcpu κάποια malware προσπαθούν να ανιχνεύσουν αν είναι μια Εικονική Μηχανή.

  • Κάποια malware μπορεί επίσης να ανιχνεύσει αν η μηχανή είναι βασισμένη σε VMware βάσει της διεύθυνσης MAC (00:50:56).

  • Είναι επίσης δυνατό να βρεθεί αν μια διεργασία βρίσκεται υπό αποσφαλμάτωση με έναν απλό κώδικα όπως:

  • if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //διεργασία υπό αποσφαλμάτωση }

  • Μπορεί επίσης να καλέσει την κλήση συστήματος ptrace με τη σημαία PT_DENY_ATTACH. Αυτό εμποδίζει έναν αποσφαλματωτή από το να συνδεθεί και να καταγράψει.

  • Μπορείτε να ελέγξετε αν η συνάρτηση sysctl ή ptrace εισάγεται (αλλά το malware θα μπορούσε να την εισάγει δυναμικά)

  • Όπως αναφέρεται σε αυτήν την ανάλυση, “Νίκη εναντίον Αντι-Ανάλυσης: macOS παραλλαγές ptrace” : “Το μήνυμα Η Διεργασία # τερμάτισε με κατάσταση = 45 (0x0000002d) είναι συνήθως ένα σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί το PT_DENY_ATTACH

Fuzzing

Το ReportCrash αναλύει τις διαδικασίες που καταρρέουν και αποθηκεύει ένα αναφορά κατάρρευσης στο δίσκο. Μια αναφορά κατάρρευσης περιέχει πληροφορίες που μπορούν να βοηθήσουν έναν προγραμματιστή να διαγνώσει τον λόγο της κατάρρευσης. Για εφαρμογές και άλλες διαδικασίες που εκτελούνται στο πλαίσιο εκκίνησης ανά χρήστη, το ReportCrash λειτουργεί ως LaunchAgent και αποθηκεύει τις αναφορές κατάρρευσης στον κατάλογο ~/Library/Logs/DiagnosticReports/ του χρήστη Για daemons, άλλες διαδικασίες που εκτελούνται στο πλαίσιο εκκίνησης του συστήματος και άλλες προνομιούχες διαδικασίες, το ReportCrash λειτουργεί ως LaunchDaemon και αποθηκεύει τις αναφορές κατάρρευσης στον κατάλογο /Library/Logs/DiagnosticReports του συστήματος

Αν ανησυχείτε για το γεγονός ότι οι αναφορές κατάρρευσης στέλνονται στην Apple μπορείτε να τις απενεργοποιήσετε. Διαφορετικά, οι αναφορές κατάρρευσης μπορεί να είναι χρήσιμες για να καταλάβετε πώς κατέρρευσε ένας διακομιστής.

#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

#To re-enable crash reporting:
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist

Υπνος

Κατά την εκτέλεση fuzzing σε ένα MacOS είναι σημαντικό να μην επιτραπεί στο Mac να μπει σε κατάσταση ύπνου:

Διακοπή SSH

Εάν εκτελείτε fuzzing μέσω μιας σύνδεσης SSH, είναι σημαντικό να βεβαιωθείτε ότι η συνεδρία δεν θα λήξει. Επομένως, αλλάξτε το αρχείο sshd_config με:

  • TCPKeepAlive Yes

  • ClientAliveInterval 0

  • ClientAliveCountMax 0

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Εσωτερικοί Χειριστές

Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς μπορείτε να βρείτε ποια εφαρμογή είναι υπεύθυνη για το χειρισμό του συγκεκριμένου σχήματος ή πρωτοκόλλου:

pagemacOS File Extension & URL scheme app handlers

Απαρίθμηση Δικτυακών Διεργασιών

Αυτό είναι ενδιαφέρον για να βρείτε διεργασίες που διαχειρίζονται δεδομένα δικτύου:

dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
sort -u recv.log > procs.txt
cat procs.txt

Ή χρησιμοποιήστε το netstat ή το lsof

Libgmalloc

lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib" -o "run arg1 arg2" -o "bt" -o "reg read" -o "dis -s \$pc-32 -c 24 -m -F intel" -o "quit"

Fuzzers

Λειτουργεί για εργαλεία CLI

Λειτουργεί απλά με εργαλεία GUI του macOS. Σημειώστε ότι μερικές εφαρμογές macOS έχουν συγκεκριμένες απαιτήσεις όπως μοναδικά ονόματα αρχείων, τη σωστή επέκταση, ανάγκη να διαβάζουν τα αρχεία από το sandbox (~/Library/Containers/com.apple.Safari/Data)...

Μερικά παραδείγματα:

# iBooks
litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez

# -l : Local
# -c : cmdline with FUZZ word (if not stdin is used)
# -i : input directory or file
# -o : Dir to output crashes
# -t : Dir to output runtime fuzzing artifacts
# -x : Tmeout for the run (default is 1)
# -n : Num of fuzzing iterations (default is 1)
# -e : enable second round fuzzing where any crashes found are reused as inputs
# -z : enable malloc debug helpers

# Font Book
litefuzz -l -c "/System/Applications/Font Book.app/Contents/MacOS/Font Book FUZZ" -i input/fonts -o crashes/font-book -x 2 -n 500000 -ez

# smbutil (using pcap capture)
litefuzz -lk -c "smbutil view smb://localhost:4455" -a tcp://localhost:4455 -i input/mac-smb-resp -p -n 100000 -z

# screensharingd (using pcap capture)
litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash screensharingd -p -n 100000

Περισσότερες Πληροφορίες για Fuzzing στο MacOS

Αναφορές

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλων λογισμικών.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των ληστειών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.

Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated