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)
基本信息
内核扩展(Kexts)是带有 .kext
扩展名的 包,它们被 直接加载到 macOS 内核空间,为主操作系统提供额外功能。
要求
显然,这非常强大,以至于 加载内核扩展 是 复杂的。内核扩展必须满足以下 要求 才能被加载:
当 进入恢复模式 时,必须允许加载内核 扩展:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F902778555-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FVXPBd5ePyq2S6WpIV6Cj%252Fuploads%252Fgit-blob-eb7611c98db8c5b2047719eeb3f450eee5194812%252Fimage%2520%28327%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=66239426&sv=1)
内核扩展必须 使用内核代码签名证书签名,该证书只能由 Apple 授予。谁将详细审查公司及其所需的原因。
内核扩展还必须 经过公证,Apple 将能够检查其是否含有恶意软件。
然后,root 用户是唯一可以 加载内核扩展 的人,包内的文件必须 属于 root。
在上传过程中,包必须准备在 受保护的非 root 位置:
/Library/StagedExtensions
(需要com.apple.rootless.storage.KernelExtensionManagement
授权)。最后,当尝试加载时,用户将 收到确认请求,如果接受,计算机必须 重启 以加载它。
加载过程
在 Catalina 中是这样的:有趣的是,验证 过程发生在 用户空间。然而,只有具有 com.apple.private.security.kext-management
授权的应用程序才能 请求内核加载扩展:kextcache
、kextload
、kextutil
、kextd
、syspolicyd
kextutil
cli 启动 加载扩展的 验证 过程
它将通过发送 Mach 服务 与
kextd
进行通信。
kextd
将检查多个内容,例如 签名
它将与
syspolicyd
进行通信以 检查 扩展是否可以 加载。
syspolicyd
将 提示 用户 如果扩展尚未被加载。
syspolicyd
将结果报告给kextd
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)
Last updated