XPC, što je skraćenica za XNU (jezgro koje koristi macOS) inter-procesnu komunikaciju, je okvir za komunikaciju između procesa na macOS-u i iOS-u. XPC pruža mehanizam za izvršavanje bezbednih, asinhronih poziva metoda između različitih procesa na sistemu. To je deo Apple-ovog sigurnosnog paradigme, koji omogućava kreiranje aplikacija sa odvojenim privilegijama gde svaki komponent radi sa samo dozvolama koje su mu potrebne da obavi svoj posao, čime se ograničava potencijalna šteta od kompromitovanog procesa.
XPC koristi oblik Inter-Procesne Komunikacije (IPC), koji je skup metoda za različite programe koji se izvršavaju na istom sistemu kako bi slali podatke napred i nazad.
Glavne prednosti XPC-a uključuju:
Bezbednost: Razdvajanjem posla u različite procese, svaki proces može dobiti samo dozvole koje su mu potrebne. To znači da čak i ako je proces kompromitovan, ima ograničene mogućnosti da nanese štetu.
Stabilnost: XPC pomaže izolaciju rušenja na komponentu gde se događaju. Ako se proces sruši, može se ponovo pokrenuti bez uticaja na ostatak sistema.
Performanse: XPC omogućava jednostavnu konkurentnost, jer različiti zadaci mogu se izvršavati istovremeno u različitim procesima.
Jedini nedostatak je da razdvajanje aplikacije u nekoliko procesa koji komuniciraju putem XPC-a je manje efikasno. Ali u današnjim sistemima to je gotovo neprimetno, a prednosti su veće.
XPC servisi specifični za aplikaciju
XPC komponente aplikacije su unutar same aplikacije. Na primer, u Safari-ju ih možete pronaći u /Applications/Safari.app/Contents/XPCServices. Imaju ekstenziju .xpc (kao com.apple.Safari.SandboxBroker.xpc) i takođe su paketi sa glavnim binarnim fajlom unutar njega: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker i Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist
Kao što možda mislite, XPC komponenta će imati različite privilegije i dozvole od drugih XPC komponenti ili glavnog binarnog fajla aplikacije. OSIM ako je XPC servis konfigurisan sa JoinExistingSession postavljenim na "True" u svom Info.plist fajlu. U tom slučaju, XPC servis će se izvršavati u istoj sigurnosnoj sesiji kao aplikacija koja ga je pozvala.
XPC servisi se pokreću pomoću launchd kada su potrebni i zaustavljaju se kada su sve zadatke završili kako bi se oslobodili sistemski resursi. XPC komponente specifične za aplikaciju mogu koristiti samo aplikacija, čime se smanjuje rizik od potencijalnih ranjivosti.
XPC servisi na nivou sistema
XPC servisi na nivou sistema su dostupni svim korisnicima. Ovi servisi, bilo da su u pitanju launchd ili Mach-tip, moraju biti definisani u plist fajlovima koji se nalaze u određenim direktorijumima kao što su /System/Library/LaunchDaemons, /Library/LaunchDaemons, /System/Library/LaunchAgents, ili /Library/LaunchAgents.
Ovi plist fajlovi će imati ključ pod nazivom MachServices sa imenom servisa, i ključ pod nazivom Program sa putanjom do binarnog fajla:
Oni u LaunchDameons direktorijumu se pokreću kao root. Dakle, ako neprivilegovani proces može da komunicira sa jednim od njih, mogao bi da dobije privilegije.
XPC Event poruke
Aplikacije mogu pretplatiti na različite događajne poruke, omogućavajući im da se iniciraju po potrebi kada se takvi događaji dese. Postavljanje ovih usluga se vrši u launchd plist fajlovima, smeštenim u istim direktorijumima kao i prethodni, i sadrže dodatni ključ LaunchEvent.
Provera povezanog XPC procesa
Kada proces pokuša da pozove metod putem XPC konekcije, XPC servis treba da proveri da li je taj proces dozvoljen da se poveže. Evo uobičajenih načina za proveru i uobičajenih zamki:
Apple takođe omogućava aplikacijama da konfigurišu određena prava i način njihovog dobijanja, tako da ako pozivajući proces ima ta prava, biće dozvoljeno pozivanje metoda iz XPC servisa:
Da biste prisluškivali XPC poruke, možete koristiti xpcspy koji koristi 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
xyz.hacktricks.service.plist je datoteka koja se koristi za konfigurisanje XPC servisa na macOS operativnom sistemu. XPC (Cross-Process Communication) je mehanizam koji omogućava komunikaciju između različitih procesa na macOS-u. Ova datoteka definiše parametre i postavke za XPC servis, kao što su putanja do izvršne datoteke, argumenti komandne linije i okruženje. Kada se pokrene XPC servis, macOS koristi ovu datoteku za konfigurisanje servisa i uspostavljanje komunikacije sa drugim procesima.
# 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 je konfiguracioni fajl za XPC servis na macOS-u. XPC (XPC Services) je mehanizam za interprocesnu komunikaciju (IPC) koji omogućava komunikaciju između različitih procesa na macOS-u. Ovaj fajl definiše kako će se XPC servis pokrenuti i konfigurisati.
Da biste iskoristili XPC servis, možete izmeniti ovaj fajl kako biste promenili način na koji se servis pokreće ili konfiguriše. Na primer, možete promeniti putanju do izvršnog fajla servisa ili dodati dodatne argumente za pokretanje.
Važno je napomenuti da izmena ovog fajla može dovesti do neispravnog rada XPC servisa ili čak do sigurnosnih propusta. Stoga, pre nego što izmenite ovaj fajl, preporučuje se da pažljivo proučite dokumentaciju i razumete kako XPC servisi funkcionišu na macOS-u. Takođe, preporučuje se da napravite rezervnu kopiju originalnog fajla pre izmene kako biste mogli da se vratite na prethodno stanje ako nešto pođe po zlu.
Ukratko, xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macOS-u koji definiše način pokretanja i konfiguracije servisa. Izmenom ovog fajla možete prilagoditi ponašanje XPC servisa, ali budite oprezni da ne izazovete neispravan rad ili sigurnosne propuste.
```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
## Klijent unutar Dylb koda
### Opis
Dylb je biblioteka za dinamičko učitavanje koda na macOS operativnom sistemu. Ova biblioteka omogućava izvršavanje koda unutar drugih procesa. Kada se koristi u kombinaciji sa XPC (Inter-procesna komunikacija) mehanizmom, Dylb može biti iskorišćen za postizanje privilegija eskalacije i zloupotrebu procesa na macOS sistemu.
### Klijent unutar Dylb koda
Klijent unutar Dylb koda je tehnika koja omogućava izvršavanje koda unutar ciljnog procesa putem Dylb biblioteke. Ova tehnika se koristi za komunikaciju sa XPC servisima unutar ciljnog procesa i izvršavanje određenih funkcionalnosti.
Da bi se koristila ova tehnika, potrebno je prvo učitati Dylb biblioteku unutar ciljnog procesa. Zatim se može uspostaviti komunikacija sa XPC servisima i izvršiti odgovarajuće funkcije.
Ova tehnika može biti korisna u situacijama kada je potrebno izvršiti određene zadatke unutar ciljnog procesa, kao što je prikupljanje informacija ili izvršavanje određenih komandi.
### Primer koda
```c
#include <dlfcn.h>
#include <stdio.h>
int main() {
void* handle = dlopen("/path/to/dylb/library.dylib", RTLD_LAZY);
if (handle == NULL) {
printf("Failed to load Dylb library\n");
return 1;
}
// Učitavanje funkcije iz Dylb biblioteke
void (*executeCode)(void) = dlsym(handle, "executeCode");
if (executeCode == NULL) {
printf("Failed to find executeCode function\n");
dlclose(handle);
return 1;
}
// Izvršavanje funkcije unutar ciljnog procesa
executeCode();
dlclose(handle);
return 0;
}
Zaključak
Korišćenje klijenta unutar Dylb koda omogućava izvršavanje koda unutar ciljnog procesa putem Dylb biblioteke. Ova tehnika može biti korisna za postizanje privilegija eskalacije i zloupotrebu procesa na macOS sistemu.