macOS Kernel Extensions
Basic Information
Kernel extensions (Kexts) are пакети з розширенням .kext
, які завантажуються безпосередньо в простір ядра macOS, надаючи додаткову функціональність основній операційній системі.
Requirements
Очевидно, що це настільки потужно, що завантажити розширення ядра є складним. Це вимоги, які повинно виконувати розширення ядра, щоб бути завантаженим:
Коли входите в режим відновлення, розширення ядра повинні бути дозволені для завантаження:
Розширення ядра повинно бути підписане сертифікатом підпису коду ядра, який може бути наданий тільки Apple. Хто детально розгляне компанію та причини, чому це потрібно.
Розширення ядра також повинно бути нотаризоване, Apple зможе перевірити його на наявність шкідливого ПЗ.
Потім, кореневий користувач є тим, хто може завантажити розширення ядра, а файли всередині пакету повинні належати кореню.
Під час процесу завантаження пакет повинен бути підготовлений у захищеному місці, що не є кореневим:
/Library/StagedExtensions
(вимагає наданняcom.apple.rootless.storage.KernelExtensionManagement
).Нарешті, при спробі завантажити його, користувач отримає запит на підтвердження і, якщо прийнято, комп'ютер повинен бути перезавантажений для його завантаження.
Loading process
У Catalina це виглядало так: Цікаво відзначити, що процес перевірки відбувається в користувацькому просторі. Однак тільки програми з наданням com.apple.private.security.kext-management
можуть запитувати у ядра завантажити розширення: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli починає процес перевірки для завантаження розширення
Він спілкуватиметься з
kextd
, використовуючи Mach service.
kextd
перевірить кілька речей, таких як підпис
Він спілкуватиметься з
syspolicyd
, щоб перевірити, чи може розширення бути завантаженим.
syspolicyd
запитає користувача, якщо розширення не було завантажено раніше.
syspolicyd
повідомить результатkextd
kextd
нарешті зможе сказати ядру завантажити розширення
Якщо kextd
недоступний, kextutil
може виконати ті ж перевірки.
Referencias
Last updated