如何从此High Sierra安全漏洞中禁用或删除作为副作用创建的根帐户?


40

本文介绍了一个错误,在该错误中,当提示您进行解锁时输入root可使任何用户解锁系统首选项。它警告:

无需自己进行验证。这样做会创建一个“ root”帐户,如果您不禁用它,其他人可能会利用该帐户。

本文没有描述如果急切的工程师重现了该问题并且现在需要删除或禁用根帐户,该怎么办。

如何安全地禁用或删除此帐户?

这个Apple页面介绍了如何禁用帐户,但这不能防止故障,因为故障可以重新启用帐户。修复安全错误后,它将可以通过禁用root用户将系统还原到正常状态。

更新2017-11-29 16:43 UTC

请参阅关于安全性更新2017-001的安全性内容以更新macOS High Sierra,以防止绕过管理员身份验证而不提供管理员密码。


该问题的标题是目前所说的XY,因为不希望删除或禁用该帐户。
Monty Harder

Answers:


40

可用补丁,单击此处,或仅在计算机上更新

有趣的是,据我所知,目前还没有针对OSX的beta版和开发版的补丁。我一听到他们就会更新这个答案。

下载上面的补丁。将其余的帖子留给历史:-)

CVE为CVE-2017-13872NIST将在不久的将来更新分析

原始答案,无补丁相关

首先,就通过GUI禁用根帐户,具有“无效”根帐户是问题的原因。

您应启用 root用户为其输入密码。这很重要,因为该漏洞也可以通过VNC和Apple Remote Desktop(仅举几例)(另一个来源)远程获得

有两种基本方法可以做到这一点;GUI和终端。

首先,GUI

要启用root帐户,请转到“目录实用程序”,即cmd +空格并搜索。按下锁以解锁“管理模式”,然后通过编辑->“启用根用户”启用根帐户。

如何启用root

它应该要求输入root密码,现在输入您的普通密码(以免忘记密码)。如果不要求输入密码,请使用上方的“编辑”->“更改根密码...”。

终奌站

如果您更像是终端人,请使用以下方法:

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

对于终端而言,这就足够了,GUI方式的问题在于,我们必须启用帐户来设置密码,而对于终端,则不必这样做。

笔记

即使您为根帐户设置了密码,如果禁用了根帐户,计算机也将很容易受到攻击。禁用根帐户的行为似乎是罪魁祸首。因此,我重复一遍,如果使用GUI,则应该启用 root用户输入密码,而仅通过终端使用“ passwd”是可以的(尽管仅通过GUI无法访问此状态)。看起来,“目录实用程序”中的“禁用根用户”会删除根帐户的密码,从某种意义上讲,该密码会给您提供一个无密码的易受攻击的根帐户。

似乎尝试在系统登录窗口中使用“ root”登录,如果先前禁用了root帐户,则会启用该root帐户。即使用禁用的root帐户,您需要在系统登录窗口中输入两次root以获得root访问权限,并且(根据我的测试)在第一次尝试中启用root帐户(如果未通过设置,则没有密码passwd),并且在第二次尝试中,您会经历。

至少自2017年11月13日(11月13日)以来,Apple支持论坛中提及该问题

请证明我错了,我非常感谢现在错了。

可怕的更新

启用无密码的root帐户后(即,通过系统偏好设置面板并单击“锁定”,然后使用空白密码一,两次或三遍(次数取决于初始状态)输入“ root”),可以登录到在主登录屏幕上使用“ root”和空白密码(!)来访问计算机。SSH / Telnet似乎不起作用,但是Apple Remote Desktop,屏幕共享和VNC容易受到攻击。

因此,对于网络管理员而言,暂时将数据包丢弃到以下端口可能会很有趣:

  • 5900-5905(为了安全起见,请耐心等待)以获取最常见的VNC端口。VNC默认从5900开始,如果您使用多个显示器,则向上枚举(尽管不常见)。屏幕共享和Apple Remote Desktop似乎也使用这些端口(Apple软件端口列表
  • Apple远程桌面的3283和5988(Apple软件端口列表

补充阅读:

尝试引用其他与该问题相关的资料来源。如果还有更多内容,请编辑和更新我的答案。


5
好吧,我明白了为什么自我回答是错误的。在此问题得到解决之前,禁用root用户是无济于事的,因为该错误本身只会重新启用该帐户。有一些赞誉,您可以发表评论!
Freiheit

1
我不是mac专家,但是在* nix世界中,禁用root密码应该比拥有安全密码安全得多。实际上,禁用密码并将shell设置/dev/null为root用户是很常见的。这样su,具有该权限的用户就可以通过系统调用来访问root帐户。
crasic

1
@crasic AFAIK OSX的系统登录窗口有些奇怪。他们显然可以启用一般帐户,也可以启用特定帐户。几乎没有有关此行为的文档。请注意,BSD的细节(即命令行/ bash用法)没有问题。
flindeberg '17

因此,使用Terminal命令可以设置root密码而不启用root吗?这似乎是最安全的选择。
wisbucky

1
@jcm不,实际上不是在稍微移动一下文字后,措辞很不好。我会尝试将其清除一下,请等一下?
flindeberg

10

如果您无法安装官方补丁或不想相信它能正常工作,那么

您不想仅在High Sierra上禁用root用户。

要保护Mac,请使用长安全密码启用root。

在下一个完整版本的macOS(可能为10.13.2)发布之前,我们不会在工作中更改此设置


除非您采取措施,否则root用户将被禁用,如果您的Mac没有正确打补丁,这将是很糟糕的。

如果需要,可以选择加固外壳,直到Apple获得正式补丁或修复为止。

这是一个很棒的脚本,用于设置随机的root密码并将root shell更改/设置为,/usr/bin/false以便即使猜测密码,root shell也无法登录:

它基本上做三件事:

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手册页显示 “不作为命令的一部分提供的密码,你将被安全提示”
乔希·卡斯威尔

1
同意@JoshCaswell-将其包含在脚本中会更好,因为不会导出变量,而是会生成变量。好消息是,Apple有一个官方补丁程序,使得该黑客攻击成为短暂的需求-我们将此作为预防措施,以防止在整个机队中硬编码相同的密码或完全不使用密码会带来更大的危害。这肯定是一个折衷方案,而不是解决方案。
bmike

出于纯粹的好奇心,为什么您的答案结尾有指向该问题的链接?
reirab

1
@reirab完全搞砸了。请参阅编辑以修复正确的链接。谢谢!
bmike


0

您需要以root用户身份登录,并将密码更改为强密码。如果它实际上创建了一个新帐户(而不是启用现有的根帐户),则应首先删除该帐户。


查看我的自我解答。您建议设置一个强密码是合理的,但完全禁用该帐户似乎是一个更加严格的保护,并将OS X恢复到默认状态。support.apple.com/zh-CN/HT204012。即使重新启用了根帐户,也将设置强大的密码保护措施以防止利用所描述的错误吗?
Freiheit

在高塞拉利昂,10.13.0和10,13.1,你绝对希望禁用root帐户。问题是,如果禁用了root用户,并且您尝试使用任何登录窗口以root用户身份登录,则登录窗口将使用空白密码启用 root帐户。如果已经使用强密码启用了root用户,则“登录窗口”不会删除该密码。唯一的缓解措施是使用强密码启用 root 用户
Brian Reiter


0

没有!不要删除根帐户!

首先,root存在于所有版本的macOS,Mac OS X,Mac OS甚至旧版本的操作系统中。由于存在漏洞,macOS最近未创建此帐户。它只是偶然地暴露了它。

删除root将是一个非常糟糕的主意,让我告诉您原因。

由于没有足够的特权来运行关键服务(例如运行GUI的WindowServer),因此这将完全损害macOS 。有一些保护措施可以防止无知的用户被删除root,并且您不应尝试绕过它们。

让我们找出谁在系统中运行最开始的流程,最重要的流程(使用活动监视器):

kernel_task和launchd也归所有者所有

嘿,又是我们友好的邻居root!第一个进程(PID为0)实际上是由内核控制的,无论如何都可能具有完全许可权,但是其子进程launchd(负责启动服务,如登录窗口和窗口服务器本身)是使用特权启动的root。如果root不存在,则此过程将永远不会开始,或者没有权限。

保护根帐户

其他答案提供了Apple发布的补丁,可以解决此问题。但是,如果您无法或不愿意安装它...

之所以起作用,是因为macOS将输入的密码重新哈希为“升级”,因为错误地检测到禁用的帐户(根)具有旧哈希。它仍然会说这是不正确的,但是下次,哈希将匹配(因为macOS对其进行了更改),它将让您进入。

为了确保安全root,您必须使用Directory Utility。有两种访问方法:

  1. 使用Spotlight。 使用Spotlight启动Directory Utility
  2. 使用查找器。打开Finder,按Command + Shift + G(或选择,输入/System/Library/CoreServices/Applications/,然后按Go(或按Enter)),然后从那里打开Directory Utility。选择开始 选择去哪里 打开目录实用程序

打开目录实用程序后,您必须 点击锁进行更改

完成之后,从“编辑”菜单中选择Change Root PasswordEnable Root User。我显示,Change Root Password因为我的root帐户已经启用了强密码。

选择更改根密码

选择一个密码,现在空白密码将不再起作用。

选择密码

恭喜!您不再容易受到根黑客的攻击。


“纯粹是出于猜测,系统可能会重新启用root帐户,因为您输入了正确的密码(在这种情况下为空白)。”-不太正确。有一个使用旧的哈希机制更新密码的迁移路径,它不能正确处理!(作为UNIX类型,您可能会认识到)。
查尔斯·达菲

有关根本原因的分析,请参见Objective-see.com/blog/blog_0x24.html
查尔斯·达菲

是的-我的猜测并不准确。因此,由于错误地将禁用的帐户检测为具有旧哈希值,因此将空白密码重新哈希为“升级”吗?我对么?
Dev

从理论上讲,在此代码路径中应该做的是检查旧的哈希算法是否验证了输入的密码,然后使用新的哈希(输入的密码与已知的旧密码匹配)进行更新。实际上,它不检查应该从“ ShadowHash”字段中检索旧哈希的函数中的错误(或者,它仅检查返回值,而不检查用于返回的传递引用值)比较结果),然后根据密码(是否为空!)生成一个新的哈希值。
Charles Duffy

...所以,差不多,是的,您是对的。:)
Charles Duffy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.