4

我的应用程序包含一个核心扩展作为关键组件。该内核扩展由系统控制套接字控制。出于安全原因,该系统控制套接字仅接受来自超级用户的连接。

为了从我的常规非超级用户应用程序进行通信,我有一个 SMJobBless 助手充当中介。问题是,我只希望我的应用程序(由我签名)能够连接到这个 XPC 服务。有什么方法可以验证连接另一端的可执行文件上的签名吗?如果我可以在另一端获得进程的 PID,那就足够了,我知道如何从那里验证签名。

4

2 回答 2

2

如果我能得到另一端进程的PID

您可以使用xpc_connection_get_pid()

于 2012-07-22T05:08:34.270 回答
0

对于任何在 2021 年阅读本文的人来说,安全研究表明 PID因其可重用性而不值得信赖。这是关于这个问题的一个很好的介绍。

从 macOS 11 开始,SecCodeCreateWithXPCMessage可以使用该功能来确定 XPC 消息的真正发送者。在旧版本的 macOS 上,void xpc_connection_get_audit_token(xpc_connection_t, audit_token_t *)存在未记录的功能,可以使用更多步骤来完成相同的事情。

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

于 2021-10-28T00:00:44.130 回答