macOS XPC Connecting Process Check
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
当与 XPC 服务建立连接时,服务器将检查该连接是否被允许。通常会执行以下检查:
检查连接的 进程是否使用 Apple 签名 的证书(仅由 Apple 发放)。
如果 未验证,攻击者可以创建一个 伪造证书 来匹配其他检查。
检查连接进程是否使用 组织的证书(团队 ID 验证)。
如果 未验证,可以使用 任何开发者证书 从 Apple 进行签名,并连接到服务。
检查连接进程 是否包含正确的包 ID。
如果 未验证,任何 由同一组织签名的工具 都可以用来与 XPC 服务交互。
(4 或 5) 检查连接进程是否具有 正确的软件版本号。
如果 未验证,旧的、不安全的客户端,易受进程注入攻击,可以连接到 XPC 服务,即使其他检查已到位。
(4 或 5) 检查连接进程是否具有没有危险权限的 强化运行时(如允许加载任意库或使用 DYLD 环境变量的权限)。
如果 未验证,客户端可能 易受代码注入。
检查连接进程是否具有允许其连接到服务的 权限。这适用于 Apple 二进制文件。
验证 必须 基于 连接 客户端的审计令牌 而不是 其进程 ID (PID),因为前者可以防止 PID 重用攻击。
开发者 很少使用审计令牌 API 调用,因为它是 私有的,所以 Apple 可能会 随时更改。此外,Mac App Store 应用不允许使用私有 API。
如果使用 processIdentifier
方法,可能会存在漏洞。
应使用 xpc_dictionary_get_audit_token
而不是 xpc_connection_get_audit_token
,因为后者在某些情况下也可能 存在漏洞。
有关 PID 重用攻击的更多信息,请查看:
macOS PID Reuse有关 xpc_connection_get_audit_token
攻击的更多信息,请查看:
Trustcache 是一种防御方法,旨在 Apple Silicon 机器中引入,存储 Apple 二进制文件的 CDHSAH 数据库,以便仅允许未修改的二进制文件执行。这可以防止降级版本的执行。
服务器将在名为 shouldAcceptNewConnection
的函数中实现此 验证。
对象 NSXPCConnection 有一个 私有 属性 auditToken
(应该使用但可能会改变)和一个 公共 属性 processIdentifier
(不应该使用)。
连接的进程可以通过以下方式进行验证:
如果开发者不想检查客户端的版本,他至少可以检查客户端是否不易受到进程注入的攻击:
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)