macOS Kernel Extensions

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

基本信息

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

要求

显然,加载内核扩展是非常强大的。这些是内核扩展必须满足的要求

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

  • 内核扩展必须使用内核代码签名证书签名,这只能由苹果授予。苹果将详细审查公司和需要的原因。

  • 内核扩展还必须经过公证,苹果将检查是否存在恶意软件。

  • 然后,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**可以执行相同的检查。

References

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

最后更新于