
Integridad del sistema operativo
Apple diseña su software de sistema operativo priorizando la seguridad. Este diseño incluye una raíz de confianza de hardware que permite un arranque seguro, y un proceso de actualización de software seguro que es rápido y seguro. Los sistemas operativos de Apple también aprovechan las funcionalidades del hardware basado en silicio especialmente diseñadas para ayudar a prevenir la explotación mientras se ejecuta el sistema operativo. Estas funciones de tiempo de ejecución protegen la integridad del código de confianza mientras se ejecuta. El software del sistema operativo de Apple ayuda a mitigar las técnicas de ataque y explotación, ya sea que se originen en una app maliciosa, en la web o mediante cualquier otro canal. Estas protecciones están disponibles en dispositivos con SoC de Apple compatibles, los cuales incluyen iOS, iPadOS, macOS en una Mac con Apple Chip, tvOS, visionOS y watchOS.
Funcionalidad | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Imposición de la integridad de la memoria con la extensión de etiquetado de memoria mejorada |
|
|
|
|
|
|
|
1: el monitor de tablas de páginas seguro (MTPS) es compatible con los chips A15, o posterior, y M2 o posterior, y reemplaza la capa de protección de página en las plataformas admitidas.
2: La capa de protección de página (CPP) y el monitor de tablas de páginas seguro (MTPS) imponen la ejecución de código firmado y de confianza en todas las plataformas, a excepción de macOS (porque macOS está diseñado para ejecutar cualquier código). Todas las demás propiedades de seguridad, incluida la protección de las tablas de páginas, están presentes en todas las plataformas compatibles.
Protección de la integridad del kernel
Después de que el kernel del sistema operativo completa la inicialización, se activa la protección de la integridad del kernel (KIP) para ayudar a evitar modificaciones en el código del kernel y del controlador. El controlador de la memoria brinda una región de memoria física protegida que iBoot utiliza para cargar el kernel y sus extensiones. Una vez que se completa el arranque, el controlador de memoria niega la escritura en la región de la memoria física protegida. La unidad de administración de memoria (MMU) del procesador de aplicaciones está configurada para ayudar a evitar que se asigne código privilegiado de la memoria física fuera de la región de memoria protegida y para evitar las asignaciones editables de la memoria física dentro de la región de memoria del kernel.
Para prevenir su reconfiguración, el hardware utilizado para activar la KIP se bloquea después de que se completa el proceso de arranque.
Restricciones rápidas de permisos
A partir de los SoC A11 Bionic y S3 de Apple, se introdujo una nueva primitiva de hardware llamada Restricciones rápidas de permisos, la cual incluye un registrador de CPU que rápidamente restringe los permisos por hilo. Con las restricciones rápidas de permisos (también conocidas como registros APRR), los sistemas operativos compatibles pueden eliminar permisos de ejecución desde la memoria sin tener que realizar una llamada al sistema y un recorrido o barrido de la tabla de la página. Estos registros ofrecen un nivel adicional de mitigación para ataques de la web, particularmente para el código compilado durante la ejecución (compilado en tiempo de ejecución), ya que la memoria no se puede ejecutar eficientemente al mismo tiempo que se lee o que se escribe en ella.
Protección de la integridad del coprocesador del sistema
El firmware del coprocesador maneja muchas tareas críticas del sistema, por ejemplo, el Secure Enclave, el procesador del sensor de imágenes y el coprocesador Motion. Por lo tanto, su seguridad es una parte fundamental de la seguridad de todo el sistema. Para evitar 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 manera muy similar a la KIP: durante el arranque, iBoot carga el firmware de cada coprocesador en la región de memoria protegida, reservada y separada de la región de la KIP. iBoot configura las unidades de memoria de cada coprocesador para ayudar a evitar lo siguiente:
Asignaciones ejecutables fuera de la región de memoria protegida
Asignaciones editables dentro de la región de memoria protegida
También al momento del arranque, para configurar la SCIP para el Secure Enclave, se utiliza el sistema operativo del Secure Enclave. Cuando el proceso de arranque esté completo, el hardware utilizado para activar SCIP se bloquea, lo cual está diseñado para evitar que se vuelva a configurar.
Códigos de autenticación con puntero
Los códigos de autenticación con puntero (PAC) se utilizan para proteger contra la explotación de errores de corrupción de memoria. El software del sistema y las apps integradas usan PAC para prevenir la modificación de punteros de función y direcciones de devolución (punteros de código). PAC utiliza cinco valores secretos de 128 bits para firmar los datos y las instrucciones del kernel, y cada proceso del espacio del usuario tiene sus propias claves B. Los elementos se aleatorizan y firman como se indica a continuación.
Elemento | Clave | Aleatorización |
|---|---|---|
Dirección de retorno de la función | IB | Dirección de almacenamiento |
Punteros de función | IA | 0 |
Función de innovación de bloque | IA | Dirección de almacenamiento |
Puntero de descriptores de bloques | DA | Dirección de almacenamiento + 0xC0BB |
Caché del método Objetivo-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 |
Ivars de Objective-C de tipo Selector | DB | Dirección de almacenamiento + 0x57C2 |
Puntero de datos de clase de sólo lectura de Objective-C | DA | Dirección de almacenamiento + 0x61F8 |
Entradas de la tabla virtual de C++ | IA | Dirección de almacenamiento + Hash (nombre del método corrupto) |
Punteros de la tabla virtual de C++ | DA | Dirección de almacenamiento + Hash (nombre de tabla V base corrupto) |
Etiqueta Goto computada | 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 los bits de espacio adicional sin utilizar en la parte superior del puntero de 64 bits. La firma se verifica antes del uso, y el espacio adicional se restaura para ayudar a cerciorarse de que la dirección del puntero funcione; si no se verifica, se cancela la operación. Esta verificación aumenta la dificultad de muchos ataques, como el ataque contra la programación orientada a las devoluciones (ROP), que intenta engañar al dispositivo para que ejecute un código malintencionado existente al manipular direcciones de devolución de función almacenadas en la pila.
Capa de protección de página
La capa de protección de página (CPP) en iOS, iPadOS, visionOS y watchOS está diseñada para impedir que el código de espacio del usuario se modifique después de que se completa la verificación de la firma del código. Basándose en la KIP y las restricciones rápidas de permisos, la CPP administra las omisiones a los permisos de la tabla de páginas para asegurarse de que sólo la CPP pueda alterar las páginas protegidas que contienen el código del usuario y las tablas de páginas. El sistema brinda una reducción masiva de la superficie de ataque al soportar la aplicación de la integridad del código de todo el sistema, incluso frente a un kernel vulnerado. Esta protección no se ofrece en macOS debido a que la CPP sólo es de aplicación en sistemas donde todo el código ejecutado debe estar firmado.
El monitor de tablas de páginas seguro y el monitor de ejecución de confianza
El monitor de tablas de páginas seguro (MTPS) y el monitor de ejecución de confianza en iOS, iPadOS, macOS y visionOS están diseñados para trabajar juntos a fin de proteger las tablas de páginas contra modificaciones tanto para los procesos del usuario como del kernel. Esto incluye cuando los atacantes tienen capacidades de escritura en el kernel y pueden eludir las protecciones del flujo de control. Para lograr esto, el MTPS usa un nivel de privilegio más alto que el kernel y utiliza el monitor de ejecución de confianza con privilegios más bajos para hacer cumplir las políticas que gobiernan la ejecución del código. Con esta separación de privilegios y el control de la confianza entre los dos monitores, el sistema está diseñado de tal forma que una vulneración del monitor de ejecución de confianza no involucre automáticamente una omisión del MTPS. En los SoC A15 y M2, y modelos posteriores, el MTPS (en combinación con el monitor de ejecución de confianza) reemplaza a la CPP, lo que proporciona una superficie de ataque menor que no depende de la confianza en el kernel, incluso durante el proceso de arranque temprano. El MTPS se basa en nuevas primitivas de silicio que son una evolución de las restricciones rápidas de permiso que utiliza la CPP, y sólo están disponibles en los procesadores que figuran en la tabla anterior.
Imposición de la integridad de la memoria
La imposición de la integridad de la memoria (MIE) es una defensa de seguridad integral de la memoria disponible en las plataformas Apple a partir de los procesadores A19 y M5. La MIE se basa la sólida infraestructura que proporcionan los asignadores de memoria seguros de Apple, junto con la extensión de etiquetado de memoria mejorada (EMTE) en modo síncrono, y es compatible con amplias políticas de imposición de la confidencialidad de las etiquetas. La MIE está integrada en el chip de Apple y ofrece una protección de seguridad de la memoria sin igual y siempre activa para superficies de ataque clave, incluido el núcleo, al tiempo que mantiene la potencia y el rendimiento que los usuarios esperan. Para obtener más información, consulta Imposición de la integridad de la memoria: Una visión completa de la seguridad de la memoria en los dispositivos Apple en el blog sobre la investigación de la seguridad de Apple.
Extensión de etiquetado de memoria
Arm publicó la especificación Extensión de etiquetado de memoria (MTE) en 2019 como una herramienta para que el hardware ayude a encontrar errores de corrupción de memoria. La MTE es un sistema de etiquetado y verificación de etiquetas de memoria, en el que cada asignación de memoria se etiqueta con un secreto. El hardware garantiza que las futuras solicitudes de acceso a la memoria se concedan sólo si la solicitud contiene el secreto correcto. Si los secretos no coinciden, al app se bloquea y el evento se registra. Esto permite a los desarrolladores identificar los errores de corrupción de memoria inmediatamente cuando se producen.
Extensión de etiquetado de memoria mejorada
La EMTE cierra los agujeros que impiden que la MTE sea una defensa activa, incluyendo sólo ser compatible con el modo síncrono más seguro. Además, para acceder a la memoria sin etiquetar desde una región de memoria etiquetada es necesario conocer la etiqueta de esa región, lo que dificulta considerablemente que los atacantes conviertan los errores fuera de límites de la memoria etiquetada dinámica en una forma de eludir la EMTE modificando directamente las asignaciones sin etiquetar.
Aplicación de la confidencialidad de las etiquetas
La aplicación de la confidencialidad de las etiquetas protege la implementación de los asignadores seguros frente a amenazas técnicas y protege la confidencialidad de las etiquetas de la EMTE, incluso frente a ataques de canal lateral y de ejecución especulativa. El monitor de tablas de páginas seguro protege el almacén de respaldo del asignador del núcleo y el almacenamiento de etiquetas. El sistema también garantiza que, cuando el núcleo accede a la memoria en nombre de una aplicación, se aplican las mismas reglas de comprobación de etiquetas que el espacio de usuario. La aplicación de la confidencialidad de las etiquetas también está diseñada para mitigar la fuga de etiquetas debido a ataques de sincronización o especulativos, e incluso incluye una protección contra Spectre V1.