mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
258 lines
26 KiB
Markdown
258 lines
26 KiB
Markdown
# macOS SIP
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## **Основна інформація**
|
||
|
||
**Захист цілісності системи (SIP)** в macOS є механізмом, призначеним для запобігання навіть найбільш привілейованим користувачам від внесення несанкціонованих змін до ключових системних папок. Ця функція відіграє важливу роль у підтримці цілісності системи, обмежуючи дії, такі як додавання, модифікація або видалення файлів у захищених зонах. Основні папки, захищені SIP, включають:
|
||
|
||
- **/System**
|
||
- **/bin**
|
||
- **/sbin**
|
||
- **/usr**
|
||
|
||
Правила, які регулюють поведінку SIP, визначені в конфігураційному файлі, розташованому за адресою **`/System/Library/Sandbox/rootless.conf`**. У цьому файлі шляхи, які починаються з зірочки (\*), позначаються як винятки з інакше суворих обмежень SIP.
|
||
|
||
Розгляньте наведену нижче ілюстрацію:
|
||
```javascript
|
||
/usr
|
||
* /usr/libexec/cups
|
||
* /usr/local
|
||
* /usr/share/man
|
||
```
|
||
Цей фрагмент вказує на те, що хоча SIP зазвичай захищає директорію **`/usr`**, є специфічні підкаталоги (`/usr/libexec/cups`, `/usr/local` та `/usr/share/man`), де зміни дозволені, як вказано зірочкою (\*) перед їхніми шляхами.
|
||
|
||
Щоб перевірити, чи директорія або файл захищені SIP, ви можете використовувати команду **`ls -lOd`**, щоб перевірити наявність прапора **`restricted`** або **`sunlnk`**. Наприклад:
|
||
```bash
|
||
ls -lOd /usr/libexec/cups
|
||
drwxr-xr-x 11 root wheel sunlnk 352 May 13 00:29 /usr/libexec/cups
|
||
```
|
||
У цьому випадку прапорець **`sunlnk`** означає, що каталог `/usr/libexec/cups` **не може бути видалений**, хоча файли в ньому можуть бути створені, змінені або видалені.
|
||
|
||
З іншого боку:
|
||
```bash
|
||
ls -lOd /usr/libexec
|
||
drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
|
||
```
|
||
Тут **`restricted`** прапорець вказує на те, що директорія `/usr/libexec` захищена SIP. У директорії, захищеній SIP, файли не можуть бути створені, змінені або видалені.
|
||
|
||
Більше того, якщо файл містить атрибут **`com.apple.rootless`** розширений **атрибут**, цей файл також буде **захищений SIP**.
|
||
|
||
> [!TIP]
|
||
> Зверніть увагу, що **Sandbox** хук **`hook_vnode_check_setextattr`** запобігає будь-яким спробам змінити розширений атрибут **`com.apple.rootless`.**
|
||
|
||
**SIP також обмежує інші дії root**, такі як:
|
||
|
||
- Завантаження ненадійних розширень ядра
|
||
- Отримання task-ports для процесів, підписаних Apple
|
||
- Зміна змінних NVRAM
|
||
- Дозвіл на налагодження ядра
|
||
|
||
Опції зберігаються в змінній nvram як бітовий прапорець (`csr-active-config` на Intel і `lp-sip0` читається з завантаженого Device Tree для ARM). Ви можете знайти прапорці в вихідному коді XNU в `csr.sh`:
|
||
|
||
<figure><img src="../../../images/image (1192).png" alt=""><figcaption></figcaption></figure>
|
||
|
||
### Статус SIP
|
||
|
||
Ви можете перевірити, чи увімкнено SIP на вашій системі, за допомогою наступної команди:
|
||
```bash
|
||
csrutil status
|
||
```
|
||
Якщо вам потрібно вимкнути SIP, ви повинні перезавантажити комп'ютер у режимі відновлення (натискаючи Command+R під час запуску), а потім виконати наступну команду:
|
||
```bash
|
||
csrutil disable
|
||
```
|
||
Якщо ви хочете зберегти SIP увімкненим, але видалити захисти від налагодження, ви можете зробити це за допомогою:
|
||
```bash
|
||
csrutil enable --without debug
|
||
```
|
||
### Інші обмеження
|
||
|
||
- **Забороняє завантаження непідписаних розширень ядра** (kexts), забезпечуючи, що лише перевірені розширення взаємодіють з ядром системи.
|
||
- **Запобігає налагодженню** процесів системи macOS, захищаючи основні компоненти системи від несанкціонованого доступу та модифікації.
|
||
- **Гальмує інструменти** на кшталт dtrace від перевірки системних процесів, ще більше захищаючи цілісність роботи системи.
|
||
|
||
[**Дізнайтеся більше про інформацію SIP у цій доповіді**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||
|
||
### **Права, пов'язані з SIP**
|
||
|
||
- `com.apple.rootless.xpc.bootstrap`: Контроль launchd
|
||
- `com.apple.rootless.install[.heritable]`: Доступ до файлової системи
|
||
- `com.apple.rootless.kext-management`: `kext_request`
|
||
- `com.apple.rootless.datavault.controller`: Керування UF_DATAVAULT
|
||
- `com.apple.rootless.xpc.bootstrap`: Можливості налаштування XPC
|
||
- `com.apple.rootless.xpc.effective-root`: Root через launchd XPC
|
||
- `com.apple.rootless.restricted-block-devices`: Доступ до сирих блочних пристроїв
|
||
- `com.apple.rootless.internal.installer-equivalent`: Безперешкодний доступ до файлової системи
|
||
- `com.apple.rootless.restricted-nvram-variables[.heritable]`: Повний доступ до NVRAM
|
||
- `com.apple.rootless.storage.label`: Модифікувати файли, обмежені com.apple.rootless xattr з відповідною міткою
|
||
- `com.apple.rootless.volume.VM.label`: Підтримувати обмін VM на томі
|
||
|
||
## Обхід SIP
|
||
|
||
Обхід SIP дозволяє зловмиснику:
|
||
|
||
- **Доступ до даних користувача**: Читати чутливі дані користувача, такі як електронна пошта, повідомлення та історія Safari з усіх облікових записів користувачів.
|
||
- **Обхід TCC**: Прямо маніпулювати базою даних TCC (Прозорість, Згода та Контроль), щоб надати несанкціонований доступ до веб-камери, мікрофона та інших ресурсів.
|
||
- **Встановити постійність**: Розмістити шкідливе ПЗ в захищених SIP місцях, роблячи його стійким до видалення, навіть з правами root. Це також включає можливість втручання в Інструмент видалення шкідливого ПЗ (MRT).
|
||
- **Завантажувати розширення ядра**: Хоча є додаткові запобіжники, обхід SIP спрощує процес завантаження непідписаних розширень ядра.
|
||
|
||
### Пакети установника
|
||
|
||
**Пакети установника, підписані сертифікатом Apple**, можуть обійти його захист. Це означає, що навіть пакети, підписані стандартними розробниками, будуть заблоковані, якщо вони намагатимуться змінити каталоги, захищені SIP.
|
||
|
||
### Невідомий файл SIP
|
||
|
||
Однією з потенційних лазівок є те, що якщо файл вказано в **`rootless.conf`, але він наразі не існує**, його можна створити. Шкідливе ПЗ може скористатися цим, щоб **встановити постійність** в системі. Наприклад, шкідлива програма може створити файл .plist у `/System/Library/LaunchDaemons`, якщо він вказаний у `rootless.conf`, але не присутній.
|
||
|
||
### com.apple.rootless.install.heritable
|
||
|
||
> [!CAUTION]
|
||
> Права **`com.apple.rootless.install.heritable`** дозволяють обійти SIP
|
||
|
||
#### [CVE-2019-8561](https://objective-see.org/blog/blog_0x42.html) <a href="#cve" id="cve"></a>
|
||
|
||
Було виявлено, що можливо **поміняти пакет установника після того, як система перевірила його код** підпису, а потім система встановлювала шкідливий пакет замість оригінального. Оскільки ці дії виконувалися **`system_installd`**, це дозволяло обійти SIP.
|
||
|
||
#### [CVE-2020–9854](https://objective-see.org/blog/blog_0x4D.html) <a href="#cve-unauthd-chain" id="cve-unauthd-chain"></a>
|
||
|
||
Якщо пакет було встановлено з підключеного образу або зовнішнього диска, **установник** **виконував** двійковий файл з **цієї файлової системи** (замість захищеного місця SIP), змушуючи **`system_installd`** виконувати довільний двійковий файл.
|
||
|
||
#### CVE-2021-30892 - Shrootless
|
||
|
||
[**Дослідники з цього блогу**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) виявили вразливість у механізмі захисту цілісності системи (SIP) macOS, відому як вразливість 'Shrootless'. Ця вразливість зосереджена навколо демона **`system_installd`**, який має право **`com.apple.rootless.install.heritable`**, що дозволяє будь-якому з його дочірніх процесів обійти обмеження файлової системи SIP.
|
||
|
||
Демон **`system_installd`** буде встановлювати пакети, які були підписані **Apple**.
|
||
|
||
Дослідники виявили, що під час установки пакета, підписаного Apple (.pkg файл), **`system_installd`** **виконує** будь-які **скрипти після установки**, включені в пакет. Ці скрипти виконуються за допомогою стандартної оболонки, **`zsh`**, яка автоматично **виконує** команди з файлу **`/etc/zshenv`**, якщо він існує, навіть у неінтерактивному режимі. Цю поведінку можна використати зловмисниками: створивши шкідливий файл `/etc/zshenv` і чекаючи, поки **`system_installd` викличе `zsh`**, вони можуть виконувати довільні операції на пристрої.
|
||
|
||
Більше того, було виявлено, що **`/etc/zshenv` може використовуватися як загальна техніка атаки**, а не лише для обходу SIP. Кожен профіль користувача має файл `~/.zshenv`, який поводиться так само, як `/etc/zshenv`, але не вимагає прав root. Цей файл може використовуватися як механізм постійності, спрацьовуючи щоразу, коли запускається `zsh`, або як механізм підвищення привілеїв. Якщо адміністратор підвищує привілеї до root, використовуючи `sudo -s` або `sudo <command>`, файл `~/.zshenv` буде спрацьовувати, ефективно підвищуючи привілеї до root.
|
||
|
||
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
||
|
||
У [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) було виявлено, що той же процес **`system_installd`** все ще можна зловживати, оскільки він поміщав **скрипт після установки в папку з випадковою назвою, захищену SIP у `/tmp`**. Справа в тому, що **`/tmp` сам по собі не захищений SIP**, тому було можливо **підключити** **віртуальний образ до нього**, потім **установник** помістив би туди **скрипт після установки**, **відмонтував** віртуальний образ, **відтворив** усі **папки** та **додав** **скрипт після установки** з **payload** для виконання.
|
||
|
||
#### [fsck_cs utility](https://www.theregister.com/2016/03/30/apple_os_x_rootless/)
|
||
|
||
Виявлено вразливість, при якій **`fsck_cs`** був введений в оману, що призвело до пошкодження важливого файлу, через його здатність слідувати **символічним посиланням**. Зокрема, зловмисники створили посилання з _`/dev/diskX`_ на файл `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. Виконання **`fsck_cs`** на _`/dev/diskX`_ призвело до пошкодження `Info.plist`. Цілісність цього файлу є важливою для SIP (Системи захисту цілісності), яка контролює завантаження розширень ядра. Після пошкодження здатність SIP керувати виключеннями ядра порушується.
|
||
|
||
Команди для використання цієї вразливості такі:
|
||
```bash
|
||
ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
|
||
fsck_cs /dev/diskX 1>&-
|
||
touch /Library/Extensions/
|
||
reboot
|
||
```
|
||
Використання цієї вразливості має серйозні наслідки. Файл `Info.plist`, який зазвичай відповідає за управління дозволами для розширень ядра, стає неефективним. Це включає неможливість занести певні розширення, такі як `AppleHWAccess.kext`, до чорного списку. Внаслідок цього, з механізмом контролю SIP, що не працює, це розширення може бути завантажене, надаючи несанкціонований доступ на читання та запис до оперативної пам'яті системи.
|
||
|
||
#### [Mount over SIP protected folders](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
|
||
|
||
Було можливим змонтувати нову файлову систему над **SIP захищеними папками, щоб обійти захист**.
|
||
```bash
|
||
mkdir evil
|
||
# Add contento to the folder
|
||
hdiutil create -srcfolder evil evil.dmg
|
||
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
|
||
```
|
||
#### [Upgrader bypass (2016)](https://objective-see.org/blog/blog_0x14.html)
|
||
|
||
Система налаштована на завантаження з вбудованого образу диска установника в `Install macOS Sierra.app` для оновлення ОС, використовуючи утиліту `bless`. Використовується наступна команда:
|
||
```bash
|
||
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
|
||
```
|
||
Безпека цього процесу може бути скомпрометована, якщо зловмисник змінить образ оновлення (`InstallESD.dmg`) перед завантаженням. Стратегія полягає в заміні динамічного завантажувача (dyld) на шкідливу версію (`libBaseIA.dylib`). Ця заміна призводить до виконання коду зловмисника, коли ініціюється інсталятор.
|
||
|
||
Код зловмисника отримує контроль під час процесу оновлення, експлуатуючи довіру системи до інсталятора. Атака продовжується шляхом зміни образу `InstallESD.dmg` за допомогою методу swizzling, особливо націлюючись на метод `extractBootBits`. Це дозволяє інжектувати шкідливий код перед використанням образу диска.
|
||
|
||
Більше того, в `InstallESD.dmg` є `BaseSystem.dmg`, який слугує кореневою файловою системою коду оновлення. Інжекція динамічної бібліотеки в цей файл дозволяє шкідливому коду працювати в процесі, здатному змінювати файли на рівні ОС, що значно підвищує потенціал для компрометації системи.
|
||
|
||
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||
|
||
У цій доповіді з [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk) показано, як **`systemmigrationd`** (який може обійти SIP) виконує **bash** та **perl** скрипти, які можуть бути зловживані через змінні середовища **`BASH_ENV`** та **`PERL5OPT`**.
|
||
|
||
#### CVE-2023-42860 <a href="#cve-a-detailed-look" id="cve-a-detailed-look"></a>
|
||
|
||
Як [**детально описано в цьому блозі**](https://blog.kandji.io/apple-mitigates-vulnerabilities-installer-scripts), скрипт `postinstall` з пакетів `InstallAssistant.pkg` дозволяв виконання:
|
||
```bash
|
||
/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"
|
||
```
|
||
і було можливим створити символічне посилання в `${SHARED_SUPPORT_PATH}/SharedSupport.dmg`, яке дозволяло б користувачу **обійти обмеження на будь-який файл, ігноруючи захист SIP**.
|
||
|
||
### **com.apple.rootless.install**
|
||
|
||
> [!CAUTION]
|
||
> Право **`com.apple.rootless.install`** дозволяє обійти SIP
|
||
|
||
Право `com.apple.rootless.install` відоме тим, що обіймає захист цілісності системи (SIP) на macOS. Це було особливо згадано у зв'язку з [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/).
|
||
|
||
У цьому конкретному випадку, система XPC-сервіс, розташований за адресою `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc`, має це право. Це дозволяє відповідному процесу обійти обмеження SIP. Крім того, цей сервіс помітно пропонує метод, який дозволяє переміщення файлів без застосування будь-яких заходів безпеки.
|
||
|
||
## Запечатані системні знімки
|
||
|
||
Запечатані системні знімки - це функція, введена Apple в **macOS Big Sur (macOS 11)** як частина механізму **захисту цілісності системи (SIP)** для забезпечення додаткового рівня безпеки та стабільності системи. Вони по суті є версіями системного тому тільки для читання.
|
||
|
||
Ось більш детальний огляд:
|
||
|
||
1. **Незмінна система**: Запечатані системні знімки роблять системний том macOS "незмінним", що означає, що його не можна змінювати. Це запобігає будь-яким несанкціонованим або випадковим змінам системи, які можуть загрожувати безпеці або стабільності системи.
|
||
2. **Оновлення програмного забезпечення системи**: Коли ви встановлюєте оновлення або апгрейди macOS, macOS створює новий системний знімок. Тоді стартовий том macOS використовує **APFS (Apple File System)** для переходу на цей новий знімок. Весь процес застосування оновлень стає безпечнішим і надійнішим, оскільки система завжди може повернутися до попереднього знімка, якщо щось піде не так під час оновлення.
|
||
3. **Розділення даних**: У поєднанні з концепцією розділення даних і системного тому, введеною в macOS Catalina, функція запечатаного системного знімка забезпечує, що всі ваші дані та налаштування зберігаються на окремому томі "**Data**". Це розділення робить ваші дані незалежними від системи, що спрощує процес оновлень системи та підвищує безпеку системи.
|
||
|
||
Пам'ятайте, що ці знімки автоматично керуються macOS і не займають додаткового місця на вашому диску завдяки можливостям спільного використання простору APFS. Також важливо зазначити, що ці знімки відрізняються від **знімків Time Machine**, які є резервними копіями всієї системи, доступними для користувача.
|
||
|
||
### Перевірка знімків
|
||
|
||
Команда **`diskutil apfs list`** перераховує **деталі томів APFS** та їхнє розташування:
|
||
|
||
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|
||
| ====================================================
|
||
| APFS Container Reference: disk3
|
||
| Size (Capacity Ceiling): 494384795648 B (494.4 GB)
|
||
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
|
||
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
|
||
| |
|
||
| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
||
| | -----------------------------------------------------------
|
||
| | APFS Physical Store Disk: disk0s2
|
||
| | Size: 494384795648 B (494.4 GB)
|
||
| |
|
||
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
||
| | ---------------------------------------------------
|
||
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
|
||
</strong>| | Name: Macintosh HD (Case-insensitive)
|
||
<strong>| | Mount Point: /System/Volumes/Update/mnt1
|
||
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
|
||
| | Sealed: Broken
|
||
| | FileVault: Yes (Unlocked)
|
||
| | Encrypted: No
|
||
| | |
|
||
| | Snapshot: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|
||
| | Snapshot Disk: disk3s1s1
|
||
<strong>| | Snapshot Mount Point: /
|
||
</strong><strong>| | Snapshot Sealed: Yes
|
||
</strong>[...]
|
||
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
||
| ---------------------------------------------------
|
||
| APFS Volume Disk (Role): disk3s5 (Data)
|
||
| Name: Macintosh HD - Data (Case-insensitive)
|
||
<strong> | Mount Point: /System/Volumes/Data
|
||
</strong><strong> | Capacity Consumed: 412071784448 B (412.1 GB)
|
||
</strong> | Sealed: No
|
||
| FileVault: Yes (Unlocked)
|
||
</code></pre>
|
||
|
||
У попередньому виводі можна побачити, що **доступні для користувача місця** змонтовані під `/System/Volumes/Data`.
|
||
|
||
Крім того, **знімок системного тому macOS** змонтований у `/` і він **запечатаний** (криптографічно підписаний ОС). Отже, якщо SIP буде обійдено і його змінять, **ОС більше не завантажиться**.
|
||
|
||
Також можливо **перевірити, що запечатка увімкнена**, запустивши:
|
||
```bash
|
||
csrutil authenticated-root status
|
||
Authenticated Root status: enabled
|
||
```
|
||
Крім того, диск знімка також змонтовано як **тільки для читання**:
|
||
```bash
|
||
mount
|
||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||
```
|
||
{{#include ../../../banners/hacktricks-training.md}}
|