* ¿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 & 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>
## **Información básica**
**TCC (Transparency, Consent, and Control)** es un mecanismo en macOS para **limitar y controlar el acceso de las aplicaciones a ciertas características**, generalmente desde una perspectiva de privacidad. Esto puede incluir cosas como servicios de ubicación, contactos, fotos, micrófono, cámara, accesibilidad, acceso completo al disco y mucho más.
Desde la perspectiva del usuario, ven TCC en acción **cuando una aplicación quiere acceder a una de las características protegidas por TCC**. Cuando esto sucede, el **usuario recibe una ventana emergente** preguntándole si desea permitir el acceso o no.
También es posible **conceder acceso a las aplicaciones** a archivos mediante **intenciones explícitas** de los usuarios, por ejemplo, cuando un usuario **arrastra y suelta un archivo en un programa** (obviamente, el programa debe tener acceso a él).
![Un ejemplo de una ventana emergente de TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC** es manejado por el **daemon** ubicado en `/System/Library/PrivateFrameworks/TCC.framework/Resources/tccd` configurado en `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (registrando el servicio mach `com.apple.tccd.system`).
Hay un **tccd de modo de usuario** ejecutándose por usuario registrado en `/System/Library/LaunchAgents/com.apple.tccd.plist` registrando los servicios mach `com.apple.tccd` y `com.apple.usernotifications.delegate.com.apple.tccd`.
Los permisos son **heredados del padre** de la aplicación y los **permisos** son **rastreados** en función del **ID de paquete** y del **ID de desarrollador**.
Las selecciones se almacenan en la base de datos de TCC en todo el sistema en **`/Library/Application Support/com.apple.TCC/TCC.db`** o en **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferencias por usuario. La base de datos está **protegida contra la edición con SIP** (Protección de Integridad del Sistema), pero se pueden leer otorgando **acceso completo al disco**.
{% hint style="info" %}
La **interfaz de usuario del centro de notificaciones** puede hacer **cambios en la base de datos de TCC del sistema**:
El Centro de control de transparencia (TCC) es un marco de seguridad de macOS que controla el acceso a ciertos servicios y datos del sistema. TCC se introdujo en OS X Mavericks (10.9) y se ha mejorado en cada versión posterior de macOS.
TCC se utiliza para controlar el acceso a los siguientes servicios y datos del sistema:
TCC se implementa mediante el uso de una base de datos SQLite3 que se encuentra en `/Library/Application Support/com.apple.TCC/TCC.db`. La base de datos contiene una tabla llamada `access` que almacena las reglas de acceso para cada servicio o dato del sistema.
Cada regla de acceso se almacena en la tabla `access` como una fila. Cada fila contiene los siguientes campos:
-`service`: El nombre del servicio o dato del sistema al que se aplica la regla de acceso.
-`client`: El identificador del cliente que solicita el acceso.
-`client_type`: El tipo de cliente que solicita el acceso (por ejemplo, una aplicación o un proceso).
-`allowed`: Un valor booleano que indica si se permite o no el acceso.
-`prompt_count`: El número de veces que se ha solicitado acceso para esta regla.
-`csreq`: Un valor hash que se utiliza para verificar la firma de la aplicación que solicita el acceso.
La tabla `access` se actualiza automáticamente por el sistema cuando se solicita acceso a un servicio o dato del sistema. Si se deniega el acceso, se crea una nueva fila en la tabla `access` con el campo `allowed` establecido en `0`.
TCC es un componente crítico de la seguridad de macOS y se utiliza para controlar el acceso a los servicios y datos del sistema que pueden ser sensibles. Como tal, cualquier vulnerabilidad en TCC podría permitir a un atacante escalar sus privilegios en el sistema.
- **Inyección de código**: Un atacante podría inyectar código en una aplicación legítima que tiene permiso para acceder a un servicio o dato del sistema controlado por TCC. El código inyectado podría entonces utilizar el permiso de la aplicación legítima para acceder al servicio o dato del sistema.
- **Ataque de fuerza bruta**: Un atacante podría intentar adivinar el valor de `csreq` para una aplicación que no tiene permiso para acceder a un servicio o dato del sistema controlado por TCC. Si el atacante adivina correctamente el valor de `csreq`, podría utilizarlo para acceder al servicio o dato del sistema.
- **Ataque de suplantación de identidad**: Un atacante podría suplantar la identidad de una aplicación legítima que tiene permiso para acceder a un servicio o dato del sistema controlado por TCC. El atacante podría entonces utilizar el permiso de la aplicación legítima para acceder al servicio o dato del sistema.
- **Mantener actualizado el sistema operativo**: Apple ha corregido varias vulnerabilidades de TCC en versiones anteriores de macOS. Mantener actualizado el sistema operativo es una forma importante de protegerse contra las vulnerabilidades conocidas de TCC.
- **Limitar el acceso a la base de datos de TCC**: La base de datos de TCC se encuentra en `/Library/Application Support/com.apple.TCC/TCC.db`. Limitar el acceso a esta base de datos puede ayudar a prevenir la inyección de código y otros ataques contra TCC.
- **Utilizar aplicaciones de confianza**: Utilizar aplicaciones de confianza que han sido descargadas de fuentes confiables puede ayudar a prevenir la inyección de código y otros ataques contra TCC.
- **Utilizar una solución de seguridad**: Utilizar una solución de seguridad que incluya protección contra la escalada de privilegios puede ayudar a prevenir los ataques contra TCC.
* El **`auth_reason`** puede tomar los siguientes valores: Error(1), Consentimiento del usuario(2), Configuración del usuario(3), Configuración del sistema(4), Política de servicio(5), Política de MDM(6), Política de anulación(7), Cadena de uso faltante(8), Tiempo de espera de la solicitud(9), Preflight desconocido(10), Con derecho(11), Política de tipo de aplicación(12).
* Para obtener más información sobre los **otros campos** de la tabla, [**consulte esta publicación de blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
{% hint style="info" %}
Algunos permisos de TCC son: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... No hay una lista pública que defina todos ellos, pero puede consultar esta [**lista de los conocidos**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
También puede verificar los **permisos ya otorgados** a las aplicaciones en `Preferencias del sistema --> Seguridad y privacidad --> Privacidad --> Archivos y carpetas`.
La **base de datos** de TCC almacena el **ID de paquete** de la aplicación, pero también **almacena información** sobre la **firma** para **asegurarse** de que la aplicación que solicita usar un permiso sea la correcta.
```bash
# From sqlite
sqlite> select hex(csreq) from access where client="ru.keepcoder.Telegram";
(anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram"
```
{% endcode %}
### Entitlements
Las aplicaciones no solo necesitan solicitar y obtener acceso a algunos recursos, sino que también necesitan tener los permisos relevantes. Por ejemplo, Telegram tiene el permiso `com.apple.security.device.camera` para solicitar acceso a la cámara. Una aplicación que no tenga este permiso no podrá acceder a la cámara (y ni siquiera se le pedirá permiso al usuario).
Sin embargo, para que las aplicaciones accedan a ciertas carpetas de usuario, como `~/Desktop`, `~/Downloads` y `~/Documents`, no necesitan tener permisos específicos. El sistema manejará el acceso de manera transparente y solicitará permiso al usuario según sea necesario.
Las aplicaciones de Apple no generarán solicitudes. Contienen derechos preconcedidos en su lista de permisos, lo que significa que nunca generarán una ventana emergente ni aparecerán en ninguna de las bases de datos de TCC. Por ejemplo:
Como se mencionó anteriormente, es posible **conceder acceso a una aplicación a un archivo arrastrándolo y soltándolo sobre ella**. Este acceso no se especificará en ninguna base de datos de TCC, sino como un **atributo extendido del archivo**. Este atributo **almacenará el UUID** de la aplicación permitida:
```bash
xattr Desktop/private.txt
com.apple.macl
# Check extra access to the file
## Script from https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command
El atributo extendido `com.apple.macl`**no se puede borrar** como otros atributos extendidos porque está **protegido por SIP**. Sin embargo, como [**se explica en esta publicación**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), es posible deshabilitarlo **comprimiendo** el archivo, **eliminándolo** y **descomprimiéndolo**.
* ¿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)
* **Ú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).