macOS System Extensions

Reading time: 5 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

System Extensions / Endpoint Security Framework

W przeciwieństwie do Kernel Extensions, System Extensions działają w przestrzeni użytkownika zamiast w przestrzeni jądra, co zmniejsza ryzyko awarii systemu z powodu awarii rozszerzenia.

https://knight.sc/images/system-extension-internals-1.png

Istnieją trzy typy rozszerzeń systemowych: DriverKit Extensions, Network Extensions i Endpoint Security Extensions.

DriverKit Extensions

DriverKit jest zamiennikiem dla rozszerzeń jądra, które zapewniają wsparcie sprzętowe. Umożliwia to działanie sterowników urządzeń (takich jak sterowniki USB, Serial, NIC i HID) w przestrzeni użytkownika zamiast w przestrzeni jądra. Framework DriverKit zawiera wersje w przestrzeni użytkownika niektórych klas I/O Kit, a jądro przekazuje normalne zdarzenia I/O Kit do przestrzeni użytkownika, oferując bezpieczniejsze środowisko dla tych sterowników.

Network Extensions

Network Extensions zapewniają możliwość dostosowania zachowań sieciowych. Istnieje kilka typów Network Extensions:

  • App Proxy: Używane do tworzenia klienta VPN, który implementuje protokół VPN oparty na przepływie. Oznacza to, że obsługuje ruch sieciowy na podstawie połączeń (lub przepływów) zamiast pojedynczych pakietów.
  • Packet Tunnel: Używane do tworzenia klienta VPN, który implementuje protokół VPN oparty na pakietach. Oznacza to, że obsługuje ruch sieciowy na podstawie pojedynczych pakietów.
  • Filter Data: Używane do filtrowania "przepływów" sieciowych. Może monitorować lub modyfikować dane sieciowe na poziomie przepływu.
  • Filter Packet: Używane do filtrowania pojedynczych pakietów sieciowych. Może monitorować lub modyfikować dane sieciowe na poziomie pakietu.
  • DNS Proxy: Używane do tworzenia niestandardowego dostawcy DNS. Może być używane do monitorowania lub modyfikowania zapytań i odpowiedzi DNS.

Endpoint Security Framework

Endpoint Security to framework dostarczany przez Apple w macOS, który zapewnia zestaw API do zabezpieczeń systemowych. Jest przeznaczony do użytku przez dostawców zabezpieczeń i deweloperów do budowania produktów, które mogą monitorować i kontrolować aktywność systemu w celu identyfikacji i ochrony przed złośliwą działalnością.

Framework ten zapewnia zbiór API do monitorowania i kontrolowania aktywności systemu, takich jak wykonywanie procesów, zdarzenia systemu plików, zdarzenia sieciowe i jądra.

Rdzeń tego frameworka jest zaimplementowany w jądrze, jako Kernel Extension (KEXT) znajdujący się w /System/Library/Extensions/EndpointSecurity.kext. Ten KEXT składa się z kilku kluczowych komponentów:

  • EndpointSecurityDriver: Działa jako "punkt wejścia" dla rozszerzenia jądra. Jest głównym punktem interakcji między systemem operacyjnym a frameworkiem Endpoint Security.
  • EndpointSecurityEventManager: Ten komponent jest odpowiedzialny za implementację haków jądra. Haki jądra pozwalają frameworkowi monitorować zdarzenia systemowe poprzez przechwytywanie wywołań systemowych.
  • EndpointSecurityClientManager: Zarządza komunikacją z klientami w przestrzeni użytkownika, śledząc, którzy klienci są połączeni i muszą otrzymywać powiadomienia o zdarzeniach.
  • EndpointSecurityMessageManager: Wysyła wiadomości i powiadomienia o zdarzeniach do klientów w przestrzeni użytkownika.

Zdarzenia, które framework Endpoint Security może monitorować, są klasyfikowane na:

  • Zdarzenia plików
  • Zdarzenia procesów
  • Zdarzenia gniazd
  • Zdarzenia jądra (takie jak ładowanie/odładowanie rozszerzenia jądra lub otwieranie urządzenia I/O Kit)

Architektura Endpoint Security Framework

https://www.youtube.com/watch?v=jaVkpM1UqOs

Komunikacja w przestrzeni użytkownika z frameworkiem Endpoint Security odbywa się za pośrednictwem klasy IOUserClient. Używane są dwie różne podklasy, w zależności od typu wywołującego:

  • EndpointSecurityDriverClient: Wymaga uprawnienia com.apple.private.endpoint-security.manager, które posiada tylko proces systemowy endpointsecurityd.
  • EndpointSecurityExternalClient: Wymaga uprawnienia com.apple.developer.endpoint-security.client. Zwykle byłoby to używane przez oprogramowanie zabezpieczające firm trzecich, które musi współdziałać z frameworkiem Endpoint Security.

Rozszerzenia Endpoint Security:libEndpointSecurity.dylib to biblioteka C, której używają rozszerzenia systemowe do komunikacji z jądrem. Ta biblioteka wykorzystuje I/O Kit (IOKit) do komunikacji z KEXT Endpoint Security.

endpointsecurityd to kluczowy demon systemowy zaangażowany w zarządzanie i uruchamianie rozszerzeń systemowych zabezpieczeń punktów końcowych, szczególnie podczas wczesnego procesu rozruchu. Tylko rozszerzenia systemowe oznaczone jako NSEndpointSecurityEarlyBoot w ich pliku Info.plist otrzymują tę wczesną obsługę rozruchu.

Inny demon systemowy, sysextd, waliduje rozszerzenia systemowe i przenosi je do odpowiednich lokalizacji systemowych. Następnie prosi odpowiedni demon o załadowanie rozszerzenia. SystemExtensions.framework jest odpowiedzialny za aktywację i dezaktywację rozszerzeń systemowych.

Obejście ESF

ESF jest używane przez narzędzia zabezpieczające, które będą próbować wykryć red teamera, więc wszelkie informacje na temat tego, jak można to obejść, są interesujące.

CVE-2021-30965

Problem polega na tym, że aplikacja zabezpieczająca musi mieć uprawnienia do pełnego dostępu do dysku. Jeśli więc atakujący mógłby to usunąć, mógłby zapobiec uruchomieniu oprogramowania:

bash
tccutil reset All

Aby uzyskać więcej informacji na temat tego obejścia i pokrewnych, sprawdź wykład #OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba

Na koniec naprawiono to, przyznając nową uprawnienie kTCCServiceEndpointSecurityClient aplikacji zabezpieczającej zarządzanej przez tccd, dzięki czemu tccutil nie usunie jej uprawnień, co uniemożliwi jej działanie.

Referencje

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks