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

5.2 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权限的应用程序才能请求内核**加载扩展kextcache、kextload、kextutil、kextd、syspolicyd

  1. kextutil命令行工具启动验证过程以加载扩展
  • 通过Mach服务与**kextd**通信
  1. **kextd**将检查多个事项,如签名
  • 通过与**syspolicyd**通信,检查是否可以加载扩展
  1. syspolicyd将向用户询问是否先前未加载扩展
  • syspolicyd将结果告知kextd
  1. **kextd**最终可以通知内核加载扩展

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

参考资料

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