2017 年 12 月 31 日,一名推特账号为 Siguza 的安全研究人员公布了 macOS 0-day 漏洞的详情。该漏洞是一个本地提权漏洞,影响到所有 macOS 版本,主要涉及人机接口设备(如触摸屏、按键、加速度计等)的内核驱动程序 IOHIDFamily。攻击者利用这个漏洞可以在在内核中进行任意读/写,并执行任意代码、获取 root 许可,进而彻底接管系统。据 Siguza 推测,漏洞可以追溯到 2002 年。
Siguza 原本是在分析 iOS 中 IOHIDFamily 的漏洞,结果发现 IOHIDSystem 组件仅存在于 macOS 上,最后发现了这个漏洞。
我最初想研究 IOHIDSystem 组件,希望找到一个能够渗透 iOS 内核的漏洞。结果发现 IOHIDFamily 的某些部分(尤其是 IOHIDSystem)只存在于 macOS 上,结果就在 macOS 上发现了这个存在于 IOHIDFamily 组件中的漏洞。
Siguza 还发布了名为 IOHIDeous 的 PoC 代码,可在 Sierra 和 High Sierra(最高版本为 10.13.1)上实现利用,获取完整的内核读/写权限,并禁用系统完整性保护(SIP)功能和 Apple 移动文件完整性(AMFI)保护功能。非特权用户也可在所有最新版本的 macOS 上利用该漏洞。
图:存在漏洞的 IOHIDSystem 代码
如上图所示,eop->evGlobalsOffset = sizeof(EvOffsets);和evg = (EvGlobals *)((char *)shmem_addr + eop->evGlobalsOffset);这两行存在问题。
其中,eop->evGlobalsOffset的值可以更改,所以会导致evg指向其他非意向结果。
更多技术分析详情可以点击此处 查阅。
实验表明,该漏洞利用代码运行速度很快,能够避免用户交互,甚至在系统关闭时“能够在用户注销和内核杀毒之抢先运行”。这意味着用户在注销、重新启动或关闭计算机时,都有可能遭到攻击,被攻击者获取 root 权限,连社工都不需要。
不过,Siguza 发布的 PoC 代码似乎不适用于2017 年 12 月 6 日苹果刚刚发布的 macOS High Sierra 10.13.2 版本,但他认为这个版本仍然有可能存在问题。
由于某些原因,我这份时序攻击在 High Sierra 10.13.2 上不起作用,不过我也不会再深入研究了。也许是因为 10,13,2 版本打了补丁,也许只是随机变化的后果,我既不知道也不在乎。 漏洞依然存在,这个 PoC 体现了该漏洞的信息泄露和内核读/写的特性,不过这两个特性不在同一个二进制文件中。
我的主要目的是让人们知道这个漏洞。我不会把 exploit 卖给黑客,因为我不想助纣为虐。如果苹果的漏洞奖励计划包含 macOS 的漏洞,或者这个漏洞出现远程利用的实例,那我早就把这个漏洞提交给苹果了。
Siguza 公开披露这个 macOS 0-day 漏洞的原因是该漏洞已经被一名本地攻击者利用,而且苹果的漏洞奖励计划并未涵盖这一类的漏洞。所以,目前漏洞还未修复。由于这个漏洞需要在本地访问计算机或者攻击者已经入侵过计算机的前提下才可以被利用,所以可能会被苹果列为非严重问题,不会进行紧急修复。据推测,苹果可能会在下个月的安全更新中修复。
*参考来源:Securityaffairs,AngelaY 编译,转载请注明来自 FreeBuf.COM。