Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα αποθετήρια HackTricks και HackTricks Cloud στο github.
Βασικές Πληροφορίες
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Inter-Process Communication, είναι ένα πλαίσιο για επικοινωνία μεταξύ διεργασιών στο macOS και το iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση ασφαλών, ασύγχρονων κλήσεων μεθόδων μεταξύ διαφορετικών διεργασιών στο σύστημα. Αποτελεί μέρος του ασφαλούς παραδείγματος της Apple, επιτρέποντας την δημιουργία εφαρμογών με διαχωρισμένα προνόμια, όπου κάθε συνιστώσα λειτουργεί με μόνο τα δικαιώματα που χρειάζεται για να εκτελέσει την εργασία της, περιορίζοντας έτσι την πιθανή ζημιά από μια παραβιασμένη διεργασία.
Το XPC χρησιμοποιεί μια μορφή Διαδικασίας Επικοινωνίας (IPC), που είναι ένα σύνολο μεθόδων για διάφορα προγράμματα που εκτελούνται στο ίδιο σύστημα να ανταλλάσσουν δεδομένα.
Οι κύρια οφέλη του XPC περιλαμβάνουν:
Ασφάλεια: Με τον διαχωρισμό της εργασίας σε διάφορες διεργασίες, κάθε διεργασία μπορεί να έχει μόνο τα δικαιώματα που χρειάζεται. Αυτό σημαίνει ότι ακόμα και αν μια διεργασία παραβιαστεί, έχει περιορισμένη ικανότητα να προκαλέσει ζημιά.
Σταθερότητα: Το XPC βοηθά στην απομόνωση των καταρρίψεων στη συνιστώσα όπου συμβαίνουν. Εάν μια διεργασία καταρρεύσει, μπορεί να επανεκκινηθεί χωρίς να επηρεάζει το υπόλοιπο σύστημα.
Απόδοση: Το XPC επιτρέπει εύκολη ταυτόχρονη εκτέλεση, καθώς διάφορες εργασίες μπορούν να εκτελούνται ταυτόχρονα σε διάφορες διεργασίες.
Το μόνο μειονέκτημα είναι ότι η διαχωρισμένη εφαρμογή σε πολλές διεργασίες που επικοινωνούν μέσω XPC είναι λιγότερο αποδοτική. Ωστόσο, στα σημερινά συστήματα αυτό δεν είναι σχεδόν αντιληπτό και τα οφέλη είναι μεγαλύτερα.
Εφαρμογές Ειδικές XPC
Οι συνιστώσες XPC μιας εφαρμογής βρίσκονται μέσα στην ίδια την εφαρμογή. Για παράδειγμα, στο Safari μπορείτε να τις βρείτε στο /Applications/Safari.app/Contents/XPCServices. Έχουν την κατάληξη .xpc (όπως com.apple.Safari.SandboxBroker.xpc) και είναι επίσης δέσμες με τον κύριο δυαδικό αρχείο μέσα σε αυτό: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker και ένα Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist
Όπως μπορείτε να σκεφτείτε, μια συνιστώσα XPC θα έχει διαφορετικά δικαιώματα και προνόμια από τις άλλες συνιστώσες XPC ή το κύριο δυαδικό αρχείο της εφαρμογής. ΕΚΤΟΣ αν ένα XPC service έχει ρυθμιστεί με την JoinExistingSession να έχει την τιμή "True" στο αρχείο Info.plist του. Σε αυτήν την περίπτωση, το XPC service θα εκτελείται στην ίδια ασφαλή συνεδρία με την εφαρμογή που το κάλεσε.
Τα XPC services ξεκινούν από τον launchd όταν απαιτούνται και τερματίζονται όταν ολοκληρώνονται όλες οι εργασίες για να απελευθερωθούν οι πόροι του συστήματος. **Οι εφαρμογές μπορούν να χρησιμοποι
Αυτά που βρίσκονται στο LaunchDameons τρέχουν από τον ριζικό χρήστη. Έτσι, αν ένα μη προνομιούχο διεργασία μπορεί να επικοινωνήσει με ένα από αυτά, μπορεί να αναβαθμίσει τα δικαιώματά του.
Μηνύματα XPC Event
Οι εφαρμογές μπορούν να εγγραφούν σε διάφορα μηνύματα γεγονότων, επιτρέποντάς τους να εκτελούνται κατά παραγγελία όταν συμβούν τέτοια γεγονότα. Η ρύθμιση για αυτές τις υπηρεσίες γίνεται σε αρχεία plist του launchd, που βρίσκονται στους ίδιους καταλόγους με τα προηγούμενα και περιέχουν ένα επιπλέον κλειδί LaunchEvent.
Έλεγχος Σύνδεσης Διεργασίας XPC
Όταν μια διεργασία προσπαθεί να καλέσει μια μέθοδο μέσω μιας σύνδεσης XPC, η XPC υπηρεσία πρέπει να ελέγξει αν η διεργασία αυτή έχει άδεια να συνδεθεί. Εδώ παρουσιάζονται οι συνηθισμένοι τρόποι ελέγχου και οι συνηθισμένες παγίδες:
Η Apple επιτρέπει επίσης στις εφαρμογές να διαμορφώσουν ορισμένα δικαιώματα και τον τρόπο απόκτησής τους, έτσι ώστε αν η καλούσα διεργασία τα έχει, θα επιτρέπεται να καλέσει μια μέθοδο από την XPC υπηρεσία:
Για να καταγράψετε τα μηνύματα XPC, μπορείτε να χρησιμοποιήσετε το xpcspy, το οποίο χρησιμοποιεί το Frida.
# Installpip3installxpcspypip3installxpcspy--no-deps# To not make xpcspy install Frida 15 and downgrade your Frida installation# Start sniffingxpcspy-U-r-W<bundle-id>## Using filters (i: for input, o: for output)xpcspy-U<prog-name>-t'i:com.apple.*'-t'o:com.apple.*'-r
This is a simple example of an XPC client in C. It creates a connection to the com.apple.securityd Mach service, which is a privileged service responsible for security-related tasks on macOS. The xpc_connection_create_mach_service function is used to create the connection.
The xpc_connection_set_event_handler function sets a block of code to be executed when an event is received from the server. In this example, it checks if the received event is a dictionary and prints the value of the "description" key.
The xpc_connection_resume function starts the connection and allows events to be received.
The sleep function is used to keep the program running for 10 seconds before releasing the connection with xpc_release.
This is just a basic example to demonstrate the usage of XPC in macOS. In a real-world scenario, you would typically perform more complex operations and handle different types of events.
Το αρχείο xyz.hacktricks.service.plist περιέχει τις ρυθμίσεις για ένα XPC service στο macOS. Το XPC (Inter-Process Communication) είναι ένα μηχανισμός που επιτρέπει την επικοινωνία μεταξύ διαφορετικών διεργασιών στο macOS. Αυτό το αρχείο περιέχει πληροφορίες για το πώς θα εκτελεστεί το XPC service και ποιες δικαιώματα θα έχει.
Για να εκμεταλλευτείτε το XPC service, μπορείτε να τροποποιήσετε αυτό το αρχείο για να αλλάξετε τις ρυθμίσεις του. Μπορείτε να προσθέσετε δικαιώματα προνομίων ή να αλλάξετε τον τρόπο εκτέλεσης του XPC service. Αυτό μπορεί να οδηγήσει σε εκμετάλλευση προνομίων και ανέβασμα δικαιωμάτων στο σύστημα.
Είναι σημαντικό να είστε προσεκτικοί κατά την τροποποίηση αυτού του αρχείου, καθώς μπορεί να προκαλέσετε προβλήματα στο σύστημα σας ή να προκαλέσετε ανεπιθύμητες συνέπειες. Πριν προχωρήσετε, συνιστάται να έχετε κατανόηση του τρόπου λειτουργίας του XPC service και των επιπτώσεών του.
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε το XPC service στο macOS, ανατρέξτε στο αντίστοιχο κεφάλαιο του βιβλίου.
# Compile the server & clientgccxpc_server.c-oxpc_servergccxpc_client.c-oxpc_client# Save server on it's locationcpxpc_server/tmp# Load daemonsudocpxyz.hacktricks.service.plist/Library/LaunchDaemonssudolaunchctlload/Library/LaunchDaemons/xyz.hacktricks.service.plist# Call client./xpc_client# Cleansudolaunchctlunload/Library/LaunchDaemons/xyz.hacktricks.service.plistsudorm/Library/LaunchDaemons/xyz.hacktricks.service.plist/tmp/xpc_server
Το αρχείο xyz.hacktricks.svcoc.plist περιέχει τις ρυθμίσεις για την εκτέλεση του xyz.hacktricks.svcoc στο macOS. Αυτό το αρχείο παρέχει πληροφορίες για το πώς ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια στο σύστημα.
Για να εκμεταλλευτεί ένα XPC, ο επιθετικός πρέπει να ανακαλύψει τον κατάλληλο κώδικα XPC και να τον εκμεταλλευτεί για να εκτελέσει κακόβουλο κώδικα. Αυτό μπορεί να γίνει με τη χρήση εργαλείων όπως το xpcproxy ή το xpcd. Ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια χρησιμοποιώντας μια από τις παρακάτω μεθόδους:
Εκμετάλλευση ευπάθειας στον κώδικα XPC για να εκτελέσει κακόβουλο κώδικα.
Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή μνήμης για να αποκτήσει πρόσβαση σε ευαίσθητες πληροφορίες.
Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή αρχείων για να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα.
Ο επιθετικός μπορεί επίσης να εκμεταλλευτεί το XPC για να εκτελέσει κακόβουλο κώδικα σε ένα εξωτερικό σύστημα, χρησιμοποιώντας την απομακρυσμένη εκτέλεση κώδικα XPC.
Για να προστατευθείτε από τις επιθέσεις XPC, μπορείτε να εφαρμόσετε τις παρακάτω μεθόδους ασφάλειας:
Ελέγξτε την αυθεντικότητα των XPC που εκτελούνται στο σύστημά σας.
Περιορίστε τα δικαιώματα πρόσβασης των XPC.
Εφαρμόστε μέτρα ασφαλείας για την ανάγνωση/εγγραφή μνήμης και αρχείων από τα XPC.
Ενημερώστε το σύστημά σας με τις τελευταίες ενημερώσεις ασφαλείας.
Αυτές οι προφυλάξεις μπορούν να βοηθήσουν στην αποτροπή των επιθέσεων XPC και στην προστασία του συστήματός σας από προνόμια εκτελέσιμου κώδικα.
```bash # Compile the server & client gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
## Πελάτης μέσα σε κώδικα Dylb
Ο παρακάτω κώδικας παρουσιάζει έναν πελάτη που εκτελείται μέσα σε έναν κώδικα Dylb.
```objective-c
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char *argv[]) {
void *handle;
int (*add)(int, int);
char *error;
handle = dlopen("./libadd.dylib", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
add = dlsym(handle, "add");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
return 1;
}
printf("The sum is: %d\n", add(5, 3));
dlclose(handle);
return 0;
}
Ο παραπάνω κώδικας φορτώνει δυναμικά τη βιβλιοθήκη libadd.dylib και καλεί τη συνάρτηση add που βρίσκεται μέσα σε αυτήν. Η συνάρτηση add πραγματοποιεί την πρόσθεση δύο αριθμών και επιστρέφει το αποτέλεσμα. Το αποτέλεσμα εκτυπώνεται στην οθόνη.
Για να εκτελέσετε τον παραπάνω κώδικα, πρέπει να δημιουργήσετε τη βιβλιοθήκη libadd.dylib που περιέχει τη συνάρτηση add. Μπορείτε να το κάνετε αυτό με τη χρήση του Xcode ή του gcc.
Για παράδειγμα, μπορείτε να δημιουργήσετε ένα αρχείο με τον κώδικα της συνάρτησης add και να το μεταγλωττίσετε σε μια βιβλιοθήκη χρησιμοποιώντας την ακόλουθη εντολή:
gcc-shared-olibadd.dylibadd.c
Αφού δημιουργήσετε τη βιβλιοθήκη, μπορείτε να μεταγλωττίσετε και να εκτελέσετε τον παραπάνω κώδικα.