## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SIDEEFFECT42-ROOTPIPETESTER

### 目录
1. 什么是 RootPipe Tester?
2. 为什么我应该使用 RootPipe Tester?
3. 如何使用 RootPipe Tester?
4. 恐慌!!!我的系统有漏洞?我们都要完蛋了吗?
1. OS X 10.10 (Yosemite)
2. OS X 10.9 (Mavericks)
3. OS X 10.8 (Mountain Lion)
4. OS X 10.7 (Lion), Mac OS X 10.6 (Snow Leopard), Mac OS X 10.5 (Leopard), Mac OS X 10.4 (Tiger)
5. Mac OS X 10.3 (Panther)
6. Mac OS X 10.2 (Jaguar)
7. Mac OS X 10.1 (Puma), Mac OS X 10.0 (Cheetah)
5. 关于 RootPipe
1. RootPipe 是如何工作的?
2. 它是一个后门吗?
## 1\. 什么是 RootPipe Tester?
RootPipe Tester 是一个小型应用程序,可在您的 Mac(Mac OS X 10.2.8 或更高版本,包括 PowerPC 和 Intel)上运行,并尝试利用 RootPipe(CVE-2015-1130)和 Phoenix(CVE-2015-3673)漏洞来实现权限提升。
## 2\. 为什么我应该使用 RootPipe Tester?
### 你不能直接列出一个易受攻击的 Mac OS 版本列表吗?
您的 Mac 是否易受攻击取决于您运行的 Mac OS X 版本,但其成功与否还取决于您已设置的偏好设置。
通过 RootPipe Tester,我创建了一个一键式解决方案,让您无需进行大量测试和尝试即可验证是否易受攻击。
## 3\. 如何使用 RootPipe Tester?
从本仓库的 releases 页面下载磁盘映像,或者如果您愿意,也可以自行编译。
挂载磁盘映像并运行其中的应用程序(从磁盘映像运行 RootPipe Tester 是安全的)。
点击“Start Test”并让测试运行完成(您可以通过窗口标题中的“Running…”来判断是否完成)。
为了获得准确的结果,我建议重启您的 Mac,并在“全新登录”状态下再次运行测试。
如果至少一次测试运行检测到系统存在漏洞,您可能想查看“恐慌”部分。
## 4\. 恐慌!!!我的系统有漏洞?我们都要完蛋了吗?
不!保持冷静,并阅读适合您系统版本的指南。
注意:在用户授权下未发现漏洞,意味着系统要么拒绝访问,要么弹出授权对话框提示您作为管理员用户进行身份验证。
在某种程度上,这也是一种权限提升,因为 admin 组没有像 root 那么多的权限,但在 `sudo` 的默认配置中,属于“admin”组的每个用户都可以通过输入密码获得 root 权限,所以同样的效果也可以通过简单地运行 `sudo` 来实现。
### 4.1. OS X 10.10 (Yosemite)
尽快升级到 10.10.3,以确保系统对 `writeconfig` 二进制文件正确执行授权限制。(至少苹果是这么说的)
如果由于某种原因您无法升级到 10.10.3,请查看 OS X 10.9 Mavericks 的章节。
### 4.2. OS X 10.9 (Mavericks)
Mavericks 允许攻击者通过 nil 授权通过,因此您的情况比旧版本的 Mac OS X 更为困难。
您可能想查看 can_I_suid。
测试结果:
#### nil 授权:
存在漏洞
#### 用户授权:
* **管理员账户** :仅当“解锁每个系统偏好设置面板需要密码”未勾选时存在漏洞。
* **标准用户账户** :不存在漏洞
### 4.3. OS X 10.8 (Mountain Lion)
您应该在“安全性与隐私”偏好设置面板中启用“解锁每个系统偏好设置面板需要密码”。
测试结果:
#### nil 授权:
不存在漏洞
#### 用户授权:
* **管理员账户** :仅当“解锁每个系统偏好设置面板需要密码”未勾选时存在漏洞。
* **标准用户账户** :不存在漏洞
### 4.4. OS X 10.7 (Lion), Mac OS X 10.6 (Snow Leopard), Mac OS X 10.5 (Leopard), Mac OS X 10.4 (Tiger)
恭喜!您拥有最安全的 Mac OS X 版本之一(至少在 RootPipe 方面是这样)。
在这些系统上,“解锁每个系统偏好设置面板需要密码”(在 Tiger 中为“解锁每个安全系统偏好设置需要密码”)选项正常工作,并且 _确实应该启用_ !
注意:如果“需要密码”复选框未勾选,系统将在 _每次_ 登录时解锁安全偏好设置面板。如果您使用管理员账户,这会使您的系统易受攻击,直到您在每次登录后手动关闭系统偏好设置中的锁。
测试结果:
#### nil 授权:
不存在漏洞
#### 用户授权:
* **管理员账户** :仅当 _同时满足_ “需要密码”未勾选且安全偏好设置面板已解锁时存在漏洞。
注意:如果“需要密码”未勾选,系统将在 _每次_ 登录时解锁安全偏好设置面板。
* **标准用户账户** :不存在漏洞
### 4.5. Mac OS X 10.3 (Panther)
与后来的系统不同,在 Panther 中,“安全性与隐私”偏好设置面板中的“解锁每个安全系统偏好设置需要密码”复选框并不能完全阻止此漏洞的利用。我仍然建议勾选它。
为了保护您的系统,我 _强烈_ 建议仅使用标准用户账户,并在更改系统偏好设置后始终手动“关闭锁”。
仅关闭系统偏好设置窗口不会正确使授权失效,因此该漏洞将一直有效直到您注销,尽管系统偏好设置 GUI 对于标准用户显示为关闭的锁。
测试结果:
#### nil 授权:
不存在漏洞
#### 用户授权:
* **管理员账户** :如果安全偏好设置面板已解锁或登录后未手动锁定(如有需要,打开系统偏好设置中的锁并再次关闭),则存在漏洞。
* **标准用户账户** :如果安全偏好设置面板已解锁,则存在漏洞。
### 4.6. Mac OS X 10.2 (Jaguar)
与后来的系统不同,Jaguar 没有提供“解锁每个安全系统偏好设置需要密码”复选框,但仍然在登录时为所有管理员用户解锁安全偏好设置面板。
为了保护您的系统,我 _强烈_ 建议仅使用标准用户账户。
注意:Jaguar 在系统偏好设置退出时不会锁定安全偏好设置面板,因此请始终手动锁定安全面板。如果您未能这样做,该漏洞将一直有效直到您注销。
注意:如果您无法切换到标准用户账户,一个简单的 AppleScript(作为登录项锁定安全偏好设置面板)可以完成这项工作。
注意:普通版本的 RootPipe Tester 无法在 Jaguar 上运行。如果您想在 Jaguar 上运行,请下载 RootPipe Tester 的 Legacy 版本。
RootPipe Tester 的 Legacy 版本功能与普通版本相同,但使用 GCC 3.1 而非 GCC 4.0 编译。
测试结果:
#### nil 授权:
不存在漏洞
#### 用户授权:
* **管理员账户** :如果自上次登录以来未手动锁定安全偏好设置面板(如有需要,打开系统偏好设置中的锁并再次关闭),则存在漏洞。
* **标准用户账户** :仅当安全偏好设置面板已解锁时存在漏洞。
### 4.7. Mac OS X 10.1 (Puma), Mac OS X 10.0 (Cheetah)
对 Puma 进行利用似乎是可行的,因为它使用相同的步骤来验证系统偏好设置,并且大多数必要的组件都存在。
唯一阻碍利用的是 Puma 没有 `SecurityFoundation.framework`(后期版本用于授权),而是使用一个名为 `NIInterface.framework` 的私有框架,这需要先进行逆向工程。
好消息是:没有人会花费时间利用一个几乎不存在的用户群。
为了提高安全性,仍然建议仅使用标准用户账户 _并_ 手动锁定安全偏好设置面板。
## 5\. 关于 RootPipe
### 5.1. RootPipe 是如何工作的?
注意:请对这一段话持保留态度。我尽力去弄清楚实际发生了什么,但由于都是私有框架,你永远无法 100% 知道这些方法在做什么,尤其是跨越我试图覆盖的这么多 Mac OS X 版本。
RootPipe 漏洞的工作方式基本上与系统偏好设置写入配置文件的原理相同(因此得名 `WriteConfig`),不同之处在于该漏洞的利用者不能是系统偏好设置应用程序本身。
到目前为止,这并不那么可怕,实际上整个漏洞也并不那么可怕。
但让我们看看代码。
root@kitploit:~
// 授权
SFAuthorization auth = [SFAuthorization authorization];
id authenticator = [Authenticator sharedAuthenticator];
[authenticator authenticateUsingAuthorizationSync:auth];
// 收获?
id sharedLiaison = [ToolLiaison sharedToolLiaison];
id tool = [sharedLiaison tool];
如您所见,这是“旧式”代码,但新式的原理或多或少是相同的。
这个片段中的前三行是授权,后两行是真正的乐趣所在。
如果系统偏好设置中的一个偏好设置面板需要执行需要特权运行的操作,它会在左下角放置一个 `SFAuthorizationView`(锁符号)。这个 `SFAuthorizationView` 将处理 `system.preferences` 权限的获取和销毁。
到目前为止一切顺利,但什么是 `system.preferences`? 苹果使用的权限及其配置方式随时间变化,但原理保持不变。下面您看到的是授权服务策略数据库的一个摘录。
10.5.8 上的 system.preferences
root@kitploit:~
{
"allow-root" = 1;
class = user;
comment = "由 Admin 框架在更改某些系统偏好设置时检查。";
group = admin;
shared = 1;
}
如您所见,这是一个共享权限。这意味着一旦任何进程获取了此权限,其他每个进程都可以使用它,直到会话被销毁(当您注销时)。
这本身并不坏,因为您必须在应用程序首次想要使用 `system.preferences` 时进行授权,不幸的是,系统在登录时(对于管理员用户)会自动对其进行授权。
这意味着我们的 RootPipe Tester 不必通过授权,而可以直接使用系统的授权。
标准用户是安全的,因为系统不会在登录时自动授权 `system.preferences` 权限。
有了适当的授权,编写配置文件(或任何其他文件)就变得相当容易,可以具有任意权限。
`ToolLiaison` 愉快地为您设置一个指向 `writeconfig` 的 `NSDistantObject`,而 `writeconfig` 愉快地为您写入文件,因为在它们看来,您已经很好地完成了授权。
在系统偏好设置中勾选“解锁每个系统偏好设置面板需要密码”复选框可以修复 Mac OS X 10.4 - 10.8 所有版本上的 RootPipe。
勾选此复选框将修改 `system.preferences` 权限,并将 `shared` 设置为 false。
如果一个权限不是共享的,这意味着每个进程都必须获取自己的授权。因为获取授权需要用户输入管理员密码,所以用户会注意到攻击。
此外,简单地运行 `sudo` 也会有同样的效果,这使得这种攻击毫无用处。
### 5.2. 它是一个后门吗?
不完全是。乍一看,它可能看起来像一个后门,因为它位于一个以 root 身份运行且没有进行正确身份验证的私有框架中。
但真正的问题更多是设计上的缺陷。苹果希望确保每个管理员用户都能充分利用系统偏好设置,而在 Unix 中,一切都需要配置文件,而这些文件通常需要以 root 身份写入。
有人可能会说这是一个坏主意(我同意),但我不会认为它是一个后门,因为身份验证正常工作,而且每个管理员都可以通过 `sudo` 获得 root 权限。
这里的主要问题是苹果在舒适性和安全性之间权衡,但这对他们来说也不是什么特别的事情。