hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md

5.5 KiB
Raw Blame History

macOS内核扩展

☁️ HackTricks云平台 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本信息

内核扩展Kexts是具有 .kext 扩展名的 ,直接加载到 macOS 内核空间中,为主操作系统提供额外的功能。

要求

显然,这是非常强大的,因此加载内核扩展是 复杂的。以下是内核扩展必须满足的要求:

  • 进入恢复模式 时,必须允许加载内核扩展:
  • 内核扩展必须使用内核代码签名证书进行签名,该证书只能由 Apple 颁发。Apple 将详细审查公司和所需原因。
  • 内核扩展还必须经过 公证Apple 将检查其中是否存在恶意软件。
  • 然后,root 用户是可以 加载内核扩展 的用户,包中的文件必须属于 root。
  • 在上传过程中,包必须准备在受保护的非根位置:/Library/StagedExtensions(需要 com.apple.rootless.storage.KernelExtensionManagement 授权)。
  • 最后,在尝试加载时,用户将会收到 确认请求,如果接受,则需要 重新启动 计算机以加载它。

加载过程

在 Catalina 中是这样的:有趣的是,验证 过程发生在 用户空间 中。然而,只有具有 com.apple.private.security.kext-management 授权的应用程序才能 请求内核加载扩展kextcachekextloadkextutilkextdsyspolicyd

  1. kextutil 命令行界面 启动 内核扩展加载的 验证 过程
  • 它将通过使用 Mach 服务kextd 进行通信。
  1. kextd 将检查多个事项,例如 签名
  • 它将与 syspolicyd 进行通信以 检查 是否可以 加载 扩展。
  1. syspolicyd 将在扩展未被先前加载时 提示 用户
  • syspolicyd 将结果报告给 kextd
  1. kextd 最终可以 告诉内核加载 扩展

如果 kextd 不可用,则 kextutil 可以执行相同的检查。

参考资料

☁️ HackTricks云平台 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥