欢迎进入币游官网(币游国际官网),币游官网:www.9cx.net开放币游网址访问、币游会员注册、币游代理申请、币游电脑客户端、币游手机版下载等业务。

首页科技正文

usdt无需实名买卖(www.caibao.it):macOS 二进制 plist 剖析的破绽剖析

admin2021-02-02120漏洞

属性表文件(Plist)是一种文件形式,通常用于储存用户设置,也可以用于存储捆绑的信息,该功效在旧式的Mac OS中是由资源分支提供的。由于Plist中存储的数据是抽象的,其接纳的文件花样可以不止一种。

macOS看起来异常有趣,尤其是属性列表(plists)是存储序列化工具的文件,在苹果操作系统中很常见,类似于微软Windows使用注册表存储设置数据。下面显示了macOS应用程序自动器的基于xml的属性列表示例。此属性列表存储应用程序的版本信息以及其他有用数据如下所示:

属性列表也可以接纳二进制形式,否则称为bplist。顾名思义,这些是二进制花样的属性列表,这些属性列表启用了一些附加的工具类型和关系,包罗字典。以下是一个示例bplist,只管可以使用其他标签来支持该花样的其他版本,然则可以通过bplist00符号来标识该示例:

通过查看苹果的开源代码,可以更好地明白bplist花样,我也发现这个参考异常有用。苹果开源代码中界说的bplist花样如下:

二进制plist花样

属性列表为模糊测试提供了一个有趣的目的,由于它们很容易 *** 作系统的许多部门(包罗更高特权的历程)建立和使用。苹果公司的开源代码使我能够建立随便的bplist,并最先模糊文件花样,同时使用内置的macOS plutil下令行工具确保准确的语法。

我花了几天时间来天生bplist来执行该花样,并很快发现某些工具类型在被常见的macOS二进制文件(例如Finder)以及更高特权的二进制文件(包罗Launch Services守护程序(LSD))举行剖析时会导致异常。系统溃逃日志解释Core Foundation框架中存在破绽,然则,正如我们稍后将看到的,此破绽存在于多个位置。Core Foundation(简称CF)是一套Mac OS和iOS中的C语言API,由较低层的一些例程和封装函数组成。Apple公布的最大的一个CF开源项目叫CFLite,基于CFLite可以开发跨Mac OS X,Linux和Windows平台的应用。另外一个第三方的开源实现叫做OpenCFLite也有同样的功效。大多数的Core Foundation例程的工具通常遵照这样的命名规则,例如:CFDictionary开头的函数中会泛起CFDictionaryRef,这些工具经常被会手动通过CFRetain和CFRelease来治理引用计数。在内部,Core Foundation也会把一些基础类型转成Objective-C运行时中可用的花样。

大多数天生的溃逃似乎是由Core Foundation剖析bplist并随后实验使用建立的工具的方式引起的。任何bplist的ObjectTable中有非字符串类型的工具(Date、Data、Bool等)都会在挪用不存在的字符串相关选择器时导致剖析历程溃逃。其结果是,任何使用Core Foundation读取属性列表的历程都可能因无法识别的选择器异常而溃逃。下面是一个示例易受攻击的代码路径:

使用以下C代码以及与测试应用程序位于统一目录中的名为Info.plist的恶意属性列表,可以轻松到达此位置:

溃逃剖析

可以通过编程方式或通过将修改后的bplist放置在系统上自动对其举行剖析的方式来为此破绽天生溃逃,现实上,此破绽的最初迹象之一是LSD在实验使用修改后的属性列表注册应用程序时频频在我的系统上溃逃。

Objective-See有一篇很棒的博客文章,详细先容了通过LSD举行的应用程序注册以及属性列表的自动剖析。

下图是控制台输出,显示了在我的桌面上以正当的Info.plist身份修改后的bplist导致溃逃发生的频率,还请注重用户级和系统级历程溃逃。

LSD溃逃

通过修改单个字节以将ASCII字符串工具(类型0x5X)更改为另一种工具类型,如DATE(类型0x33),可以建立恶意的bplist。修改后的bplist示例如下:

这个很小的字节更改现在可以用于在macOS系统和iOS上造成严重破坏,只管在此研究中未对该平台举行过测试。这种方式还会影响包罗Spotlight在内的多个数据库,这些数据库已被该恶意Info.plist攻击,甚至在重新启动后也频频导致溃逃。

破绽是若何发现的?

由于能够轻松地重新建立溃逃,因此我深入研究了该破绽的现实发生位置。跟踪此破绽的一种简朴方式是查看溃逃历程的客栈跟踪。以下是前面显示的测试应用程序的溃逃日志,该日志使用Core Foundation读取了恶意属性列表。

阅读这篇文章以领会Core Foundation若何处置无法识别的选择器异常并说明客栈跟踪中的_CF_forwarding_prep_0会很有辅助。有了这些信息,我将之前的返回地址视为CFStringFind中的异常的可能泉源,尤其是在挪用_CFStringGetLength之后。下面的反汇编说明晰此挪用:

CFString查找反汇编

我逐步完成了LLDB中的CFStringFind,直到挪用_CFStringGetLength来检查寄存器之前。从苹果的_CFStringGetLength文档中,我们知道第一个参数应该是字符串,因此我们可以使用以下LLDB下令检查RDI寄存器。

可以看到,第一个参数的工具类型不是字符串,而是恶意bplist中的_NSDate工具。下面的_CFStringGetLength的反编译说明晰可能会失足的地方:

,

联博接口

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

_CFStringGetLength反编译

我们可以看到,在该函数的第一个参数上挪用了长度选择器,我们知道该函数对于_NSDate工具将失败,由于它没有此选择器,该理论也与溃逃日志相匹配。

若是我们继续执行这个函数,则会最终将在Objective-C异常处置的内部遇到一个异常,这解释我们已找到这些溃逃的根本原因。

其他选择器

继续天生带有非字符串工具的bplists,而且能够从其他无法识别的选择器在Core Foundation中天生其他溃逃。下面的溃逃日志是LSD在使用了一个恶意bplist和一个剩余的nscfdata工具后的溃逃日志:

此LSD溃逃的客栈跟踪如下:

注重,在Objective-C异常处置之前,溃逃的位置不是来自CFStringFind,而是现实上挪用_CFStringGetCStringPtrInternal的CFStringFindWithOptionsAndLocale,最终由于挪用错误的选择器_fastCStringContents而溃逃。这样做的原因是,剩余的nscfdata类型现实上有一个长度选择器,以是它成功地通过了我们之前看到的第一个溃逃位置,并进一步进入Core Foundation,直到它挪用另一个未识别的选择器。

多个破绽的发现

在此研究的早期,我使用plutil从恶意bplist天生溃逃,然后编写了自己的代码以到达需要的代码路径。以下下令通过使用plutil作为目的历程和print plist标志来设置一个LLDB会话,以最先调试此溃逃,该标志只会打印出人类可读版本的属性列表。

经由几回执行之后,很明显plutil现实上在其他位置溃逃,而不是在Core Foundation中溃逃。下面的输出说明晰它试图在__NSDate类型上挪用长度选择器,该类型会导致无法识别的选择器异常,然则此破绽存在于plutil中,而不存在于Core Foundation中。

似乎在许多macOS应用程序中存在类似的破绽,这些破绽假定bplists仅包罗字符串工具类型。 LSD历程溃逃的客栈跟踪如下所示:

若是我们使用GHIDRA来反汇编_LSPlistCompactString函数,则可以看到偏移量45或0x2D导致我们又对破绽工具类型举行了另一个长度挪用,大概是从我们现在在LSD数据库中的恶意bplist挪用的:

我们可以通过在_LSPlistCompactString上设置断点并使用以下断点下令打印第一个参数来验证这一点:

下面的输出说明LSD正在从恶意bplist获取__NSDate工具:

这证实了我最初以为的一个破绽现实上是多个macOS二进制文件中的许多破绽,而且所有破绽均源于bplist仅包罗字符串工具的假设。

恶意影响

1.根级历程可能会在普通用户帐户中溃逃,而且若是操作系统重新天生了根级历程,则它们会频频溃逃(例如,LSD和MDS)。

2.系统不稳定和拒绝服务特别是在Finder或其他与UI相关的历程消耗了恶意bplist并使溃逃历程需要溃逃0-click时发生,由于应用程序捆绑包,程序包等在写入磁盘时会自动举行处置。

3.有可能使普通用户帐户中与平安相关的历程溃逃,从而删除平安界限(XProtect等),只管本文中并未对其举行周全探讨。

4.在自动剖析bplist的情形下有可能被远程行使。

5.受此破绽影响的系统组件包罗使用Core Foundation剖析bplist的应用程序,占很大的比例,在macOS 10.15.3上快速搜索了1000多个已安装的二进制文件,这些文件导入了实现此破绽的函数。

6.许多应用程序通过Core Foundation剖析bplist数据,但也会在自己的代码中错误地接见天生的工具,这意味着破绽发生的概率可能更大。

本文翻译自:https://objective-see.com/blog/blog_0x5A.html:

最新文章

最新评论