# macOS System Extensions
{{#include ../../../banners/hacktricks-training.md}}
## System Extensions / Endpoint Security Framework
На відміну від Kernel Extensions, **System Extensions працюють у просторі користувача** замість простору ядра, що зменшує ризик аварійної зупинки системи через несправність розширення.
Існує три типи системних розширень: **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
**Зв'язок у просторі користувача** з фреймворком 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" - Фіцл Чаба](https://www.youtube.com/watch?v=lQO7tvNCoTI)
В кінці це було виправлено, надавши новий дозвіл **`kTCCServiceEndpointSecurityClient`** безпековому додатку, керованому **`tccd`**, щоб `tccutil` не очищав його дозволи, що заважає йому працювати.
## Посилання
- [**OBTS v3.0: "Безпека та небезпека Endpoint" - Скотт Найт**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
- [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
{{#include ../../../banners/hacktricks-training.md}}