hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md

12 KiB
Raw Blame History

macOS SIP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本信息

**系统完整性保护SIP**是macOS中的一项安全技术它保护某些系统目录免受未经授权的访问即使对于root用户也是如此。它防止对这些目录进行修改包括创建、修改或删除文件。SIP保护的主要目录包括

  • /System
  • /bin
  • /sbin
  • /usr

这些目录及其子目录的保护规则在**/System/Library/Sandbox/rootless.conf**文件中指定。在该文件中,以星号(*开头的路径表示SIP限制的例外情况。

例如,以下配置:

/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man

表明**/usr**目录通常受到SIP的保护。然而三个指定的子目录/usr/libexec/cups/usr/local/usr/share/man)允许进行修改,因为它们在前面有一个星号(*)。

要验证目录或文件是否受到SIP的保护可以使用**ls -lOd命令检查是否存在restrictedsunlnk**标志。例如:

ls -lOd /usr/libexec/cups
drwxr-xr-x  11 root  wheel  sunlnk 352 May 13 00:29 /usr/libexec/cups

在这种情况下,sunlnk 标志表示 /usr/libexec/cups 目录本身不能被删除,但其中的文件可以被创建、修改或删除。

另一方面:

ls -lOd /usr/libexec
drwxr-xr-x  338 root  wheel  restricted 10816 May 13 00:29 /usr/libexec

这里,restricted 标志表示 /usr/libexec 目录受到 SIP 保护。在受 SIP 保护的目录中,文件无法被创建、修改或删除。

SIP 状态

您可以使用以下命令检查系统是否启用了 SIP

csrutil status

如果您需要禁用SIP您必须在恢复模式下重新启动计算机在启动过程中按下Command+R然后执行以下命令

csrutil disable

如果您希望保持SIP启用状态但移除调试保护可以使用以下方法

csrutil enable --without debug

其他限制

SIP还施加了其他几项限制。例如它禁止加载未签名的内核扩展kexts并阻止对macOS系统进程的调试。它还阻止了像dtrace这样的工具检查系统进程。

SIP绕过

价格

如果攻击者成功绕过SIP他将获得以下收益

  • 阅读所有用户的邮件、消息、Safari历史记录等
  • 授予摄像头、麦克风或其他权限通过直接覆盖SIP受保护的TCC数据库
  • 持久性他可以将恶意软件保存在SIP受保护的位置甚至管理员也无法删除它。此外他还可以篡改MRT。
  • 轻松加载内核扩展(对此还有其他强大的保护措施)。

安装程序包

使用Apple的证书签名的安装程序包可以绕过其保护。这意味着即使是由标准开发人员签名的包如果它们试图修改SIP受保护的目录也将被阻止。

不存在的SIP文件

一个潜在的漏洞是,如果一个文件在**rootless.conf中被指定,但当前不存在**,它可以被创建。恶意软件可以利用这一点在系统上建立持久性。例如,如果一个恶意程序在rootless.conf中列出了/System/Library/LaunchDaemons中的.plist文件但该文件不存在它可以创建一个该文件。

com.apple.rootless.install.heritable

{% hint style="danger" %} 权限**com.apple.rootless.install.heritable**允许绕过SIP {% endhint %}

这篇博文的研究人员发现了macOS的系统完整性保护SIP机制的一个漏洞被称为“Shrootless”漏洞。这个漏洞围绕着**system_installd守护程序展开,该守护程序具有一个名为com.apple.rootless.install.heritable**的权限允许其任何子进程绕过SIP的文件系统限制。

system_installd守护程序将安装由Apple签名的软件包。

研究人员发现在安装一个Apple签名的软件包.pkg文件system_installd运行包中包含的任何post-install脚本。这些脚本由默认的shell zsh执行,如果存在的话,即使在非交互模式下,也会自动从/etc/zshenv文件中运行命令。攻击者可以利用这个行为:通过创建一个恶意的/etc/zshenv文件,并等待**system_installd调用zsh**,他们可以在设备上执行任意操作。

此外,还发现**/etc/zshenv可以用作一般的攻击技术**不仅仅是用于绕过SIP。每个用户配置文件都有一个~/.zshenv文件,它的行为与/etc/zshenv相同但不需要root权限。这个文件可以用作持久性机制每次zsh启动时触发,或者用作权限提升机制。如果管理员用户使用sudo -ssudo <command>提升为root用户~/.zshenv文件将被触发有效地提升为root用户。

CVE-2022-22583中发现,同样的**system_installd进程仍然可以被滥用,因为它将post-install脚本放在SIP保护的随机命名文件夹中的/tmp内**。问题在于**/tmp本身没有受到SIP的保护**,所以可以在其上挂载一个虚拟映像,然后安装程序会将post-install脚本放在其中,卸载虚拟映像,重新创建所有文件夹添加带有要执行的payload的post-installation脚本

com.apple.rootless.install

{% hint style="danger" %} 权限**com.apple.rootless.install**允许绕过SIP {% endhint %}

CVE-2022-26712中得知系统XPC服务/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc具有权限**com.apple.rootless.install它允许进程绕过SIP的限制。它还公开了一种在没有任何安全检查的情况下移动文件的方法**。

封闭系统快照

封闭系统快照是苹果在**macOS Big SurmacOS 11中引入的一个功能,作为其系统完整性保护SIP**机制的一部分,提供了额外的安全性和系统稳定性。它们本质上是系统卷的只读版本。

以下是更详细的说明:

  1. 不可变系统封闭系统快照使macOS系统卷变为“不可变”意味着它不能被修改。这可以防止任何未经授权或意外的对系统的更改从而可能危及安全性或系统稳定性。
  2. 系统软件更新当您安装macOS更新或升级时macOS会创建一个新的系统快照。然后macOS启动卷使用**APFSApple文件系统**切换到这个新的快照。如果在更新过程中出现问题,整个应用更新的过程变得更加安全可靠,因为系统始终可以恢复到之前的快照。
  3. 数据分离结合在macOS Catalina中引入的数据和系统卷分离的概念封闭系统快照功能确保所有数据和设置都存储在单独的“数据”卷上。这种分离使您的数据与系统独立,简化了系统更新的过程,并增强了系统安全性。

请记住这些快照由macOS自动管理并且由于APFS的空间共享功能它们不会占用额外的磁盘空间。还需要注意的是这些快照与Time Machine快照不同,后者是用户可访问的整个系统的备份。

检查快照

命令**diskutil apfs list**列出了APFS卷的详细信息及其布局

+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|   ====================================================
|   APFS Container Reference:     disk3
|   Size (Capacity Ceiling):      494384795648 B (494.4 GB)
|   Capacity In Use By Volumes:   219214536704 B (219.2 GB) (44.3% used)
|   Capacity Not Allocated:       275170258944 B (275.2 GB) (55.7% free)
|   |
|   +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|   |   -----------------------------------------------------------
|   |   APFS Physical Store Disk:   disk0s2
|   |   Size:                       494384795648 B (494.4 GB)
|   |
|   +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|   |   ---------------------------------------------------
|   |   APFS Volume
|   |   快照:                  FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|   |   快照磁盘:             disk3s1s1
|   |   快照挂载点:      /
|   |   快照密封:           是
[...]
+-> 卷 disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|   ---------------------------------------------------
|   APFS 卷磁盘 (角色):   disk3s5 (数据)
|   名称:                      Macintosh HD - Data (不区分大小写)
    |   挂载点:               /System/Volumes/Data
    |   已使用容量:         412071784448 B (412.1 GB)
    |   密封:                    否
|   FileVault:                 是 (已解锁)

在上面的输出中,可以看到用户可访问的位置被挂载在/System/Volumes/Data下。

此外,macOS系统卷快照被挂载在/下,并且它是密封的由操作系统进行了加密签名。因此如果绕过SIP并对其进行修改操作系统将无法启动

还可以通过运行以下命令验证密封是否已启用

csrutil authenticated-root status
Authenticated Root status: enabled

此外,快照磁盘也被挂载为只读

mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥