Integridad del sistema operativo
El software del sistema operativo de Apple está diseñado pensando en la seguridad. Este diseño incluye una raíz de confianza de hardware (que se usa para activar el arranque seguro) y un proceso de actualización de software rápido y seguro. Los sistemas operativos de Apple también usan sus funciones específicas de hardware basadas en chips para ayudar a impedir que se aprovechen vulnerabilidades mientras el sistema se ejecuta. Estas funciones en tiempo de ejecución protegen la integridad del código de confianza mientras se ejecuta. En síntesis, el software de los sistemas operativos de Apple ayuda a mitigar técnicas de ataque tanto si se originan a partir de una app maliciosa como desde internet o a través de cualquier otro canal. Las funciones de protección indicadas aquí están disponibles en dispositivos con sistemas en chips (SoC) diseñados por Apple compatibles (lo que incluye a iOS, iPadOS, tvOS, watchOS y ahora también a macOS en un Mac con chip de Apple).
Función | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
Consulta la nota 1 a continuación. | |||||
Consulta la nota 2 a continuación. |
Nota 1: La capa de protección de la página (PPL) requiere que la plataforma solo ejecute código firmado y de confianza; este es un modelo de seguridad que no es aplicable para macOS.
Nota 2: El monitor de seguridad de la tabla de página (SPTM) es compatible con A15, A16 y A17, y sustituye a la capa de protección de la página en las plataformas compatibles.
Protección de la integridad del kernel
Una vez que se completa la inicialización de los kernels del sistema operativo, se activa la protección de la integridad del kernel (KIP) para ayudar a evitar las modificaciones del kernel y del código del controlador. El controlador de memoria proporciona una región de memoria física protegida que iBoot usa para cargar el kernel y las extensiones del kernel. Una vez completado el arranque, el controlador de memoria impide escribir en la región de memoria física protegida. La unidad de gestión de memoria (MMU) del procesador de aplicaciones está configurada para ayudar a impedir la asignación de código privilegiado de la memoria física fuera de la región de memoria protegida, así como para ayudar a impedir asignaciones grabables de la memoria física en la región de memoria del kernel.
Para impedir que se vuelva a configurar, el hardware utilizado para activar la KIP se bloquea cuando el proceso de arranque se completa.
Restricciones rápidas de permisos
A partir de los SoC S3 y A11 Bionic de Apple, se introdujo una nueva interfaz de hardware. Esta interfaz (Restricciones rápidas de permisos) incluye un registro de la CPU que restringe los permisos rápidamente, por hilos. Con Restricciones rápidas de permisos (también llamadas registros de APRR), los sistemas operativos compatibles pueden eliminar rápidamente los permisos de ejecución de la memoria sin la sobrecarga de una llamada del sistema y el recorrido o la alineación de la tabla de página. Estos permisos proporcionan un nivel más de mitigación para ataques desde internet, especialmente para código compilado en tiempo de ejecución, ya que la memoria no se puede ejecutar al mismo tiempo que se lee y se escribe.
Protección de la integridad del coprocesador del sistema
El firmware del coprocesador gestiona muchas tareas críticas del sistema, por ejemplo, Secure Enclave, el procesador del sensor de imágenes y el coprocesador de movimiento. Por lo tanto, su seguridad es clave para la seguridad general del sistema. Para impedir la modificación del firmware del coprocesador, Apple utiliza un mecanismo llamado protección de la integridad del coprocesador del sistema (SCIP).
La SCIP funciona de forma similar a la protección de la integridad del kernel (KIP): en el arranque, iBoot carga el firmware del coprocesador en una región de memoria protegida, reservada y separada de la región de KIP. iBoot configura cada unidad de memoria del coprocesador para ayudar a impedir lo siguiente:
Asignaciones ejecutables fuera de su parte de la región de memoria protegida.
Asignaciones grabables dentro de su parte de la región de memoria protegida.
También en el arranque, para configurar la SCIP para Secure Enclave, se usa el sistema operativo de Secure Enclave. Cuando el proceso de arranque se completa, el hardware utilizado para activar la SCIP se bloquea. Esto está así diseñado para impedir que se vuelva a configurar.
Códigos de autenticación de puntero
Los códigos de autenticación de puntero (PAC) se usan para proteger el sistema frente a ataques que aprovechan fallos por corrupción de memoria. El software del sistema y las apps integradas usan estos códigos para ayudar a impedir que se modifiquen los punteros de funciones y las direcciones de retorno (punteros de código). Los PAC usan cinco valores secretos de 128 bits para firmar las instrucciones y los datos del kernel, y cada proceso del espacio del usuario tiene sus propias claves B. Los ítems contienen sal criptográfica y se firman como se indica a continuación.
Ítem | Clave | Sal |
---|---|---|
Dirección de retorno de funciones | IB | Dirección de almacenamiento |
Punteros de funciones | IA | 0 |
Función de invocación del bloqueo | IA | Dirección de almacenamiento |
Caché del método Objective-C | IB | Dirección de almacenamiento + Clase + Selector |
C++ V-Entradas de tabla | IA | Dirección de almacenamiento + Hash (nombre del método alterado) |
Etiqueta goto calculada | IA | Hash (nombre de la función) |
Estado del hilo del kernel | GA | • |
Registros del estado del hilo del usuario | IA | Dirección de almacenamiento |
C++ V-Punteros de tabla | DA | 0 |
El valor de la firma se almacena en bits de relleno sin usar en la parte superior del puntero de 64 bits. La firma se verifica antes de su uso y el relleno se restaura para ayudar a garantizar que la dirección del puntero funcione. Si no se verifica, se produce una anulación. Esta verificación aumenta la dificultad de muchos ataques, como en el caso de un ataque de programación orientada al retorno (ROP), que intenta engañar al dispositivo para que ejecute código existente de manera maliciosa al manipular direcciones de retorno de funciones almacenadas en la pila.
Capa de protección de la página
La capa de protección de la página (PPL) en iOS, iPadOS y watchOS está diseñada para impedir que el código del espacio del usuario se modifique una vez completada la verificación de una firma de código. PPL, basándose en la protección de la integridad del kernel y las restricciones rápidas de permisos, gestiona las modificaciones de los permisos de la tabla de página para garantizar que únicamente la PPL pueda alterar las páginas protegidas que contienen el código de usuario y las tablas de página. El sistema ofrece una reducción drástica de la superficie de ataque al respaldar el cumplimiento de la integridad del código en todo el sistema, incluso si un kernel ha sido comprometido. Esta protección no se ofrece en macOS porque la PPL solo es aplicable en sistemas en los que todo el código ejecutado debe estar firmado.
Monitor de seguridad de la tabla de página y monitor de ejecución de confianza
El monitor de seguridad de la tabla de página (SPTM) y el monitor de ejecución de confianza (TXM) se han diseñado para funcionar conjuntamente y ayudar a proteger las tablas de página de los procesos de usuario y del núcleo frente a modificaciones, incluso cuando los atacantes tienen capacidad de escritura en el núcleo y pueden eludir las protecciones del flujo de control. El SPTM lo hace utilizando un nivel de privilegios superior al del kernel y utilizando el TXM con el nivel de privilegios más bajo para aplicar las políticas que realmente rigen la ejecución de código. Gracias a esta separación de privilegios y a la regulación de la confianza entre ambos, este sistema está diseñado de tal forma que un TXM en riesgo no se traduce automáticamente en una evasión del SPTM. En los SoC A15, A16 y A17, el SPTM (en combinación con el TXM) se ha diseñado como sustituto de la PPL, proporcionando una superficie de ataque menor que no depende de la confianza del núcleo, ni siquiera durante un punto temprano del proceso de arranque. El SPTM también se basa en las nuevas interfaces del chip, que son una evolución de las restricciones de permisos rápidas que utiliza la PPL.