` 提升到 root,`~/.zshenv` 文件将被触发,有效地提升到 root。
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
在 [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) 中发现,**`system_installd`** 进程仍然可以被滥用,因为它将 **后安装脚本放在 SIP 保护的 `/tmp` 中的随机命名文件夹内**。问题在于 **`/tmp` 本身并不受 SIP 保护**,因此可以在其上 **挂载** 一个 **虚拟映像**,然后 **安装程序** 会将 **后安装脚本** 放入其中,**卸载** 虚拟映像,**重新创建** 所有 **文件夹** 并 **添加** 带有 **有效负载** 的 **后安装** 脚本以执行。
#### [fsck_cs 工具](https://www.theregister.com/2016/03/30/apple_os_x_rootless/)
发现了一个漏洞,其中 **`fsck_cs`** 被误导以破坏一个关键文件,因为它能够跟随 **符号链接**。具体来说,攻击者从 _`/dev/diskX`_ 创建了一个指向文件 `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` 的链接。在 _`/dev/diskX`_ 上执行 **`fsck_cs`** 导致 `Info.plist` 的损坏。该文件的完整性对操作系统的 SIP(系统完整性保护)至关重要,SIP 控制内核扩展的加载。一旦损坏,SIP 管理内核排除的能力就会受到影响。
利用此漏洞的命令是:
```bash
ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot
```
该漏洞的利用具有严重的影响。`Info.plist` 文件,通常负责管理内核扩展的权限,变得无效。这包括无法将某些扩展列入黑名单,例如 `AppleHWAccess.kext`。因此,随着 SIP 的控制机制失效,该扩展可以被加载,从而授予对系统 RAM 的未经授权的读写访问。
#### [在 SIP 保护的文件夹上挂载](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
可以在 **SIP 保护的文件夹上挂载新的文件系统以绕过保护**。
```bash
mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
```
#### [Upgrader bypass (2016)](https://objective-see.org/blog/blog_0x14.html)
系统设置为从 `Install macOS Sierra.app` 中的嵌入式安装程序磁盘映像启动以升级操作系统,利用 `bless` 工具。使用的命令如下:
```bash
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
```
该过程的安全性可能会受到威胁,如果攻击者在启动之前更改了升级映像(`InstallESD.dmg`)。该策略涉及用恶意版本(`libBaseIA.dylib`)替换动态加载器(dyld)。此替换导致在启动程序时执行攻击者的代码。
攻击者的代码在升级过程中获得控制权,利用系统对安装程序的信任。攻击通过通过方法调换(method swizzling)更改`InstallESD.dmg`映像,特别针对`extractBootBits`方法。这允许在使用磁盘映像之前注入恶意代码。
此外,在`InstallESD.dmg`中,有一个`BaseSystem.dmg`,它作为升级代码的根文件系统。将动态库注入其中允许恶意代码在能够更改操作系统级文件的进程中运行,显著增加了系统被攻陷的潜力。
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
在[**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk)的演讲中,展示了如何**`systemmigrationd`**(可以绕过SIP)执行**bash**和**perl**脚本,这可以通过环境变量**`BASH_ENV`**和**`PERL5OPT`**被滥用。
#### CVE-2023-42860
正如[**这篇博客文章中详细说明的**](https://blog.kandji.io/apple-mitigates-vulnerabilities-installer-scripts),来自`InstallAssistant.pkg`包的`postinstall`脚本允许执行:
```bash
/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"
```
并且可以在 `${SHARED_SUPPORT_PATH}/SharedSupport.dmg` 中创建一个符号链接,这将允许用户 **解除任何文件的限制,绕过 SIP 保护**。
### **com.apple.rootless.install**
> [!CAUTION]
> 权限 **`com.apple.rootless.install`** 允许绕过 SIP
权限 `com.apple.rootless.install` 被认为可以绕过 macOS 的系统完整性保护 (SIP)。这在与 [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/) 相关时特别提到。
在这个特定情况下,位于 `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` 的系统 XPC 服务拥有此权限。这使得相关进程能够绕过 SIP 限制。此外,该服务显著提供了一种允许在不执行任何安全措施的情况下移动文件的方法。
## 密封系统快照
密封系统快照是 Apple 在 **macOS Big Sur (macOS 11)** 中引入的一项功能,作为其 **系统完整性保护 (SIP)** 机制的一部分,以提供额外的安全性和系统稳定性。它们本质上是系统卷的只读版本。
以下是更详细的介绍:
1. **不可变系统**:密封系统快照使 macOS 系统卷变得“不可变”,这意味着它无法被修改。这防止了任何未经授权或意外的更改,从而可能危及安全性或系统稳定性。
2. **系统软件更新**:当您安装 macOS 更新或升级时,macOS 会创建一个新的系统快照。macOS 启动卷随后使用 **APFS (Apple 文件系统)** 切换到这个新快照。应用更新的整个过程变得更安全、更可靠,因为系统始终可以在更新过程中出现问题时恢复到先前的快照。
3. **数据分离**:结合在 macOS Catalina 中引入的数据和系统卷分离的概念,密封系统快照功能确保您的所有数据和设置存储在一个单独的“**数据**”卷上。这种分离使您的数据独立于系统,从而简化了系统更新的过程并增强了系统安全性。
请记住,这些快照由 macOS 自动管理,并且由于 APFS 的空间共享能力,不会占用您磁盘上的额外空间。还需要注意的是,这些快照与 **时间机器快照** 不同,后者是用户可访问的整个系统的备份。
### 检查快照
命令 **`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: 12819210240 B (12.8 GB)
| | Sealed: Broken
| | FileVault: Yes (Unlocked)
| | Encrypted: No
| | |
| | Snapshot: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
| | Snapshot Disk: disk3s1s1
| | Snapshot Mount Point: /
| | Snapshot Sealed: Yes
[...]
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
| ---------------------------------------------------
| APFS Volume Disk (Role): disk3s5 (Data)
| Name: Macintosh HD - Data (Case-insensitive)
| Mount Point: /System/Volumes/Data
| Capacity Consumed: 412071784448 B (412.1 GB)
| Sealed: No
| FileVault: Yes (Unlocked)
在之前的输出中,可以看到 **用户可访问的位置** 被挂载在 `/System/Volumes/Data` 下。
此外,**macOS 系统卷快照** 被挂载在 `/` 并且是 **密封的**(由操作系统进行加密签名)。因此,如果绕过 SIP 并进行修改,**操作系统将无法启动**。
还可以通过运行以下命令 **验证密封是否启用**:
```bash
csrutil authenticated-root status
Authenticated Root status: enabled
```
此外,快照磁盘也被挂载为**只读**:
```bash
mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
```
{{#include ../../../banners/hacktricks-training.md}}