授权 XPC 连接
Posted
技术标签:
【中文标题】授权 XPC 连接【英文标题】:Authorizing XPC connections 【发布时间】:2012-07-21 08:29:49 【问题描述】:我的应用程序包含一个内核扩展作为关键组件。该内核扩展由系统控制套接字控制。出于安全原因,该系统控制套接字仅接受来自超级用户的连接。
为了从我的常规非超级用户应用程序进行通信,我有一个 SMJobBless 助手充当中介。问题是,我只希望我的应用程序(由我签名)能够连接到这个 XPC 服务。有什么方法可以验证连接另一端的可执行文件上的签名吗?如果我能得到另一端进程的 PID,那就足够了,我知道如何从那里验证签名。
【问题讨论】:
【参考方案1】:如果我能得到另一端进程的PID
您可以使用xpc_connection_get_pid()。
【讨论】:
NSXPCConnection
还提供了processIdentifier
属性。【参考方案2】:
对于 2021 年阅读本文的任何人来说,安全研究表明,PID 由于其可重用性而
从 macOS 11 开始,SecCodeCreateWithXPCMessage
函数可用,它允许确定 XPC 消息的真正发送者。在旧版本的 macOS 上,存在未记录的函数 void xpc_connection_get_audit_token(xpc_connection_t, audit_token_t *)
,它可以通过更多步骤来完成同样的事情。
我构建了一个名为 SecureXPC 的 Swift XPC 框架,它使用了这两个函数,所以如果你想了解如何使用它们,请查看 acceptMessage
函数。
【讨论】:
以上是关于授权 XPC 连接的主要内容,如果未能解决你的问题,请参考以下文章