Як відключити або видалити кореневий обліковий запис, створений як побічний ефект, із цієї помилки безпеки High Sierra?


40

Ця стаття описує помилку, коли введення root у запит на розблокування дозволяє будь-якому користувачеві розблокувати налаштування системи. Він попереджає, що:

Не потрібно цього робити самостійно, щоб це підтвердити. Таким чином створюється "root" акаунт, яким можуть скористатися інші, якщо ви не відключите його.

У статті не описано, що робити, якщо надмірний невдалий інженер відтворив проблему і тепер потрібно видалити або вимкнути кореневий обліковий запис.

Як можна безпечно вимкнути або видалити цей обліковий запис?

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

Оновлення 2017-11-29 16:43 UTC

Див. Розділ "Зміст безпеки" Update Update 2017-001, щоб оновити macOS High Sierra для захисту від обходу автентифікації адміністратора без введення пароля адміністратора.


Назва цього питання - це XY, як зазначено в даний час, оскільки видалення або вимкнення облікового запису не бажане.
Monty Harder

Відповіді:


40

Патч доступний, натисніть тут або просто оновіть на машині

Досить цікаво, що на сьогоднішній день, наскільки я знаю, немає патча для бета-версії та версій для розробників OSX. Цю відповідь я оновлю, як тільки почую про них.

Завантажте виправлення вище. Залишивши решту публікацій для історії :-)

CVE є CVE-2017-13872, і NIST найближчим часом оновить аналіз .

Оригінальна відповідь, відповідна без виправлення

По-перше, не вимикайте кореневий обліковий запис через GUI, оскільки причиною проблеми є "вимкнено" кореневий рахунок.

Ви повинні ввімкнути кореневого користувача та надати йому пароль. Це важливо , оскільки вразливість доступна і віддалено, через VNC та Apple Remote Desktop (щоб назвати декілька) (інше джерело) .

Є два основні способи зробити це; GUI та термінал.

По-перше, GUI

Щоб увімкнути кореневий обліковий запис, перейдіть до "Утиліта каталогу", тобто cmd + простір та шукайте. Натисніть блокування, щоб розблокувати "режим адміністрування", а потім увімкніть кореневий обліковий запис за допомогою редагування -> "Увімкнути Root User".

Як увімкнути root

Він повинен запитати корінний пароль, адже зараз введіть свій звичайний пароль (щоб ви не забули його). Якщо він не запитує пароль, скористайтеся командою Правка -> "Змінити корінний пароль ..." вище.

Термінал

Якщо ви більше термінальна особа, скористайтеся нижче:

sudo passwd -u root
## Enter passwords as needed.... 
## (if you are using the terminal you should know what you are doing...)

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

Примітки

Навіть якщо для кореневого облікового запису встановлено пароль, він стане вразливим, якщо ви вимкнете кореневий обліковий запис. Винуватцем вимкнення дії кореневого облікового запису є дія. Тому я повторюю, що користувач root повинен бути включений та мати пароль при використанні графічного інтерфейсу, в той час як через термінал лише за допомогою ´passwd´ є "нормально" (хоча цей стан недоступний лише через GUI). Здається, що "Вимкнути кореневого користувача" в "Утиліті каталогів" видаляє пароль для кореневого облікового запису, в певному сенсі надаючи вам вразливий корінний акаунт без пароля.

Схоже, що спроба увійти за допомогою "root" у вікно для входу в систему дозволяє кореневому обліковому запису, якщо він раніше відключений. Тобто з вимкненим кореневим обліковим записом вам потрібно двічі ввести корінь у систему входу-системи Windows, щоб отримати кореневий доступ, і (за моїм тестуванням) при першій спробі кореневий обліковий запис увімкнено (без пароля, якщо не встановлено через passwd), і у другій спробі ви проходите.

Схоже, що це питання відкрите щонайменше 2017-11-13 (13 листопада), коли воно згадується на форумі підтримки Apple .

Будь ласка, доведіть мене неправильно, я б дуже цінував, що зараз помиляюся.

Страшне оновлення

Після ввімкнення безкористувального кореневого облікового запису (тобто через панель системних налаштувань і натискання на "замок" та введення "root" з порожнім паролем один, два або три рази (кількість разів залежить від початкового стану)) можна ввійти в комп'ютер з головного екрана входу за допомогою "root" та порожнього пароля (!). SSH / Telnet, здається, не працює, але Apple Remote Desktop, Sharing Sharing та VNC вразливі.

Тож для адміністраторів мереж може бути цікаво тимчасово скинути пакети до таких портів:

  • 5900-5905 (і, щоб бути безпечним для ніндзя), щоб отримати найпоширеніші порти VNC. VNC починається з 5900 за замовчуванням і перераховує вгору, якщо ви використовуєте кілька дисплеїв (хоча рідко). Спільний доступ до екрана та Apple Remote Desktop також використовує ці порти ( список програмних портів Apple )
  • 3283 та 5988 для віддаленого робочого столу Apple ( список портів програмного забезпечення Apple )

Додаткове читання:

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


5
Добре, я бачу, чому самовідповідь неправильна. Вимкнення кореня не приносить користі, поки ця помилка не буде виправлена, оскільки сама помилка просто повторно включить обліковий запис. Пропонуйте кілька оновлень, щоб ви могли коментувати!
Freiheit

1
Я не мак, але в світі * nix відключення кореневого пароля має бути не менш безпечним, ніж захищений пароль. Насправді дуже часто вимкнути пароль і встановити оболонку на /dev/nullroot. Таким чином доступ до кореневого облікового запису відбувається через suсистемні дзвінки для користувачів з цим дозволом.
катастрофа

1
@crasic AFAIK OSX робить щось дивне зі своїми вікнами для входу в систему. Вони, мабуть, включають акаунти загалом або конкретні кореневі, якщо їх спробували. І практично немає доступної документації щодо такої поведінки. Зауважте, що специфіка BSD (тобто використання командної лінії / bash) не є проблематичною.
Фліндеберг

Отже, за допомогою команди Terminal ви можете встановити пароль root, не вмикаючи root? Це здається найбільш безпечним варіантом.
wisbucky

1
@jcm Ні, це насправді не просто дуже погано сформульовано після трохи переміщення тексту. Я спробую це трохи очистити, подивіться за хв?
Фліндеберг

10

Якщо ви не можете встановити офіційний патч або не хочете довіряти, що він працював, тоді

Ви не хочете вимкнути кореневого користувача лише у High Sierra.

Щоб захистити свій Mac, увімкніть root із довгим захищеним паролем.

Ми не змінюємо це на роботі, поки не вийде наступний повний випуск для macOS, що, швидше за все, буде 10.13.2


Якщо ви не вживали заходів, користувач root відключений поза коробкою, і це погано, якщо ваш Mac не зафіксовано правильно.

Якщо ви хочете, необов'язково затвердіть оболонку, поки Apple не отримає офіційний виправлення або виправлення.

Ось чудовий скрипт для встановлення випадкового пароля root та зміни / встановлення кореневої оболонки /usr/bin/falseтаким чином, що навіть якщо пароль вгаданий, коренева оболонка не може увійти:

В основному це три ключові речі:

rootpassword=$(openssl rand -base64 32)
/usr/bin/dscl . -passwd /Users/root "$rootpassword"
/usr/bin/dscl . -create /Users/root UserShell /usr/bin/false

Створення UserShell - це якщо оболонка не встановлена, а повний скрипт перевіряє наявну оболонку та -changeвидаляє її замість -createнеї.

Як захистити себе від вразливості коренів у macOS High Sierra?


1
Як правило, бажано не зберігати пароль навіть тимчасово, як це. Сторінка dcsl man пропонує «не вводити пароль як частину команди, і вам надійно буде запропоновано»
Josh Caswell

1
Погоджено @JoshCaswell - мати його в сценарії краще, оскільки змінна не експортується, а генерується. Доброю новиною є те, що Apple має офіційний патч, який робить цей злом недовговічним - ми вважаємо це профілактикою набагато більшої шкоди жорстким кодуванням одного і того ж пароля по всьому флоту або зовсім не маючи пароля. Це, безумовно, був компроміс, а не рішення.
bmike

Чому з чистої цікавості ви маєте посилання на це питання в кінці своєї відповіді?
reirab

1
@reirab повністю заплутався. Див. Редагування, щоб виправити належне посилання. Дякую!
bmike


0

Вам потрібно увійти як користувач root і змінити пароль на щось надійне. Якщо він фактично створює новий обліковий запис (на відміну від включення вже існуючого кореневого облікового запису), слід спочатку видалити його.


Дивіться мою самовідповідь. Ваша порада встановити надійний пароль є розумною, але цілком вимкнення облікового запису видається ще більш жорстким захистом і повертає OS X до стану за замовчуванням. support.apple.com/en-us/HT204012 . Чи встановив би сильний захист пароля від використання описаної помилки, навіть якщо кореневий обліковий запис буде ввімкнено повторно?
Freiheit

У High Sierra, 10.13.0 та 10,13.1, ви абсолютно не хочете відключати кореневий рахунок. Проблема полягає в тому, що якщо root вимкнено і ви намагаєтесь використовувати будь-яке Вікно входу для входу як root, вікно входу дозволить кореневому обліковому запису з порожнім паролем. Якщо root вже включений з надійним паролем, вікно входу не стирає пароль. Єдине пом'якшення полягає в тому, щоб увімкнути root із сильним паролем .
Брайан Рейтер

0

Apple випустила оновлення, щоб вирішити проблему.

Оновлення безпеки 2017-001 https://support.apple.com/en-us/HT208315

Щоб запобігти несанкціонованому доступу до комп'ютерів Mac, слід увімкнути кореневий обліковий запис користувача та встановити пароль спеціально для кореневого користувача.

https://support.apple.com/en-ph/HT204012

Якщо ваш обліковий запис кореневого користувача вже активний, переконайтеся, що ви змінили пароль, щоб переконатися, що вразливість порожнього пароля не встановлена.


0

Немає! Не видаляйте кореневий рахунок!

Перш за все, rootвін присутній у всіх версіях macOS, Mac OS X, Mac OS і навіть стародавніх версіях операційної системи. macOS нещодавно не створив цей обліковий запис через вразливість. Це просто викрило це випадково.

Видалення rootбуло б дуже поганою ідеєю, і дозвольте мені сказати, чому.

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

Давайте з’ясуємо, хто запускає найперші процеси в системі, найважливіші процеси (використовуючи Monitor Monitor):

kernel_task і запуск також належать

Гей, це знову наше дружнє сусідство root! Перший процес (з PID 0) фактично контролюється ядром і, ймовірно, матиме повний дозвіл у будь-якому випадку, але його дочірній процес launchd(відповідальний за запуск таких служб, як вікно входу та сам сервер вікон) запускається з привілеїв root. Якби rootне існувало, цей процес ніколи б не почався або не мав би дозволів.

Забезпечення кореневого облікового запису

Інші відповіді дали патч, випущений Apple, який повинен вирішити проблему. Однак якщо ви не можете або не бажаєте встановити його ...

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

Для забезпечення безпеки rootвам доведеться використовувати утиліту Directory. Є два способи отримати доступ до нього:

  1. Використовуйте прожектор. Запуск утиліти каталогу за допомогою прожектора
  2. Використовуйте Finder. Відкрийте Finder, натисніть Command + Shift + G (або виберіть, введіть /System/Library/CoreServices/Applications/і натисніть Go (або натисніть клавішу Enter). Відкрийте звідти утиліту Directory.Вибір Перейти Вибір куди йти Відкриття утиліти каталогу

Після відкриття утиліти Directory вам доведеться це зробити натисніть замок, щоб внести зміни

Після цього виберіть Change Root Passwordабо Enable Root Userв меню Правка. Я показую, Change Root Passwordоскільки мій кореневий обліковий запис уже ввімкнено надійним паролем.

Вибір зміни корінного пароля

Виберіть пароль, і тепер порожній пароль більше не працюватиме.

Вибір пароля

Вітаємо! Ви більше не вразливі для кореневого зламу.


"Відгадавши за чистими міркуваннями, система, ймовірно, знову вмикає кореневий рахунок, оскільки ви ввели правильний пароль (в цьому випадку порожній)." - не зовсім правильно. Існує шлях міграції для оновлення паролів за допомогою старого механізму хешування, і він не обробляє !(що як тип UNIX ви, мабуть, розпізнаєте) правильно.
Чарльз Даффі

Див. Object-see.com/blog/blog_0x24.html для аналізу першопричини.
Чарльз Даффі

Так - мої міркування не були точними. Тож він повторно хеширує порожній пароль як "оновлення", тому що обліковий запис вимкнено був неправильно виявлений як старий хеш? Я прав?
Dev

Теоретично те, що потрібно робити в цьому кодовому шляху, це перевірити, чи старий алгоритм хеша перевіряє введений пароль, а потім оновлює новий хеш (введеного пароля, який, як відомо, відповідає старому). На практиці він не перевіряє помилки функції, яка повинна отримати старий хеш із поля "ShadowHash" (або, вірніше, перевіряє лише повернене значення, але не передане посилання значення, яке використовується для повернення результат порівняння), а потім генерує новий хеш із пароля (порожній чи ні!).
Чарльз Даффі

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