内容简介:一、概述近期,我们的第三方合作伙伴Syndis发现我们在Dropbox使用的Apple软件中存在漏洞,该漏洞不仅影响macOS,还影响当时最新版本的Safari,因此这些漏洞属于0 Day漏洞。当这些漏洞被组合利用时,攻击者可以通过诱导受害者访问特制的网页,实现在受害者的计算机上运行任意代码。我们向Apple通报了这些漏洞,很快就得到了他们的确认。Apple在大约一个月内发布了针对这些漏洞的修复程序,这比“90天内修复”的行业标准要好很多。这些漏洞被指定了CVE编号,并且我们与Syndis共同验证了漏洞已
一、概述
近期,我们的第三方合作伙伴Syndis发现我们在Dropbox使用的Apple软件中存在漏洞,该漏洞不仅影响macOS,还影响当时最新版本的Safari,因此这些漏洞属于0 Day漏洞。当这些漏洞被组合利用时,攻击者可以通过诱导受害者访问特制的网页,实现在受害者的计算机上运行任意代码。
我们向Apple通报了这些漏洞,很快就得到了他们的确认。Apple在大约一个月内发布了针对这些漏洞的修复程序,这比“90天内修复”的行业标准要好很多。这些漏洞被指定了CVE编号,并且我们与Syndis共同验证了漏洞已经成功修复。本文将主要讲解这些漏洞的详细信息,及修复补丁的验证过程。
二、Safari自动下载和安装磁盘映像漏洞(CVE-2017-13890)
在CoreTypes中,定义了一个安全的统一类型标识符(UTI)列表,该列表将由Safari自动打开。上述内容可以在LSRiskCategorySafe中找到。我们特别感兴趣的是其中的com.real.smil。
如果我们使用Isregister检查Launch Services数据库,我们将会看到它在CoreTypes中定义,其描述为“同步多媒体集成语言”,并且似乎与Real Player媒体应用程序相关联。有许多文件扩展名都与这个UTI相关联,其中包括“.smi”。
$ touch a.smi $ mdls a.smi | grep -e "kMDItemContentType\s\|kMDItemKind" kMDItemContentType = "com.real.smil" kMDItemKind = "Self Mounting Image"
我们可以看到,“.smi”文件具有com.real.smil内容类型,但它被描述为“自挂载映像”(Self Mounting Image)。这是因为在macOS 10.12.6上,Disk Image Mounter应用程序也将自身与这一扩展名关联,并将自身列为该扩展名文件的默认处理程序。Disk Image Mounter应用程序为“.smi”扩展名指定了com.apple.disk-image-smi这一UTI,但CoreTypes中定义的com.real.smil具有优先权限。
该漏洞已被分配CVE-2017-13890,Apple官方通告参见: https://support.apple.com/en-us/HT208692
CoreTypes
适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6
影响:在对一个恶意制作的网页进行处理的过程中,可能会导致安装磁盘映像。
修复方法:通过增加限制条件,修复了逻辑问题。
CVE-2017-13890:Apple、Syndis的Theodor Ragnar Gislason
三、挂载磁盘映像导致应用程序启动漏洞(CVE-2018-4176)
Bless实用程序用于设置卷的可启动性以及启动磁盘选项。其中,一个有趣的选项是–openfolder,可用于指定在系统安装卷时在Finder中打开的文件夹。尽管描述是这样说的,但如果–openfolder的参数指向了一个可加载的包,并且这些包时经过打包且文件名以“.bundle”结尾的应用程序,那么实际上将会启动指定的应用程序,而没有执行打开Finder的操作。这就意味着,用户可以通过访问Safari中的网页来自动启动应用程序。然而,这一漏洞对攻击者来说,其可用性仍然有限,因为攻击者无法借助这一漏洞运行任意代码。Gatekeeper仅允许运行从应用商店下载的应用程序,以及由已知开发者签名的应用程序,从而防范此类共计。Launch Services在启动应用程序时将会进行检查,并产生如下错误提示:
为了使这条漏洞利用链有效,我们需要绕过Gatekeeper,以避开这种检查。
该漏洞已被分配CVE-2018-4176,Apple官方通告参见: https://support.apple.com/en-us/HT208692
磁盘映像
适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6、macOS High Sierra 10.13.3
影响:挂载恶意磁盘映像可能会导致启动应用程序。
修复方法:通过增加限制条件,修复了逻辑问题。
CVE-2018-4176:Syndis的Theodor Ragnar Gislason
四、Gatekeeper绕过漏洞(CVE-2018-4175)
我们需要注意上面的错误提示:“evil无法打开,因为它来自一个身份不明的开发人员”,与此同时,我们还注意到Safari下载的磁盘映像中有evil。Syndis随后注意到了几件事:
1、他们可以启动经过签名的应用程序包的副本,例如我们磁盘映像中的Terminal.app。
2、如果修改Bundle的Info.plist,并不会使签名无效。
借助Info.plist,可以指定使用应用程序打开哪些扩展名的文件,也可以注册新的文件扩展名,这样一来就能够确保该应用程序作为默认的处理程序。在启动应用程序后,Launch Services会在数据库中注册应用程序和这些文件扩展名。我们可以使用Isregister命令查看:
...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle id: 2740
Mach-O UUIDs: 67FFA762-AB52-31F0-AC80-E72008760B13
sequenceNum: 2740
FamilyID: 0
PurchaserID: 0
DownloaderID: 0
installType: 0
appContainer: #
dataContainer: #
path: /Volumes/bundle/Terminal.app
name: Terminal
displayName: Terminal
...
bundle flags: apple-internal has-display-name launch-disabled (0000000000000103)
...
{
CFBundleTypeExtensions = (
workingpoc
);
CFBundleTypeRole = invalid;
LSIsAppleDefaultForType = 1;
},
...
}
library: (null)
schemesList: ssh, telnet, x-man-page
...
--------------------------------------------------------
claim id: 15108
name: (null)
rank: Default
roles: Viewer
flags: apple-default apple-internal doc-type
icon:
bindings: .workingpoc
...
这样一来,就提供了一种注册新文件扩展名并启动已经签名的应用程序的方法。但是,我们还没有办法启动自己的应用程序或运行自定义命令。考虑到我们的目标是运行任意命令,那么利用Terminal(终端)APP应该是一个合理的思路。但是,如果我们尝试使用上述技术启动 Shell 脚本,Gatekeeper会因为要对Safari下载的文件进行隔离而阻止其执行。
在这里,就用到了真正的技巧。如果我们能够使用与Terminal副本相关联的新扩展名打开文件,那么就不会检查标志中的隔离位(Quarantine Bit),并且我们的代码将在系统版本的Terminal中运行,不会出现任何提示。
该漏洞已被分配CVE-2018-4175,Apple官方通告参见: https://support.apple.com/en-us/HT208692
LaunchServices
适用于:OS X El Capitan 10.11.6、macOS Sierra 10.12.6、macOS High Sierra 10.13.3
影响:恶意制作的应用程序可能会绕过代码签名检查策略。
修复方法:通过加强验证,修复了逻辑问题。
CVE-2018-4175:Syndis的Theodor Ragnar Gislason
五、漏洞链利用
现在,我们就能够将这三个漏洞链接在一起,从而实现使用Safari访问特制网页即可导致任意代码执行。第一阶段中,包含终端应用程序的修改版本,该应用程序被注册为新文件扩展名(.workingpoc)的处理程序。此外,它将包含一个名为“test.bundle”的空白文件夹,该文件夹将被设置为默认的“openfolder”,将会自动打开/Applications/Terminal.app,并且不产生任何提示。第二阶段中,包含一个带有扩展名“.workingpoc”的未经签名的ShellScript,随后在没有提示的情况下,从正在运行的Terminal应用程序中执行。
演示视频:https://videos.files.wordpress.com/MdOSNvhK/poc_dvd.mp4
六、漏洞修复方式
Apple在2018年3月29日发布的更新中,为上述漏洞提供了修复程序。
6.1 CVE-2017-13890
我们看到,com.real.smil UTI似乎已经从CoreTypes中删除。我们对“.smi”文件进行了检查,发现其目前具有适当的内容类型:
$ mdls a.smi | grep -e "kMDItemContentType\s\|kMDItemKind" kMDItemContentType = "com.apple.disk-image-smi" kMDItemKind = "Self Mounting Image"
并且,通过比较10.12.6和10.13.4版本的Launch Services数据库,可以进一步验证这一点:
10.12.6
claim id: 3804
name: Self Mounting Image
rank: Default
roles: Viewer
flags: apple-default apple-internal relative-icon-path doc-type
icon: Contents/Resources/diskcopy-doc.icns
bindings: com.real.smil, .smi
10.13.4
claim id: 22824
name: Self Mounting Image
rank: Default
roles: Viewer
flags: apple-default apple-internal relative-icon-path doc-type
icon: Contents/Resources/diskcopy-doc.icns
bindings: com.apple.disk-image-smi, .smi
因此,Safari将不再使用Disk Image Mounter应用程序自动打开“.smi”文件。
6.2 CVE-2018-4176
在修复后,使用bless命令打开可加载的Bundle将不会再导致Bundle启动。相反,该目录是使用Finder应用程序打开的,正如命令描述中所说的那样。
6.3 CVE-2018-4175
在10.12.6中,我们的脚本在漏洞利用的第二阶段并没有及时启动。在10.13.4中,我们看到了一条警告,提示此前从未启动过这个应用程序:
即使前两个漏洞没有被修复,通过这一改进,通过Safari访问恶意网页的用户也会得到充分的警告,并被明确告知继续执行该操作可能存在安全风险。
如果我们点击“Open”,会注意到,我们修改后的Terminal的Bundle标志,已经不再包含Launch Services数据库中的launch-disabled。
...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle id: 2740
Mach-O UUIDs: 67FFA762-AB52-31F0-AC80-E72008760B13
...
path: /Volumes/bundle/Terminal.app
...
bundle flags: apple-internal has-display-name (0000000000000003)
...
七、时间节点
2018年2月19日 将漏洞详情报告给Apple
2018年2月19日 Apple确认报告
2018年2月21日 向Apple提供PoC
2018年2月21日 Apple感谢我们提供更多详情,并表示他们正在分析中
2018年3月29日 Apple发布安全更新( https://support.apple.com/en-us/HT208692
以上所述就是小编给大家介绍的《Apple设备多个安全漏洞原理与修复方式分析(CVE-2017-13890、CVE-2018-4176、CVE-2018-4175)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!