Как отключить или удалить корневую учетную запись, созданную в качестве побочного эффекта от этой ошибки безопасности High Sierra?


40

В этой статье описывается ошибка, когда ввод root при запросе на разблокировку позволяет любому пользователю разблокировать системные настройки. Он предупреждает, что:

Там нет необходимости делать это самостоятельно, чтобы проверить это. Это создает «корневую» учетную запись, которой могут воспользоваться другие, если вы ее не отключите.

В статье не описывается, что делать, если чрезмерно энергичный инженер воспроизвел проблему и теперь должен удалить или отключить корневую учетную запись.

Как можно безопасно отключить или удалить эту учетную запись?

На этой странице Apple описывается, как отключить учетную запись, но это не защищает от ошибки, потому что ошибка может просто повторно включить учетную запись. Он будет работать, чтобы восстановить систему до ее нормального состояния с отключенным рутом после исправления ошибки безопасности.

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

См. О содержании безопасности в Обновлении безопасности 2017-001 для обновления macOS High Sierra для защиты от обхода аутентификации администратора без предоставления пароля администратора.


Название этого вопроса - XY, как указано в настоящее время, поскольку удаление или отключение учетной записи нежелательно.
Монти Хардер

Ответы:


40

Патч доступен, нажмите здесь или просто обновите на машине

Интересно, что пока нет патча для бета-версии и версии OSX для разработчиков, насколько я знаю. Я обновлю этот ответ, как только услышу о них.

Загрузите патч выше. Оставляя остальную часть поста для истории :-)

CVE - CVE-2017-13872, и NIST обновит анализ в ближайшем будущем.

Оригинальный ответ, актуальный без патча

Во-первых, не отключайте корневую учетную запись через графический интерфейс, причиной которой является отключенная корневая учетная запись.

Вы должны включить пользователя root и дать ему пароль. Это важно , поскольку уязвимость также доступна удаленно, через VNC и Apple Remote Desktop (и многие другие) (другой источник) .

Есть два основных способа сделать это; GUI и терминал.

Во-первых, графический интерфейс

Чтобы включить корневую учетную запись, перейдите в «Утилита каталогов», т.е. cmd + пробел и поиск Нажмите блокировку, чтобы разблокировать «режим администратора», затем включите корневую учетную запись через «Правка» -> «Включить пользователя Root».

Как включить рут

Он должен запросить пароль root, а пока введите свой обычный пароль (чтобы вы его не забыли). Если он не запрашивает пароль, используйте Edit -> «Change Root Password ...» выше.

Терминал

Если вы более терминальный человек, используйте ниже:

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

Этого достаточно с терминалом, проблема с графическим интерфейсом состоит в том, что мы должны разрешить учетной записи установить пароль, что нам не нужно с терминалом.

Заметки

Даже если у вас установлен пароль для учетной записи root, ваш компьютер станет уязвимым, если вы отключите учетную запись root. Похоже, виновником является отключение учетной записи root. Поэтому я повторяю, пользователь root должен быть включен и иметь пароль при использовании графического интерфейса, в то время как через терминал, использующий только «passwd», все в порядке (хотя это состояние недоступно только через графический интерфейс). Похоже, что «Disable Root User» в «Directory Utility» удаляет пароль для учетной записи root, в некотором смысле давая вам уязвимую корневую учетную запись без пароля.

Похоже, попытка войти с помощью «root» в системном окне входа в систему включает учетную запись root, если она была отключена ранее. Т.е. при отключенной учетной записи root вам нужно дважды ввести root в окнах входа в систему, чтобы получить root-доступ, и (согласно моему тестированию) с первой попытки включить учетную запись root (без пароля, если он не установлен через passwd), и со второй попытки ты проходишь.

Похоже, что проблема была в открытом доступе, по крайней мере, 2017-11-13 (13 ноября), когда она упоминалась на форуме поддержки Apple .

Пожалуйста, докажите, что я не прав, я был бы очень признателен, если бы ошибался прямо сейчас.

Страшное обновление

После включения учетной записи root без пароля (т. Е. Через панель системных настроек, щелкнув «замок» и введя «root» с пустым паролем один, два или три раза (количество раз зависит от исходного состояния)), можно войти в систему. компьютер с основного экрана входа в систему, используя «root» и пустой пароль (!). SSH / Telnet не работает, но Apple Remote Desktop, Screen Sharing и VNC уязвимы.

Поэтому для сетевых администраторов может быть интересно временно отбросить пакеты на следующие порты:

Дополнительное чтение:

Доблестная попытка ссылаться на другие источники, имеющие отношение к проблеме. Отредактируйте и обновите мой ответ, если у вас есть больше.


5
Хорошо, я понимаю, почему ответ не так. Отключение root не работает до тех пор, пока эта ошибка не будет устранена, поскольку сама ошибка просто повторно активирует учетную запись. Есть несколько голосов, чтобы вы могли комментировать!
Freiheit

1
Я не макинтош, но в мире * nix отключение пароля root не должно быть менее безопасным, чем наличие безопасного пароля. Фактически, очень часто отключают пароль и устанавливают оболочку /dev/nullдля root. Таким образом, доступ к учетной записи root осуществляется через suсистемные вызовы для пользователей с таким разрешением.
авария

1
@crasic AFAIK OSX делает что-то странное со своими окнами входа в систему. По-видимому, они разрешают учетные записи в целом или root в частности, если пытались. И практически нет документации по этому поведению. Обратите внимание, что специфика BSD (т.е. использование командной строки / bash) не вызывает проблем.
Флиндеберг

Таким образом, с помощью команды «Терминал» вы можете установить пароль root без включения root? Это кажется наиболее безопасным вариантом.
Wisbucky

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

10

Если вы не можете установить официальный патч или не хотите верить, что он сработал, тогда

Вы не хотите отключать пользователя root только на High Sierra.

Чтобы обезопасить свой Mac, включите root с длинным безопасным паролем.

Мы не будем менять это на работе, пока не выйдет следующая полная версия для macOS, которая, вероятно, будет 10.13.2


Если вы не предпримете никаких действий, пользователь root отключен из коробки, и это плохо, если ваш Mac не исправлен правильно.

Если хотите, при необходимости укрепите оболочку, пока у Apple не появится официальный патч или исправление.

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

Это в основном делает три ключевых вещи:

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

UserShell create создается, если оболочка не установлена, и полный сценарий проверяет существующую оболочку и проверяет -changeее, а не использует -createее.

Как защитить себя от корневой уязвимости в macOS High Sierra?


1
Как правило, желательно не хранить пароль даже временно, как это. Страница dcsl человек говорит «не указать пароль , как часть команды , и вам будет надежно предложено»
Джош Caswell

1
Согласен @JoshCaswell - лучше иметь его в скрипте, поскольку переменная не экспортируется и генерируется. Хорошей новостью является то, что у Apple есть официальный патч, который делает этот взлом недолгой необходимостью - мы применили это как профилактическое средство к гораздо большему вреду от жесткого кодирования одного и того же пароля по всему флоту или отсутствия пароля вообще. Это был, безусловно, компромисс, а не решение.
bmike

Из чистого любопытства, почему у вас есть ссылка на этот вопрос в конце вашего ответа?
Рейраб

1
@reirab полностью запутался. Смотрите правку, чтобы исправить правильную ссылку. Благодарность!
bmike


0

Вы должны войти в систему как пользователь root и изменить пароль на что-то сильное. Если он фактически создает новую учетную запись (в отличие от включения уже существующей корневой учетной записи), вам следует сначала удалить эту учетную запись.


Смотрите мой ответ. Ваш совет установить надежный пароль разумен, но полное отключение учетной записи кажется еще более строгой защитой и восстанавливает OS X в состояние по умолчанию. support.apple.com/en-us/HT204012 . Будет ли установка надежного пароля для защиты от использования описанной ошибки, даже если учетная запись root включена повторно?
Freiheit

На High Sierra, 10.13.0 и 10,13.1, вы абсолютно не хотите отключать учетную запись root. Проблема в том, что если root отключен, и вы пытаетесь использовать любое окно входа в систему для входа в систему как root, окно входа включит учетную запись root с пустым паролем. Если root уже включен с надежным паролем, окно входа в систему не удаляет пароль. Единственное смягчение - это включить root с надежным паролем .
Брайан Райтер

0

Apple только что выпустила обновление, чтобы исправить проблему.

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

Также, чтобы предотвратить несанкционированный доступ к вашим компьютерам Mac, вы должны включить учетную запись пользователя root и установить пароль специально для пользователя root.

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

Если ваша учетная запись root уже активна, убедитесь, что вы изменили пароль, чтобы убедиться, что уязвимость пустого пароля не установлена.


0

Нет! Не удаляйте root аккаунт!

Прежде всего, rootприсутствовал во всех версиях macOS, Mac OS X, Mac OS и даже древних версиях операционной системы. macOS недавно не создавала эту учетную запись из-за уязвимости. Это просто разоблачило это случайно.

Удаление rootбыло бы очень плохой идеей, и позвольте мне рассказать вам, почему.

Это полностью отключило бы macOS, поскольку не было бы учетной записи с достаточными привилегиями для запуска критически важных служб (таких как WindowServer, который запускает графический интерфейс). Существуют меры предосторожности, которые не позволяют невежественным пользователям удалять файлы root, и вы не должны пытаться их обойти.

Давайте выясним, кто запускает самые первые процессы в системе, самые важные процессы (используя Activity Monitor):

kernel_task и launchd тоже принадлежат

Эй, это снова наш дружеский район root! Первый процесс (с PID 0) фактически контролируется ядром и в любом случае, вероятно, будет иметь полные разрешения, но его дочерний процесс launchd(отвечающий за запуск служб, таких как окно входа в систему и сам сервер окон) запускается с привилегиями root. Если rootбы не существовало, этот процесс никогда бы не запустился или не имел бы никаких разрешений.

Защита учетной записи root

Другие ответы предоставили исправление, выпущенное Apple, которое должно исправить проблему. Однако, если вы не можете или не желаете его установить ...

Это работает, потому что macOS повторно хэширует введенный пароль как «обновление», потому что отключенная учетная запись (root) была неправильно определена как имеющая старый хеш. Он по-прежнему будет говорить, что это неверно, но в следующий раз хэши совпадут (потому что macOS изменил его), и он пропустит вас.

Чтобы обезопасить себя root, вам придется использовать Directory Utility. Есть два способа получить к нему доступ:

  1. Используйте Spotlight. Запуск утилиты каталогов с помощью Spotlight
  2. Используйте Finder. Откройте Finder, нажмите «Command» + «Shift» + «G» (или выберите, введите «In» /System/Library/CoreServices/Applications/и нажмите «Go» (или нажмите «Enter»). Затем откройте «Утилиту каталогов».Выбор Go Выбор куда идти Утилита открытия каталога

После того, как вы откроете утилиту каталогов, вам придется нажмите на замок, чтобы внести изменения

После этого выберите Change Root Passwordили Enable Root Userв меню «Правка». Я показываю, Change Root Passwordтак как моя учетная запись root уже включена с надежным паролем.

Выбор Изменить пароль root

Выберите пароль, и теперь пустой пароль больше не будет работать.

Выбор пароля

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


«Догадываясь на чистом предположении, система, вероятно, снова включает учетную запись root, поскольку вы ввели правильный пароль (в данном случае пустым).» - не совсем верно. Существует способ миграции для обновления паролей с использованием старого механизма хеширования, и он не обрабатывает !(который, как тип UNIX, вы, вероятно, узнаете) правильно.
Чарльз Даффи

См. Target-see.com/blog/blog_0x24.html для анализа первопричин.
Чарльз Даффи

Правильно - так что мои предположения не были точными. Таким образом, он повторно хеширует пустой пароль как «обновление», поскольку отключенная учетная запись была неправильно обнаружена как имеющая старый хеш? Я прав?
Dev

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

... так, в значительной степени, да, вы правы. :)
Чарльз Даффи
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.