mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
9.6 KiB
Markdown
82 lines
9.6 KiB
Markdown
# macOS System Extensions
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## System Extensions / Endpoint Security Framework
|
||
|
||
На відміну від Kernel Extensions, **System Extensions працюють у просторі користувача** замість простору ядра, що зменшує ризик аварійної зупинки системи через несправність розширення.
|
||
|
||
<figure><img src="../../../images/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
|
||
|
||
Існує три типи системних розширень: **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
|
||
|
||
<figure><img src="../../../images/image (1068).png" alt="https://www.youtube.com/watch?v=jaVkpM1UqOs"><figcaption></figcaption></figure>
|
||
|
||
**Зв'язок у просторі користувача** з фреймворком 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}}
|