Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub deHackTricks y HackTricks Cloud.
Información Básica
XPC, que significa XNU (el kernel utilizado por macOS) inter-Process Communication, es un marco de trabajo para la comunicación entre procesos en macOS e iOS. XPC proporciona un mecanismo para realizar llamadas a métodos seguras y asíncronas entre diferentes procesos en el sistema. Es parte del paradigma de seguridad de Apple, permitiendo la creación de aplicaciones con separación de privilegios donde cada componente funciona con solo los permisos que necesita para realizar su trabajo, limitando así el daño potencial de un proceso comprometido.
XPC utiliza una forma de Comunicación Inter-Procesos (IPC), que es un conjunto de métodos para que diferentes programas que se ejecutan en el mismo sistema envíen y reciban datos.
Los beneficios principales de XPC incluyen:
Seguridad: Al separar el trabajo en diferentes procesos, a cada proceso se le pueden otorgar solo los permisos que necesita. Esto significa que incluso si un proceso está comprometido, tiene una capacidad limitada para causar daño.
Estabilidad: XPC ayuda a aislar los fallos al componente donde ocurren. Si un proceso se bloquea, puede reiniciarse sin afectar al resto del sistema.
Rendimiento: XPC permite una fácil concurrencia, ya que diferentes tareas pueden ejecutarse simultáneamente en diferentes procesos.
El único inconveniente es que separar una aplicación en varios procesos que se comunican a través de XPC es menos eficiente. Pero en los sistemas actuales esto casi no se nota y los beneficios son mejores.
Servicios XPC Específicos de Aplicaciones
Los componentes XPC de una aplicación están dentro de la propia aplicación. Por ejemplo, en Safari puedes encontrarlos en /Applications/Safari.app/Contents/XPCServices. Tienen la extensión .xpc (como com.apple.Safari.SandboxBroker.xpc) y son también paquetes con el binario principal dentro de él: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker y un Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist
Como podrías estar pensando, un componente XPC tendrá diferentes derechos y privilegios que los otros componentes XPC o el binario principal de la aplicación. EXCEPTO si un servicio XPC está configurado con JoinExistingSession establecido en "True" en su archivo Info.plist. En este caso, el servicio XPC se ejecutará en la misma sesión de seguridad que la aplicación que lo llamó.
Los servicios XPC son iniciados por launchd cuando se requieren y se cierran una vez que todas las tareas están completas para liberar recursos del sistema. Los componentes XPC específicos de la aplicación solo pueden ser utilizados por la aplicación, reduciendo así el riesgo asociado con posibles vulnerabilidades.
Servicios XPC de Ámbito del Sistema
Los servicios XPC de ámbito del sistema están accesibles para todos los usuarios. Estos servicios, ya sean de tipo launchd o Mach, necesitan estar definidos en archivos plist ubicados en directorios especificados como /System/Library/LaunchDaemons, /Library/LaunchDaemons, /System/Library/LaunchAgents, o /Library/LaunchAgents.
Estos archivos plist tendrán una clave llamada MachServices con el nombre del servicio, y una clave llamada Program con la ruta al binario:
Los que están en LaunchDameons son ejecutados por root. Por lo tanto, si un proceso no privilegiado puede comunicarse con uno de estos, podría ser capaz de escalar privilegios.
Mensajes de Eventos XPC
Las aplicaciones pueden suscribirse a diferentes mensajes de eventos, lo que les permite ser iniciadas bajo demanda cuando ocurren dichos eventos. La configuración de estos servicios se realiza en archivos plist de launchd, ubicados en los mismos directorios que los anteriores y contienen una clave extra LaunchEvent.
Verificación del Proceso de Conexión XPC
Cuando un proceso intenta llamar a un método a través de una conexión XPC, el servicio XPC debería verificar si ese proceso tiene permiso para conectarse. Aquí están las formas comunes de verificarlo y las trampas comunes:
Apple también permite que las aplicaciones configuren algunos derechos y cómo obtenerlos para que, si el proceso que llama los tiene, se le permita llamar a un método del servicio XPC:
Para espiar los mensajes XPC podrías usar xpcspy que utiliza 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
No hay contenido en inglés proporcionado para traducir al español. Por favor, proporcione el texto en inglés que necesita ser traducido.
# 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
Ejemplo de Código en Objective-C para Comunicación 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