macOS System Extensions
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
W przeciwieństwie do rozszerzeń jądra, rozszerzenia systemowe działają w przestrzeni użytkownika zamiast w przestrzeni jądra, co zmniejsza ryzyko awarii systemu z powodu awarii rozszerzenia.
Istnieją trzy typy rozszerzeń systemowych: Rozszerzenia DriverKit, Rozszerzenia Sieciowe i Rozszerzenia Bezpieczeństwa Końcówki.
DriverKit jest zamiennikiem rozszerzeń jądra, które zapewniają wsparcie sprzętowe. Umożliwia to działanie sterowników urządzeń (takich jak sterowniki USB, szeregowe, NIC i HID) w przestrzeni użytkownika zamiast w przestrzeni jądra. Ramy DriverKit zawierają 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.
Rozszerzenia Sieciowe umożliwiają dostosowanie zachowań sieciowych. Istnieje kilka typów Rozszerzeń Sieciowych:
Proxy Aplikacji: 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.
Tunel Pakietowy: 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.
Filtruj Dane: Używane do filtrowania "przepływów" sieciowych. Może monitorować lub modyfikować dane sieciowe na poziomie przepływu.
Filtruj Pakiet: Używane do filtrowania pojedynczych pakietów sieciowych. Może monitorować lub modyfikować dane sieciowe na poziomie pakietu.
Proxy DNS: Używane do tworzenia niestandardowego dostawcy DNS. Może być używane do monitorowania lub modyfikowania żądań i odpowiedzi DNS.
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 programistów do budowy produktów, które mogą monitorować i kontrolować aktywność systemu w celu identyfikacji i ochrony przed złośliwą działalnością.
Ten framework 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 Rozszerzenie Jądra (KEXT) znajdujące 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 potrzebują 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)
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 jest posiadane tylko przez proces systemowy endpointsecurityd
.
EndpointSecurityExternalClient: Wymaga uprawnienia com.apple.developer.endpoint-security.client
. Zwykle byłoby 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 rozszerzenia systemowe używają do komunikacji z jądrem. Ta biblioteka używa I/O Kit (IOKit
) do komunikacji z KEXT Endpoint Security.
endpointsecurityd
to kluczowy demon systemowy zaangażowany w zarządzanie i uruchamianie rozszerzeń systemowych bezpieczeństwa końcówki, 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.
ESF jest używane przez narzędzia zabezpieczające, które będą próbowały wykryć członka zespołu red, więc wszelkie informacje na temat tego, jak można to obejść, są interesujące.
Problem polega na tym, że aplikacja zabezpieczająca musi mieć uprawnienia do pełnego dostępu do dysku. Więc jeśli atakujący mógłby to usunąć, mógłby zapobiec uruchomieniu oprogramowania:
Dla więcej informacji na temat tego obejścia i pokrewnych, sprawdź wykład #OBTS v5.0: "Słaby punkt EndpointSecurity" - Fitzl Csaba
Na końcu to zostało naprawione poprzez nadanie nowego uprawnienia kTCCServiceEndpointSecurityClient
aplikacji zabezpieczającej zarządzanej przez tccd
, dzięki czemu tccutil
nie usunie jej uprawnień, co uniemożliwi jej działanie.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)