hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md
2023-08-03 19:12:22 +00:00

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限制的例外情况。

例如,以下配置:

javascriptCopy code/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文件但不存在那么恶意程序可以在那里创建一个.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的文件系统限制。

研究人员发现,在安装由苹果签名的包(.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 Disk (Role):   disk3s1 (System)
|   |   Name:                      Macintosh HD (Case-insensitive)
|   |   Mount Point:               /System/Volumes/Update/mnt1
|   |   Capacity Consumed:         128192102
|   |   快照磁盘:             disk3s1s1
|   |   快照挂载点:      /
|   |   快照已封存:           是
[...]

在上面的输出中,可以看到macOS系统卷快照已被封存由操作系统进行了加密签名。因此如果绕过SIP并对其进行修改操作系统将无法启动

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

csrutil authenticated-root status
Authenticated Root status: enabled

此外,它被挂载为只读

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