mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-09 19:58:53 +00:00
96 lines
7.1 KiB
Markdown
96 lines
7.1 KiB
Markdown
# Verificación de conexión de proceso XPC en macOS
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Consigue el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
## Verificación de conexión de proceso XPC
|
|
|
|
Cuando se establece una conexión a un servicio XPC, el servidor verificará si la conexión está permitida. Estas son las comprobaciones que suele realizar:
|
|
|
|
1. Comprobar si el **proceso de conexión está firmado con un certificado firmado por Apple** (sólo otorgado por Apple).
|
|
* Si esto **no está verificado**, un atacante podría crear un **certificado falso** para coincidir con cualquier otra comprobación.
|
|
2. Comprobar si el proceso de conexión está firmado con el **certificado de la organización** (verificación de ID de equipo).
|
|
* Si esto **no está verificado**, **cualquier certificado de desarrollador** de Apple puede ser utilizado para firmar y conectarse al servicio.
|
|
3. Comprobar si el proceso de conexión **contiene un ID de paquete adecuado**.
|
|
4. Comprobar si el proceso de conexión tiene un **número de versión de software adecuado**.
|
|
* Si esto **no está verificado**, 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 comprobaciones en su lugar.
|
|
5. Comprobar si el proceso de conexión tiene un **derecho** que le permite conectarse al servicio. Esto es aplicable para binarios de Apple.
|
|
6. La **verificación** debe estar **basada** en el **token de auditoría del cliente de conexión** en lugar de su **ID de proceso (PID)** ya que lo primero previene los ataques de reutilización de PID.
|
|
* Los desarrolladores rara vez utilizan la llamada a la API de 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.
|
|
|
|
Para obtener más información sobre la comprobación de ataques de reutilización de PID:
|
|
|
|
{% content-ref url="macos-pid-reuse.md" %}
|
|
[macos-pid-reuse.md](macos-pid-reuse.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Ejemplos de código
|
|
|
|
El servidor implementará esta **verificación** en una función llamada **`shouldAcceptNewConnection`**.
|
|
```objectivec
|
|
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
|
|
//Check connection
|
|
return YES;
|
|
}
|
|
```
|
|
{% endcode %}
|
|
|
|
El objeto NSXPCConnection tiene una propiedad **privada** llamada **`auditToken`** (la que debería ser utilizada pero podría cambiar) y una propiedad **pública** llamada **`processIdentifier`** (la que no debería ser utilizada).
|
|
|
|
El proceso de conexión podría ser verificado con algo como:
|
|
|
|
{% code overflow="wrap" %}
|
|
```objectivec
|
|
[...]
|
|
SecRequirementRef requirementRef = NULL;
|
|
NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktricks.service\" and certificate leaf [subject.CN] = \"TEAMID\" and info [CFBundleShortVersionString] >= \"1.0\"";
|
|
/* Check:
|
|
- Signed by a cert signed by Apple
|
|
- Check the bundle ID
|
|
- Check the TEAMID of the signing cert
|
|
- Check the version used
|
|
*/
|
|
|
|
// Check the requirements
|
|
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
|
|
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
|
|
```
|
|
Si un desarrollador no quiere comprobar la versión del cliente, al menos podría comprobar que el cliente no es vulnerable a la inyección de procesos:
|
|
|
|
{% code overflow="wrap" %}
|
|
```objectivec
|
|
[...]
|
|
CFDictionaryRef csInfo = NULL;
|
|
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
|
|
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue];
|
|
const uint32_t cs_hard = 0x100; // don't load invalid page.
|
|
const uint32_t cs_kill = 0x200; // Kill process if page is invalid
|
|
const uint32_t cs_restrict = 0x800; // Prevent debugging
|
|
const uint32_t cs_require_lv = 0x2000; // Library Validation
|
|
const uint32_t cs_runtime = 0x10000; // hardened runtime
|
|
if ((csFlags & (cs_hard | cs_require_lv)) {
|
|
return Yes; // Accept connection
|
|
}
|
|
```
|
|
{% endcode %}
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|