通过套接字连接从kext验证客户端

可见

我正在为在OS X(围绕KAtuh构建)上的额外安全性构建一个kext。我在用户空间中使用一个客户端,该客户端通过套接字连接到kext(如Apple所建议的),并基本上控制了kext。因为该产品应该为OS X提供额外的安全性,所以“尽可能安全”以防攻击很重要。一种攻击媒介如下:A malicious process impersonates the client and sends malicious control data to the kext, disabling the security mechanism.我想通过在连接时进行身份验证来防止这种情况。这是我的解决方案:

  • 以root用户身份运行客户端,使用CTL_FLAG_PRIVILEGEDflag确保只有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 = SHA256(getUDID()),但是AFAIK没有可用的加密KPI,也没有getUDID()从内核空间获取密码的方法

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

pmdj

我曾问过苹果的开发人员技术支持这个问题,他们说限制用户客户端访问kexts的唯一受支持的方法是区分root和非root进程。

就个人而言,出于减少攻击面的目的,确实要放弃用户客户端特权。Linux检查特定组成员身份的方法似乎也应该在OS X上工作。(例如,通常需要成为'kvm'组的成员才能在Linux上使用KVM虚拟化技术。)成为该组成员的唯一方法是通过root特权(设置启动守护进程的GroupName需要root特权)。 ),因此这应该是安全的。我还没有自己尝试过,但是我有2个项目在这里有意义,因此我将尝试一下,并用我的发现更新此答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章