macOS Kernel Extensions

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

基本信息

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

要求

显然,这非常强大,以至于 加载内核扩展复杂的。内核扩展必须满足以下 要求 才能被加载:

  • 进入恢复模式 时,必须允许加载内核 扩展

  • 内核扩展必须 使用内核代码签名证书签名,该证书只能由 Apple 授予。谁将详细审查公司及其所需的原因。

  • 内核扩展还必须 经过公证,Apple 将能够检查其是否含有恶意软件。

  • 然后,root 用户是唯一可以 加载内核扩展 的人,包内的文件必须 属于 root

  • 在上传过程中,包必须准备在 受保护的非 root 位置/Library/StagedExtensions(需要 com.apple.rootless.storage.KernelExtensionManagement 授权)。

  • 最后,当尝试加载时,用户将 收到确认请求,如果接受,计算机必须 重启 以加载它。

加载过程

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

  1. kextutil cli 启动 加载扩展的 验证 过程

  • 它将通过发送 Mach 服务kextd 进行通信。

  1. kextd 将检查多个内容,例如 签名

  • 它将与 syspolicyd 进行通信以 检查 扩展是否可以 加载

  1. syspolicyd提示 用户 如果扩展尚未被加载。

  • syspolicyd 将结果报告给 kextd

  1. kextd 最终将能够 告诉内核加载 扩展

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

参考文献

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated