iBoot es el gestor de arranque de etapa 2 para todos los productos de Apple . [3] Reemplaza al antiguo gestor de arranque basado en EFI en los Mac basados en Intel. En comparación con su predecesor, iBoot mejora la autenticación realizada en la cadena de arranque. [2]
En el caso de los Mac basados en x86 , el proceso de arranque comienza ejecutando el código almacenado en la ROM de arranque UEFI protegida (etapa 1). La ROM de arranque tiene dos responsabilidades principales: inicializar el hardware del sistema y seleccionar un sistema operativo para ejecutar (el componente POST y UEFI). En el caso de los Mac basados en ARM , la ROM de arranque no incluye UEFI. [4]
En el caso de iPhones , iPads y Macs basados en ARM , el proceso de arranque comienza ejecutando la ROM de arranque del dispositivo. La ROM de arranque carga elCargador de arranque de bajo nivel (LLB), que es el cargador de arranque de la etapa 1 y carga iBoot. Si todo va bien, iBoot procederá a cargar eliOS,iPadOSomacOSasí como el resto del sistema operativo.[5][6]Si iBoot no se carga o no verifica iOS, iPadOS o macOS, el cargador de arranque salta al modo DFU (Actualizacióndelfirmwaredeldispositivo)[7]; de lo contrario, carga losmódulosdel kernel[2]DesdeApple A7yApple M1, el LLB se almacena en la memoria flash NAND del iPhone o iPad, o en la SSD de la Mac con Apple Silicon.
En los Mac x86, iBoot se encuentra en /System/Library/CoreServices/boot.efi
. [8] Una vez que se cargan el núcleo y todos los controladores necesarios para el arranque, el gestor de arranque inicia el procedimiento de inicialización del núcleo. En este punto, se cargan suficientes controladores para que el núcleo encuentre el dispositivo raíz. [9]
Apple ha modificado la cadena de herramientas del compilador C que se utiliza para crear iBoot con el fin de mejorar la seguridad de la memoria desde iOS 14. Este avance está diseñado para mitigar clases enteras de vulnerabilidades comunes de corrupción de memoria, como desbordamientos de búfer , explotaciones de montón , vulnerabilidades de confusión de tipos y ataques de uso después de liberación . Estas modificaciones pueden evitar potencialmente que los atacantes escalen con éxito sus privilegios para ejecutar código malicioso, como un ataque que implique la ejecución de código arbitrario . [10]
En 2018, una parte del código fuente de iBoot para iOS 9 se filtró en GitHub , [11] Apple luego envió una solicitud de eliminación por derechos de autor ( DMCA ) a GitHub para eliminar el repositorio. Se creía que un empleado de Apple era responsable de la filtración. Sin embargo, esto no fue confirmado por Apple.