macOS Kernel & System Extensions
Reading time: 4 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
XNU Kernel
Основою macOS є XNU, що означає "X is Not Unix". Цей ядро в основному складається з Mach мікроядра (про яке буде сказано пізніше) та елементів з Berkeley Software Distribution (BSD). XNU також забезпечує платформу для ядрових драйверів через систему, звану I/O Kit. Ядро XNU є частиною проекту з відкритим кодом Darwin, що означає, що його вихідний код є вільно доступним.
З точки зору дослідника безпеки або розробника Unix, macOS може здаватися досить схожим на систему FreeBSD з елегантним графічним інтерфейсом і безліччю спеціальних додатків. Більшість додатків, розроблених для BSD, будуть компілюватися та працювати на macOS без необхідності модифікацій, оскільки командні інструменти, знайомі користувачам Unix, присутні в macOS. Однак, оскільки ядро XNU включає Mach, існують деякі суттєві відмінності між традиційною системою, подібною до Unix, і macOS, і ці відмінності можуть викликати потенційні проблеми або надавати унікальні переваги.
Відкрита версія XNU: https://opensource.apple.com/source/xnu/
Mach
Mach є мікроядром, розробленим для сумісності з UNIX. Одним з його ключових принципів дизайну було мінімізувати кількість коду, що виконується в ядровому просторі, і замість цього дозволити багатьом типовим функціям ядра, таким як файлові системи, мережеві з'єднання та I/O, виконуватися як завдання на рівні користувача.
У XNU Mach відповідає за багато критично важливих низькорівневих операцій, які зазвичай обробляє ядро, таких як планування процесора, багатозадачність та управління віртуальною пам'яттю.
BSD
Ядро XNU також включає значну кількість коду, отриманого з проекту FreeBSD. Цей код виконується як частина ядра разом з Mach, в одному адресному просторі. Однак код FreeBSD в XNU може суттєво відрізнятися від оригінального коду FreeBSD, оскільки були потрібні модифікації для забезпечення його сумісності з Mach. FreeBSD сприяє багатьом операціям ядра, включаючи:
- Управління процесами
- Обробка сигналів
- Основні механізми безпеки, включаючи управління користувачами та групами
- Інфраструктура системних викликів
- Стек TCP/IP та сокети
- Брандмауер та фільтрація пакетів
Розуміння взаємодії між BSD та Mach може бути складним через їх різні концептуальні рамки. Наприклад, BSD використовує процеси як свою основну одиницю виконання, тоді як Mach працює на основі потоків. Ця розбіжність узгоджується в XNU шляхом асоціювання кожного процесу BSD з завданням Mach, яке містить точно один потік Mach. Коли використовується системний виклик fork() BSD, код BSD в ядрі використовує функції Mach для створення структури завдання та потоку.
Більше того, Mach і BSD кожен підтримує різні моделі безпеки: модель безпеки Mach базується на правах портів, тоді як модель безпеки BSD працює на основі власності процесів. Різниці між цими двома моделями іноді призводили до вразливостей підвищення локальних привілеїв. Окрім типових системних викликів, також існують Mach traps, які дозволяють програмам користувацького простору взаємодіяти з ядром. Ці різні елементи разом формують багатогранну, гібридну архітектуру ядра macOS.
I/O Kit - Драйвери
I/O Kit є відкритим, об'єктно-орієнтованим фреймворком драйверів пристроїв в ядрі XNU, який обробляє динамічно завантажувані драйвери пристроїв. Це дозволяє модульному коду бути доданим до ядра на льоту, підтримуючи різноманітне апаратне забезпечення.
IPC - Міжпроцесорна комунікація
macOS IPC - Inter Process Communication
Розширення ядра macOS
macOS є надзвичайно обмеженим для завантаження розширень ядра (.kext) через високі привілеї, з якими буде виконуватися код. Насправді, за замовчуванням це практично неможливо (якщо не знайдено обхід).
На наступній сторінці ви також можете побачити, як відновити .kext
, які macOS завантажує всередині свого kernelcache:
macOS Kernel Extensions & Debugging
Розширення системи macOS
Замість використання розширень ядра macOS створила розширення системи, які пропонують API на рівні користувача для взаємодії з ядром. Таким чином, розробники можуть уникнути використання розширень ядра.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.