
Integridad del sistema operativo
Apple diseña el software de su sistema operativo en torno a la seguridad. Este diseño incluye una raíz de confianza de hardware que permite el arranque seguro y un proceso de actualización de software rápido y seguro. Los sistemas operativos de Apple usan sus funciones específicas de hardware basadas en chips para ayudar a impedir que se aprovechen vulnerabilidades mientras el sistema operativo se ejecuta. Estas funciones en tiempo de ejecución protegen la integridad del código de confianza mientras se ejecuta. 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. Estas protecciones están disponibles en dispositivos con sistemas en chips (SoC) diseñados por Apple compatibles (lo que incluye a iOS, iPadOS, macOS en un Mac con chip de Apple, tvOS, visionOS y watchOS).
Función | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Cumplimiento de la integridad de la memoria con la extensión de etiquetado de memoria mejorado |
|
|
|
|
|
|
|
1: El monitor de seguridad de la tabla de página (SPTM) es compatible con el SoC A15 o posterior y M2 o posterior, y sustituye a la capa de protección de la página en las plataformas compatibles.
2: La capa de protección de la página (PPL) y el monitor de seguridad de la tabla de página (SPTM) aplican la ejecución de código firmado y de confianza en todas las plataformas, excepto en macOS (porque macOS se ha diseñado para ejecutar cualquier código). Todas las demás propiedades de seguridad, incluida la protección de las tablas de página, se encuentran en todas 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 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 |
Puntero de desencriptación del bloque | DA | Dirección de almacenamiento + 0xC0BB |
Caché del método Objective-C | IB | Dirección de almacenamiento + Clase + Selector |
Puntero isa de Objective-C | DA | Dirección de almacenamiento + 0x6AE1 |
Puntero super de Objective-C | DA | Dirección de almacenamiento + 0xB5AB |
Selector tipo ivars de Objective-C | DB | Dirección de almacenamiento + 0x57C2 |
Puntero de datos de clase de solo lectura de Objective-C | DA | Dirección de almacenamiento + 0x61F8 |
C++ V-Entradas de tabla | IA | Dirección de almacenamiento + Hash (nombre del método alterado) |
C++ V-Punteros de tabla | DA | Dirección de almacenamiento + Hash (nombre alterado de tabla V base) |
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 |
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, visionOS 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 KIP y las restricciones de permisos rápidas, 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) en iOS, iPadOS, macOS y visionOS se han diseñado para funcionar conjuntamente y ayudar a proteger las tablas de página de los procesos de usuario y del kernel frente a modificaciones. Esto incluye cuando los atacantes tienen capacidad de escritura en el kernel 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 el SoC A15 o posterior y M2 o posterior, 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 se basa en las nuevas interfaces del chip, que son una evolución de las restricciones de permisos rápidas que utiliza la PPL y solo están disponibles en los procesadores enumerados en la tabla anterior.
Cumplimiento de la integridad de la memoria
El cumplimiento de la integridad de la memoria (MIE) es una defensa integral de la seguridad de la memoria para las plataformas Apple disponible en los procesadores A19 y M5 o posterior. El MIE se ha diseñado sobre la sólida base que proporcionan los asignadores de memoria seguros de Apple, junto con la extensión de etiquetado de memoria mejorado (EMTE) en modo síncrono, y con el respaldo de extensas políticas de aplicación de etiquetas de confidencialidad. El MIE está integrado en el chip de Apple y ofrece una protección de seguridad de la memoria inigualable y siempre activa para las superficies de ataque clave, incluido el kernel, al tiempo que mantiene la potencia y el rendimiento que esperan los usuarios. Para obtener más información, consulta Cumplimiento de la integridad de la memoria: una visión completa de la seguridad de la memoria en los dispositivos Apple en el blog sobre seguridad de Apple.
Extensión de etiquetado de memoria
Arm publicó la especificación de extensión de etiquetado de memoria (MTE) en 2019 como herramienta para que el hardware ayude a encontrar fallos por corrupción de memoria. MTE es un sistema de etiquetado y comprobación de memoria en el que cada asignación de memoria se etiqueta con un secreto. El hardware garantiza que las solicitudes posteriores de acceso a la memoria solo se concedan si la solicitud contiene el secreto correcto. Si los secretos no coinciden, la aplicación se bloquea y se registra el evento. Esto permite a los desarrolladores identificar los fallos por corrupción de memoria inmediatamente después de que se produzcan.
Extensión de etiquetado de memoria mejorado
La EMTE cierra los agujeros que impiden que MTE sea una defensa activa, entre ellos que solo admite el modo síncrono, más seguro. Además, acceder a la memoria no etiquetada desde una región de memoria etiquetada requiere conocer la etiqueta de esa región, lo que hace mucho más difícil que los atacantes conviertan los fallos fuera de los límites de la memoria dinámica etiquetada en una forma de eludir la EMTE al modificar directamente las asignaciones no etiquetadas.
Aplicación de etiquetas de confidencialidad
La aplicación de etiquetas de confidencialidad protege la implementación de los asignadores seguros frente a amenazas técnicas y salvaguarda la confidencialidad de las etiquetas EMTE, incluso frente a ataques de canal lateral y de ejecución especulativa. El monitor de seguridad de la tabla de página protege el almacén de reserva del asignador del kernel y el almacenamiento de etiquetas. El sistema también garantiza que, cuando el kernel accede a la memoria en nombre de una aplicación, esté sujeto a las mismas reglas de comprobación de etiquetas que el espacio del usuario. La aplicación de etiquetas de confidencialidad también se ha diseñado para mitigar la filtración de etiquetas por ataques especulativos o de temporización, e incluso incluye una protección contra Spectre V1.