iBoot — это загрузчик второго уровня для всех продуктов Apple . [3] Он заменяет старый загрузчик BootX . По сравнению со своим предшественником, iBoot улучшает аутентификацию, выполняемую в цепочке загрузки. [2]
Для компьютеров Mac на базе x86 процесс загрузки начинается с запуска кода, хранящегося в защищенном загрузочном ПЗУ UEFI (этап 1). Загрузочное ПЗУ выполняет две основные задачи: инициализировать системное оборудование и выбирать операционную систему для запуска ( компоненты POST и UEFI). Для компьютеров Mac на базе ARM загрузочное ПЗУ не включает UEFI. [4]
Для iOS , iPadOS и ARM macOS процесс загрузки начинается с запуска загрузочного ПЗУ устройства. Загрузочное ПЗУ загружает низкоуровневый загрузчик (LLB), который является загрузчиком этапа 1, и загружает iBoot. Если все пойдет хорошо, iBoot продолжит загрузку ядра iOS, iPadOS или macOS, а также остальной части операционной системы. [5] [6] Если iBoot не загружается или не проверяет iOS, iPadOS или macOS, загрузчик переходит в режим DFU ( обновление прошивки устройства ) [ 7 ] ; в противном случае он загружает оставшиеся модули ядра . [2]
В macOS x86 iBoot находится в /System/Library/CoreServices/boot.efi
. [8] После загрузки ядра и всех драйверов, необходимых для загрузки, загрузчик запускает процедуру инициализации ядра. На этом этапе загружено достаточное количество драйверов, чтобы ядро могло найти корневое устройство. [9]
Apple изменила набор инструментов компилятора C , который используется для сборки iBoot, чтобы повысить безопасность памяти , начиная с iOS 14 . Это усовершенствование предназначено для смягчения целых классов распространенных уязвимостей повреждения памяти, таких как переполнение буфера , эксплуатация кучи , уязвимости путаницы типов и атаки с использованием после освобождения . Эти изменения потенциально могут помешать злоумышленникам успешно повысить свои привилегии для запуска вредоносного кода, например, при атаке, включающей выполнение произвольного кода . [10]
в 2018 году часть исходного кода iBoot для iOS 9 просочилась на GitHub , [11] затем Apple направила GitHub запрос на удаление репозитория из-за авторских прав ( DMCA ) с требованием удалить репозиторий. Предполагалось, что ответственность за утечку несет сотрудник Apple. Однако Apple это не подтвердила.