macOS XPC Connecting Process Check
XPC Connecting Process Check
Cuando se establece una conexión a un servicio XPC, el servidor verificará si la conexión está permitida. Estas son las verificaciones que normalmente realizaría:
Verificar si el proceso que se conecta está firmado con un certificado firmado por Apple (solo otorgado por Apple).
Si esto no se verifica, un atacante podría crear un certificado falso para coincidir con cualquier otra verificación.
Verificar si el proceso que se conecta está firmado con el certificado de la organización (verificación del ID del equipo).
Si esto no se verifica, cualquier certificado de desarrollador de Apple puede ser utilizado para firmar y conectarse al servicio.
Verificar si el proceso que se conecta contiene un ID de paquete adecuado.
Si esto no se verifica, cualquier herramienta firmada por la misma organización podría ser utilizada para interactuar con el servicio XPC.
(4 o 5) Verificar si el proceso que se conecta tiene un número de versión de software adecuado.
Si esto no se verifica, se podría utilizar un cliente antiguo e inseguro, vulnerable a la inyección de procesos, para conectarse al servicio XPC incluso con las otras verificaciones en su lugar.
(4 o 5) Verificar si el proceso que se conecta tiene un runtime endurecido sin derechos peligrosos (como los que permiten cargar bibliotecas arbitrarias o usar variables de entorno DYLD).
Si esto no se verifica, el cliente podría ser vulnerable a la inyección de código.
Verificar si el proceso que se conecta tiene un derecho que le permite conectarse al servicio. Esto es aplicable para binarios de Apple.
La verificación debe basarse en el token de auditoría del cliente que se conecta en lugar de su ID de proceso (PID) ya que el primero previene ataques de reutilización de PID.
Los desarrolladores raramente utilizan la llamada a la API del token de auditoría ya que es privada, por lo que Apple podría cambiarla en cualquier momento. Además, el uso de API privadas no está permitido en las aplicaciones de la Mac App Store.
Si se utiliza el método
processIdentifier
, podría ser vulnerable.xpc_dictionary_get_audit_token
debería ser utilizado en lugar dexpc_connection_get_audit_token
, ya que el último también podría ser vulnerable en ciertas situaciones.
Communication Attacks
Para más información sobre el ataque de reutilización de PID, consulta:
macOS PID ReusePara más información sobre el ataque xpc_connection_get_audit_token
, consulta:
Trustcache - Downgrade Attacks Prevention
Trustcache es un método defensivo introducido en máquinas Apple Silicon que almacena una base de datos de CDHSAH de binarios de Apple para que solo se puedan ejecutar binarios no modificados permitidos. Lo que previene la ejecución de versiones degradadas.
Code Examples
El servidor implementará esta verificación en una función llamada shouldAcceptNewConnection
.
El objeto NSXPCConnection tiene una propiedad privada auditToken
(la que debería usarse pero podría cambiar) y una propiedad pública processIdentifier
(la que no debería usarse).
El proceso de conexión podría verificarse con algo como:
Si un desarrollador no quiere verificar la versión del cliente, podría comprobar que el cliente no es vulnerable a la inyección de procesos al menos:
Last updated