macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper es una función de seguridad desarrollada para sistemas operativos Mac, diseñada para garantizar que los usuarios ejecuten solo software de confianza en sus sistemas. Funciona validando el software que un usuario descarga e intenta abrir desde fuentes fuera de 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. Verifica 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 salvaguarda ayuda a prevenir que los usuarios ejecuten inadvertidamente código ejecutable potencialmente dañino que pueden 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.
Así es como funciona:
Firmar la Aplicación: Cuando un desarrollador está listo para distribuir su aplicación, firma la aplicación utilizando una clave privada. Esta clave privada está asociada con un certificado que Apple emite al desarrollador cuando se inscribe 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 cifrar este hash con la clave privada del desarrollador.
Distribuir la Aplicación: La aplicación firmada se distribuye a los usuarios junto con el certificado del desarrollador, que contiene la clave pública correspondiente.
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 descifrar el hash. Luego recalcula el hash basado en el estado actual de la aplicación y lo compara con el hash descifrado. 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 adicional de seguridad. El proceso de notarización verifica la aplicación en busca de problemas de seguridad conocidos y código malicioso, y si estas verificaciones son satisfactorias, Apple añade un ticket a la aplicación que Gatekeeper puede verificar.
Al verificar alguna muestra de malware, siempre debes comprobar la firma del binario, ya que el desarrollador que lo firmó puede estar ya relacionado con malware.
El proceso de notarización de Apple sirve 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 parte del Servicio de Notaría 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 generar preocupaciones, el Servicio de Notaría genera un ticket de notarización. El desarrollador debe adjuntar este ticket a su software, un proceso conocido como 'stapling'. 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.
Al momento de la primera instalación o ejecución del software por parte del usuario, la existencia del ticket de notarización - ya sea adjunto al ejecutable o encontrado en línea - informa a Gatekeeper que el software ha sido notariado por Apple. Como resultado, Gatekeeper muestra un mensaje descriptivo en el diálogo de lanzamiento inicial, indicando que el software ha sido sometido a verificaciones de contenido malicioso por parte de Apple. Este proceso, por lo tanto, aumenta la confianza del usuario en la seguridad del software que instala o ejecuta en sus sistemas.
Tenga en cuenta que a partir de la versión Sequoia, spctl
ya no permite modificar la configuración de Gatekeeper.
spctl
es la herramienta CLI para enumerar e interactuar con Gatekeeper (con el demonio syspolicyd
a través de mensajes XPC). Por ejemplo, es posible ver el estado de GateKeeper con:
Tenga en cuenta que las verificaciones de firma de GateKeeper se realizan solo en archivos con el atributo de Cuarentena, no en todos los archivos.
GateKeeper verificará si, de acuerdo con las preferencias y la firma, un binario puede ser ejecutado:
syspolicyd
es el principal daemon responsable de hacer cumplir Gatekeeper. Mantiene una base de datos ubicada en /var/db/SystemPolicy
y es posible encontrar el código para soportar la base de datos aquí y la plantilla SQL aquí. Tenga en cuenta que la base de datos no está restringida por SIP y es escribible por root, y la base de datos /var/db/.SystemPolicy-default
se utiliza como una copia de seguridad original en caso de que la otra se corrompa.
Además, los paquetes /var/db/gke.bundle
y /var/db/gkopaque.bundle
contienen archivos con reglas que se insertan en la base de datos. Puede verificar esta base de datos como root con:
syspolicyd
también expone un servidor XPC con diferentes operaciones como assess
, update
, record
y cancel
, que también son accesibles utilizando las APIs SecAssessment*
de Security.framework
y xpctl
en realidad se comunica con syspolicyd
a través de XPC.
Nota 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 modificas esa configuración a App Store, las "reglas de Developer ID Notarizado" desaparecerán.
También hay miles de reglas de tipo GKE :
Estos son hashes que provienen de:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
O podrías listar la información anterior con:
Las opciones --master-disable
y --global-disable
de spctl
desactivarán completamente estas verificaciones de firma:
Cuando está completamente habilitado, aparecerá una nueva opción:
Es posible verificar si una aplicación será permitida por GateKeeper con:
Es posible agregar nuevas reglas en GateKeeper para permitir la ejecución de ciertas aplicaciones con:
Respecto a las extensiones del kernel, la carpeta /var/db/SystemPolicyConfiguration
contiene archivos con listas de kexts permitidos para ser cargados. Además, spctl
tiene la autorización com.apple.private.iokit.nvram-csr
porque es capaz de agregar nuevas extensiones del kernel preaprobadas que también deben guardarse en NVRAM en una clave kext-allowed-teams
.
Al descargar una aplicación o archivo, aplicaciones específicas de macOS como navegadores web o clientes de correo electrónico adjuntan un atributo de archivo extendido, 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 portadora de riesgos. Sin embargo, no todas las aplicaciones adjuntan este atributo; por ejemplo, el software común de clientes de BitTorrent generalmente omite este proceso.
La presencia de una bandera de cuarentena señala la función de seguridad Gatekeeper de macOS cuando un usuario intenta ejecutar el archivo.
En el caso en 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 hacer una verificación en línea a los servidores de Apple para ver si ha sido revocado después de haber sido emitido. Por estas razones, una verificación completa de la firma de código y la notarización es impráctica de ejecutar cada vez que se lanza una aplicación.
Por lo tanto, estas verificaciones se realizan solo al ejecutar aplicaciones con el atributo de cuarentena.
Este atributo debe ser establecido por la aplicación que crea/descarga el archivo.
Sin embargo, los archivos que están en sandbox tendrán este atributo establecido en cada archivo que creen. Y las aplicaciones no sandbox pueden establecerlo ellas mismas, o especificar la clave LSFileQuarantineEnabled en el Info.plist, lo que hará que el sistema establezca el atributo extendido com.apple.quarantine
en los archivos creados,
Además, todos los archivos creados por un proceso que llama a qtn_proc_apply_to_self
están en cuarentena. O la API qtn_file_apply_to_path
agrega el atributo de cuarentena a una ruta de archivo especificada.
Es posible verificar su estado y habilitar/deshabilitar (se requiere root) con:
Puedes también encontrar si un archivo tiene el atributo extendido de cuarentena con:
Verifica el valor de los atributos extendidos y encuentra la aplicación que escribió el atributo de cuarentena con:
En realidad, un proceso "podría establecer banderas de cuarentena en los archivos que crea" (ya intenté aplicar la bandera USER_APPROVED en un archivo creado, pero no se aplica):
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)