* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver a 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 [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Consigue el [**merchandising 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)
**Gatekeeper** es una característica de seguridad desarrollada para los sistemas operativos Mac, diseñada para asegurar que los usuarios **solo ejecuten software de confianza** en sus sistemas. Funciona **validando el software** que un usuario descarga e intenta abrir de **fuentes externas a la App Store**, como una aplicación, un complemento o un paquete de instalación.
El mecanismo clave de Gatekeeper radica en su proceso de **verificación**. Comprueba si el software descargado está **firmado por un desarrollador reconocido**, asegurando la autenticidad del software. Además, determina si el software está **notarizado por Apple**, confirmando que está libre de contenido malicioso conocido y que no ha sido alterado después de la notarización.
Además, Gatekeeper refuerza el control y la seguridad del usuario al **solicitar a los usuarios que aprueben la apertura** del software descargado por primera vez. Esta protección ayuda a prevenir que los usuarios ejecuten inadvertidamente código ejecutable potencialmente dañino que podrían haber confundido con un archivo de datos inofensivo.
Las firmas de aplicaciones, también conocidas como firmas de código, son un componente crítico de la infraestructura de seguridad de Apple. Se utilizan para **verificar la identidad del autor del software** (el desarrollador) y para asegurar que el código no ha sido alterado desde que fue firmado por última vez.
1.**Firmar la Aplicación:** Cuando un desarrollador está listo para distribuir su aplicación, **firma la aplicación usando una clave privada**. Esta clave privada está asociada con un **certificado que Apple emite al desarrollador** cuando se inscriben en el Programa de Desarrolladores de Apple. El proceso de firma implica crear un hash criptográfico de todas las partes de la aplicación y encriptar este hash con la clave privada del desarrollador.
2.**Distribuir la Aplicación:** La aplicación firmada se distribuye entonces a los usuarios junto con el certificado del desarrollador, que contiene la clave pública correspondiente.
3.**Verificar la Aplicación:** Cuando un usuario descarga e intenta ejecutar la aplicación, su sistema operativo Mac utiliza la clave pública del certificado del desarrollador para desencriptar el hash. Luego recalcula el hash basado en el estado actual de la aplicación y compara esto con el hash desencriptado. Si coinciden, significa que **la aplicación no ha sido modificada** desde que el desarrollador la firmó, y el sistema permite que la aplicación se ejecute.
Las firmas de aplicaciones son una parte esencial de la tecnología Gatekeeper de Apple. Cuando un usuario intenta **abrir una aplicación descargada de internet**, Gatekeeper verifica la firma de la aplicación. Si está firmada con un certificado emitido por Apple a un desarrollador conocido y el código no ha sido alterado, Gatekeeper permite que la aplicación se ejecute. De lo contrario, bloquea la aplicación y alerta al usuario.
A partir de macOS Catalina, **Gatekeeper también verifica si la aplicación ha sido notarizada** por Apple, añadiendo una capa extra de seguridad. El proceso de notarización revisa la aplicación en busca de problemas de seguridad conocidos y código malicioso, y si estas revisiones son superadas, Apple añade un ticket a la aplicación que Gatekeeper puede verificar.
Al revisar alguna **muestra de malware** siempre debes **verificar la firma** del binario ya que el **desarrollador** que la firmó puede estar ya **relacionado** con **malware.**
El proceso de notarización de Apple actúa como una salvaguarda adicional para proteger a los usuarios de software potencialmente dañino. Implica que el **desarrollador envíe su aplicación para examen** por el **Servicio de Notarización de Apple**, que no debe confundirse con la Revisión de Aplicaciones. Este servicio es un **sistema automatizado** que examina el software enviado en busca de **contenido malicioso** y cualquier problema potencial con la firma de código.
Si el software **pasa** esta inspección sin levantar sospechas, el Servicio de Notarización genera un ticket de notarización. Luego se requiere que el desarrollador **adjunte este ticket a su software**, un proceso conocido como 'stapling' (grapado). Además, el ticket de notarización también se publica en línea donde Gatekeeper, la tecnología de seguridad de Apple, puede acceder a él.
Cuando el usuario instala o ejecuta el software por primera vez, la existencia del ticket de notarización - ya sea grapado al ejecutable o encontrado en línea - **informa a Gatekeeper que el software ha sido notarizado por Apple**. Como resultado, Gatekeeper muestra un mensaje descriptivo en el diálogo de lanzamiento inicial, indicando que el software ha sido revisado en busca de contenido malicioso por Apple. Este proceso, por lo tanto, mejora la confianza del usuario en la seguridad del software que instalan o ejecutan en sus sistemas.
GateKeeper es tanto **varios componentes de seguridad** que previenen la ejecución de aplicaciones no confiables como también **uno de los componentes**.
Tenga en cuenta que las comprobaciones de firma de GateKeeper se realizan solo en **archivos con el atributo de Cuarentena**, no en todos los archivos.
SELECT requirement,allow,disabled,label from authority where label != 'GKE' and disabled=0;
requirement|allow|disabled|label
anchor apple generic and certificate 1[subject.CN] = "Apple Software Update Certification Authority"|1|0|Apple Installer
anchor apple|1|0|Apple System
anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists|1|0|Mac App Store
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.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
Tenga en cuenta cómo la primera regla terminó en "**App Store**" y la segunda en "**Developer ID**" y que en la imagen anterior estaba **habilitado para ejecutar aplicaciones de la App Store y desarrolladores identificados**.\
Si **modifica** esa configuración a App Store, las reglas de "**Notarized Developer ID" desaparecerán**.
Estos son hashes que provienen de **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** y **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**
Al **descargar** una aplicación o archivo, **aplicaciones** específicas de macOS como navegadores web o clientes de correo electrónico **adjuntan un atributo extendido de archivo**, comúnmente conocido como la "**bandera de cuarentena**", al archivo descargado. Este atributo actúa como una medida de seguridad para **marcar el archivo** como proveniente de una fuente no confiable (internet) y potencialmente con riesgos. Sin embargo, no todas las aplicaciones adjuntan este atributo, por ejemplo, el software cliente de BitTorrent comúnmente omite este proceso.
En el caso de que la **bandera de cuarentena no esté presente** (como con archivos descargados a través de algunos clientes de BitTorrent), las **verificaciones de Gatekeeper pueden no realizarse**. Por lo tanto, los usuarios deben tener precaución al abrir archivos descargados de fuentes menos seguras o desconocidas.
**Verificar** la **validez** de las firmas de código es un proceso **intensivo en recursos** que incluye generar **hashes** criptográficos del código y todos sus recursos empaquetados. Además, verificar la validez del certificado implica realizar una **verificación en línea** a los servidores de Apple para ver si ha sido revocado después de su emisión. Por estas razones, una verificación completa de la firma de código y la notarización es **impráctico realizarla cada vez que se lanza una aplicación**.
Sin embargo, los archivos que están en un entorno aislado (sandboxed) tendrán este atributo establecido en cada archivo que creen. Y las aplicaciones que no están en un entorno aislado pueden establecerlo por sí mismas, o especificar la clave [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) en el **Info.plist** lo que hará que el sistema establezca el atributo extendido `com.apple.quarantine` en los archivos creados,
De hecho, un proceso "podría establecer banderas de cuarentena en los archivos que crea" (intenté aplicar la bandera USER_APPROVED en un archivo creado, pero no se aplicará):
<details>
<summary>Código Fuente aplicar banderas de cuarentena</summary>
La información de cuarentena también se almacena en una base de datos central gestionada por LaunchServices en **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
La extensión del kernel solo está disponible a través del **caché del kernel en el sistema**; sin embargo, puedes descargar el **Kit de Depuración del Kernel desde https://developer.apple.com/**, que contendrá una versión simbolizada de la extensión.
XProtect es una característica de **anti-malware** incorporada en macOS. XProtect **verifica cualquier aplicación cuando se lanza o modifica por primera vez contra su base de datos** de malware conocido y tipos de archivos no seguros. Cuando descargas un archivo a través de ciertas aplicaciones, como Safari, Mail o Messages, XProtect escanea automáticamente el archivo. Si coincide con algún malware conocido en su base de datos, XProtect **impedirá que el archivo se ejecute** y te alertará sobre la amenaza.
La base de datos de XProtect se **actualiza regularmente** por Apple con nuevas definiciones de malware, y estas actualizaciones se descargan e instalan automáticamente en tu Mac. Esto asegura que XProtect esté siempre actualizado con las últimas amenazas conocidas.
Sin embargo, vale la pena mencionar que **XProtect no es una solución antivirus completa**. Solo verifica una lista específica de amenazas conocidas y no realiza escaneos en acceso como la mayoría del software antivirus.
XProtect se encuentra en una ubicación protegida por SIP en **/Library/Apple/System/Library/CoreServices/XProtect.bundle** y dentro del paquete puedes encontrar información que XProtect utiliza:
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Lista de complementos y extensiones que no se permite cargar a través de BundleID y TeamID o indicando una versión mínima.
Nota que hay otra aplicación en **`/Library/Apple/System/Library/CoreServices/XProtect.app`** relacionada con XProtect que no está involucrada en el proceso de Gatekeeper.
### No es Gatekeeper
{% hint style="danger" %}
Nota que Gatekeeper **no se ejecuta cada vez** que ejecutas una aplicación, solo _**AppleMobileFileIntegrity**_ (AMFI) **verificará las firmas del código ejecutable** cuando ejecutes una app que ya ha sido ejecutada y verificada por Gatekeeper.
{% endhint %}
Por lo tanto, anteriormente era posible ejecutar una app para cachearla con Gatekeeper, luego **modificar archivos no ejecutables de la aplicación** (como archivos Electron asar o NIB) y si no había otras protecciones en su lugar, la aplicación se **ejecutaba** con las adiciones **maliciosas**.
Sin embargo, ahora esto no es posible porque macOS **previene la modificación de archivos** dentro de los paquetes de aplicaciones. Entonces, si intentas el ataque [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), encontrarás que ya no es posible abusar de él porque después de ejecutar la app para cachearla con Gatekeeper, no podrás modificar el paquete. Y si cambias por ejemplo el nombre del directorio Contents a NotCon (como se indica en el exploit), y luego ejecutas el binario principal de la app para cachearla con Gatekeeper, se disparará un error y no se ejecutará.
Cualquier forma de evitar Gatekeeper (lograr que el usuario descargue algo y lo ejecute cuando Gatekeeper debería prohibirlo) se considera una vulnerabilidad en macOS. Estos son algunos CVEs asignados a técnicas que permitieron evitar Gatekeeper en el pasado:
Cuando se extraen con **Archive Utility**, las rutas de archivos de más de 886 caracteres fallaban en heredar el atributo extendido com.apple.quarantine, lo que hacía posible **evitar Gatekeeper para esos archivos**.
Cuando una aplicación se crea con **Automator**, la información sobre lo que necesita para ejecutarse está dentro de `application.app/Contents/document.wflow` y no en el ejecutable. El ejecutable es solo un binario genérico de Automator llamado **Automator Application Stub**.
Por lo tanto, podrías hacer que `application.app/Contents/MacOS/Automator\ Application\ Stub`**apunte con un enlace simbólico a otro Automator Application Stub dentro del sistema** y ejecutará lo que está dentro de `document.wflow` (tu script) **sin activar Gatekeeper** porque el ejecutable real no tiene el xattr de cuarentena.
En este bypass se creó un archivo zip con una aplicación comenzando a comprimir desde `application.app/Contents` en lugar de `application.app`. Por lo tanto, el **atributo de cuarentena** se aplicó a todos los **archivos desde `application.app/Contents`** pero **no a `application.app`**, que es lo que Gatekeeper estaba comprobando, por lo que Gatekeeper se evitó porque cuando se activó `application.app`**no tenía el atributo de cuarentena**.
Aunque los componentes son diferentes, la explotación de esta vulnerabilidad es muy similar a la anterior. En este caso generaremos un Apple Archive desde **`application.app/Contents`** para que **`application.app` no reciba el atributo de cuarentena** al ser descomprimido por **Archive Utility**.
En el [**código fuente**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) es posible ver que la representación de texto de la ACL almacenada dentro del xattr llamado **`com.apple.acl.text`** se establecerá como ACL en el archivo descomprimido. Entonces, si comprimiste una aplicación en un archivo zip con el formato de archivo **AppleDouble** con una ACL que impide que otros xattrs sean escritos en ella... el xattr de cuarentena no se estableció en la aplicación:
Consulta el [**informe original**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) para obtener más información.
Se descubrió que **Google Chrome no estaba estableciendo el atributo de cuarentena** en los archivos descargados debido a algunos problemas internos de macOS.
Los formatos de archivo AppleDouble almacenan los atributos de un archivo en un archivo separado que comienza por `._`, esto ayuda a copiar los atributos de archivos **entre máquinas macOS**. Sin embargo, se notó que después de descomprimir un archivo AppleDouble, el archivo que comienza con `._`**no recibía el atributo de cuarentena**.
Ser capaz de crear un archivo que no tenga el atributo de cuarentena establecido, era **posible eludir Gatekeeper.** El truco consistía en **crear una aplicación de archivo DMG** utilizando la convención de nombres AppleDouble (comenzar con `._`) y crear un **archivo visible como un enlace simbólico a este archivo oculto** sin el atributo de cuarentena.\
Cuando se **ejecuta el archivo dmg**, como no tiene un atributo de cuarentena, **eludirá Gatekeeper**.
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).