macOS SIP

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримати HackTricks:

Основна інформація

Захист цілісності системи (SIP) в macOS - це механізм, призначений для запобігання навіть найбільш привілейованим користувачам робити несанкціоновані зміни в ключових системних папках. Ця функція відіграє важливу роль у збереженні цілісності системи, обмежуючи дії, такі як додавання, зміна або видалення файлів у захищених областях. Основні папки, які захищені SIP, включають:

  • /System

  • /bin

  • /sbin

  • /usr

Правила, які визначають поведінку SIP, визначені в конфігураційному файлі, розташованому за адресою /System/Library/Sandbox/rootless.conf. У цьому файлі шляхи, які починаються з астериска (*), вважаються винятками від в інших суворих обмежень SIP.

Розгляньте наступний приклад:

/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man

Цей уривок підтверджує, що, хоча SIP загалом захищає каталог /usr, існують конкретні підкаталоги (/usr/libexec/cups, /usr/local та /usr/share/man), де зміни допускаються, як це вказано зірочкою (*) перед їхніми шляхами.

Щоб перевірити, чи захищений SIP каталог або файл, ви можете використати команду ls -lOd, щоб перевірити наявність прапорців restricted або sunlnk. Наприклад:

ls -lOd /usr/libexec/cups
drwxr-xr-x  11 root  wheel  sunlnk 352 May 13 00:29 /usr/libexec/cups

У цьому випадку прапорець sunlnk вказує на те, що сам каталог /usr/libexec/cups не може бути видалений, хоча файли всередині нього можуть бути створені, змінені або видалені.

З іншого боку:

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.

SIP також обмежує інші дії root, такі як:

  • Завантаження ненадійних розширень ядра

  • Отримання task-портів для процесів, підписаних Apple

  • Зміна змінних NVRAM

  • Дозвіл на ядерний налагодження

Опції зберігаються у змінній nvram як бітовий прапорець (csr-active-config на Intel та lp-sip0 зчитується з Device Tree для ARM). Ви можете знайти прапорці у вихідному коді XNU у csr.sh:

Статус SIP

Ви можете перевірити, чи увімкнений SIP на вашій системі за допомогою наступної команди:

csrutil status

Якщо вам потрібно вимкнути SIP, вам потрібно перезапустити комп'ютер у режимі відновлення (натиснувши Command+R під час запуску), а потім виконати наступну команду:

csrutil disable

Якщо ви хочете залишити SIP увімкненим, але видалити захист від налагодження, ви можете це зробити за допомогою:

csrutil enable --without debug

Інші обмеження

  • Забороняє завантаження непідписаних розширень ядра (kexts), забезпечуючи взаємодію лише перевірених розширень з ядром системи.

  • Запобігає налагодженню процесів системи macOS, захищаючи основні компоненти системи від несанкціонованого доступу та модифікації.

  • Забороняє використання інструментів типу dtrace для інспектування процесів системи, додатково захищаючи цілісність операційної системи.

Дізнайтеся більше про інформацію SIP у цьому виступі.

Обхід SIP

Обхід SIP дозволяє зловмиснику:

  • Отримати доступ до даних користувача: Читати чутливі дані користувача, такі як пошта, повідомлення та історія Safari з усіх облікових записів користувачів.

  • Обхід TCC: Пряме втручання в базу даних TCC (Transparency, Consent, and Control), щоб надати несанкціонований доступ до вебкамери, мікрофону та інших ресурсів.

  • Створення постійності: Розміщення шкідливого ПЗ в захищених від SIP місцях, зробляючи його стійким до видалення, навіть за допомогою привілеїв root. Це також включає потенційну можливість втручання у інструмент видалення шкідливого ПЗ (MRT).

  • Завантаження розширень ядра: Хоча існують додаткові заходи безпеки, обхід SIP спрощує процес завантаження непідписаних розширень ядра.

Пакети інсталяторів

Пакети інсталяторів, підписані сертифікатом Apple, можуть обійти його захист. Це означає, що навіть пакети, підписані стандартними розробниками, будуть заблоковані, якщо вони намагатимуться змінити захищені від SIP каталоги.

Відсутній файл SIP

Одним з потенційних каналів для обходу є те, що якщо файл вказаний у rootless.conf, але наразі не існує, його можна створити. Шкідливе ПЗ може використовувати це для створення постійності в системі. Наприклад, зловмисна програма може створити файл .plist в /System/Library/LaunchDaemons, якщо він вказаний у rootless.conf, але відсутній.

com.apple.rootless.install.heritable

Право com.apple.rootless.install.heritable дозволяє обійти SIP

Shrootless

Дослідники з цього допису в блозі виявили уразливість в механізмі Захисту Цілісності Системи (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 <команда>, файл ~/.zshenv буде викликаний, ефективно підвищуючи до root.

У CVE-2022-22583 було виявлено, що той самий процес system_installd все ще можна було зловживати, оскільки він поміщав після-встановлення скрипт всередину випадково названої папки, захищеної SIP всередині /tmp. Справа в тому, що /tmp сам по собі не захищений від SIP, тому було можливо підключити віртуальний образ до нього, після чого інсталятор поміщав би туди після-встановлення скрипт, відмонтував віртуальний образ, перестворив всі папки і додав скрипт після встановлення з виконавчим кодом.

Була виявлена уразливість, де fsck_cs було зведено в оману, що призвело до пошкодження важливого файлу через його здатність слідувати символічним посиланням. Зловмисники спеціально створили посилання з /dev/diskX на файл /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist. Виконання fsck_cs на /dev/diskX призвело до пошкодження Info.plist. Цей файл має важливе значення для SIP операційної системи (Захист Цілісності Системи), яка контролює завантаження розширень ядра. Після пошкодження здатність SIP керувати виключеннями ядра порушується.

Команди для використання цієї уразливості:

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, це розширення може бути завантажено, надаючи несанкціонований доступ на читання та запис в ОЗП системи.

Було можливо змонтувати нову файлову систему над SIP захищеними папками для обхід захисту.

mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg

Система налаштована на завантаження з вбудованого образу диска інсталятора в Install macOS Sierra.app для оновлення ОС, використовуючи утиліту bless. Використана команда виглядає наступним чином:

/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, який служить кореневою файловою системою коду оновлення. Впровадження динамічної бібліотеки в це дозволяє зловмисному коду працювати в процесі, здатному змінювати файли на рівні ОС, значно збільшуючи потенціал компрометації системи.

У цьому виступі з DEF CON 31 показано, як systemmigrationd (який може обійти SIP) виконує bash та perl скрипт, які можуть бути зловживані за допомогою змінних середовища BASH_ENV та PERL5OPT.

com.apple.rootless.install

Право com.apple.rootless.install дозволяє обійти SIP

Право com.apple.rootless.install відоме як обхід Захисту Цілісності Системи (SIP) на macOS. Це було особливо згадано у зв'язку з CVE-2022-26712.

У цьому конкретному випадку системна служба 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, функція Запечатаних Системних Знімків переконується, що всі ваші дані та налаштування зберігаються на окремому "Дані" томі. Це розділення робить ваші дані незалежними від системи, що спрощує процес оновлення системи та підвищує безпеку системи.

Пам'ятайте, що ці знімки автоматично керуються macOS і не займають додаткового місця на вашому диску, завдяки можливостям спільного використання простору APFS. Також важливо зауважити, що ці знімки відрізняються від знімків Time Machine, які є доступними для користувача резервними копіями всієї системи.

Перевірка знімків

Команда diskutil apfs list показує деталі обсягів APFS та їх розташування:

+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|   ====================================================
|   Посилання на контейнер APFS:     disk3
|   Розмір (максимальна ємність):      494384795648 B (494.4 ГБ)
|   Використана ємність обсягами:   219214536704 B (219.2 ГБ) (44.3% використано)
|   Невикористана ємність:       275170258944 B (275.2 ГБ) (55.7% вільно)
|   |
|   +-< Фізичний накопичувач disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|   |   -----------------------------------------------------------
|   |   Фізичний накопичувач APFS:   disk0s2
|   |   Розмір:                       494384795648 B (494.4 ГБ)
|   |
|   +-> Обсяг disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|   |   ---------------------------------------------------
|   |   Диск обсягу APFS (Роль):   disk3s1 (Система)
|   |   Ім'я:                      Macintosh HD (без різниці у регістрі)
|   |   Точка монтування:               /System/Volumes/Update/mnt1
|   |   Використана ємність:         12819210240 B (12.8 ГБ)
|   |   Запечатаний:                    Пошкоджено
|   |   FileVault:                 Так (Розблоковано)
|   |   Шифрування:                 Ні
|   |   |
|   |   Знімок:                  FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|   |   Диск знімка:             disk3s1s1
|   |   Точка монтування знімка:      /
|   |   Знімок запечатаний:           Так
[...]
+-> Обсяг disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|   ---------------------------------------------------
|   Диск обсягу APFS (Роль):   disk3s5 (Дані)
|   Ім'я:                      Macintosh HD - Data (без різниці у регістрі)
    |   Точка монтування:               /System/Volumes/Data
    |   Використана ємність:         412071784448 B (412.1 ГБ)
    |   Запечатаний:                    Ні
|   FileVault:                 Так (Розблоковано)

У попередньому виводі можна побачити, що доступні для користувача місця монтування знаходяться під /System/Volumes/Data.

Більше того, знімок тома системи macOS монтується в / і він запечатаний (криптографічно підписаний ОС). Таким чином, якщо обійти SIP і змінити його, ОС більше не завантажиться.

Також можна перевірити, що печатка увімкнена, запустивши:

csrutil authenticated-root status
Authenticated Root status: enabled

Крім того, диск із знімком також монтується у режимі тільки для читання:

mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated