macOS Kernel Extensions
Podstawowe informacje
Rozszerzenia jądra (Kexts) to pakiety z rozszerzeniem .kext
, które są ładowane bezpośrednio do przestrzeni jądra macOS, zapewniając dodatkową funkcjonalność głównemu systemowi operacyjnemu.
Wymagania
Oczywiście, jest to tak potężne, że załadowanie rozszerzenia jądra jest skomplikowane. Oto wymagania, które musi spełniać rozszerzenie jądra, aby mogło być załadowane:
Podczas wejścia w tryb odzyskiwania, rozszerzenia jądra muszą być dozwolone do załadowania:
Rozszerzenie jądra musi być podpisane certyfikatem podpisywania kodu jądra, który może być przyznany tylko przez Apple. Kto dokładnie przeanalizuje firmę i powody, dla których jest to potrzebne.
Rozszerzenie jądra musi być również notaryzowane, Apple będzie mogło sprawdzić je pod kątem złośliwego oprogramowania.
Następnie, użytkownik root jest tym, który może załadować rozszerzenie jądra, a pliki wewnątrz pakietu muszą należeć do roota.
Podczas procesu ładowania, pakiet musi być przygotowany w chronionej lokalizacji nie-root:
/Library/StagedExtensions
(wymaga przyznaniacom.apple.rootless.storage.KernelExtensionManagement
).Na koniec, podczas próby załadowania, użytkownik otrzyma prośbę o potwierdzenie i, jeśli zostanie zaakceptowana, komputer musi być uruchomiony ponownie, aby go załadować.
Proces ładowania
W Catalina wyglądało to tak: Interesujące jest to, że proces weryfikacji zachodzi w userland. Jednak tylko aplikacje z przyznaniem com.apple.private.security.kext-management
mogą zażądać od jądra załadowania rozszerzenia: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli rozpoczyna proces weryfikacji ładowania rozszerzenia
Będzie komunikować się z
kextd
, wysyłając za pomocą usługi Mach.
kextd
sprawdzi kilka rzeczy, takich jak podpis
Będzie komunikować się z
syspolicyd
, aby sprawdzić, czy rozszerzenie może być załadowane.
syspolicyd
poprosi użytkownika, jeśli rozszerzenie nie zostało wcześniej załadowane.
syspolicyd
przekaże wynik dokextd
kextd
w końcu będzie mógł powiedzieć jądru, aby załadowało rozszerzenie
Jeśli kextd
nie jest dostępny, kextutil
może przeprowadzić te same kontrole.
Referencje
Last updated