macOS XPC Connecting Process Check
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
当与 XPC 服务建立连接时,服务器将检查该连接是否被允许。通常会执行以下检查:
检查连接的 进程是否使用 Apple 签名 的证书(仅由 Apple 发放)。
如果 未验证,攻击者可以创建一个 伪造证书 来匹配其他检查。
检查连接进程是否使用 组织的证书(团队 ID 验证)。
如果 未验证,任何开发者证书 都可以用于签名,并连接到服务。
检查连接进程 是否包含正确的包 ID。
如果 未验证,任何 由同一组织签名的工具 都可以用来与 XPC 服务交互。
(4 或 5) 检查连接进程是否具有 正确的软件版本号。
如果 未验证,旧的、不安全的客户端,易受进程注入攻击,可以在其他检查到位的情况下连接到 XPC 服务。
(4 或 5) 检查连接进程是否具有没有危险权限的 强化运行时(如允许加载任意库或使用 DYLD 环境变量的权限)。
如果 未验证,客户端可能 易受代码注入。
检查连接进程是否具有允许其连接到服务的 权限。这适用于 Apple 二进制文件。
验证 必须 基于 连接 客户端的审计令牌 而不是 其进程 ID (PID),因为前者可以防止 PID 重用攻击。
开发者 很少使用审计令牌 API 调用,因为它是 私有的,所以 Apple 可以 随时更改。此外,私有 API 的使用在 Mac App Store 应用中是不允许的。
如果使用 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)