macOS Gatekeeper / Quarantine / XProtect
Gatekeeper
Gatekeeper es una función de seguridad desarrollada para sistemas operativos Mac, diseñada para garantizar que los usuarios ejecuten solo software confiable en sus sistemas. Funciona mediante la validación del 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, verifica si el software está notarizado por Apple, confirmando que está libre de contenido malicioso conocido y que no ha sido manipulado después de la notarización.
Además, Gatekeeper refuerza el control y la seguridad del usuario al solicitar aprobación a los usuarios para abrir el software descargado por primera vez. Esta protección ayuda a evitar que los usuarios ejecuten involuntariamente código ejecutable potencialmente dañino que podrían haber confundido con un archivo de datos inofensivo.
Firmas de Aplicaciones
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 garantizar que el código no haya sido manipulado desde la última vez que se firmó.
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 para 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 manipulado, 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 pasan, Apple agrega un ticket a la aplicación que Gatekeeper puede verificar.
Verificar Firmas
Al verificar alguna muestra de malware, siempre debes verificar la firma del binario, ya que el desarrollador que lo firmó podría estar relacionado con malware.
Notarización
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 ser examinada por el Servicio de Notarización de Apple, que no debe confundirse con la Revisión de la App. Este servicio es un sistema automatizado que examina el software enviado en busca de contenido malicioso y posibles problemas con la firma de código.
Si el software supera esta inspección sin plantear preocupaciones, 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 'engrapado'. 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.
En 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 notarizado por Apple. Como resultado, Gatekeeper muestra un mensaje descriptivo en el cuadro de diálogo de lanzamiento inicial, indicando que el software ha sido sometido a controles de contenido malicioso por parte de Apple. Este proceso aumenta la confianza del usuario en la seguridad del software que instalan o ejecutan en sus sistemas.
Enumeración de GateKeeper
GateKeeper es tanto varios componentes de seguridad que evitan que se ejecuten aplicaciones no confiables como también uno de los componentes.
Es posible ver el estado de GateKeeper con:
Ten en cuenta que las comprobaciones de firma de GateKeeper se realizan solo en archivos con el atributo de Cuarentena, no en todos los archivos.
GateKeeper verificará si, según las preferencias y la firma, un binario puede ejecutarse:
La base de datos que mantiene esta configuración se encuentra en /var/db/SystemPolicy
. Puedes verificar esta base de datos como root con:
Observa 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 e identificados por desarrolladores. Si modificas esa configuración a App Store, las reglas de "Notarized Developer ID" desaparecerán.
También hay miles de reglas de tipo GKE:
Estos son los 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
O también puedes listar la información anterior con:
Las opciones --master-disable
y --global-disable
de spctl
deshabilitará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:
Archivos en Cuarentena
Al descargar una aplicación o archivo, ciertas aplicaciones 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 portador de riesgos. Sin embargo, no todas las aplicaciones adjuntan este atributo, por ejemplo, el software común de cliente BitTorrent generalmente omite este proceso.
La presencia de una bandera de cuarentena señala la función de seguridad de Gatekeeper de macOS cuando un usuario intenta ejecutar el archivo.
En el caso de que la bandera de cuarentena no esté presente (como en archivos descargados a través de algunos clientes BitTorrent), es posible que Gatekeeper no realice sus verificaciones. 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 ser emitido. Por estas razones, realizar una verificación completa de firma de código y notarización es impracticable de ejecutar cada vez que se inicia una aplicación.
Por lo tanto, estas verificaciones solo se ejecutan 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 para cada archivo que crean. Y las aplicaciones que no están en sandbox pueden establecerlo ellos mismos, 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 requieren permisos de root) con:
También puedes verificar si un archivo tiene el atributo de cuarentena extendida con:
Verifique el valor de los atributos extendidos y descubra la aplicación que escribió el atributo de cuarentena con:
En realidad, un proceso "podría establecer banderas de cuarentena a los archivos que crea" (intenté aplicar la bandera USER_APPROVED en un archivo creado pero no se aplicó):
Última actualización