XPC, що означає міжпроцесну комунікацію XNU (ядра, яке використовується в macOS), є фреймворком для комунікації між процесами на 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 налаштована з JoinExistingSession, встановленим на «True» у своєму файлі Info.plist. У цьому випадку служба XPC буде працювати в тій самій сеансі безпеки, що й додаток, який її викликав.
Служби XPC запускаються за допомогою launchd при необхідності та зупиняються, як тільки всі завдання виконані, для звільнення системних ресурсів. Специфічні для додатків компоненти XPC можуть використовуватися лише додатком, тим самим зменшуючи ризик, пов'язаний з можливими вразливостями.
Служби XPC для всієї системи
Служби XPC для всієї системи доступні всім користувачам. Ці служби, які можуть бути запущені або типу Mach, повинні бути визначені в файлах plist, розташованих у вказаних каталогах, таких як /System/Library/LaunchDaemons, /Library/LaunchDaemons, /System/Library/LaunchAgents або /Library/LaunchAgents.
У цих файлах plist буде ключ з назвою MachServices з назвою служби та ключ з назвою Program з шляхом до бінарного файлу:
Ті, що знаходяться в LaunchDameons, запускаються користувачем root. Тому, якщо непривілейований процес може спілкуватися з одним з них, він може мати можливість підвищити привілеї.
Повідомлення подій XPC
Додатки можуть підписуватися на різні події повідомлень, що дозволяє їм ініціювати за потреби ці події. Налаштування для цих служб виконується в файлах launchd plist, розташованих в тих самих каталогах, що й попередні, і містять додатковий ключ 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 code creates an XPC connection to the com.apple.xpcd service and sets an event handler to print any received events. The connection is then resumed and the program sleeps for 10 seconds before exiting.
# 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
XPC (XPC Services) is a macOS inter-process communication technology that allows processes to communicate with each other. It is commonly used for system services and background daemons.
XPC Basics
Service: A macOS service that can be called by other processes.
Connection: The communication channel between the client and the service.
Message: Data sent between the client and the service.
XPC Vulnerabilities
Insecure Connections: Lack of encryption or authentication can lead to unauthorized access.
Message Tampering: Modifying XPC messages can lead to unexpected behavior or privilege escalation.
Memory Corruption: Buffer overflows or other memory-related vulnerabilities can be exploited for code execution.
Exploiting XPC
Identify XPC Services: Use tools like launchctl or XPC Explorer to find XPC services on the system.
Analyze Service: Understand the service's functionality and message structure.
Fuzzing: Send malformed or unexpected data to the service to trigger vulnerabilities.
Reverse Engineering: Analyze the service binary to find security weaknesses.
Exploit Development: Develop exploits based on identified vulnerabilities.
Mitigation
Secure Connections: Use encryption and authentication to protect XPC communications.
Input Validation: Validate and sanitize input data to prevent message tampering.
XPC is a powerful feature in macOS, but it can introduce security risks if not implemented and used correctly. Understanding XPC basics and common vulnerabilities is essential for securing macOS systems.
```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