Безопасное расширение ядра в macOS
Начиная с macOS 11, если сторонние расширения ядра разрешены, их невозможно загрузить в ядро по запросу. Вместо этого они объединяются во вспомогательную коллекцию ядра (AuxKC), которая загружается в процессе загрузки компьютера. На компьютере Mac с чипом Apple измерение AuxKC прописывается в политике LocalPolicy (на оборудовании предыдущих поколений измерение AuxKC хранилось в томе данных). Перестроение AuxKC требует подтверждения пользователя и перезапуска macOS для загрузки внесенных изменений в ядро. Кроме того, для параметра безопасной загрузки должен быть выбран сниженный уровень безопасности.
Важно! В macOS больше не рекомендуется использовать расширения ядра. Расширения ядра подвергают риску целостность и надежность операционной системы, поэтому Apple рекомендует отдать предпочтение решениям, которые не требуют расширений.
Расширения ядра на компьютере Mac с чипом Apple
На компьютере Mac с чипом Apple расширения ядра должны быть разрешены явным образом с помощью длительного нажатия кнопки питания при запуске для перехода в режим одной истинной среды восстановления (1TR), последующего перехода на сниженный уровень безопасности и установки соответствующего флажка для активации расширений ядра. Для этого также требуется ввести пароль администратора для авторизации перехода в режим сниженной безопасности. Использование 1TR в сочетании с паролем усложняет для проникшего в macOS злоумышленника, использующего только программное обеспечение, внедрение расширений ядра в macOS, которые затем можно было бы использовать для получения прав уровня ядра.
После авторизации пользователем загрузки расширений ядра применяется поток утвержденной пользователем загрузки расширений ядра. Он предназначен для авторизации установки расширений ядра. Авторизация, используемая для указанного выше потока, также применяется для перехвата хеша SHA384 списка авторизованных пользователем расширений ядра (UAKL) в политике LocalPolicy. Затем процесс управления ядром (kmd
) подтверждает включение в AuxKC только тех расширений ядра, которые указаны в списке UAKL.
Если включена функция защиты целостности системы (SIP), выполняется проверка подписи каждого расширения ядра, прежде чем оно будет включено в AuxKC.
Если функция SIP выключена, подпись расширения ядра не проверяется.
Этот подход позволяет выполнять потоки низкого уровня безопасности, с помощью которых разработчики или пользователи, не участвующие в программе Apple Developer Program, тестируют расширения ядра перед их подписью.
После создания AuxKC ее измерение отправляется в Secure Enclave на подпись и включение в структуру данных Image4, которая подлежит проверке загрузчиком iBoot во время загрузки. В процессе формирования AuxKC также создается ответ расширения ядра. Этот ответ содержит список расширений ядра, которые фактически были включены в AuxKC, поскольку набор может оказаться поднабором UAKL, если были обнаружены запрещенные расширения ядра. Хеш SHA384 структуры данных Image4 коллекции AuxKC и ответ расширения ядра включаются в файл LocalPolicy. Хеш Image4 AuxKC используется для дополнительной проверки загрузчиком iBoot во время загрузки, что помогает исключить загрузку старого файла Image4 AuxKC, подписанного Secure Enclave, с новой политикой LocalPolicy. Ответ расширения ядра используется такими подсистемами, как Apple Pay, для определения наличия любых загруженных расширений ядра, которые могут повлиять на достоверность macOS. Если такие расширения обнаруживаются, функциональные возможности Apple Pay могут быть отключены.
Системные расширения
В macOS 10.15 разработчики могут расширять возможности macOS, устанавливая и используя системные расширения, которые исполняются в пользовательском пространстве, а не на уровне ядра. Благодаря работе в пользовательском пространстве расширения системы повышают стабильность и безопасность macOS. Несмотря на то, что расширения ядра по определению имеют полный доступ ко всей операционной системе, расширениям, работающим в пользовательском пространстве, предоставляются только те права, которые необходимы для выполнения их конкретной функции.
Разработчики могут использовать доступные программные среды, включая DriverKit, EndpointSecurity и NetworkExtension, для создания драйверов USB и драйверов интерфейса пользователя, инструментов защиты конечных точек (например, агентов предотвращения потери данных и других агентов конечных точек), а также инструментов VPN и сетевых средств, причем для этого не потребуются расширения ядра. Сторонние агенты безопасности должны использоваться только в том случае, если они используют эти API или имеют продуманную схему перехода к ним от расширений ядра.
Загрузка расширений ядра, утвержденных пользователем
Для повышения безопасности перед загрузкой расширений ядра, устанавливаемых во время или после установки macOS 10.13, требуется согласие пользователя. Этот процесс называется утвержденной пользователем загрузкой расширений ядра. Для утверждения расширения ядра требуются права администратора. Расширения ядра не требуют утверждения в следующих случаях:
расширения были установлены на Mac macOS 10.12 или более ранней версии;
расширения заменяют ранее утвержденные расширения;
их загрузка без согласия пользователя разрешена при помощи инструмента командной строки
spctl
, доступного при загрузке Mac в режиме recoveryOS;их загрузка разрешена через конфигурацию управления мобильными устройствами (MDM).
Начиная с macOS 10.13.2 через систему MDM можно задать список расширений ядра, загружаемых без разрешения пользователя. Для этого необходимо, чтобы Mac с macOS 10.13.2 был зарегистрирован в MDM через Apple School Manager или Apple Business Manager либо чтобы регистрация в MDM была совершена пользователем.