详解MacOS High Sierra奇葩漏洞:空密码进入系统root账户

背景介绍

周二下午,有人在twitter上发布消息称:“苹果MacOS的最新版本(Sierra)存在一个奇怪的漏洞,允许任何人在root账户中输入一个空白密码或任意字符串作为密码,即可进入系统。

这一消息在国内引起了不少媒体的关注,毕竟苹果电脑的用户还是很多的,而且诸如“无需密码即可解锁电脑!苹果新macOS系统曝出漏洞”之类的文章标题,很容易引起人们的兴趣:

测试步骤:(1)进入“系统偏好”;(2)选择“用户和组”;(3)点击解锁按钮;(4)用户名一栏中输入“root”,密码一栏为空(或填写任意字符串);(5)多次点击解锁后即可成功进入系统。

深入分析

作为一名安全人员,自然是很好奇到底发生了什么,因此有必要深入分析一下该漏洞的成因,并将结果整理出来分享给大家。(资料原文

首先,先看一下该漏洞的直观表现:当用户(或攻击者)试图登录到当前未启用的帐户(如root)时,系统首先会使用用户指定的任何密码创建该帐户,即使是空密码。这就是为什么需要两次点击才能解锁“root”账户并进入系统的原因。

那么,究竟发生了什么事呢?

当一个用户(或攻击者)试图验证这样一个账户时,在MacOS系统上,这个过程是由OpenDirectory的后台处理(opendirectoryd)的,相关函数调用栈的信息示例如下:

在接收到一个匹配的XPC的消息后,opendirectoryd调用odm_recordverifypassword方法,进而调用od_verify_crypt_password。odm_recordverifypassword方法通过PlistFile二进制文件实现,,这个bundle文件从/System/Library/OpenDirectory/Modules/PlistFile.bundle 加载到 opendirectoryd 。

验证账户密码的过程中,odm_recordverifypassword函数会调用一个匿名方法“sub_826b”,这个子程序首先会调用另一个辅助函数试图读取系统上保存的ShadowHash数据(ShadowHash是系统上用户账户基本信息的哈希值,但不包含账户密码)。对于已经启用的帐户(如user帐户或其他用户账户),对应的ShadowHash是存在的,因此将成功读取。

注意,这些数据可以通过终端明亮进行查看,如:dscl . -read /Users/<user>,或者直接查看/private/var/db/dslocal/nodes/Default/users/<user>,示例如下:

对于未启用的帐户(例如,root账户,这也是新闻标题上的关键词),相关的ShadowHash信息是不存在的,因此读取将失败!这一点很重要。

当函数未能找到hash/shadow的哈希值时,会执行一个“else”子句:

如上图中的代码所示,读取完密码之后,会调用od_verify_crypt_password函数来验证用户(或攻击者)的账户和密码是否匹配。假设,我们试图登录一个未被启用的root账户,并输入“hunter2”作为密码, od_verify_crypt_password就会读取到“* ”和“hunter2”:

尝试调用,会返回一个非零值,如下图所示:

再次调用od_verify_crypt_password函数,会继续执行其他方法,如sub_13d00。根据反编译显示的日志报表信息,可以看到shadowhash或securetoken的用户记录信息更新了。

查看一些到底更新了那些信息,会发现之前为root账户输入的密码(即“hunter2”)生效了。

这个密码作为root账户的密码,被保存到了shadowhash/securetoken中,现在用户(或攻击者)就可以利用这组凭据进行登录了!

结论

通过上文的叙述,我们可以知道:

  • 一个帐户未被开启的情况下(此时没有 “shadowhash”数据),MacOS将尝试执行更新信息;
  • 在更新的过程中,od_verify_crypt_password返回一个非零值,但却未检查错误代码;
  • 用户(或攻击者)指定的密码被保存到这个原本未开启的账户中,用户(或攻击者)可以用这组信息进行登录。

看起来是od_verify_crypt_password的问题,它未能正确的处理错误信息。

修复进展

 

该漏洞的CVE编号是:2017-13872,描述是“用户凭据验证存在逻辑错误”。

目前苹果公司已经发布了针对这个漏洞的安全补丁,提醒受影响的用户尽快升级。

比较“补丁”前后PlistFile二进制文件的差异,我们看到在检测无效的凭据时,增加了错误检验功能:

原创文章,作者:M0tto1n,如若转载,请注明出处:http://www.mottoin.com/107357.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code