macOS System Extensions

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

System Extensions / Endpoint Security Framework

На відміну від Kernel Extensions, System Extensions працюють у просторі користувача замість простору ядра, що зменшує ризик аварійної зупинки системи через несправність розширення.

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

Існує три типи системних розширень: DriverKit Extensions, Network Extensions та Endpoint Security Extensions.

DriverKit Extensions

DriverKit є заміною для kernel extensions, які надають апаратну підтримку. Він дозволяє драйверам пристроїв (таким як USB, Serial, NIC та HID драйвери) працювати в просторі користувача, а не в просторі ядра. Фреймворк DriverKit включає версії певних класів I/O Kit для простору користувача, а ядро пересилає звичайні події I/O Kit у простір користувача, пропонуючи безпечніше середовище для роботи цих драйверів.

Network Extensions

Network Extensions надають можливість налаштування мережевої поведінки. Існує кілька типів Network Extensions:

  • App Proxy: Використовується для створення VPN-клієнта, який реалізує орієнтований на потоки, кастомний VPN-протокол. Це означає, що він обробляє мережевий трафік на основі з'єднань (або потоків), а не окремих пакетів.
  • Packet Tunnel: Використовується для створення VPN-клієнта, який реалізує орієнтований на пакети, кастомний VPN-протокол. Це означає, що він обробляє мережевий трафік на основі окремих пакетів.
  • Filter Data: Використовується для фільтрації мережевих "потоків". Він може моніторити або змінювати мережеві дані на рівні потоку.
  • Filter Packet: Використовується для фільтрації окремих мережевих пакетів. Він може моніторити або змінювати мережеві дані на рівні пакета.
  • DNS Proxy: Використовується для створення кастомного DNS-провайдера. Може використовуватися для моніторингу або зміни DNS-запитів і відповідей.

Endpoint Security Framework

Endpoint Security - це фреймворк, наданий Apple в macOS, який забезпечує набір API для системної безпеки. Він призначений для використання постачальниками безпеки та розробниками для створення продуктів, які можуть моніторити та контролювати системну активність для виявлення та захисту від шкідливої активності.

Цей фреймворк надає збірку API для моніторингу та контролю системної активності, такої як виконання процесів, події файлової системи, мережеві та ядрові події.

Ядро цього фреймворку реалізовано в ядрі, як Kernel Extension (KEXT), розташоване за адресою /System/Library/Extensions/EndpointSecurity.kext. Цей KEXT складається з кількох ключових компонентів:

  • EndpointSecurityDriver: Діє як "точка входу" для розширення ядра. Це основна точка взаємодії між ОС та фреймворком Endpoint Security.
  • EndpointSecurityEventManager: Цей компонент відповідає за реалізацію ядрових хуків. Ядрові хуки дозволяють фреймворку моніторити системні події, перехоплюючи системні виклики.
  • EndpointSecurityClientManager: Цей компонент управляє зв'язком з клієнтами простору користувача, відстежуючи, які клієнти підключені та потребують отримання сповіщень про події.
  • EndpointSecurityMessageManager: Цей компонент надсилає повідомлення та сповіщення про події клієнтам простору користувача.

Події, які фреймворк Endpoint Security може моніторити, класифікуються на:

  • Події файлів
  • Події процесів
  • Події сокетів
  • Ядрові події (такі як завантаження/вивантаження розширення ядра або відкриття пристрою I/O Kit)

Архітектура фреймворку Endpoint Security

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

Зв'язок у просторі користувача з фреймворком Endpoint Security відбувається через клас IOUserClient. Використовуються два різні підкласи, залежно від типу виклику:

  • EndpointSecurityDriverClient: Це вимагає права com.apple.private.endpoint-security.manager, яке має лише системний процес endpointsecurityd.
  • EndpointSecurityExternalClient: Це вимагає права com.apple.developer.endpoint-security.client. Це зазвичай використовуватиметься стороннім програмним забезпеченням безпеки, яке потребує взаємодії з фреймворком Endpoint Security.

Розширення Endpoint Security:libEndpointSecurity.dylib є C-бібліотекою, яку системні розширення використовують для зв'язку з ядром. Ця бібліотека використовує I/O Kit (IOKit) для зв'язку з KEXT Endpoint Security.

endpointsecurityd є ключовим системним демоном, який бере участь в управлінні та запуску системних розширень безпеки кінцевих точок, особливо під час раннього процесу завантаження. Тільки системні розширення, позначені NSEndpointSecurityEarlyBoot у їхньому файлі Info.plist, отримують це раннє завантаження.

Ще один системний демон, sysextd, перевіряє системні розширення та переміщує їх у відповідні системні місця. Потім він запитує відповідний демон, щоб завантажити розширення. SystemExtensions.framework відповідає за активацію та деактивацію системних розширень.

Обхід ESF

ESF використовується інструментами безпеки, які намагатимуться виявити червону команду, тому будь-яка інформація про те, як це можна уникнути, звучить цікаво.

CVE-2021-30965

Справа в тому, що безпекова програма повинна мати дозволи на повний доступ до диска. Тож, якщо зловмисник зможе це видалити, він зможе запобігти запуску програмного забезпечення:

bash
tccutil reset All

Для додаткової інформації про цей обхід та пов'язані з ним, перегляньте доповідь #OBTS v5.0: "Ахіллесова п'ята EndpointSecurity" - Фіцл Чаба

В кінці це було виправлено, надавши новий дозвіл kTCCServiceEndpointSecurityClient безпековому додатку, керованому tccd, щоб tccutil не очищав його дозволи, що заважає йому працювати.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks