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