macOS System Extensions

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

System Extensions / Endpoint Security Framework

Za razliku od Kernel Extensions, System Extensions se izvršavaju u korisničkom prostoru umesto u kernel prostoru, smanjujući rizik od pada sistema zbog kvara ekstenzije.

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

Postoje tri tipa sistemskih ekstenzija: DriverKit ekstenzije, Network ekstenzije i Endpoint Security ekstenzije.

DriverKit Extensions

DriverKit je zamena za kernel ekstenzije koje obezbeđuju hardversku podršku. Omogućava drajverima uređaja (kao što su USB, Serial, NIC i HID drajveri) da se izvršavaju u korisničkom prostoru umesto u kernel prostoru. DriverKit okvir uključuje verzije određenih I/O Kit klasa u korisničkom prostoru, a kernel prosleđuje normalne I/O Kit događaje u korisnički prostor, nudeći sigurnije okruženje za rad ovih drajvera.

Network Extensions

Network Extensions pružaju mogućnost prilagođavanja mrežnih ponašanja. Postoji nekoliko tipova Network Extensions:

  • App Proxy: Ovo se koristi za kreiranje VPN klijenta koji implementira protokol prilagođen VPN-u orijentisan na tok. To znači da upravlja mrežnim saobraćajem na osnovu veza (ili tokova) umesto pojedinačnih paketa.
  • Packet Tunnel: Ovo se koristi za kreiranje VPN klijenta koji implementira protokol prilagođen VPN-u orijentisan na pakete. To znači da upravlja mrežnim saobraćajem na osnovu pojedinačnih paketa.
  • Filter Data: Ovo se koristi za filtriranje mrežnih "tokova". Može pratiti ili modifikovati mrežne podatke na nivou toka.
  • Filter Packet: Ovo se koristi za filtriranje pojedinačnih mrežnih paketa. Može pratiti ili modifikovati mrežne podatke na nivou paketa.
  • DNS Proxy: Ovo se koristi za kreiranje prilagođenog DNS provajdera. Može se koristiti za praćenje ili modifikovanje DNS zahteva i odgovora.

Endpoint Security Framework

Endpoint Security je okvir koji pruža Apple u macOS-u i koji obezbeđuje skup API-ja za bezbednost sistema. Namenjen je za korišćenje od strane bezbednosnih provajdera i developera za izradu proizvoda koji mogu pratiti i kontrolisati aktivnost sistema kako bi identifikovali i zaštitili se od zlonamernih aktivnosti.

Ovaj okvir pruža kolekciju API-ja za praćenje i kontrolu aktivnosti sistema, kao što su izvršenja procesa, događaji u datotečnom sistemu, mrežni i kernel događaji.

Osnova ovog okvira je implementirana u kernelu, kao Kernel Extension (KEXT) lociran na /System/Library/Extensions/EndpointSecurity.kext. Ovaj KEXT se sastoji od nekoliko ključnih komponenti:

  • EndpointSecurityDriver: Ovo deluje kao "ulazna tačka" za kernel ekstenziju. To je glavno mesto interakcije između OS-a i Endpoint Security okvira.
  • EndpointSecurityEventManager: Ova komponenta je odgovorna za implementaciju kernel hook-ova. Kernel hook-ovi omogućavaju okviru da prati sistemske događaje presretanjem sistemskih poziva.
  • EndpointSecurityClientManager: Ovo upravlja komunikacijom sa klijentima u korisničkom prostoru, prateći koji klijenti su povezani i treba da prime obaveštenja o događajima.
  • EndpointSecurityMessageManager: Ovo šalje poruke i obaveštenja o događajima klijentima u korisničkom prostoru.

Događaji koje Endpoint Security okvir može pratiti su kategorizovani u:

  • Događaji datoteka
  • Događaji procesa
  • Događaji soketa
  • Kernel događaji (kao što su učitavanje/uklanjanje kernel ekstenzije ili otvaranje I/O Kit uređaja)

Endpoint Security Framework Architecture

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

Komunikacija u korisničkom prostoru sa Endpoint Security okvirom se dešava kroz IOUserClient klasu. Koriste se dve različite podklase, u zavisnosti od tipa pozivaoca:

  • EndpointSecurityDriverClient: Ovo zahteva com.apple.private.endpoint-security.manager pravo, koje drži samo sistemski proces endpointsecurityd.
  • EndpointSecurityExternalClient: Ovo zahteva com.apple.developer.endpoint-security.client pravo. Ovo bi obično koristili softveri trećih strana za bezbednost koji treba da komuniciraju sa Endpoint Security okvirom.

Endpoint Security Extensions:libEndpointSecurity.dylib je C biblioteka koju sistemske ekstenzije koriste za komunikaciju sa kernelom. Ova biblioteka koristi I/O Kit (IOKit) za komunikaciju sa Endpoint Security KEXT-om.

endpointsecurityd je ključni sistemski demon uključen u upravljanje i pokretanje sistemskih ekstenzija za bezbednost krajnjih tačaka, posebno tokom ranog procesa pokretanja. Samo sistemske ekstenzije označene sa NSEndpointSecurityEarlyBoot u njihovom Info.plist fajlu dobijaju ovu ranu obradu pokretanja.

Drugi sistemski demon, sysextd, validira sistemske ekstenzije i premesta ih na odgovarajuće sistemske lokacije. Zatim traži od relevantnog demona da učita ekstenziju. SystemExtensions.framework je odgovoran za aktiviranje i deaktiviranje sistemskih ekstenzija.

Bypassing ESF

ESF se koristi od strane bezbednosnih alata koji će pokušati da otkriju red tim, tako da svaka informacija o tome kako se to može izbeći zvuči zanimljivo.

CVE-2021-30965

Stvar je u tome da aplikacija za bezbednost mora imati dozvole za pun pristup disku. Dakle, ako bi napadač mogao da ukloni to, mogao bi sprečiti softver da se izvršava:

bash
tccutil reset All

Za više informacija o ovom zaobilaženju i srodnim temama, pogledajte predavanje #OBTS v5.0: "Ahilova peta EndpointSecurity" - Fitzl Csaba

Na kraju, ovo je ispravljeno davanjem nove dozvole kTCCServiceEndpointSecurityClient aplikaciji za bezbednost kojom upravlja tccd, tako da tccutil neće obrisati njene dozvole, sprečavajući je da ne može da se pokrene.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks