mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 09:27:32 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
7f50c829c4
commit
6c27f0311c
3 changed files with 207 additions and 35 deletions
|
@ -179,11 +179,12 @@
|
|||
* [macOS .Net Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md)
|
||||
* [macOS Security Protections](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md)
|
||||
* [macOS Gatekeeper](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md)
|
||||
* [macOS SIP](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md)
|
||||
* [macOS Launch/Environment Constraints](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md)
|
||||
* [macOS Sandbox](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md)
|
||||
* [macOS Default Sandbox Debug](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md)
|
||||
* [macOS Sandbox Debug & Bypass](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md)
|
||||
* [macOS Office Sandbox Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md)
|
||||
* [macOS SIP](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md)
|
||||
* [macOS TCC](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md)
|
||||
* [macOS TCC Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md)
|
||||
* [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Protecciones de seguridad en macOS
|
||||
# Protecciones de seguridad de macOS
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
|||
|
||||
* ¿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 el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||||
* Obtén 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
@ -22,9 +22,9 @@ Más información en:
|
|||
[macos-gatekeeper.md](macos-gatekeeper.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Limitaciones de procesos
|
||||
## Limitantes de procesos
|
||||
|
||||
### SIP - Protección de Integridad del Sistema
|
||||
### SIP - Protección de la integridad del sistema
|
||||
|
||||
{% content-ref url="macos-sip.md" %}
|
||||
[macos-sip.md](macos-sip.md)
|
||||
|
@ -46,49 +46,38 @@ El Sandbox de macOS **limita las aplicaciones** que se ejecutan dentro del sandb
|
|||
[macos-tcc](macos-tcc/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Restricciones de lanzamiento
|
||||
### Restricciones de inicio
|
||||
|
||||
Controla **desde dónde y qué** puede lanzar un **binario firmado por Apple**:
|
||||
Las restricciones de inicio en macOS son una característica de seguridad para **regular el inicio de procesos** mediante la definición de **quién puede iniciar** un proceso, **cómo** y **desde dónde**. Introducidas en macOS Ventura, categorizan los binarios del sistema en categorías de restricciones dentro de una **caché de confianza**. Cada binario ejecutable tiene reglas establecidas para su inicio, incluyendo restricciones **propias**, **padres** y **responsables**. Extendidas a aplicaciones de terceros como Restricciones de **Entorno** en macOS Sonoma, estas características ayudan a mitigar posibles explotaciones del sistema al gobernar las condiciones de inicio de procesos.
|
||||
|
||||
* No se puede lanzar una aplicación directamente si debe ser ejecutada por launchd
|
||||
* No se puede ejecutar una aplicación fuera de la ubicación de confianza (como /System/)
|
||||
|
||||
El archivo que contiene información sobre estas restricciones se encuentra en macOS en **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`** (y en iOS parece que está en **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**).
|
||||
|
||||
Parece que era posible utilizar la herramienta [**img4tool**](https://github.com/tihmstar/img4tool) **para extraer la caché**:
|
||||
```bash
|
||||
img4tool -e in.img4 -o out.bin
|
||||
```
|
||||
Sin embargo, no he podido compilarlo en M1. También puedes usar [**pyimg4**](https://github.com/m1stadev/PyIMG4), pero el siguiente script no funciona con esa salida.
|
||||
|
||||
Luego, puedes usar un script como [**este**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) para extraer datos.
|
||||
|
||||
A partir de esos datos, puedes verificar las aplicaciones con un valor de **restricciones de inicio de `0`**, que son las que no están restringidas ([**ver aquí**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) para saber qué significa cada valor).
|
||||
{% content-ref url="macos-launch-environment-constraints.md" %}
|
||||
[macos-launch-environment-constraints.md](macos-launch-environment-constraints.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## MRT - Herramienta de eliminación de malware
|
||||
|
||||
La Herramienta de eliminación de malware (MRT) es otra parte de la infraestructura de seguridad de macOS. Como su nombre indica, la función principal de MRT es **eliminar malware conocido de sistemas infectados**.
|
||||
|
||||
Una vez que se detecta malware en un Mac (ya sea por XProtect o por otros medios), se puede utilizar MRT para **eliminar automáticamente el malware**. MRT funciona en segundo plano y se ejecuta normalmente cuando se actualiza el sistema o cuando se descarga una nueva definición de malware (parece que las reglas que MRT utiliza para detectar malware están dentro del binario).
|
||||
Una vez que se detecta malware en un Mac (ya sea por XProtect o por otros medios), se puede utilizar MRT para **eliminar automáticamente el malware**. MRT funciona en segundo plano de forma silenciosa y se ejecuta normalmente cuando se actualiza el sistema o cuando se descarga una nueva definición de malware (parece que las reglas que MRT tiene para detectar malware están dentro del binario).
|
||||
|
||||
Si bien tanto XProtect como MRT forman parte de las medidas de seguridad de macOS, desempeñan funciones diferentes:
|
||||
Si bien tanto XProtect como MRT son parte de las medidas de seguridad de macOS, realizan funciones diferentes:
|
||||
|
||||
* **XProtect** es una herramienta preventiva. **Verifica los archivos a medida que se descargan** (a través de ciertas aplicaciones) y, si detecta algún tipo de malware conocido, **impide que el archivo se abra**, evitando así que el malware infecte el sistema en primer lugar.
|
||||
* **MRT**, por otro lado, es una herramienta **reactiva**. Opera después de que se haya detectado malware en un sistema, con el objetivo de eliminar el software ofensivo y limpiar el sistema.
|
||||
* **XProtect** es una herramienta preventiva. **Verifica los archivos al descargarlos** (a través de ciertas aplicaciones) y si detecta algún tipo de malware conocido, **impide que el archivo se abra**, evitando así que el malware infecte el sistema en primer lugar.
|
||||
* **MRT**, por otro lado, es una herramienta **reactiva**. Opera después de que se haya detectado malware en un sistema, con el objetivo de eliminar el software ofensivo para limpiar el sistema.
|
||||
|
||||
La aplicación MRT se encuentra en **`/Library/Apple/System/Library/CoreServices/MRT.app`**
|
||||
|
||||
## Gestión de tareas en segundo plano
|
||||
|
||||
**macOS** ahora **alerta** cada vez que una herramienta utiliza una **técnica conocida para persistir la ejecución de código** (como elementos de inicio de sesión, demonios, etc.), para que el usuario sepa mejor **qué software está persistiendo**.
|
||||
**macOS** ahora **alerta** cada vez que una herramienta utiliza una **técnica conocida para persistir la ejecución de código** (como elementos de inicio de sesión, demonios...), para que el usuario sepa mejor **qué software está persistiendo**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (711).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Esto se ejecuta con un **daemon** ubicado en `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/backgroundtaskmanagementd` y el **agente** en `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Support/BackgroundTaskManagementAgent.app`
|
||||
|
||||
La forma en que **`backgroundtaskmanagementd`** sabe si algo está instalado en una carpeta persistente es **obteniendo los FSEvents** y creando algunos **manejadores** para ellos.
|
||||
La forma en que **`backgroundtaskmanagementd`** sabe que algo está instalado en una carpeta persistente es **obteniendo los FSEvents** y creando algunos **manejadores** para ellos.
|
||||
|
||||
Además, hay un archivo plist que contiene **aplicaciones conocidas** que persisten con frecuencia y que son mantenidas por Apple, ubicado en: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist`
|
||||
Además, hay un archivo plist que contiene **aplicaciones conocidas** que persisten con frecuencia mantenidas por Apple ubicado en: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist`
|
||||
```json
|
||||
[...]
|
||||
"us.zoom.ZoomDaemon" => {
|
||||
|
@ -143,7 +132,7 @@ kill -SIGSTOP 1011
|
|||
ps -o state 1011
|
||||
T
|
||||
```
|
||||
* **Bug**: Si el **proceso que creó la persistencia** se cierra rápidamente después, el demonio intentará **obtener información** sobre él, **fallará** y **no podrá enviar el evento** que indica que algo nuevo está persistiendo.
|
||||
* **Error**: Si el **proceso que creó la persistencia se cierra rápidamente después**, el demonio intentará **obtener información** al respecto, **fallará** y **no podrá enviar el evento** que indica que algo nuevo está persistiendo.
|
||||
|
||||
Referencias y **más información sobre BTM**:
|
||||
|
||||
|
@ -151,12 +140,6 @@ Referencias y **más información sobre BTM**:
|
|||
* [https://www.patreon.com/posts/new-developer-77420730?l=fr](https://www.patreon.com/posts/new-developer-77420730?l=fr)
|
||||
* [https://support.apple.com/en-gb/guide/deployment/depdca572563/web](https://support.apple.com/en-gb/guide/deployment/depdca572563/web)
|
||||
|
||||
## Caché de confianza
|
||||
|
||||
La caché de confianza de Apple macOS, a veces también conocida como caché AMFI (Apple Mobile File Integrity), es un mecanismo de seguridad en macOS diseñado para **prevenir que se ejecute software no autorizado o malicioso**. Esencialmente, es una lista de hashes criptográficos que el sistema operativo utiliza para **verificar la integridad y autenticidad del software**.
|
||||
|
||||
Cuando una aplicación o archivo ejecutable intenta ejecutarse en macOS, el sistema operativo verifica la caché de confianza de AMFI. Si el **hash del archivo se encuentra en la caché de confianza**, el sistema **permite** que el programa se ejecute porque lo reconoce como confiable.
|
||||
|
||||
<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>
|
||||
|
|
|
@ -0,0 +1,188 @@
|
|||
# Restricciones de Lanzamiento/Entorno 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)
|
||||
* Obtén 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)
|
||||
*
|
||||
* .
|
||||
|
||||
</details>
|
||||
|
||||
## Información Básica
|
||||
|
||||
Las restricciones de lanzamiento en macOS se introdujeron para mejorar la seguridad al **regular cómo, quién y desde dónde se puede iniciar un proceso**. Introducidas en macOS Ventura, proporcionan un marco que categoriza **cada binario del sistema en categorías de restricciones** distintas, que se definen dentro de la **caché de confianza**, una lista que contiene los binarios del sistema y sus respectivos hashes. Estas restricciones se extienden a cada binario ejecutable dentro del sistema, lo que implica un conjunto de **reglas** que delinean los requisitos para **lanzar un binario en particular**. Las reglas abarcan restricciones propias que un binario debe cumplir, restricciones parentales que deben cumplir el proceso padre y restricciones responsables que deben cumplir otras entidades relevantes.
|
||||
|
||||
El mecanismo se extiende a las aplicaciones de terceros a través de las **restricciones de entorno**, a partir de macOS Sonoma, lo que permite a los desarrolladores proteger sus aplicaciones especificando un **conjunto de claves y valores para las restricciones de entorno**.
|
||||
|
||||
Define las **restricciones de lanzamiento y biblioteca de entorno** en diccionarios de restricciones que guardas en archivos de lista de propiedades de **`launchd`**, o en archivos de lista de propiedades separados que utilizas en la firma de código.
|
||||
|
||||
Existen 4 tipos de restricciones:
|
||||
|
||||
* **Restricciones Propias**: Restricciones aplicadas al binario **en ejecución**.
|
||||
* **Proceso Padre**: Restricciones aplicadas al **proceso padre** (por ejemplo, **`launchd`** ejecutando un servicio XP).
|
||||
* **Restricciones Responsables**: Restricciones aplicadas al **proceso que llama al servicio** en una comunicación XPC.
|
||||
* **Restricciones de Carga de Biblioteca**: Utiliza restricciones de carga de biblioteca para describir selectivamente el código que se puede cargar.
|
||||
|
||||
Entonces, cuando un proceso intenta lanzar otro proceso, llamando a `execve(_:_:_:)` o `posix_spawn(_:_:_:_:_:_:)`, el sistema operativo verifica que el **archivo ejecutable** cumpla con su **propia restricción propia**. También verifica que el **proceso padre** cumpla con la **restricción del padre del ejecutable**, y que el **proceso responsable** cumpla con la **restricción del proceso responsable del ejecutable**. Si alguna de estas restricciones de lanzamiento no se cumple, el sistema operativo no ejecuta el programa.
|
||||
|
||||
Si al cargar una biblioteca alguna parte de la **restricción de la biblioteca no es verdadera**, tu proceso **no carga** la biblioteca.
|
||||
|
||||
## Categorías de LC
|
||||
|
||||
Un LC está compuesto por **hechos** y **operaciones lógicas** (and, or...) que combinan hechos.
|
||||
|
||||
Los [**hechos que un LC puede utilizar están documentados**](https://developer.apple.com/documentation/security/defining\_launch\_environment\_and\_library\_constraints). Por ejemplo:
|
||||
|
||||
* is-init-proc: Un valor booleano que indica si el ejecutable debe ser el proceso de inicialización del sistema operativo (`launchd`).
|
||||
* is-sip-protected: Un valor booleano que indica si el ejecutable debe ser un archivo protegido por System Integrity Protection (SIP).
|
||||
* `on-authorized-authapfs-volume:` Un valor booleano que indica si el sistema operativo cargó el ejecutable desde un volumen APFS autorizado y autenticado.
|
||||
* `on-authorized-authapfs-volume`: Un valor booleano que indica si el sistema operativo cargó el ejecutable desde un volumen APFS autorizado y autenticado.
|
||||
* Volumen Cryptexes
|
||||
* `on-system-volume:` Un valor booleano que indica si el sistema operativo cargó el ejecutable desde el volumen del sistema actualmente arrancado.
|
||||
* Dentro de /System...
|
||||
* ...
|
||||
|
||||
Cuando un binario de Apple está firmado, se **asigna a una categoría de LC** dentro de la **caché de confianza**.
|
||||
|
||||
* Las **categorías de LC de iOS 16** se [**han invertido y documentado aquí**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056).
|
||||
* Las **categorías de LC actuales (macOS 14** - Somona) se han invertido y sus [**descripciones se pueden encontrar aquí**](https://gist.github.com/theevilbit/a6fef1e0397425a334d064f7b6e1be53).
|
||||
|
||||
Por ejemplo, la Categoría 1 es:
|
||||
```
|
||||
Category 1:
|
||||
Self Constraint: (on-authorized-authapfs-volume || on-system-volume) && launch-type == 1 && validation-category == 1
|
||||
Parent Constraint: is-init-proc
|
||||
```
|
||||
* `(en volumen autorizado authapfs || en volumen del sistema)`: Debe estar en el volumen del sistema o Cryptexes.
|
||||
* `tipo de lanzamiento == 1`: Debe ser un servicio del sistema (plist en LaunchDaemons).
|
||||
*   `categoría de validación == 1`: Un ejecutable del sistema operativo.
|
||||
* `es-proceso-inicio`: Launchd
|
||||
|
||||
### Reversión de Categorías LC
|
||||
|
||||
Tienes más información [**aquí**](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/#reversing-constraints), pero básicamente, están definidas en **AMFI (AppleMobileFileIntegrity)**, por lo que necesitas descargar el Kit de Desarrollo del Kernel para obtener el **KEXT**. Los símbolos que comienzan con **`kConstraintCategory`** son los más **interesantes**. Extrayéndolos obtendrás un flujo codificado DER (ASN.1) que deberás decodificar con [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) o la biblioteca python-asn1 y su script `dump.py`, [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master), lo cual te dará una cadena más comprensible.
|
||||
|
||||
## Restricciones del entorno
|
||||
|
||||
Estas son las Restricciones de Lanzamiento configuradas en **aplicaciones de terceros**. El desarrollador puede seleccionar los **hechos** y los **operandos lógicos a utilizar** en su aplicación para restringir el acceso a sí misma.
|
||||
|
||||
Es posible enumerar las Restricciones del Entorno de una aplicación con:
|
||||
```bash
|
||||
codesign -d -vvvv app.app
|
||||
```
|
||||
## Cachés de confianza
|
||||
|
||||
En **macOS** hay algunos cachés de confianza:
|
||||
|
||||
* **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/BaseSystemTrustCache.img4`**
|
||||
* **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`**
|
||||
* **`/System/Library/Security/OSLaunchPolicyData`**
|
||||
|
||||
Y en iOS parece que está en **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**.
|
||||
|
||||
### Enumeración de los cachés de confianza
|
||||
|
||||
Los archivos de caché de confianza anteriores están en formato **IMG4** e **IM4P**, siendo IM4P la sección de carga útil de un formato IMG4.
|
||||
|
||||
Puedes usar [**pyimg4**](https://github.com/m1stadev/PyIMG4) para extraer la carga útil de las bases de datos:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Installation
|
||||
python3 -m pip install pyimg4
|
||||
|
||||
# Extract payloads data
|
||||
cp /System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/BaseSystemTrustCache.img4 /tmp
|
||||
pyimg4 img4 extract -i /tmp/BaseSystemTrustCache.img4 -p /tmp/BaseSystemTrustCache.im4p
|
||||
pyimg4 im4p extract -i /tmp/BaseSystemTrustCache.im4p -o /tmp/BaseSystemTrustCache.data
|
||||
|
||||
cp /System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4 /tmp
|
||||
pyimg4 img4 extract -i /tmp/StaticTrustCache.img4 -p /tmp/StaticTrustCache.im4p
|
||||
pyimg4 im4p extract -i /tmp/StaticTrustCache.im4p -o /tmp/StaticTrustCache.data
|
||||
|
||||
pyimg4 im4p extract -i /System/Library/Security/OSLaunchPolicyData -o /tmp/OSLaunchPolicyData.data
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
(Otra opción podría ser utilizar la herramienta [**img4tool**](https://github.com/tihmstar/img4tool), que funcionará incluso en M1 aunque la versión sea antigua y para x86\_64 si la instalas en las ubicaciones adecuadas).
|
||||
|
||||
Ahora puedes utilizar la herramienta [**trustcache**](https://github.com/CRKatri/trustcache) para obtener la información en un formato legible:
|
||||
```bash
|
||||
# Install
|
||||
wget https://github.com/CRKatri/trustcache/releases/download/v2.0/trustcache_macos_arm64
|
||||
sudo mv ./trustcache_macos_arm64 /usr/local/bin/trustcache
|
||||
xattr -rc /usr/local/bin/trustcache
|
||||
chmod +x /usr/local/bin/trustcache
|
||||
|
||||
# Run
|
||||
trustcache info /tmp/OSLaunchPolicyData.data | head
|
||||
trustcache info /tmp/StaticTrustCache.data | head
|
||||
trustcache info /tmp/BaseSystemTrustCache.data | head
|
||||
|
||||
version = 2
|
||||
uuid = 35EB5284-FD1E-4A5A-9EFB-4F79402BA6C0
|
||||
entry count = 969
|
||||
0065fc3204c9f0765049b82022e4aa5b44f3a9c8 [none] [2] [1]
|
||||
00aab02b28f99a5da9b267910177c09a9bf488a2 [none] [2] [1]
|
||||
0186a480beeee93050c6c4699520706729b63eff [none] [2] [2]
|
||||
0191be4c08426793ff3658ee59138e70441fc98a [none] [2] [3]
|
||||
01b57a71112235fc6241194058cea5c2c7be3eb1 [none] [2] [2]
|
||||
01e6934cb8833314ea29640c3f633d740fc187f2 [none] [2] [2]
|
||||
020bf8c388deaef2740d98223f3d2238b08bab56 [none] [2] [3]
|
||||
```
|
||||
La caché de confianza sigue la siguiente estructura, por lo que la **categoría LC es la cuarta columna**.
|
||||
```c
|
||||
struct trust_cache_entry2 {
|
||||
uint8_t cdhash[CS_CDHASH_LEN];
|
||||
uint8_t hash_type;
|
||||
uint8_t flags;
|
||||
uint8_t constraintCategory;
|
||||
uint8_t reserved0;
|
||||
} __attribute__((__packed__));
|
||||
```
|
||||
Entonces, podrías usar un script como [**este**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) para extraer datos.
|
||||
|
||||
A partir de esos datos, puedes verificar las aplicaciones con un **valor de restricciones de lanzamiento de `0`**, que son aquellas que no tienen restricciones ([**ver aquí**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) para saber qué significa cada valor).
|
||||
|
||||
## Mitigaciones de ataque
|
||||
|
||||
Las restricciones de lanzamiento habrían mitigado varios ataques antiguos al **asegurarse de que el proceso no se ejecute en condiciones inesperadas**: por ejemplo, desde ubicaciones inesperadas o invocado por un proceso padre inesperado (si solo launchd debería lanzarlo).
|
||||
|
||||
Además, las restricciones de lanzamiento también **mitigan los ataques de degradación**.
|
||||
|
||||
Sin embargo, no mitigan los abusos comunes de **XPC**, las inyecciones de código de **Electron** o las inyecciones de **dylib** sin validación de biblioteca (a menos que se conozcan las ID de equipo que pueden cargar bibliotecas).
|
||||
|
||||
### Protección de XPC Daemon
|
||||
|
||||
En el momento de escribir esto (lanzamiento de Sonoma), el **proceso responsable** del servicio XPC del demonio **es el propio servicio XPC** en lugar del cliente conectado. (FB enviado: FB13206884). Suponiendo por un momento que sea un error, aún **no podremos lanzar el servicio XPC en nuestro código atacante**, pero si ya está **activo** (quizás porque fue invocado por la aplicación original), no hay nada que nos impida **conectarnos a él**. Entonces, aunque establecer la restricción podría ser una buena idea y **limitaría el tiempo de ataque**, no resuelve el problema principal, y nuestro servicio XPC aún debe validar correctamente el cliente conectado. Esa sigue siendo la única forma de asegurarlo. Además, como se mencionó al principio, ni siquiera funciona de esta manera ahora.
|
||||
|
||||
### Protección de Electron
|
||||
|
||||
Incluso si es necesario que la aplicación se **abra mediante LaunchService** (en las restricciones de los padres). Esto se puede lograr utilizando **`open`** (que puede establecer variables de entorno) o utilizando la **API de Launch Services** (donde se pueden indicar variables de entorno).
|
||||
|
||||
## Referencias
|
||||
|
||||
* [https://youtu.be/f1HA5QhLQ7Y?t=24146](https://youtu.be/f1HA5QhLQ7Y?t=24146)
|
||||
* [https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/)
|
||||
* [https://eclecticlight.co/2023/06/13/why-wont-a-system-app-or-command-tool-run-launch-constraints-and-trust-caches/](https://eclecticlight.co/2023/06/13/why-wont-a-system-app-or-command-tool-run-launch-constraints-and-trust-caches/)
|
||||
* [https://developer.apple.com/videos/play/wwdc2023/10266/](https://developer.apple.com/videos/play/wwdc2023/10266/)
|
||||
|
||||
<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 el [**merchandising 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>
|
Loading…
Reference in a new issue