macOS System Extensions

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

支持HackTricks的其他方式:

系统扩展 / 端点安全框架

与内核扩展不同,系统扩展在用户空间中运行,而不是内核空间,降低了由于扩展故障导致系统崩溃的风险。

有三种类型的系统扩展:DriverKit扩展、Network扩展和Endpoint Security扩展。

DriverKit扩展

DriverKit是用于提供硬件支持的内核扩展替代方案。它允许设备驱动程序(如USB、串行、NIC和HID驱动程序)在用户空间而不是内核空间中运行。DriverKit框架包括某些I/O Kit类的用户空间版本,内核将普通的I/O Kit事件转发到用户空间,为这些驱动程序提供更安全的运行环境。

Network扩展

网络扩展提供自定义网络行为的能力。有几种类型的网络扩展:

  • 应用代理:用于创建实现基于流的自定义VPN协议的VPN客户端。这意味着它根据连接(或流)处理网络流量,而不是单个数据包。

  • 数据包隧道:用于创建实现基于数据包的自定义VPN协议的VPN客户端。这意味着它根据单个数据包处理网络流量。

  • 过滤数据:用于过滤网络“流”。它可以监视或修改流级别的网络数据。

  • 过滤数据包:用于过滤单个网络数据包。它可以监视或修改数据包级别的网络数据。

  • DNS代理:用于创建自定义DNS提供程序。它可用于监视或修改DNS请求和响应。

端点安全框架

端点安全是苹果在macOS中提供的一个框架,提供一组用于系统安全的API。它旨在供安全供应商和开发人员使用,构建可以监视和控制系统活动以识别和防范恶意活动的产品。

该框架提供了一组API来监视和控制系统活动,如进程执行、文件系统事件、网络和内核事件。

该框架的核心是在内核中实现的,作为一个位于**/System/Library/Extensions/EndpointSecurity.kext**的内核扩展(KEXT)。该KEXT由几个关键组件组成:

  • EndpointSecurityDriver:充当内核扩展的“入口点”。它是操作系统与端点安全框架之间的主要交互点。

  • EndpointSecurityEventManager:负责实现内核挂钩。内核挂钩允许框架通过拦截系统调用来监视系统事件。

  • EndpointSecurityClientManager:管理与用户空间客户端的通信,跟踪连接的客户端并需要接收事件通知。

  • EndpointSecurityMessageManager:向用户空间客户端发送消息和事件通知。

端点安全框架可以监视的事件分为以下类别:

  • 文件事件

  • 进程事件

  • 套接字事件

  • 内核事件(如加载/卸载内核扩展或打开I/O Kit设备)

端点安全框架架构

与端点安全框架的用户空间通信通过IOUserClient类进行。根据调用者的类型使用两个不同的子类:

  • EndpointSecurityDriverClient:需要com.apple.private.endpoint-security.manager权限,该权限仅由系统进程endpointsecurityd持有。

  • EndpointSecurityExternalClient:需要com.apple.developer.endpoint-security.client权限。这通常由需要与端点安全框架交互的第三方安全软件使用。

端点安全扩展:**libEndpointSecurity.dylib**是系统扩展用于与内核通信的C库。该库使用I/O Kit(IOKit)与端点安全KEXT通信。

endpointsecurityd是一个关键的系统守护程序,负责管理和启动端点安全系统扩展,特别是在早期引导过程中。只有在其Info.plist文件中标记为NSEndpointSecurityEarlyBoot的系统扩展才会接收此早期引导处理。

另一个系统守护程序**sysextd,验证系统扩展并将其移动到适当的系统位置。然后它会要求相关的守护程序加载扩展。SystemExtensions.framework**负责激活和停用系统扩展。

绕过ESF

ESF被安全工具使用,将尝试检测红队人员,因此任何关于如何避免这种情况的信息都是有趣的。

CVE-2021-30965

问题在于安全应用程序需要具有完全磁盘访问权限。因此,如果攻击者可以移除该权限,他就可以阻止软件运行:

tccutil reset All

更多信息关于这个绕过和相关内容,请查看演讲#OBTS v5.0: "终端安全的致命弱点" - Fitzl Csaba

最后,通过将新权限**kTCCServiceEndpointSecurityClient授予由tccd**管理的安全应用程序,解决了这个问题,这样tccutil就不会清除其权限,从而阻止其运行。

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式:

最后更新于