macOS Process Abuse
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Processes Basic Information
Μια διαδικασία είναι μια περίπτωση ενός εκτελέσιμου που τρέχει, ωστόσο οι διαδικασίες δεν εκτελούν κώδικα, αυτές είναι νήματα. Επομένως, οι διαδικασίες είναι απλώς δοχεία για τρέχοντα νήματα παρέχοντας τη μνήμη, τους περιγραφείς, τις θύρες, τις άδειες...
Παραδοσιακά, οι διαδικασίες ξεκινούσαν μέσα σε άλλες διαδικασίες (εκτός από το PID 1) καλώντας fork
που θα δημιουργούσε μια ακριβή αντιγραφή της τρέχουσας διαδικασίας και στη συνέχεια η παιδική διαδικασία θα καλούσε γενικά execve
για να φορτώσει το νέο εκτελέσιμο και να το εκτελέσει. Στη συνέχεια, εισήχθη το vfork
για να επιταχύνει αυτή τη διαδικασία χωρίς καμία αντιγραφή μνήμης.
Στη συνέχεια, εισήχθη το posix_spawn
συνδυάζοντας vfork
και execve
σε μία κλήση και αποδεχόμενο σημαίες:
POSIX_SPAWN_RESETIDS
: Επαναφορά των αποτελεσματικών ταυτοτήτων στις πραγματικές ταυτότητεςPOSIX_SPAWN_SETPGROUP
: Ορισμός συσχέτισης ομάδας διαδικασιώνPOSUX_SPAWN_SETSIGDEF
: Ορισμός της προεπιλεγμένης συμπεριφοράς σήματοςPOSIX_SPAWN_SETSIGMASK
: Ορισμός μάσκας σήματοςPOSIX_SPAWN_SETEXEC
: Εκτέλεση στην ίδια διαδικασία (όπως τοexecve
με περισσότερες επιλογές)POSIX_SPAWN_START_SUSPENDED
: Έναρξη σε αναστολή_POSIX_SPAWN_DISABLE_ASLR
: Έναρξη χωρίς ASLR_POSIX_SPAWN_NANO_ALLOCATOR:
Χρήση του Nano allocator της libmalloc_POSIX_SPAWN_ALLOW_DATA_EXEC:
Επιτρέπεται τοrwx
σε τμήματα δεδομένωνPOSIX_SPAWN_CLOEXEC_DEFAULT
: Κλείσιμο όλων των περιγραφών αρχείων κατά την εκτέλεση (2) από προεπιλογή_POSIX_SPAWN_HIGH_BITS_ASLR:
Τυχαία τα υψηλά bits της μετατόπισης ASLR
Επιπλέον, το posix_spawn
επιτρέπει τον καθορισμό ενός πίνακα posix_spawnattr
που ελέγχει ορισμένες πτυχές της διαδικασίας που δημιουργείται, και posix_spawn_file_actions
για να τροποποιήσει την κατάσταση των περιγραφέων.
Όταν μια διαδικασία πεθαίνει, στέλνει τον κωδικό επιστροφής στην γονική διαδικασία (αν η γονική διαδικασία έχει πεθάνει, η νέα γονική διαδικασία είναι το PID 1) με το σήμα SIGCHLD
. Η γονική διαδικασία πρέπει να αποκτήσει αυτή την τιμή καλώντας wait4()
ή waitid()
και μέχρι να συμβεί αυτό, η παιδική διαδικασία παραμένει σε κατάσταση ζόμπι όπου είναι ακόμα καταχωρημένη αλλά δεν καταναλώνει πόρους.
PIDs
Τα PIDs, ταυτοί διαδικασίας, προσδιορίζουν μια μοναδική διαδικασία. Στο XNU, οι PIDs είναι 64bit και αυξάνονται μονοτονικά και ποτέ δεν επαναλαμβάνονται (για να αποφεύγονται οι καταχρήσεις).
Ομάδες Διαδικασιών, Συνεδρίες & Συνομοσπονδίες
Διαδικασίες μπορούν να εισαχθούν σε ομάδες για να διευκολυνθεί η διαχείρισή τους. Για παράδειγμα, οι εντολές σε ένα σενάριο shell θα είναι στην ίδια ομάδα διαδικασιών, έτσι είναι δυνατό να σημανθούν μαζί χρησιμοποιώντας kill για παράδειγμα.
Είναι επίσης δυνατό να ομαδοποιηθούν οι διαδικασίες σε συνεδρίες. Όταν μια διαδικασία ξεκινά μια συνεδρία (setsid(2)
), οι παιδικές διαδικασίες τοποθετούνται μέσα στη συνεδρία, εκτός αν ξεκινήσουν τη δική τους συνεδρία.
Η συνομοσπονδία είναι ένας άλλος τρόπος για να ομαδοποιηθούν οι διαδικασίες στο Darwin. Μια διαδικασία που συμμετέχει σε μια συνομοσπονδία της επιτρέπει να έχει πρόσβαση σε πόρους πισίνας, μοιράζοντας ένα βιβλίο ή αντιμετωπίζοντας το Jetsam. Οι συνομοσπονδίες έχουν διαφορετικούς ρόλους: Ηγέτης, Υπηρεσία XPC, Επέκταση.
Διαπιστευτήρια & Προσωπικότητες
Κάθε διαδικασία διατηρεί διαπιστευτήρια που προσδιορίζουν τα προνόμιά της στο σύστημα. Κάθε διαδικασία θα έχει μία κύρια uid
και μία κύρια gid
(αν και μπορεί να ανήκει σε πολλές ομάδες).
Είναι επίσης δυνατό να αλλάξετε την ταυτότητα χρήστη και ομάδας αν το δυαδικό αρχείο έχει το bit setuid/setgid
.
Υπάρχουν πολλές συναρτήσεις για ορισμό νέων uids/gids.
Η syscall persona
παρέχει ένα εναλλακτικό σύνολο διαπιστευτηρίων. Η υιοθέτηση μιας προσωπικότητας υποθέτει την uid
, gid
και τις συμμετοχές ομάδας ταυτόχρονα. Στον κώδικα πηγής είναι δυνατή η εύρεση της δομής:
Threads Basic Information
POSIX Threads (pthreads): Το macOS υποστηρίζει τα POSIX threads (
pthreads
), τα οποία είναι μέρος ενός τυπικού API νημάτων για C/C++. Η υλοποίηση των pthreads στο macOS βρίσκεται στο/usr/lib/system/libsystem_pthread.dylib
, που προέρχεται από το δημόσια διαθέσιμο έργοlibpthread
. Αυτή η βιβλιοθήκη παρέχει τις απαραίτητες συναρτήσεις για τη δημιουργία και διαχείριση νημάτων.Creating Threads: Η συνάρτηση
pthread_create()
χρησιμοποιείται για τη δημιουργία νέων νημάτων. Εσωτερικά, αυτή η συνάρτηση καλεί τηbsdthread_create()
, η οποία είναι μια χαμηλού επιπέδου κλήση συστήματος συγκεκριμένη για τον πυρήνα XNU (τον πυρήνα στον οποίο βασίζεται το macOS). Αυτή η κλήση συστήματος παίρνει διάφορες σημαίες που προέρχονται από τοpthread_attr
(attributes) που καθορίζουν τη συμπεριφορά του νήματος, συμπεριλαμβανομένων των πολιτικών προγραμματισμού και του μεγέθους της στοίβας.
Default Stack Size: Το προεπιλεγμένο μέγεθος στοίβας για νέα νήματα είναι 512 KB, το οποίο είναι επαρκές για τυπικές λειτουργίες αλλά μπορεί να προσαρμοστεί μέσω των χαρακτηριστικών του νήματος αν χρειάζεται περισσότερος ή λιγότερος χώρος.
Thread Initialization: Η συνάρτηση
__pthread_init()
είναι κρίσιμη κατά τη ρύθμιση του νήματος, χρησιμοποιώντας το επιχείρημαenv[]
για να αναλύσει τις μεταβλητές περιβάλλοντος που μπορεί να περιλαμβάνουν λεπτομέρειες σχετικά με την τοποθεσία και το μέγεθος της στοίβας.
Thread Termination in macOS
Exiting Threads: Τα νήματα τερματίζονται συνήθως καλώντας τη
pthread_exit()
. Αυτή η συνάρτηση επιτρέπει σε ένα νήμα να εξέλθει καθαρά, εκτελώντας την απαραίτητη καθαριότητα και επιτρέποντας στο νήμα να στείλει μια τιμή επιστροφής πίσω σε οποιουσδήποτε συμμετέχοντες.Thread Cleanup: Κατά την κλήση της
pthread_exit()
, καλείται η συνάρτησηpthread_terminate()
, η οποία διαχειρίζεται την αφαίρεση όλων των σχετικών δομών νήματος. Αποδεσμεύει τις θύρες νήματος Mach (Mach είναι το υποσύστημα επικοινωνίας στον πυρήνα XNU) και καλεί τηbsdthread_terminate
, μια κλήση συστήματος που αφαιρεί τις δομές επιπέδου πυρήνα που σχετίζονται με το νήμα.
Synchronization Mechanisms
Για να διαχειριστεί την πρόσβαση σε κοινόχρηστους πόρους και να αποφευχθούν οι συνθήκες αγώνα, το macOS παρέχει αρκετές πρωτογενείς συγχρονισμού. Αυτές είναι κρίσιμες σε περιβάλλοντα πολλαπλών νημάτων για να διασφαλιστεί η ακεραιότητα των δεδομένων και η σταθερότητα του συστήματος:
Mutexes:
Regular Mutex (Signature: 0x4D555458): Τυπικός mutex με αποτύπωμα μνήμης 60 bytes (56 bytes για τον mutex και 4 bytes για την υπογραφή).
Fast Mutex (Signature: 0x4d55545A): Παρόμοιος με έναν κανονικό mutex αλλά βελτιστοποιημένος για ταχύτερες λειτουργίες, επίσης 60 bytes σε μέγεθος.
Condition Variables:
Χρησιμοποιούνται για την αναμονή συγκεκριμένων συνθηκών, με μέγεθος 44 bytes (40 bytes συν μια υπογραφή 4 bytes).
Condition Variable Attributes (Signature: 0x434e4441): Χαρακτηριστικά ρύθμισης για τις μεταβλητές συνθηκών, μεγέθους 12 bytes.
Once Variable (Signature: 0x4f4e4345):
Διασφαλίζει ότι ένα κομμάτι κώδικα αρχικοποίησης εκτελείται μόνο μία φορά. Το μέγεθός του είναι 12 bytes.
Read-Write Locks:
Επιτρέπει πολλαπλούς αναγνώστες ή έναν συγγραφέα τη φορά, διευκολύνοντας την αποδοτική πρόσβαση σε κοινά δεδομένα.
Read Write Lock (Signature: 0x52574c4b): Με μέγεθος 196 bytes.
Read Write Lock Attributes (Signature: 0x52574c41): Χαρακτηριστικά για τους κλειδώματα ανάγνωσης-γραφής, 20 bytes σε μέγεθος.
Τα τελευταία 4 bytes αυτών των αντικειμένων χρησιμοποιούνται για την ανίχνευση υπερχειλίσεων.
Thread Local Variables (TLV)
Thread Local Variables (TLV) στο πλαίσιο των αρχείων Mach-O (η μορφή για εκτελέσιμα στο macOS) χρησιμοποιούνται για να δηλώσουν μεταβλητές που είναι συγκεκριμένες για κάθε νήμα σε μια εφαρμογή πολλαπλών νημάτων. Αυτό διασφαλίζει ότι κάθε νήμα έχει τη δική του ξεχωριστή παρουσία μιας μεταβλητής, παρέχοντας έναν τρόπο να αποφευχθούν οι συγκρούσεις και να διατηρηθεί η ακεραιότητα των δεδομένων χωρίς να χρειάζονται ρητές μηχανισμοί συγχρονισμού όπως οι mutexes.
Στη C και σε σχετικές γλώσσες, μπορείτε να δηλώσετε μια μεταβλητή τοπικού νήματος χρησιμοποιώντας τη λέξη-κλειδί __thread
. Να πώς λειτουργεί στο παράδειγμά σας:
Αυτό το απόσπασμα ορίζει το tlv_var
ως μια μεταβλητή τοπική στο νήμα. Κάθε νήμα που εκτελεί αυτόν τον κώδικα θα έχει το δικό του tlv_var
, και οι αλλαγές που κάνει ένα νήμα στο tlv_var
δεν θα επηρεάσουν το tlv_var
σε άλλο νήμα.
Στο δυαδικό αρχείο Mach-O, τα δεδομένα που σχετίζονται με τις τοπικές μεταβλητές νήματος οργανώνονται σε συγκεκριμένες ενότητες:
__DATA.__thread_vars
: Αυτή η ενότητα περιέχει τα μεταδεδομένα σχετικά με τις τοπικές μεταβλητές νήματος, όπως τους τύπους τους και την κατάσταση αρχικοποίησης.__DATA.__thread_bss
: Αυτή η ενότητα χρησιμοποιείται για τις τοπικές μεταβλητές νήματος που δεν έχουν αρχικοποιηθεί ρητά. Είναι ένα μέρος της μνήμης που έχει διατεθεί για δεδομένα που έχουν αρχικοποιηθεί σε μηδέν.
Το Mach-O παρέχει επίσης μια συγκεκριμένη API που ονομάζεται tlv_atexit
για τη διαχείριση των τοπικών μεταβλητών νήματος όταν ένα νήμα εξέρχεται. Αυτή η API σας επιτρέπει να καταχωρείτε καταστροφείς—ειδικές συναρτήσεις που καθαρίζουν τα τοπικά δεδομένα νήματος όταν ένα νήμα τερματίζει.
Προτεραιότητες Νημάτων
Η κατανόηση των προτεραιοτήτων νημάτων περιλαμβάνει την εξέταση του πώς το λειτουργικό σύστημα αποφασίζει ποια νήματα θα εκτελούνται και πότε. Αυτή η απόφαση επηρεάζεται από το επίπεδο προτεραιότητας που έχει ανατεθεί σε κάθε νήμα. Στα macOS και σε συστήματα παρόμοια με το Unix, αυτό διαχειρίζεται χρησιμοποιώντας έννοιες όπως το nice
, renice
και τις κλάσεις Ποιότητας Υπηρεσίας (QoS).
Nice και Renice
Nice:
Η τιμή
nice
μιας διαδικασίας είναι ένας αριθμός που επηρεάζει την προτεραιότητά της. Κάθε διαδικασία έχει μια τιμή nice που κυμαίνεται από -20 (η υψηλότερη προτεραιότητα) έως 19 (η χαμηλότερη προτεραιότητα). Η προεπιλεγμένη τιμή nice όταν δημιουργείται μια διαδικασία είναι συνήθως 0.Μια χαμηλότερη τιμή nice (πιο κοντά στο -20) καθιστά μια διαδικασία πιο "εγωιστική", δίνοντάς της περισσότερο χρόνο CPU σε σύγκριση με άλλες διαδικασίες με υψηλότερες τιμές nice.
Renice:
Το
renice
είναι μια εντολή που χρησιμοποιείται για να αλλάξει την τιμή nice μιας ήδη εκτελούμενης διαδικασίας. Αυτό μπορεί να χρησιμοποιηθεί για να προσαρμόσει δυναμικά την προτεραιότητα των διαδικασιών, είτε αυξάνοντας είτε μειώνοντας την κατανομή χρόνου CPU τους με βάση νέες τιμές nice.Για παράδειγμα, αν μια διαδικασία χρειάζεται περισσότερους πόρους CPU προσωρινά, μπορείτε να μειώσετε την τιμή nice της χρησιμοποιώντας το
renice
.
Κλάσεις Ποιότητας Υπηρεσίας (QoS)
Οι κλάσεις QoS είναι μια πιο σύγχρονη προσέγγιση στη διαχείριση των προτεραιοτήτων νημάτων, ιδιαίτερα σε συστήματα όπως το macOS που υποστηρίζουν το Grand Central Dispatch (GCD). Οι κλάσεις QoS επιτρέπουν στους προγραμματιστές να κατηγοριοποιούν τη δουλειά σε διαφορετικά επίπεδα με βάση τη σημασία ή την επείγουσα ανάγκη τους. Το macOS διαχειρίζεται την προτεραιοποίηση νημάτων αυτόματα με βάση αυτές τις κλάσεις QoS:
Διαδραστικός Χρήστης:
Αυτή η κλάση είναι για εργασίες που αλληλεπιδρούν αυτή τη στιγμή με τον χρήστη ή απαιτούν άμεσα αποτελέσματα για να παρέχουν καλή εμπειρία χρήστη. Αυτές οι εργασίες έχουν την υψηλότερη προτεραιότητα για να διατηρούν την διεπαφή ανταγωνιστική (π.χ., κινούμενα σχέδια ή χειρισμός γεγονότων).
Πρωτοβουλία Χρήστη:
Εργασίες που ξεκινά ο χρήστης και αναμένει άμεσα αποτελέσματα, όπως το άνοιγμα ενός εγγράφου ή το κλικ σε ένα κουμπί που απαιτεί υπολογισμούς. Αυτές είναι υψηλής προτεραιότητας αλλά κάτω από τις διαδραστικές χρήστη.
Χρήσιμες:
Αυτές οι εργασίες είναι μακροχρόνιες και συνήθως δείχνουν έναν δείκτη προόδου (π.χ., λήψη αρχείων, εισαγωγή δεδομένων). Έχουν χαμηλότερη προτεραιότητα από τις εργασίες που ξεκινούν οι χρήστες και δεν χρειάζεται να ολοκληρωθούν άμεσα.
Υπόβαθρο:
Αυτή η κλάση είναι για εργασίες που λειτουργούν στο παρασκήνιο και δεν είναι ορατές στον χρήστη. Αυτές μπορεί να είναι εργασίες όπως η ευρετηρίαση, η συγχρονισμός ή τα αντίγραφα ασφαλείας. Έχουν την χαμηλότερη προτεραιότητα και ελάχιστη επίδραση στην απόδοση του συστήματος.
Χρησιμοποιώντας τις κλάσεις QoS, οι προγραμματιστές δεν χρειάζεται να διαχειρίζονται τους ακριβείς αριθμούς προτεραιότητας αλλά να εστιάζουν στη φύση της εργασίας, και το σύστημα βελτιστοποιεί τους πόρους CPU αναλόγως.
Επιπλέον, υπάρχουν διαφορετικές πολιτικές προγραμματισμού νημάτων που ρέουν για να καθορίσουν ένα σύνολο παραμέτρων προγραμματισμού που ο προγραμματιστής θα λάβει υπόψη. Αυτό μπορεί να γίνει χρησιμοποιώντας το thread_policy_[set/get]
. Αυτό μπορεί να είναι χρήσιμο σε επιθέσεις συνθήκης αγώνα.
Κατάχρηση Διαδικασιών MacOS
Το MacOS, όπως και οποιοδήποτε άλλο λειτουργικό σύστημα, παρέχει μια ποικιλία μεθόδων και μηχανισμών για να αλληλεπιδρούν, να επικοινωνούν και να μοιράζονται δεδομένα οι διαδικασίες. Ενώ αυτές οι τεχνικές είναι απαραίτητες για την αποδοτική λειτουργία του συστήματος, μπορούν επίσης να καταχραστούν από κακόβουλους παράγοντες για να εκτελούν κακόβουλες δραστηριότητες.
Εισαγωγή Βιβλιοθήκης
Η Εισαγωγή Βιβλιοθήκης είναι μια τεχνική όπου ένας επιτιθέμενος αναγκάζει μια διαδικασία να φορτώσει μια κακόβουλη βιβλιοθήκη. Μόλις εισαχθεί, η βιβλιοθήκη εκτελείται στο πλαίσιο της στοχοθετημένης διαδικασίας, παρέχοντας στον επιτιθέμενο τις ίδιες άδειες και πρόσβαση με τη διαδικασία.
macOS Library InjectionHooking Συναρτήσεων
Το Hooking Συναρτήσεων περιλαμβάνει την παρεμβολή κλήσεων συναρτήσεων ή μηνυμάτων μέσα σε έναν κώδικα λογισμικού. Με το hooking συναρτήσεων, ένας επιτιθέμενος μπορεί να τροποποιήσει τη συμπεριφορά μιας διαδικασίας, να παρακολουθήσει ευαίσθητα δεδομένα ή ακόμη και να αποκτήσει έλεγχο ροής εκτέλεσης.
macOS Function HookingΕπικοινωνία Μεταξύ Διαδικασιών
Η Επικοινωνία Μεταξύ Διαδικασιών (IPC) αναφέρεται σε διάφορες μεθόδους με τις οποίες ξεχωριστές διαδικασίες μοιράζονται και ανταλλάσσουν δεδομένα. Ενώ η IPC είναι θεμελιώδης για πολλές νόμιμες εφαρμογές, μπορεί επίσης να καταχραστεί για να υπονομεύσει την απομόνωση διαδικασιών, να διαρρεύσει ευαίσθητες πληροφορίες ή να εκτελέσει μη εξουσιοδοτημένες ενέργειες.
macOS IPC - Inter Process CommunicationΕισαγωγή Εφαρμογών Electron
Οι εφαρμογές Electron που εκτελούνται με συγκεκριμένες μεταβλητές περιβάλλοντος θα μπορούσαν να είναι ευάλωτες σε εισαγωγή διαδικασίας:
macOS Electron Applications InjectionΕισαγωγή Chromium
Είναι δυνατόν να χρησιμοποιηθούν οι σημαίες --load-extension
και --use-fake-ui-for-media-stream
για να εκτελέσετε μια επίθεση man in the browser που επιτρέπει την κλοπή πληκτρολογήσεων, κυκλοφορίας, cookies, την εισαγωγή scripts σε σελίδες...:
Dirty NIB
Τα αρχεία NIB ορίζουν στοιχεία διεπαφής χρήστη (UI) και τις αλληλεπιδράσεις τους μέσα σε μια εφαρμογή. Ωστόσο, μπορούν να εκτελούν αυθαίρετες εντολές και ο Gatekeeper δεν σταματά μια ήδη εκτελούμενη εφαρμογή από το να εκτελείται αν ένα αρχείο NIB τροποποιηθεί. Επομένως, θα μπορούσαν να χρησιμοποιηθούν για να κάνουν αυθαίρετα προγράμματα να εκτελούν αυθαίρετες εντολές:
macOS Dirty NIBΕισαγωγή Εφαρμογών Java
Είναι δυνατόν να καταχραστεί ορισμένες δυνατότητες της java (όπως η _JAVA_OPTS
μεταβλητή περιβάλλοντος) για να κάνει μια εφαρμογή java να εκτελεί αυθαίρετο κώδικα/εντολές.
Εισαγωγή Εφαρμογών .Net
Είναι δυνατόν να εισαχθεί κώδικας σε εφαρμογές .Net με κατάχρηση της λειτουργικότητας αποσφαλμάτωσης .Net (όχι προστατευμένη από τις προστασίες του macOS όπως η σκληρή εκτέλεση).
macOS .Net Applications InjectionΕισαγωγή Perl
Ελέγξτε διάφορες επιλογές για να κάνετε ένα σενάριο Perl να εκτελεί αυθαίρετο κώδικα στο:
macOS Perl Applications InjectionΕισαγωγή Ruby
Είναι επίσης δυνατόν να καταχραστεί η μεταβλητή περιβάλλοντος ruby για να εκτελούνται αυθαίρετα scripts:
macOS Ruby Applications InjectionΕισαγωγή Python
Αν η μεταβλητή περιβάλλοντος PYTHONINSPECT
είναι ρυθμισμένη, η διαδικασία python θα εισέλθει σε μια CLI python μόλις ολοκληρωθεί. Είναι επίσης δυνατόν να χρησιμοποιηθεί το PYTHONSTARTUP
για να υποδείξει ένα σενάριο python που θα εκτελείται στην αρχή μιας διαδραστικής συνεδρίας.
Ωστόσο, σημειώστε ότι το σενάριο PYTHONSTARTUP
δεν θα εκτελείται όταν η PYTHONINSPECT
δημιουργεί τη διαδραστική συνεδρία.
Άλλες μεταβλητές περιβάλλοντος όπως PYTHONPATH
και PYTHONHOME
θα μπορούσαν επίσης να είναι χρήσιμες για να κάνουν μια εντολή python να εκτελεί αυθαίρετο κώδικα.
Σημειώστε ότι τα εκτελέσιμα αρχεία που έχουν μεταγλωττιστεί με pyinstaller
δεν θα χρησιμοποιούν αυτές τις μεταβλητές περιβάλλοντος ακόμη και αν εκτελούνται χρησιμοποιώντας μια ενσωματωμένη python.
Συνολικά, δεν μπόρεσα να βρω έναν τρόπο να κάνω την python να εκτελεί αυθαίρετο κώδικα καταχρώντας τις μεταβλητές περιβάλλοντος. Ωστόσο, οι περισσότεροι άνθρωποι εγκαθιστούν την python χρησιμοποιώντας το Hombrew, το οποίο θα εγκαταστήσει την python σε μια γραφτή τοποθεσία για τον προεπιλεγμένο διαχειριστή χρήστη. Μπορείτε να την καταλάβετε με κάτι όπως:
Ακόμα και root θα εκτελέσει αυτόν τον κώδικα όταν τρέχει python.
Ανίχνευση
Shield
Shield (Github) είναι μια εφαρμογή ανοιχτού κώδικα που μπορεί να ανιχνεύσει και να μπλοκάρει τις ενέργειες έγχυσης διαδικασιών:
Χρησιμοποιώντας Περιβαλλοντικές Μεταβλητές: Θα παρακολουθεί την παρουσία οποιασδήποτε από τις παρακάτω περιβαλλοντικές μεταβλητές:
DYLD_INSERT_LIBRARIES
,CFNETWORK_LIBRARY_PATH
,RAWCAMERA_BUNDLE_PATH
καιELECTRON_RUN_AS_NODE
Χρησιμοποιώντας κλήσεις
task_for_pid
: Για να βρει πότε μια διαδικασία θέλει να αποκτήσει το task port μιας άλλης που επιτρέπει την έγχυση κώδικα στη διαδικασία.Παράμετροι εφαρμογών Electron: Κάποιος μπορεί να χρησιμοποιήσει το
--inspect
,--inspect-brk
και--remote-debugging-port
ως παράμετρο γραμμής εντολών για να ξεκινήσει μια εφαρμογή Electron σε λειτουργία αποσφαλμάτωσης, και έτσι να εγχύσει κώδικα σε αυτήν.Χρησιμοποιώντας symlinks ή hardlinks: Συνήθως η πιο κοινή κατάχρηση είναι να τοποθετήσουμε έναν σύνδεσμο με τα δικαιώματα του χρήστη μας, και να τον δείξουμε σε μια τοποθεσία υψηλότερης προνομιακής πρόσβασης. Η ανίχνευση είναι πολύ απλή και για τα hardlink και για τα symlinks. Εάν η διαδικασία που δημιουργεί τον σύνδεσμο έχει διαφορετικό επίπεδο προνομίων από το αρχείο στόχο, δημιουργούμε μια ειδοποίηση. Δυστυχώς, στην περίπτωση των symlinks, η μπλοκάρισμα δεν είναι δυνατό, καθώς δεν έχουμε πληροφορίες για τον προορισμό του συνδέσμου πριν από τη δημιουργία του. Αυτό είναι ένας περιορισμός του πλαισίου EndpointSecurity της Apple.
Κλήσεις που γίνονται από άλλες διαδικασίες
Στο αυτό το blog post μπορείτε να βρείτε πώς είναι δυνατό να χρησιμοποιήσετε τη συνάρτηση task_name_for_pid
για να αποκτήσετε πληροφορίες σχετικά με άλλες διαδικασίες που εγχέουν κώδικα σε μια διαδικασία και στη συνέχεια να αποκτήσετε πληροφορίες για αυτήν την άλλη διαδικασία.
Σημειώστε ότι για να καλέσετε αυτή τη συνάρτηση πρέπει να είστε ο ίδιος uid με αυτόν που εκτελεί τη διαδικασία ή root (και επιστρέφει πληροφορίες για τη διαδικασία, όχι έναν τρόπο για να εγχύσετε κώδικα).
Αναφορές
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated