macOS Kernel Extensions

Support HackTricks

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 przyznania com.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

  1. kextutil cli rozpoczyna proces weryfikacji ładowania rozszerzenia

  • Będzie komunikować się z kextd, wysyłając za pomocą usługi Mach.

  1. kextd sprawdzi kilka rzeczy, takich jak podpis

  • Będzie komunikować się z syspolicyd, aby sprawdzić, czy rozszerzenie może być załadowane.

  1. syspolicyd poprosi użytkownika, jeśli rozszerzenie nie zostało wcześniej załadowane.

  • syspolicyd przekaże wynik do kextd

  1. 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

Support HackTricks

Last updated