gpt4 book ai didi

sockets - 在套接字连接时从 kext 验证客户端

转载 作者:行者123 更新时间:2023-12-02 10:50:13 29 4
gpt4 key购买 nike

我正在构建一个 kext,以在 OS X 上提供额外的安全层(围绕 KAtuh 构建)。我在用户空间中使用一个客户端,通过套接字连接到 kext(按照 Apple 的建议),并基本上控制 kext。由于该产品应该为 OS X 提供额外的安全性,因此“尽可能安全”地抵御攻击非常重要。一种攻击媒介如下:恶意进程冒充客户端并向 kext 发送恶意控制数据,从而禁用安全机制。。我想通过在连接时进行身份验证来防止这种情况。以下是我的解决方案:

  • 以 root 身份运行客户端,使用 CTL_FLAG_PRIVILEGED 标志确保只有 root 客户端才能连接到 kext。我不确定是否想让我的客户端在特权模式下运行(同样:额外的攻击向量)。

  • 让 kext 仅连接到一个客户端。然而,这很容易被绕过。

理想情况下,我想验证通过static int ctl_connect(kern_ctl_ref ctl_ref, struct sockaddr_ctl *sac, void **unitinfo)连接的客户端的身份。我怎样才能做到这一点?

我还可以在static int ctl_set(kern_ctl_ref ctl_ref, u_int32_t unit, void *unitinfo, int opt, void *data, size_t len)中进行数据包身份验证,但是,我必须提出具有动态共享 secret 。我正在考虑 secret = SHA256(getUDID()),但据我所知,没有可用的加密 KPI,也没有从内核空间 getUDID() 的方法。

对于对客户端进行“正确”身份验证还有其他想法吗?

最佳答案

我已经向 Apple 的开发者技术支持询问了这个问题,他们表示限制用户客户端访问 kext 的唯一受支持的方法是区分 root 和非 root 进程。

就个人而言,为了减少攻击面,放弃用户客户端权限确实很有用。 Linux 检查特定组成员资格的方式似乎也应该适用于 OS X。 (例如,您通常需要成为“kvm”组的一部分才能在 Linux 上使用 KVM 虚拟化技术。)成为该组成员的唯一方法是通过 root 权限(设置 Launch Daemon 的 GroupName 需要 root 权限) )所以这应该是安全的。我自己还没有尝试过,但我有 2 个项目,这很有意义,所以我会尝试一下,并用我的发现更新这个答案。

关于sockets - 在套接字连接时从 kext 验证客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131579/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com