У чому насправді особливість «без корінь» в Ель-Капітані?


242

Я щойно дізнався про функцію "Без корінь" в El Capitan, і я чую такі речі, як "Немає кореневого користувача", "Ніщо не може змінити /System" та "Світ закінчиться, тому що ми не можемо отримати корінь".

У чому полягає особливість «Без корів» Ель-Капітан на технічному рівні? Що це насправді означає для користувачів та досвіду розробника? Чи sudo -sвсе ще працюватиме, і якщо так, то як зміниться досвід використання оболонки як rootзміни?


8
"Що це насправді означає для користувачів та досвіду розробника?" Я запускаю бета-версію з моменту появи, і це перший, що я чув про неї. sudoі запит пароля працювали як нормально / раніше / очікувалося. Тож, ймовірно, відповідь "більшу частину часу ви не помітите; коли це зробите, ви помітите важко".
OJFord

3
Це просто - це особливість помилки, яка імітує.
Вольфганг Фаль

Якщо хтось випадково видаляє /usr/localі виявиться нездатним відтворити його, дивіться цю відповідь тут .
Льєкі

Відповіді:


280

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

Ось що це обмежує навіть від root:

  • Ви не можете нічого змінити в /System, /bin, /sbinабо /usr( за винятком /usr/local); або будь-який із вбудованих додатків та утиліт. Лише оновлення програмного забезпечення та програмного забезпечення можуть змінювати ці області, і навіть вони роблять це лише під час встановлення пакетів, підписаних Apple. Але оскільки звичайні настройки ОС X входять /Library(або ~/Library, або /Applications), а налаштування в стилі Unix (наприклад, Homebrew) входять /usr/local(або іноді /etcабо /opt), це не повинно бути великою справою. Він також запобігає запису на рівні блоку на стартовий диск, тому не можна обійти його таким чином.

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

    Під час оновлення до El Capitan він переміщує будь-які "несанкціоновані" файли з обмежених областей до /Library/SystemMigration/History/Migration-(some UUID)/QuarantineRoot/.

  • Ви не можете приєднуватися до системних процесів (наприклад, тих, що працюють з цих системних місць) для таких речей, як налагодження (або зміни динамічних бібліотек, які вони завантажують, або деяких інших речей). Знову ж таки, не надто велика справа; розробники все ще можуть налагоджувати власні програми.

    Це блокує деякі важливі речі, такі як введення коду у вбудовані додатки Apple (зокрема, Finder). Це також означає, що dtraceзасоби на основі моніторингу системи (наприклад opensnoop) не зможуть контролювати та звітувати про багато системних процесів.

  • Ви не можете завантажити розширення ядра (кекс), якщо вони не підписані належним чином (наприклад, Apple або розробник, затверджений Apple). Зауважте, що це замінює стару систему примусового підпису кексту (і старі способи її обходу). Але оскільки v10.10.4 в Apple з'явився спосіб увімкнути підтримку сторонніх SSD- дисків, причина №1 для використання непідписаних кексів відпала.

  • Починаючи з Сьєрри (10.12), деякі параметри конфігурації запуску неможливо змінити (наприклад, деякі демони запуску неможливо вивантажити).

  • Починаючи з Мохаве (10.14), доступ до особистої інформації користувачів (електронна пошта, контакти тощо) обмежений програмами, які користувач схвалив для доступу до цієї інформації. Це, як правило, вважається окремою функцією (називається Захист персональної інформації або TCC), але вона заснована на SIP, а також відключення SIP відключає її. Див. "Що і як реалізує macOS Mojave для обмеження доступу додатків до персональних даних?"

Якщо ви не хочете, щоб ці обмеження були - або тому, що ви хочете змінити свою систему поза межами того, що це дозволяє, або тому, що ви розробляєте та налагоджуєте щось на кшталт кекстів, які не є практичними за цими обмеженнями, ви можете вимкнути SIP. В даний час це вимагає перезавантаження в режим відновлення та виконання команди csrutil disable(і ви можете аналогічно повторно включити її csrutil enable).

Ви також можете вибірково відключити частини SIP. Наприклад, csrutil enable --without kextвимкніть обмеження розширення ядра SIP, але залиште інші захисні пристрої на місці.

Але будь-ласка, зупиніться і подумайте, перш ніж вимкнути SIP, навіть тимчасово або частково: чи дійсно вам потрібно його відключити, чи існує кращий (сумісний із SIP) спосіб зробити те, що ви хочете? Вам дійсно потрібно змінити що - то в /System/Libraryабо /binабо будь-який інший , або воно може йти в кращому місці , як /Libraryі /usr/local/binт.д.? SIP може "відчувати" обмеження, якщо ви до цього не звикли, і є кілька законних причин, щоб його відключити, але багато того, що він застосовує, дійсно просто найкраща практика в будь-якому випадку.

Щоб підкреслити важливість залишати якомога більше часу з включеного SIP, врахуйте події 23 вересня 2019 року. Google випустила оновлення до Chrome, яке намагалося замінити символічне посилання /varна /private/var. У більшості систем SIP блокував це, і поганих наслідків не було. У системах з відключеною системою SIP він робив macOS порушеним та незавантаженим. Найпоширенішою причиною відключення SIP було завантаження непідтверджених (/ неправильно підписаних) розширень ядра (зокрема відеодрайверів); якби вони лише відключили обмеження кексту, на них не вплинуло б. Дивіться офіційну нитку Google підтримки , привілейований користувач Q & A на ньому , і статтю Ars Technica .

Посилання та додаткова інформація: презентація WWDC на тему "Безпека та ваші програми" , хороше пояснення Елдада Ейлама на quora.com , огляд Ars Technica El Capitan , а також стаття підтримки Apple щодо SIP та глибоке занурення Річ Трутон ( який також розмістив відповідь на це питання ).


1
Приємно, дякую. Я задав це запитання, тому що я збирався зв’язатись із цією статтею квори в іншому питанні обміну стеками, а потім зрозумів, що це не правильний крок ;-)
Джош

15
... Крім того, це повністю змушує мене написати kextабо щось, щоб дозволити собі створити двійковий файл, який я можу запустити в командному рядку, щоб повернутися до необмеженого доступу!
Джош

1
@Vladimir Вибачте, у мене немає жодної внутрішньої інформації про плани Apple. Я гадаю, що він буде триматися в осяжному майбутньому, хоча я не був би здивований, якби він (і сам SIP) істотно змінився в наступних кількох версіях.
Гордон Девіссон

5
Бувають моменти, коли я ненавиджу Apple. Я вдячний, що важко стріляти собі в ногу (років тому я одного разу випадково потрапив текстовий файл у свій MBR в Linux), але бувають випадки, коли вам потрібно, наприклад, покласти додаткову посилання в / usr / bin та мати пройти процес відключення інакше приємного захисту саме для цієї мети є занадто патерналістичним і дратівливим. Додаткового діалогу з попередженнями було б достатньо.
Марс

2
Менш нав'язливим способом, здається, є відключення SIP, відредагуйте головний файл, щоб видалити обмеження лише на пару бінарних файлів, які ви дійсно хочете замінити, і знову ввімкніть SIP.
Джошуа

92

Для мене це означає, що DTrace більше не працює.

DTrace схожий на ptrace / strace в Linux, тим, що він дозволяє вам бачити, що процес говорить до ядра. Кожен раз, коли процес хоче відкрити файл, написати файл або відкрити порт тощо, йому потрібно запитати ядро. В Linux цей процес моніторингу відбувається за межами ядра в "userland", і таким чином, дозволи є досить дрібними. Користувач може контролювати власні програми (виправляти помилки, знаходити витоки пам’яті тощо), але йому потрібно буде мати root, щоб контролювати процес іншого користувача.

Однак DTrace в OSX працює на рівні ядра, роблячи його набагато ефективнішим та потужнішим, проте для його отримання потрібен кореневий доступ, щоб додати свої зонди до ядра і тим самим зробити що завгодно. Користувач не може відслідковувати власні процеси без кореня, але як корінь він може не тільки спостерігати за власними процесами, але насправді ВСІХ процесах у системі одночасно. Наприклад, ви можете переглянути файл (за допомогою iosnoop) і побачити, який процес його читає. Це одна з найкорисніших функцій для виявлення шкідливих програм. Оскільки ядро ​​також має справу з мережевим IO, те саме саме там. Wireshark виявляє незвичну мережеву активність, DTrace повідомляє вам процес надсилання даних, навіть якщо вони вбудовані в систему, як і саме ядро.

Що стосується El Capitan, то Apple навмисно завадила DTrace працювати - як це було спеціально націлено та виділено як щось, що обмежує SIP. Навіщо їм це робити? Ну, раніше Apple модифікувала своє ядро ​​та DTrace, щоб дозволити деяким процесам відмовлятися від моніторингу через DTrace (що засмучувало багато дослідників безпеки на той час, оскільки деякі процеси тепер були поза межами, навіть як root - включають зловмисне програмне забезпечення). Їх причиною цього було захист DRM в таких додатках, як iTunes, оскільки теоретично хтось міг DTrace і захоплювати дані, що не мають DRM, із пам'яті процесів.

Однак була важлива робота, яка дозволила дослідникам продовжувати виконувати свою роботу, і це полягало в тому, щоб змінити ядро, щоб ігнорувати цей прапор відмови, тому DTrace все ще можна використовувати в цих процесах. Це було насправді чудово, тому що програми, що намагаються ухилитися від виявлення, де зараз загорілися цим прапором no-DTrace. Все, що Apple або погані хлопці хотіли приховати, тепер було на очах ...

Але це не працює зараз, так як це впливає на вас? Ну, це вплине на вас як прямо, так і опосередковано. Безпосередньо це обмежить вашу можливість контролювати вашу систему. Велика кількість інструментів системного адміністрування та моніторингу (на яких розробляються інструменти вищого рівня) більше не працюватимуть. Однак опосередкований ефект буде набагато більшим - фахівці з безпеки покладаються на глибокий доступ до системи, щоб виявити найгірші види загроз. Ми просто не можемо цього більше робити. При аналізі зловмисного програмного забезпечення дуже важливо, щоб він не знав, що він працює в налагоджувальній машині або медоносі. Відключення SIP повідомляє всьому програмному забезпеченню, як від поганих хлопців, так і від Apple, що цю систему слідкують. Більше не спостерігають спостерігачі. Якщо SIP стосувався безпеки, вони могли б навчити користувачів про root - замість цього вони видалили його. Зрештою, це означає, що Apple замінила бар'єр захисту "будь-який і закінчити всі" бар'єр захисту "root all and end all" на механізм захисту "бути всім і всім" SIP. Або якщо будь-яка користь у соціальній інженерії, кореневий пароль із перезавантаженням ...

Є також таке: введіть тут опис зображення


3
Крім того, я спростував цю відповідь, оскільки вона не відповідає на питання, а саме: У чому полягає технічна особливість El Capitan на технічному рівні? Чи працюватимуть sudo -s, і якщо так, як зміниться досвід використання оболонки як кореня? . Ця відповідь, здається, говорить лише про DTrace
Джош

24
Я думаю, що відповідь чітко і точно відповідає на хорошу частину запитання, яким чином зміниться досвід використання оболонки як кореня. Судо тепер псевдосудо. Фактично був доданий шар архітектури. Мені здається, що стосується мене. І до засобів до існування цієї людини. Чому це "голосувати"?
sas08

5
@patrix Я не розумію гносеологічного розрізнення. Що таке і що вони роблять, і чому вони існують, тісно пов'язані між собою. Впевнений, що ця публікація розпочинається в засобах масової інформації, розповідаючи про одну особливість, але вона проходить добре. На запитання "як це змінює досвід розробника?" Фактично є фактично відкритим і суб'єктивним запрошенням розробників розповісти про свій досвід. Поставлення цих питань у суперечливості з невиразним і завищеним запереченням "світ закінчиться, тому що ми не можемо вкоренитися", здається, відкидає ідею шкоди; це демонструє шкоду для розробника.
sas08

4
Я більше не збираюся додавати більше інформації про Джоша, тому що я просто копіював би відповіді інших відповідей і насправді нічого не додавав би на сторінку. Можливо, було б краще, якщо б у верхній відповіді була включена додаткова інформація про DTrace, яка більше не працює, і тоді я видалю цю відповідь як зайву :) Інша відповідь - це просто копія arstechnica.com/apple/2015/09/ os-x-10-11-el-capitan-the-ars-technica-review / 9 / пов'язаний у головному коментарі, так що це теж може піти. Але деякі речі у цій відповіді, як, наприклад, DTrace, який не працює навіть із SIP, як судо, - це не де інше, а тут
JJ

3
Єдине, що я до цього часу з’ясував, це те, що якщо ви вимкніть SIP для DTrace, ви можете приєднатись до процесів, які не мають обмежених прав, оскільки оскільки El Cap - це все, що постачається з системою (наприклад, Safari). Існує "тупий" спосіб, який полягає в тому, щоб скопіювати всі системні бінарні файли в новий каталог, як / rootless (з тією ж структурою каталогу), а потім зробити chroot для / rootless. Тепер все запущено без прав і може бути додано також. Розумніший спосіб - перевстановити вашу файлову систему, але я бояться сказати, як / чому, тому що Apple, без сумніву, заблокує цю лазівку ...
JJ

49

Захист цілісності системи (SIP) - це загальна політика безпеки з метою запобігання зміні системних файлів і процесів сторонніми сторонами. Для цього у нього є такі поняття:

  • Захист файлової системи
  • Захист розширення ядра
  • Захист від виконання

Захист файлової системи

SIP не дозволяє сторонам, окрім Apple, додавати, видаляти або змінювати каталоги та файли, що зберігаються в певних каталогах:

/bin
/sbin
/usr
/System

Apple вказала, що розробникам доступні такі каталоги:

/usr/local
/Applications
/Library
~/Library

Усі каталоги, /usrкрім /usr/localних, захищені SIP.

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

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

Щоб визначити, які каталоги захищені, Apple наразі визначила два файли конфігурації у файловій системі. Первинний знаходиться у вказаному нижче місці:

/System/Library/Sandbox/rootless.conf

де rootless.confперераховані всі програми та каталоги вищого рівня, які захищає SIP.

введіть тут опис зображення

Програми

SIP захищає основні програми, які OS X встановлює в програмах додатків і програм. Це означає, що більше не можна буде видаляти програми, які встановлює OS X, навіть із командного рядка при використанні привілеїв root.

введіть тут опис зображення

введіть тут опис зображення

Довідники

SIP також захищає низку каталогів та посилань поза ними, /Applicationsа верхній рівень цих каталогів також вказаний у rootless.conf.

введіть тут опис зображення

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

введіть тут опис зображення

Серед цих винятків такі:

  • /System/Library/User Template - де OS X зберігає каталоги шаблонів, які він використовує під час створення домашніх папок для нових облікових записів.
  • /usr/libexec/cups - де OS X зберігає інформацію про конфігурацію принтера

Apple вважає цей файл своїм і що будь-які зміни третьої сторони до нього будуть замінені Apple.

Щоб побачити, які файли були захищені SIP, використовуйте lsкоманду з тире з тире O в терміналі:

ls -O

Файли, захищені SIP, будуть позначені як обмежені .

введіть тут опис зображення

Одне важливе значення, яке потрібно знати, - це те, що навіть якщо симпосилання захищена SIP, це не обов'язково означає, що каталог, до якого вони посилаються, захищений SIP. На кореневому рівні завантажувального накопичувача OS X El Capitan існує кілька посилань, захищених SIP, що вказують на каталоги, що зберігаються всередині каталогу кореневого рівня з назвою private.

Однак, коли досліджується вміст privateкаталогу, каталоги, на які вказують ці символьні посилання, не захищені SIP, і вони, і їхній вміст можуть переміщуватися, редагуватися або змінюватися процесами з використанням привілеїв root.

введіть тут опис зображення

На додаток до списку винятків SIP, який Apple встановив rootless.conf, є другий список винятків SIP. Цей список містить низку каталогів та назв додатків для сторонніх продуктів. Подібно до rootless.confцього списку виключень є Apple, і Apple змінить будь-які зміни третіх сторін до нього.

/System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths

Захист від виконання

Захист SIP не обмежується захистом системи від змін файлової системи. Також є системні дзвінки, які тепер обмежені у своїй функціональності.

  • task_for_pid () / Process_set_tasks () не вдається з EPERM
  • Спеціальні порти Mach скидаються на exec (2)
  • змінні змінного середовища ільдо ігноруються
  • Зонди DTrace недоступні

Однак SIP не блокує перевірку розробником власних додатків під час їх розробки. Інструменти Xcode надалі дозволятимуть інспектувати та налагоджувати програми під час процесу розробки.

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

Захист розширення ядра

SIP блокує встановлення безпідписаних розширень ядра. Для того щоб встановити розширення ядра на OS X El Capitan з включеним SIP, розширення ядра повинно:

  1. Будьте підписані ідентифікатором розробника для підпису сертифіката Kexts
  2. Встановити в / Бібліотека / Розширення

Якщо встановити непідписане розширення ядра, потрібно спочатку відключити SIP.

Для отримання додаткової інформації щодо управління SIP, перегляньте посилання нижче:

Захист цілісності системи - додавання ще одного шару до моделі безпеки Apple


4
Було б чудово, коли скріншоти можна замінити звичайним текстом, дивіться: Скріншоти скріншотів коду та / або помилок .
kenorb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.