macOS SIP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Захист цілісності системи (SIP) в macOS є механізмом, призначеним для запобігання навіть найбільш привілейованим користувачам вносити несанкціоновані зміни до ключових системних папок. Ця функція відіграє важливу роль у підтримці цілісності системи, обмежуючи дії, такі як додавання, модифікація або видалення файлів у захищених зонах. Основні папки, захищені SIP, включають:
/System
/bin
/sbin
/usr
Правила, які регулюють поведінку SIP, визначені в конфігураційному файлі, розташованому за адресою /System/Library/Sandbox/rootless.conf
. У цьому файлі шляхи, які починаються з зірочки (*), позначаються як винятки з інакше суворих обмежень SIP.
Розгляньте наведену нижче ілюстрацію:
Цей фрагмент вказує на те, що хоча SIP зазвичай захищає /usr
директорію, є специфічні підкаталоги (/usr/libexec/cups
, /usr/local
, і /usr/share/man
), де зміни дозволені, як вказано зірочкою (*) перед їхніми шляхами.
Щоб перевірити, чи директорія або файл захищені SIP, ви можете використовувати команду ls -lOd
для перевірки наявності прапорця restricted
або sunlnk
. Наприклад:
У цьому випадку прапорець sunlnk
означає, що каталог /usr/libexec/cups
сам по собі не може бути видалений, хоча файли в ньому можуть бути створені, змінені або видалені.
З іншого боку:
Тут restricted
прапорець вказує на те, що директорія /usr/libexec
захищена SIP. У директорії, захищеній SIP, файли не можуть бути створені, змінені або видалені.
Більше того, якщо файл містить атрибут com.apple.rootless
розширений атрибут, цей файл також буде захищений SIP.
Зверніть увагу, що 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
:
Ви можете перевірити, чи увімкнено SIP на вашій системі, за допомогою наступної команди:
Якщо вам потрібно вимкнути SIP, ви повинні перезавантажити комп'ютер у режимі відновлення (натискаючи Command+R під час запуску), а потім виконати наступну команду:
Якщо ви хочете зберегти SIP увімкненим, але видалити захист від налагодження, ви можете зробити це за допомогою:
Забороняє завантаження непідписаних розширень ядра (kexts), забезпечуючи, що лише перевірені розширення взаємодіють з ядром системи.
Запобігає налагодженню процесів системи macOS, захищаючи основні компоненти системи від несанкціонованого доступу та модифікації.
Гальмує інструменти на кшталт dtrace від перевірки системних процесів, ще більше захищаючи цілісність роботи системи.
Дізнайтеся більше про інформацію 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 дозволяє зловмиснику:
Доступ до даних користувача: Читати чутливі дані користувача, такі як електронна пошта, повідомлення та історія Safari з усіх облікових записів користувачів.
Обхід TCC: Прямо маніпулювати базою даних TCC (Прозорість, Згода та Контроль), щоб надати несанкціонований доступ до веб-камери, мікрофона та інших ресурсів.
Встановити постійність: Розмістити шкідливе ПЗ в захищених SIP місцях, роблячи його стійким до видалення, навіть з правами root. Це також включає потенціал для підробки Інструменту видалення шкідливого ПЗ (MRT).
Завантажувати розширення ядра: Хоча є додаткові запобіжники, обхід SIP спрощує процес завантаження непідписаних розширень ядра.
Пакети установника, підписані сертифікатом Apple, можуть обійти його захист. Це означає, що навіть пакети, підписані стандартними розробниками, будуть заблоковані, якщо вони намагатимуться змінити каталоги, захищені SIP.
Однією з потенційних лазівок є те, що якщо файл вказано в rootless.conf
, але наразі не існує, його можна створити. Шкідливе ПЗ може скористатися цим, щоб встановити постійність в системі. Наприклад, шкідлива програма може створити файл .plist у /System/Library/LaunchDaemons
, якщо він вказаний у rootless.conf
, але не присутній.
Право com.apple.rootless.install.heritable
дозволяє обійти SIP
Було виявлено, що можливо поміняти пакет установника після того, як система перевірила його код підпису, і тоді система встановить шкідливий пакет замість оригінального. Оскільки ці дії виконувалися system_installd
, це дозволяло обійти SIP.
Якщо пакет було встановлено з змонтованого образу або зовнішнього диска, установник виконував двійковий файл з цієї файлової системи (замість SIP-захищеного місця), змушуючи system_installd
виконувати довільний двійковий файл.
Дослідники з цього блогу виявили вразливість у механізмі захисту цілісності системи macOS (SIP), відому як вразливість '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 було виявлено, що той же процес system_installd
все ще можна зловживати, оскільки він поміщав скрипт після установки в папку з випадковою назвою, захищену SIP у /tmp
. Справа в тому, що /tmp
сам по собі не захищений SIP, тому було можливим змонтувати віртуальний образ на ньому, потім установник помістив би туди скрипт після установки, демонтував віртуальний образ, відтворив усі папки та додав скрипт після установки з payload для виконання.
Виявлено вразливість, при якій fsck_cs
був введений в оману, що призвело до пошкодження важливого файлу, через його здатність слідувати символічним посиланням. Зокрема, зловмисники створили посилання з /dev/diskX
на файл /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
. Виконання fsck_cs
на /dev/diskX
призвело до пошкодження Info.plist
. Цілісність цього файлу є важливою для SIP (Захист цілісності системи) операційної системи, яка контролює завантаження розширень ядра. Після пошкодження можливості SIP керувати виключеннями ядра порушуються.
Команди для використання цієї вразливості:
Експлуатація цієї вразливості має серйозні наслідки. Файл Info.plist
, який зазвичай відповідає за управління дозволами для розширень ядра, стає неефективним. Це включає неможливість занести певні розширення до чорного списку, такі як AppleHWAccess.kext
. Внаслідок цього, з механізмом контролю SIP, що вийшов з ладу, це розширення може бути завантажене, надаючи несанкціонований доступ на читання та запис до оперативної пам'яті системи.
Було можливим змонтувати нову файлову систему над захищеними папками SIP, щоб обійти захист.
Система налаштована на завантаження з вбудованого образу диска установника в Install macOS Sierra.app
для оновлення ОС, використовуючи утиліту bless
. Використовується наступна команда:
Безпека цього процесу може бути скомпрометована, якщо зловмисник змінює образ оновлення (InstallESD.dmg
) перед завантаженням. Стратегія полягає в заміні динамічного завантажувача (dyld) на шкідливу версію (libBaseIA.dylib
). Ця заміна призводить до виконання коду зловмисника, коли ініціюється інсталятор.
Код зловмисника отримує контроль під час процесу оновлення, експлуатуючи довіру системи до інсталятора. Атака продовжується шляхом зміни образу InstallESD.dmg
за допомогою методу swizzling, особливо націлюючись на метод extractBootBits
. Це дозволяє інжектувати шкідливий код перед використанням образу диска.
Більше того, в InstallESD.dmg
є BaseSystem.dmg
, який слугує кореневою файловою системою коду оновлення. Інжекція динамічної бібліотеки в цей файл дозволяє шкідливому коду працювати в процесі, здатному змінювати файли на рівні ОС, що значно підвищує потенціал для компрометації системи.
У цій доповіді з DEF CON 31 показано, як systemmigrationd
(який може обійти SIP) виконує bash та perl скрипти, які можуть бути зловживані через змінні середовища BASH_ENV
та PERL5OPT
.
Як детально описано в цьому блозі, скрипт postinstall
з пакетів InstallAssistant.pkg
дозволяв виконання:
and it was possible to створити symlink в ${SHARED_SUPPORT_PATH}/SharedSupport.dmg
, який дозволив би користувачу обійти будь-який файл, ігноруючи захист SIP.
Право 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) для забезпечення додаткового рівня безпеки та стабільності системи. Вони по суті є версіями системного тому, доступними лише для читання.
Ось більш детальний огляд:
Незмінна система: Запечатані системні знімки роблять об'єм системи macOS "незмінним", що означає, що його не можна змінювати. Це запобігає будь-яким несанкціонованим або випадковим змінам системи, які можуть загрожувати безпеці або стабільності системи.
Оновлення програмного забезпечення системи: Коли ви встановлюєте оновлення або апгрейди macOS, macOS створює новий системний знімок. Об'єм завантаження macOS потім використовує APFS (Apple File System) для переходу до цього нового знімка. Весь процес застосування оновлень стає безпечнішим і надійнішим, оскільки система завжди може повернутися до попереднього знімка, якщо щось піде не так під час оновлення.
Розділення даних: У поєднанні з концепцією розділення об'ємів даних і системи, введеною в macOS Catalina, функція запечатаного системного знімка забезпечує, що всі ваші дані та налаштування зберігаються на окремому об'ємі "Дані". Це розділення робить ваші дані незалежними від системи, що спрощує процес оновлення системи та підвищує безпеку системи.
Пам'ятайте, що ці знімки автоматично керуються macOS і не займають додаткового місця на вашому диску завдяки можливостям спільного використання простору APFS. Також важливо зазначити, що ці знімки відрізняються від знімків Time Machine, які є резервними копіями всієї системи, доступними для користувача.
Команда diskutil apfs list
перераховує деталі об'ємів APFS та їхнє розташування:
У попередньому виводі можна побачити, що доступні для користувача місця змонтовані під /System/Volumes/Data
.
Більше того, системний знімок macOS змонтований у /
і він запечатаний (криптографічно підписаний ОС). Отже, якщо SIP буде обійдено і його змінять, ОС більше не завантажиться.
Також можливо перевірити, що запечатка увімкнена, запустивши:
Крім того, знімок диска також монтується як тільки для читання:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)