hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md

5.5 KiB

Rozszerzenia jądra macOS

Nauka hakerskiego AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

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 ładowanie rozszerzenia jądra jest skomplikowane. Oto wymagania, które musi spełnić rozszerzenie jądra, aby zostać 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ć udzielony tylko przez Apple. Firma dokładnie przeanalizuje firmę i powody, dla których jest to potrzebne.
  • Rozszerzenie jądra musi również być znotaryzowane, aby Apple mogło sprawdzić je pod kątem złośliwego oprogramowania.
  • Następnie użytkownik root 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 chronionym miejscu niebędącym rootem: /Library/StagedExtensions (wymaga przyznania com.apple.rootless.storage.KernelExtensionManagement).
  • Wreszcie, podczas próby załadowania, użytkownik otrzyma prośbę o potwierdzenie, a jeśli zostanie zaakceptowana, komputer musi zostać ponownie uruchomiony, aby załadować rozszerzenie.

Proces ładowania

W przypadku systemu Catalina wyglądało to tak: Warto zauważyć, że proces weryfikacji zachodzi w przestrzeni użytkownika. Jednak tylko aplikacje posiadające przyznanie com.apple.private.security.kext-management mogą żądać od jądra załadowania rozszerzenia: kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil wiersz poleceń rozpoczyna proces weryfikacji ładowania rozszerzenia
  • Będzie rozmawiał z kextd, wysyłając używając usługi Mach.
  1. kextd sprawdzi kilka rzeczy, takich jak podpis
  • Będzie rozmawiał 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ądrze, aby załadowało rozszerzenie

Jeśli kextd nie jest dostępny, kextutil może wykonać te same sprawdzenia.

Referencje

Nauka hakerskiego AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!