授权 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 由于其可重用性而不值得信赖。这是关于这个问题的good presentation。

从 macOS 11 开始,SecCodeCreateWithXPCMessage 函数可用,它允许确定 XPC 消息的真正发送者。在旧版本的 macOS 上,存在未记录的函数 void xpc_connection_get_audit_token(xpc_connection_t, audit_token_t *),它可以通过更多步骤来完成同样的事情。

我构建了一个名为 SecureXPC 的 Swift XPC 框架,它使用了这两个函数,所以如果你想了解如何使用它们,请查看 acceptMessage 函数。

【讨论】:

以上是关于授权 XPC 连接的主要内容,如果未能解决你的问题,请参考以下文章

Unity连接Android设备时的授权

XPC 连接如何以线程方式处理?

ssh授权成功连接git@github.com后git命令授权失败

oracle给远程连接的用户授权。

连接端口和授权

非授权服务器连接